PageSourceSearch

https://www.upside.tech/assets/index-Car-o_sl.js

js upside.tech collected 2026-09-28 09:11:37 UTC 3,238,767 bytes, 7,825 lines download raw bytes

vendor: 6,279 bytes, lines 1-17
1var aee=Object.defineProperty;var ZN=e=>{throw TypeError(e)};var iee=(e,t,a)=>t in e?aee(e,t,{enumerable:!0,configurable:!0,writable:!0,value:a}):e[t]=a;var ha=(e,t,a)=>iee(e,typeof t!="symbol"?t+"":t,a),gj=(e,t,a)=>t.has(e)||ZN("Cannot "+a);var ue=(e,t,a)=>(gj(e,t,"read from private field"),a?a.call(e):t.get(e)),ct=(e,t,a)=>t.has(e)?ZN("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,a),He=(e,t,a,i)=>(gj(e,t,"write to private field"),i?i.call(e,a):t.set(e,a),a),qn=(e,t,a)=>(gj(e,t,"access private method"),a);var Av=(e,t,a,i)=>({set _(r){He(e,t,r,a)},get _(){return ue(e,t,i)}});function ree(e,t){for(var a=0;a<t.length;a++){const i=t[a];if(typeof i!="string"&&!Array.isArray(i)){for(const r in i)if(r!=="default"&&!(r in e)){const o=Object.getOwnPropertyDescriptor(i,r);o&&Object.defineProperty(e,r,o.get?o:{enumerable:!0,get:()=>i[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"]'))i(r);new MutationObserver(r=>{for(const o of r)if(o.type==="childList")for(const l of o.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&i(l)}).observe(document,{childList:!0,subtree:!0});function a(r){const o={};return r.integrity&&(o.integrity=r.integrity),r.referrerPolicy&&(o.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?o.credentials="include":r.crossOrigin==="anonymous"?o.credentials="omit":o.credentials="same-origin",o}function i(r){if(r.ep)return;r.ep=!0;const o=a(r);fetch(r.href,o)}})();var Tv=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function vt(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var yj={exports:{}},nf={};/**
2 * @license React
3 * react-jsx-runtime.production.js
4 *
5 * Copyright (c) Meta Platforms, Inc. and 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 JN;function oee(){if(JN)return nf;JN=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function a(i,r,o){var l=null;if(o!==void 0&&(l=""+o),r.key!==void 0&&(l=""+r.key),"key"in r){o={};for(var d in r)d!=="key"&&(o[d]=r[d])}else o=r;return r=o.ref,{$$typeof:e,type:i,key:l,ref:r!==void 0?r:null,props:o}}return nf.Fragment=t,nf.jsx=a,nf.jsxs=a,nf}var eO;function see(){return eO||(eO=1,yj.exports=oee()),yj.exports}var n=see(),bj={exports:{}},af={},vj={exports:{}},xj={};/**
10 * @license React
11 * scheduler.production.js
12 *
13 * Copyright (c) Meta Platforms, Inc. and 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 tO;function lee(){return tO||(tO=1,(function(e){function t(O,B){var Y=O.length;O.push(B);e:for(;0<Y;){var V=Y-1>>>1,G=O[V];if(0<r(G,B))O[V]=B,O[Y]=G,Y=V;else break e}}function a(O){return O.length===0?null:O[0]}function i(O){if(O.length===0)return null;var B=O[0],Y=O.pop();if(Y!==B){O[0]=Y;e:for(var V=0,G=O.length,I=G>>>1;V<I;){var F=2*(V+1)-1,K=O[F],ne=F+1,ae=O[ne];if(0>r(K,Y))ne<G&&0>r(ae,K)?(O[V]=ae,O[ne]=Y,V=ne):(O[V]=K,O[F]=Y,V=F);else if(ne<G&&0>r(ae,Y))O[V]=ae,O[ne]=Y,V=ne;else break e}}return B}function r(O,B){var Y=O.sortIndex-B.sortIndex;return Y!==0?Y:O.id-B.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var l=Date,d=l.now();e.unstable_now=function(){return l.now()-d}}var u=[],h=[],m=1,f=null,y=3,b=!1,x=!1,k=!1,v=!1,j=typeof setTimeout=="function"?setTimeout:null,T=typeof clearTimeout=="function"?clearTimeout:null,A=typeof setImmediate<"u"?setImmediate:null;function C(O){for(var B=a(h);B!==null;){if(B.callback===null)i(h);else if(B.startTime<=O)i(h),B.sortIndex=B.expirationTime,t(u,B);else break;B=a(h)}}function _(O){if(k=!1,C(O),!x)if(a(u)!==null)x=!0,E||(E=!0,U());else{var B=a(h);B!==null&&P(_,B.startTime-O)}}var E=!1,R=-1,W=5,z=-1;function H(){return v?!0:!(e.unstable_now()-z<W)}function $(){if(v=!1,E){var O=e.unstable_now();z=O;var B=!0;try{e:{x=!1,k&&(k=!1,T(R),R=-1),b=!0;var Y=y;try{t:{for(C(O),f=a(u);f!==null&&!(f.expirationTime>O&&H());){var V=f.callback;if(typeof V=="function"){f.callback=null,y=f.priorityLevel;var G=V(f.expirationTime<=O);if(O=e.unstable_now(),typeof G=="function"){f.callback=G,C(O),B=!0;break t}f===a(u)&&i(u),C(O)}else i(u);f=a(u)}if(f!==null)B=!0;else{var I=a(h);I!==null&&P(_,I.startTime-O),B=!1}}break e}finally{f=null,y=Y,b=!1}B=void 0}}finally{B?U():E=!1}}}var U;if(typeof A=="function")U=function(){A($)};else if(typeof MessageChannel<"u"){var X=new MessageChannel,D=X.port2;X.port1.onmessage=$,U=function(){D.postMessage(null)}}else U=function(){j($,0)};function P(O,B){R=j(function(){O(e.unstable_now())},B)}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(O){O.callback=null},e.unstable_forceFrameRate=function(O){0>O||125<O?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):W=0<O?Math.floor(1e3/O):5},e.unstable_getCurrentPriorityLevel=function(){return y},e.unstable_next=function(O){switch(y){case 1:case 2:case 3:var B=3;break;default:B=y}var Y=y;y=B;try{return O()}finally{y=Y}},e.unstable_requestPaint=function(){v=!0},e.unstable_runWithPriority=function(O,B){switch(O){case 1:case 2:case 3:case 4:case 5:break;default:O=3}var Y=y;y=O;try{return B()}finally{y=Y}},e.unstable_scheduleCallback=function(O,B,Y){var V=e.unstable_now();switch(typeof Y=="object"&&Y!==null?(Y=Y.delay,Y=typeof Y=="number"&&0<Y?V+Y:V):Y=V,O){case 1:var G=-1;break;case 2:G=250;break;case 5:G=1073741823;break;case 4:G=1e4;break;default:G=5e3}return G=Y+G,O={id:m++,callback:B,priorityLevel:O,startTime:Y,expirationTime:G,sortIndex:-1},Y>V?(O.sortIndex=Y,t(h,O),a(u)===null&&O===a(h)&&(k?(T(R),R=-1):k=!0,P(_,Y-V))):(O.sortIndex=G,t(u,O),x||b||(x=!0,E||(E=!0,U())
vendor: 17,337 bytes, lines 17-43
17)),O},e.unstable_shouldYield=H,e.unstable_wrapCallback=function(O){var B=y;return function(){var Y=y;y=B;try{return O.apply(this,arguments)}finally{y=Y}}}})(xj)),xj}var nO;function cee(){return nO||(nO=1,vj.exports=lee()),vj.exports}var wj={exports:{}},Xe={};/**
18 * @license React
19 * react.production.js
20 *
21 * Copyright (c) Meta Platforms, Inc. and 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 */var aO;function dee(){if(aO)return Xe;aO=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),o=Symbol.for("react.consumer"),l=Symbol.for("react.context"),d=Symbol.for("react.forward_ref"),u=Symbol.for("react.suspense"),h=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),f=Symbol.for("react.activity"),y=Symbol.iterator;function b(I){return I===null||typeof I!="object"?null:(I=y&&I[y]||I["@@iterator"],typeof I=="function"?I:null)}var x={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},k=Object.assign,v={};function j(I,F,K){this.props=I,this.context=F,this.refs=v,this.updater=K||x}j.prototype.isReactComponent={},j.prototype.setState=function(I,F){if(typeof I!="object"&&typeof I!="function"&&I!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,I,F,"setState")},j.prototype.forceUpdate=function(I){this.updater.enqueueForceUpdate(this,I,"forceUpdate")};function T(){}T.prototype=j.prototype;function A(I,F,K){this.props=I,this.context=F,this.refs=v,this.updater=K||x}var C=A.prototype=new T;C.constructor=A,k(C,j.prototype),C.isPureReactComponent=!0;var _=Array.isArray;function E(){}var R={H:null,A:null,T:null,S:null},W=Object.prototype.hasOwnProperty;function z(I,F,K){var ne=K.ref;return{$$typeof:e,type:I,key:F,ref:ne!==void 0?ne:null,props:K}}function H(I,F){return z(I.type,F,I.props)}function $(I){return typeof I=="object"&&I!==null&&I.$$typeof===e}function U(I){var F={"=":"=0",":":"=2"};return"$"+I.replace(/[=:]/g,function(K){return F[K]})}var X=/\/+/g;function D(I,F){return typeof I=="object"&&I!==null&&I.key!=null?U(""+I.key):F.toString(36)}function P(I){switch(I.status){case"fulfilled":return I.value;case"rejected":throw I.reason;default:switch(typeof I.status=="string"?I.then(E,E):(I.status="pending",I.then(function(F){I.status==="pending"&&(I.status="fulfilled",I.value=F)},function(F){I.status==="pending"&&(I.status="rejected",I.reason=F)})),I.status){case"fulfilled":return I.value;case"rejected":throw I.reason}}throw I}function O(I,F,K,ne,ae){var ge=typeof I;(ge==="undefined"||ge==="boolean")&&(I=null);var be=!1;if(I===null)be=!0;else switch(ge){case"bigint":case"string":case"number":be=!0;break;case"object":switch(I.$$typeof){case e:case t:be=!0;break;case m:return be=I._init,O(be(I._payload),F,K,ne,ae)}}if(be)return ae=ae(I),be=ne===""?"."+D(I,0):ne,_(ae)?(K="",be!=null&&(K=be.replace(X,"$&/")+"/"),O(ae,F,K,"",function(ve){return ve})):ae!=null&&($(ae)&&(ae=H(ae,K+(ae.key==null||I&&I.key===ae.key?"":(""+ae.key).replace(X,"$&/")+"/")+be)),F.push(ae)),1;be=0;var le=ne===""?".":ne+":";if(_(I))for(var ee=0;ee<I.length;ee++)ne=I[ee],ge=le+D(ne,ee),be+=O(ne,F,K,ge,ae);else if(ee=b(I),typeof ee=="function")for(I=ee.call(I),ee=0;!(ne=I.next()).done;)ne=ne.value,ge=le+D(ne,ee++),be+=O(ne,F,K,ge,ae);else if(ge==="object"){if(typeof I.then=="function")return O(P(I),F,K,ne,ae);throw F=String(I),Error("Objects are not valid as a React child (found: "+(F==="[object Object]"?"object with keys {"+Object.keys(I).join(", ")+"}":F)+"). If you meant to render a collection of children, use an array instead.")}return be}function B(I,F,K){if(I==null)return I;var ne=[],ae=0;return O(I,ne,"","",function(ge){return F.call(K,ge,ae++)}),ne}function Y(I){if(I._status===-1){var F=I._result;F=F(),F.then(function(K){(I._status===0||I._status===-1)&&(I._status=1,I._result=K)},function(K){(I._status===0||I._status===-1)&&(I._status=2,I._result=K)}),I._status===-1&&(I._status=0,I._result=F)}if(I._status===1)return I._result.default;throw I._result}var V=typeof reportError=="function"?reportError:function(I){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var F=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof I=="object"&&I!==null&&typeof I.message=="string"?String(I.message):String(I),error:I});if(!window.dispatchEvent(F))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",I);return}console.error(I)},G={map:B,forEach:function(I,F,K){B(I,function(){F.apply(this,arguments)},K)},count:function(I){var F=0;return B(I,function(){F++}),F},toArray:function(I){return B(I,function(F){return F})||[]},only:function(I){if(!$(I))throw Error("React.Children.only expected to receive a single React element child.");return I}};return Xe.Activity=f,Xe.Children=G,Xe.Component=j,Xe.Fragment=a,Xe.Profiler=r,Xe.PureComponent=A,Xe.StrictMode=i,Xe.Suspense=u,Xe.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=R,Xe.__COMPILER_RUNTIME={__proto__:null,c:function(I){return R.H.useMemoCache(I)}},Xe.cache=function(I){return function(){return I.apply(null,arguments)}},Xe.cacheSignal=function(){return null},Xe.cloneElement=function(I,F,K){if(I==null)throw Error("The argument must be a React element, but you passed "+I+".");var ne=k({},I.props),ae=I.key;if(F!=null)for(ge in F.key!==void 0&&(ae=""+F.key),F)!W.call(F,ge)||ge==="key"||ge==="__self"||ge==="__source"||ge==="ref"&&F.ref===void 0||(ne[ge]=F[ge]);var ge=arguments.length-2;if(ge===1)ne.children=K;else if(1<ge){for(var be=Array(ge),le=0;le<ge;le++)be[le]=arguments[le+2];ne.children=be}return z(I.type,ae,ne)},Xe.createContext=function(I){return I={$$typeof:l,_currentValue:I,_currentValue2:I,_threadCount:0,Provider:null,Consumer:null},I.Provider=I,I.Consumer={$$typeof:o,_context:I},I},Xe.createElement=function(I,F,K){var ne,ae={},ge=null;if(F!=null)for(ne in F.key!==void 0&&(ge=""+F.key),F)W.call(F,ne)&&ne!=="key"&&ne!=="__self"&&ne!=="__source"&&(ae[ne]=F[ne]);var be=arguments.length-2;if(be===1)ae.children=K;else if(1<be){for(var le=Array(be),ee=0;ee<be;ee++)le[ee]=arguments[ee+2];ae.children=le}if(I&&I.defaultProps)for(ne in be=I.defaultProps,be)ae[ne]===void 0&&(ae[ne]=be[ne]);return z(I,ge,ae)},Xe.createRef=function(){return{current:null}},Xe.forwardRef=function(I){return{$$typeof:d,render:I}},Xe.isValidElement=$,Xe.lazy=function(I){return{$$typeof:m,_payload:{_status:-1,_result:I},_init:Y}},Xe.memo=function(I,F){return{$$typeof:h,type:I,compare:F===void 0?null:F}},Xe.startTransition=function(I){var F=R.T,K={};R.T=K;try{var ne=I(),ae=R.S;ae!==null&&ae(K,ne),typeof ne=="object"&&ne!==null&&typeof ne.then=="function"&&ne.then(E,V)}catch(ge){V(ge)}finally{F!==null&&K.types!==null&&(F.types=K.types),R.T=F}},Xe.unstable_useCacheRefresh=function(){return R.H.useCacheRefresh()},Xe.use=function(I){return R.H.use(I)},Xe.useActionState=function(I,F,K){return R.H.useActionState(I,F,K)},Xe.useCallback=function(I,F){return R.H.useCallback(I,F)},Xe.useContext=function(I){return R.H.useContext(I)},Xe.useDebugValue=function(){},Xe.useDeferredValue=function(I,F){return R.H.useDeferredValue(I,F)},Xe.useEffect=function(I,F){return R.H.useEffect(I,F)},Xe.useEffectEvent=function(I){return R.H.useEffectEvent(I)},Xe.useId=function(){return R.H.useId()},Xe.useImperativeHandle=function(I,F,K){return R.H.useImperativeHandle(I,F,K)},Xe.useInsertionEffect=function(I,F){return R.H.useInsertionEffect(I,F)},Xe.useLayoutEffect=function(I,F){return R.H.useLayoutEffect(I,F)},Xe.useMemo=function(I,F){return R.H.useMemo(I,F)},Xe.useOptimistic=function(I,F){return R.H.useOptimistic(I,F)},Xe.useReducer=function(I,F,K){return R.H.useReducer(I,F,K)},Xe.useRef=function(I){return R.H.useRef(I)},Xe.useState=function(I){return R.H.useState(I)},Xe.useSyncExternalStore=function(I,F,K){return R.H.useSyncExternalStore(I,F,K)},Xe.useTransition=function(){return R.H.useTransition()},Xe.version="19.2.8",Xe}var iO;function J_(){return iO||(iO=1,wj.exports=dee()),wj.exports}var kj={exports:{}},Qn={};/**
26 * @license React
27 * react-dom.production.js
28 *
29 * Copyright (c) Meta Platforms, Inc. and 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 rO;function uee(){if(rO)return Qn;rO=1;var e=J_();function t(u){var h="https://react.dev/errors/"+u;if(1<arguments.length){h+="?args[]="+encodeURIComponent(arguments[1]);for(var m=2;m<arguments.length;m++)h+="&args[]="+encodeURIComponent(arguments[m])}return"Minified React error #"+u+"; visit "+h+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function a(){}var i={d:{f:a,r:function(){throw Error(t(522))},D:a,C:a,L:a,m:a,X:a,S:a,M:a},p:0,findDOMNode:null},r=Symbol.for("react.portal");function o(u,h,m){var f=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:r,key:f==null?null:""+f,children:u,containerInfo:h,implementation:m}}var l=e.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE;function d(u,h){if(u==="font")return"";if(typeof h=="string")return h==="use-credentials"?h:""}return Qn.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE=i,Qn.createPortal=function(u,h){var m=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!h||h.nodeType!==1&&h.nodeType!==9&&h.nodeType!==11)throw Error(t(299));return o(u,h,null,m)},Qn.flushSync=function(u){var h=l.T,m=i.p;try{if(l.T=null,i.p=2,u)return u()}finally{l.T=h,i.p=m,i.d.f()}},Qn.preconnect=function(u,h){typeof u=="string"&&(h?(h=h.crossOrigin,h=typeof h=="string"?h==="use-credentials"?h:"":void 0):h=null,i.d.C(u,h))},Qn.prefetchDNS=function(u){typeof u=="string"&&i.d.D(u)},Qn.preinit=function(u,h){if(typeof u=="string"&&h&&typeof h.as=="string"){var m=h.as,f=d(m,h.crossOrigin),y=typeof h.integrity=="string"?h.integrity:void 0,b=typeof h.fetchPriority=="string"?h.fetchPriority:void 0;m==="style"?i.d.S(u,typeof h.precedence=="string"?h.precedence:void 0,{crossOrigin:f,integrity:y,fetchPriority:b}):m==="script"&&i.d.X(u,{crossOrigin:f,integrity:y,fetchPriority:b,nonce:typeof h.nonce=="string"?h.nonce:void 0})}},Qn.preinitModule=function(u,h){if(typeof u=="string")if(typeof h=="object"&&h!==null){if(h.as==null||h.as==="script"){var m=d(h.as,h.crossOrigin);i.d.M(u,{crossOrigin:m,integrity:typeof h.integrity=="string"?h.integrity:void 0,nonce:typeof h.nonce=="string"?h.nonce:void 0})}}else h==null&&i.d.M(u)},Qn.preload=function(u,h){if(typeof u=="string"&&typeof h=="object"&&h!==null&&typeof h.as=="string"){var m=h.as,f=d(m,h.crossOrigin);i.d.L(u,m,{crossOrigin:f,integrity:typeof h.integrity=="string"?h.integrity:void 0,nonce:typeof h.nonce=="string"?h.nonce:void 0,type:typeof h.type=="string"?h.type:void 0,fetchPriority:typeof h.fetchPriority=="string"?h.fetchPriority:void 0,referrerPolicy:typeof h.referrerPolicy=="string"?h.referrerPolicy:void 0,imageSrcSet:typeof h.imageSrcSet=="string"?h.imageSrcSet:void 0,imageSizes:typeof h.imageSizes=="string"?h.imageSizes:void 0,media:typeof h.media=="string"?h.media:void 0})}},Qn.preloadModule=function(u,h){if(typeof u=="string")if(h){var m=d(h.as,h.crossOrigin);i.d.m(u,{as:typeof h.as=="string"&&h.as!=="script"?h.as:void 0,crossOrigin:m,integrity:typeof h.integrity=="string"?h.integrity:void 0})}else i.d.m(u)},Qn.requestFormReset=function(u){i.d.r(u)},Qn.unstable_batchedUpdates=function(u,h){return u(h)},Qn.useFormState=function(u,h,m){return l.H.useFormState(u,h,m)},Qn.useFormStatus=function(){return l.H.useHostTransitionStatus()},Qn.version="19.2.8",Qn}var oO;function Gq(){if(oO)return kj.exports;oO=1;function e(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),kj.exports=uee(),kj.exports}/**
34 * @license React
35 * react-dom-client.production.js
36 *
37 * Copyright (c) Meta Platforms, Inc. and affiliates.
38 *
39 * This source code is licensed under the MIT license found in the
40 * LICENSE file in the root directory of this source tree.
41 */var sO;function hee(){if(sO)return af;sO=1;var e=cee(),t=J_(),a=Gq();function i(s){var c="https://react.dev/errors/"+s;if(1<arguments.length){c+="?args[]="+encodeURIComponent(arguments[1]);for(var p=2;p<arguments.length;p++)c+="&args[]="+encodeURIComponent(arguments[p])}return"Minified React error #"+s+"; visit "+c+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}function r(s){return!(!s||s.nodeType!==1&&s.nodeType!==9&&s.nodeType!==11)}function o(s){var c=s,p=s;if(s.alternate)for(;c.return;)c=c.return;else{s=c;do c=s,(c.flags&4098)!==0&&(p=c.return),s=c.return;while(s)}return c.tag===3?p:null}function l(s){if(s.tag===13){var c=s.memoizedState;if(c===null&&(s=s.alternate,s!==null&&(c=s.memoizedState)),c!==null)return c.dehydrated}return null}function d(s){if(s.tag===31){var c=s.memoizedState;if(c===null&&(s=s.alternate,s!==null&&(c=s.memoizedState)),c!==null)return c.dehydrated}return null}function u(s){if(o(s)!==s)throw Error(i(188))}function h(s){var c=s.alternate;if(!c){if(c=o(s),c===null)throw Error(i(188));return c!==s?null:s}for(var p=s,g=c;;){var w=p.return;if(w===null)break;var S=w.alternate;if(S===null){if(g=w.return,g!==null){p=g;continue}break}if(w.child===S.child){for(S=w.child;S;){if(S===p)return u(w),s;if(S===g)return u(w),c;S=S.sibling}throw Error(i(188))}if(p.return!==g.return)p=w,g=S;else{for(var N=!1,L=w.child;L;){if(L===p){N=!0,p=w,g=S;break}if(L===g){N=!0,g=w,p=S;break}L=L.sibling}if(!N){for(L=S.child;L;){if(L===p){N=!0,p=S,g=w;break}if(L===g){N=!0,g=S,p=w;break}L=L.sibling}if(!N)throw Error(i(189))}}if(p.alternate!==g)throw Error(i(190))}if(p.tag!==3)throw Error(i(188));return p.stateNode.current===p?s:c}function m(s){var c=s.tag;if(c===5||c===26||c===27||c===6)return s;for(s=s.child;s!==null;){if(c=m(s),c!==null)return c;s=s.sibling}return null}var f=Object.assign,y=Symbol.for("react.element"),b=Symbol.for("react.transitional.element"),x=Symbol.for("react.portal"),k=Symbol.for("react.fragment"),v=Symbol.for("react.strict_mode"),j=Symbol.for("react.profiler"),T=Symbol.for("react.consumer"),A=Symbol.for("react.context"),C=Symbol.for("react.forward_ref"),_=Symbol.for("react.suspense"),E=Symbol.for("react.suspense_list"),R=Symbol.for("react.memo"),W=Symbol.for("react.lazy"),z=Symbol.for("react.activity"),H=Symbol.for("react.memo_cache_sentinel"),$=Symbol.iterator;function U(s){return s===null||typeof s!="object"?null:(s=$&&s[$]||s["@@iterator"],typeof s=="function"?s:null)}var X=Symbol.for("react.client.reference");function D(s){if(s==null)return null;if(typeof s=="function")return s.$$typeof===X?null:s.displayName||s.name||null;if(typeof s=="string")return s;switch(s){case k:return"Fragment";case j:return"Profiler";case v:return"StrictMode";case _:return"Suspense";case E:return"SuspenseList";case z:return"Activity"}if(typeof s=="object")switch(s.$$typeof){case x:return"Portal";case A:return s.displayName||"Context";case T:return(s._context.displayName||"Context")+".Consumer";case C:var c=s.render;return s=s.displayName,s||(s=c.displayName||c.name||"",s=s!==""?"ForwardRef("+s+")":"ForwardRef"),s;case R:return c=s.displayName||null,c!==null?c:D(s.type)||"Memo";case W:c=s._payload,s=s._init;try{return D(s(c))}catch{}}return null}var P=Array.isArray,O=t.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,B=a.__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,Y={pending:!1,data:null,method:null,action:null},V=[],G=-1;function I(s){return{current:s}}function F(s){0>G||(s.current=V[G],V[G]=null,G--)}function K(s,c){G++,V[G]=s.current,s.current=c}var ne=I(null),ae=I(null),ge=I(null),be=I(null);function le(s,c){switch(K(ge,c),K(ae,s),K(ne,null),c.nodeType){case 9:case 11:s=(s=c.documentElement)&&(s=s.namespaceURI)?wN(s):0;break;default:if(s=c.tagName,c=c.namespaceURI)c=wN(c),s=kN(c,s);else switch(s){case"svg":s=1;break;case"math":s=2;break;default:s=0}}F(ne),K(ne,s)}function ee(){F(ne),F(ae),F(ge)}function ve(s){s.memoizedState!==null&&K(be,s);var c=ne.current,p=kN(c,s.type);c!==p&&(K(ae,s),K(ne,p))}function Se(s){ae.current===s&&(F(ne),F(ae)),be.current===s&&(F(be),Zm._currentValue=Y)}var pe,Ye;function ze(s){if(pe===void 0)try{throw Error()}catch(p){var c=p.stack.trim().match(/\n( *(at )?)/);pe=c&&c[1]||"",Ye=-1<p.stack.indexOf(`
42    at`)?" (<anonymous>)":-1<p.stack.indexOf("@")?"@unknown:0:0":""}return`
43`+pe+s+Ye}var Re=!1;function mt(s,c){if(!s||Re)return"";Re=!0;var p=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{var g={DetermineComponentFrameRoot:function(){try{if(c){var fe=function(){throw Error()};if(Object.defineProperty(fe.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(fe,[])}catch(ce){var oe=ce}Reflect.construct(s,[],fe)}else{try{fe.call()}catch(ce){oe=ce}s.call(fe.prototype)}}else{try{throw Error()}catch(ce){oe=ce}(fe=s())&&typeof fe.catch=="function"&&fe.catch(function(){})}}
vendor: 5,512 bytes, lines 43-48
43catch(ce){if(ce&&oe&&typeof ce.stack=="string")return[ce.stack,oe.stack]}return[null,null]}};g.DetermineComponentFrameRoot.displayName="DetermineComponentFrameRoot";var w=Object.getOwnPropertyDescriptor(g.DetermineComponentFrameRoot,"name");w&&w.configurable&&Object.defineProperty(g.DetermineComponentFrameRoot,"name",{value:"DetermineComponentFrameRoot"});var S=g.DetermineComponentFrameRoot(),N=S[0],L=S[1];if(N&&L){var Q=N.split(`
44`),re=L.split(`
45`);for(w=g=0;g<Q.length&&!Q[g].includes("DetermineComponentFrameRoot");)g++;for(;w<re.length&&!re[w].includes("DetermineComponentFrameRoot");)w++;if(g===Q.length||w===re.length)for(g=Q.length-1,w=re.length-1;1<=g&&0<=w&&Q[g]!==re[w];)w--;for(;1<=g&&0<=w;g--,w--)if(Q[g]!==re[w]){if(g!==1||w!==1)do if(g--,w--,0>w||Q[g]!==re[w]){var de=`
46`+Q[g].replace(" at new "," at ");return s.displayName&&de.includes("<anonymous>")&&(de=de.replace("<anonymous>",s.displayName)),de}while(1<=g&&0<=w);break}}}finally{Re=!1,Error.prepareStackTrace=p}return(p=s?s.displayName||s.name:"")?ze(p):""}function $e(s,c){switch(s.tag){case 26:case 27:case 5:return ze(s.type);case 16:return ze("Lazy");case 13:return s.child!==c&&c!==null?ze("Suspense Fallback"):ze("Suspense");case 19:return ze("SuspenseList");case 0:case 15:return mt(s.type,!1);case 11:return mt(s.type.render,!1);case 1:return mt(s.type,!0);case 31:return ze("Activity");default:return""}}function Gt(s){try{var c="",p=null;do c+=$e(s,p),p=s,s=s.return;while(s);return c}catch(g){return`
47Error generating stack: `+g.message+`
48`+g.stack}}var Ht=Object.prototype.hasOwnProperty,Xa=e.unstable_scheduleCallback,en=e.unstable_cancelCallback,ln=e.unstable_shouldYield,Ct=e.unstable_requestPaint,Qt=e.unstable_now,lr=e.unstable_getCurrentPriorityLevel,In=e.unstable_ImmediatePriority,ki=e.unstable_UserBlockingPriority,Qa=e.unstable_NormalPriority,du=e.unstable_LowPriority,Zr=e.unstable_IdlePriority,hm=e.log,Sc=e.unstable_setDisableYieldValue,An=null,At=null;function cr(s){if(typeof hm=="function"&&Sc(s),At&&typeof At.setStrictMode=="function")try{At.setStrictMode(An,s)}catch{}}var hn=Math.clz32?Math.clz32:pb,ak=Math.log,ik=Math.LN2;function pb(s){return s>>>=0,s===0?32:31-(ak(s)/ik|0)|0}var Cc=256,uu=262144,el=4194304;function Xn(s){var c=s&42;if(c!==0)return c;switch(s&-s){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:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return s&261888;case 262144:case 524288:case 1048576:case 2097152:return s&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return s&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return s}}function hu(s,c,p){var g=s.pendingLanes;if(g===0)return 0;var w=0,S=s.suspendedLanes,N=s.pingedLanes;s=s.warmLanes;var L=g&134217727;return L!==0?(g=L&~S,g!==0?w=Xn(g):(N&=L,N!==0?w=Xn(N):p||(p=L&~s,p!==0&&(w=Xn(p))))):(L=g&~S,L!==0?w=Xn(L):N!==0?w=Xn(N):p||(p=g&~s,p!==0&&(w=Xn(p)))),w===0?0:c!==0&&c!==w&&(c&S)===0&&(S=w&-w,p=c&-c,S>=p||S===32&&(p&4194048)!==0)?c:w}function Ge(s,c){return(s.pendingLanes&~(s.suspendedLanes&~s.pingedLanes)&c)===0}function wt(s,c){switch(s){case 1:case 2:case 4:case 8:case 64:return c+250;case 16:case 32: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 c+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ot(){var s=el;return el<<=1,(el&62914560)===0&&(el=4194304),s}function da(s){for(var c=[],p=0;31>p;p++)c.push(s);return c}function Dn(s,c){s.pendingLanes|=c,c!==268435456&&(s.suspendedLanes=0,s.pingedLanes=0,s.warmLanes=0)}function Jr(s,c,p,g,w,S){var N=s.pendingLanes;s.pendingLanes=p,s.suspendedLanes=0,s.pingedLanes=0,s.warmLanes=0,s.expiredLanes&=p,s.entangledLanes&=p,s.errorRecoveryDisabledLanes&=p,s.shellSuspendCounter=0;var L=s.entanglements,Q=s.expirationTimes,re=s.hiddenUpdates;for(p=N&~p;0<p;){var de=31-hn(p),fe=1<<de;L[de]=0,Q[de]=-1;var oe=re[de];if(oe!==null)for(re[de]=null,de=0;de<oe.length;de++){var ce=oe[de];ce!==null&&(ce.lane&=-536870913)}p&=~fe}g!==0&&eo(s,g,0),S!==0&&w===0&&s.tag!==0&&(s.suspendedLanes|=S&~(N&~c))}function eo(s,c,p){s.pendingLanes|=c,s.suspendedLanes&=~c;var g=31-hn(c);s.entangledLanes|=c,s.entanglements[g]=s.entanglements[g]|1073741824|p&261930}function Ma(s,c){var p=s.entangledLanes|=c;for(s=s.entanglements;p;){var g=31-hn(p),w=1<<g;w&c|s[g]&c&&(s[g]|=c),p&=~w}}function dr(s,c){var p=c&-c;return p=(p&42)!==0?1:rk(p),(p&(s.suspendedLanes|c))!==0?0:p}function rk(s){switch(s){case 2:s=1;break;case 8:s=4;break;case 32:s=16;break;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:s=128;break;case 268435456:s=134217728;break;default:s=0}return s}function ok(s){return s&=-s,2<s?8<s?(s&134217727)!==0?32:268435456:8:2}function o6(){var s=B.p;return s!==0?s:(s=window.event,s===void 0?32:GN(s.type))}function s6(s,c){var p=B.p;try{return B.p=s,c()}finally{B.p=p}}var tl=Math.random().toString(36).slice(2),Wn="__reactFiber$"+tl,Ea="__reactProps$"+tl,pu="__reactContainer$"+tl,
vendor: 7,751 bytes, line 48
48sk="__reactEvents$"+tl,HQ="__reactListeners$"+tl,YQ="__reactHandles$"+tl,l6="__reactResources$"+tl,pm="__reactMarker$"+tl;function lk(s){delete s[Wn],delete s[Ea],delete s[sk],delete s[HQ],delete s[YQ]}function mu(s){var c=s[Wn];if(c)return c;for(var p=s.parentNode;p;){if(c=p[pu]||p[Wn]){if(p=c.alternate,c.child!==null||p!==null&&p.child!==null)for(s=MN(s);s!==null;){if(p=s[Wn])return p;s=MN(s)}return c}s=p,p=s.parentNode}return null}function fu(s){if(s=s[Wn]||s[pu]){var c=s.tag;if(c===5||c===6||c===13||c===31||c===26||c===27||c===3)return s}return null}function mm(s){var c=s.tag;if(c===5||c===26||c===27||c===6)return s.stateNode;throw Error(i(33))}function gu(s){var c=s[l6];return c||(c=s[l6]={hoistableStyles:new Map,hoistableScripts:new Map}),c}function Tn(s){s[pm]=!0}var c6=new Set,d6={};function Ac(s,c){yu(s,c),yu(s+"Capture",c)}function yu(s,c){for(d6[s]=c,s=0;s<c.length;s++)c6.add(c[s])}var VQ=RegExp("^[: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]*$"),u6={},h6={};function KQ(s){return Ht.call(h6,s)?!0:Ht.call(u6,s)?!1:VQ.test(s)?h6[s]=!0:(u6[s]=!0,!1)}function mb(s,c,p){if(KQ(c))if(p===null)s.removeAttribute(c);else{switch(typeof p){case"undefined":case"function":case"symbol":s.removeAttribute(c);return;case"boolean":var g=c.toLowerCase().slice(0,5);if(g!=="data-"&&g!=="aria-"){s.removeAttribute(c);return}}s.setAttribute(c,""+p)}}function fb(s,c,p){if(p===null)s.removeAttribute(c);else{switch(typeof p){case"undefined":case"function":case"symbol":case"boolean":s.removeAttribute(c);return}s.setAttribute(c,""+p)}}function qo(s,c,p,g){if(g===null)s.removeAttribute(p);else{switch(typeof g){case"undefined":case"function":case"symbol":case"boolean":s.removeAttribute(p);return}s.setAttributeNS(c,p,""+g)}}function ji(s){switch(typeof s){case"bigint":case"boolean":case"number":case"string":case"undefined":return s;case"object":return s;default:return""}}function p6(s){var c=s.type;return(s=s.nodeName)&&s.toLowerCase()==="input"&&(c==="checkbox"||c==="radio")}function XQ(s,c,p){var g=Object.getOwnPropertyDescriptor(s.constructor.prototype,c);if(!s.hasOwnProperty(c)&&typeof g<"u"&&typeof g.get=="function"&&typeof g.set=="function"){var w=g.get,S=g.set;return Object.defineProperty(s,c,{configurable:!0,get:function(){return w.call(this)},set:function(N){p=""+N,S.call(this,N)}}),Object.defineProperty(s,c,{enumerable:g.enumerable}),{getValue:function(){return p},setValue:function(N){p=""+N},stopTracking:function(){s._valueTracker=null,delete s[c]}}}}function ck(s){if(!s._valueTracker){var c=p6(s)?"checked":"value";s._valueTracker=XQ(s,c,""+s[c])}}function m6(s){if(!s)return!1;var c=s._valueTracker;if(!c)return!0;var p=c.getValue(),g="";return s&&(g=p6(s)?s.checked?"true":"false":s.value),s=g,s!==p?(c.setValue(s),!0):!1}function gb(s){if(s=s||(typeof document<"u"?document:void 0),typeof s>"u")return null;try{return s.activeElement||s.body}catch{return s.body}}var QQ=/[\n"\\]/g;function Si(s){return s.replace(QQ,function(c){return"\\"+c.charCodeAt(0).toString(16)+" "})}function dk(s,c,p,g,w,S,N,L){s.name="",N!=null&&typeof N!="function"&&typeof N!="symbol"&&typeof N!="boolean"?s.type=N:s.removeAttribute("type"),c!=null?N==="number"?(c===0&&s.value===""||s.value!=c)&&(s.value=""+ji(c)):s.value!==""+ji(c)&&(s.value=""+ji(c)):N!=="submit"&&N!=="reset"||s.removeAttribute("value"),c!=null?uk(s,N,ji(c)):p!=null?uk(s,N,ji(p)):g!=null&&s.removeAttribute("value"),w==null&&S!=null&&(s.defaultChecked=!!S),w!=null&&(s.checked=w&&typeof w!="function"&&typeof w!="symbol"),L!=null&&typeof L!="function"&&typeof L!="symbol"&&typeof L!="boolean"?s.name=""+ji(L):s.removeAttribute("name")}function f6(s,c,p,g,w,S,N,L){if(S!=null&&typeof S!="function"&&typeof S!="symbol"&&typeof S!="boolean"&&(s.type=S),c!=null||p!=null){if(!(S!=="submit"&&S!=="reset"||c!=null)){ck(s);return}p=p!=null?""+ji(p):"",c=c!=null?""+ji(c):p,L||c===s.value||(s.value=c),s.defaultValue=c}g=g??w,g=typeof g!="function"&&typeof g!="symbol"&&!!g,s.checked=L?s.checked:!!g,s.defaultChecked=!!g,N!=null&&typeof N!="function"&&typeof N!="symbol"&&typeof N!="boolean"&&(s.name=N),ck(s)}function uk(s,c,p){c==="number"&&gb(s.ownerDocument)===s||s.defaultValue===""+p||(s.defaultValue=""+p)}function bu(s,c,p,g){if(s=s.options,c){c={};for(var w=0;w<p.length;w++)c["$"+p[w]]=!0;for(p=0;p<s.length;p++)w=c.hasOwnProperty("$"+s[p].value),s[p].selected!==w&&(s[p].selected=w),w&&g&&(s[p].defaultSelected=!0)}else{for(p=""+ji(p),c=null,w=0;w<s.length;w++){if(s[w].value===p){s[w].selected=!0,g&&(s[w].defaultSelected=!0);return}c!==null||s[w].disabled||(c=s[w])}c!==null&&(c.selected=!0)}}function g6(s,c,p){if(c!=null&&(c=""+ji(c),c!==s.value&&(s.value=c),p==null)){s.defaultValue!==c&&(s.defaultValue=c);return}s.defaultValue=p!=null?""+ji(p):""}function y6(s,c,p,g){if(c==null){if(g!=null){if(p!=null)throw Error(i(92));if(P(g)){if(1<g.length)throw Error(i(93));g=g[0]}p=g}p==null&&(p=""),c=p}p=ji(c),s.defaultValue=p,g=s.textContent,g===p&&g!==""&&g!==null&&(s.value=g),ck(s)}function vu(s,c){if(c){var p=s.firstChild;if(p&&p===s.lastChild&&p.nodeType===3){p.nodeValue=c;return}}s.textContent=c}var ZQ=new Set("animationIterationCount aspectRatio borderImageOutset borderImageSlice borderImageWidth boxFlex boxFlexGroup boxOrdinalGroup columnCount columns flex flexGrow flexPositive flexShrink flexNegative flexOrder gridArea gridRow gridRowEnd gridRowSpan gridRowStart gridColumn gridColumnEnd gridColumnSpan gridColumnStart fontWeight lineClamp lineHeight opacity order orphans scale tabSize widows zIndex zoom fillOpacity floodOpacity stopOpacity strokeDasharray strokeDashoffset strokeMiterlimit strokeOpacity strokeWidth MozAnimationIterationCount MozBoxFlex MozBoxFlexGroup MozLineClamp msAnimationIterationCount msFlex msZoom msFlexGrow msFlexNegative msFlexOrder msFlexPositive msFlexShrink msGridColumn msGridColumnSpan msGridRow msGridRowSpan WebkitAnimationIterationCount WebkitBoxFlex WebKitBoxFlexGroup WebkitBoxOrdinalGroup WebkitColumnCount WebkitColumns WebkitFlex WebkitFlexGrow WebkitFlexPositive WebkitFlexShrink WebkitLineClamp".split(" "));function b6(s,c,p){var g=c.indexOf("--")===0;p==null||typeof p=="boolean"||p===""?g?s.setProperty(c,""):c==="float"?s.cssFloat="":s[c]="":g?s.setProperty(c,p):typeof p!="number"||p===0||ZQ.has(c)?c==="float"?s.cssFloat=p:s[c]=(""+p).trim():s[c]=p+"px"}function v6(s,c,p){if(c!=null&&typeof c!="object")throw Error(i(62));if(s=s.style,p!=null){for(var g in p)!p.hasOwnProperty(g)||c!=null&&c.hasOwnProperty(g)||(g.indexOf("--")===0?s.setProperty(g,""):g==="float"?s.cssFloat="":s[g]="");for(var w in c)g=c[w],c.hasOwnProperty(w)&&p[w]!==g&&b6(s,w,g)}else for(var S in c)c.hasOwnProperty(S)&&b6(s,S,c[S])}function hk(s){if(s.indexOf("-")===-1)return!1;switch(s){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 JQ=new Map([["acceptCharset","accept-charset"],["htmlFor","for"],["httpEquiv","http-equiv"],["crossOrigin","crossorigin"],["accentHeight","accent-height"],["alignmentBaseline","alignment-baseline"],["arabicForm","arabic-form"],["baselineShift","baseline-shift"],["capHeight","cap-height"],["clipPath","clip-path"],["clipRule","clip-rule"],["colorInterpolation","color-interpolation"],["colorInterpolationFilters","color-interpolation-filters"],["colorProfile","color-profile"],["colorRen
48dering","color-rendering"],["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"],["horizAdvX","horiz-adv-x"],["horizOriginX","horiz-origin-x"],["imageRendering","image-rendering"],["letterSpacing","letter-spacing"],["lightingColor","lighting-color"],["markerEnd","marker-end"],["markerMid","marker-mid"],["markerStart","marker-start"],["overlinePosition","overline-position"],["overlineThickness","overline-thickness"],["paintOrder","paint-order"],["panose-1","panose-1"],["pointerEvents","pointer-events"],["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"],["textAnchor","text-anchor"],["textDecoration","text-decoration"],["textRendering","text-rendering"],["transformOrigin","transform-origin"],["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"],["xmlnsXlink","xmlns:xlink"],["xHeight","x-height"]]),eZ=/^[\u0000-\u001F ]*j[\r\n\t]*a[\r\n\t]*v[\r\n\t]*a[\r\n\t]*s[\r\n\t]*c[\r\n\t]*r[\r\n\t]*i[\r\n\t]*p[\r\n\t]*t[\r\n\t]*:/i;function yb(s){return eZ.test(""+s)?"javascript:throw new Error('React has blocked a javascript: URL as a security precaution.')":s}function $o(){}var pk=null;function mk(s){return s=s.target||s.srcElement||window,s.correspondingUseElement&&(s=s.correspondingUseElement),s.nodeType===3?s.parentNode:s}var xu=null,wu=null;function x6(s){var c=fu(s);if(c&&(s=c.stateNode)){var p=s[Ea]||null;e:switch(s=c.stateNode,c.type){case"input":if(dk(s,p.value,p.defaultValue,p.defaultValue,p.checked,p.defaultChecked,p.type,p.name),c=p.name,p.type==="radio"&&c!=null){for(p=s;p.parentNode;)p=p.parentNode;for(p=p.querySelectorAll('input[name="'+Si(""+c)+'"][type="radio"]'),c=0;c<p.length;c++){var g=p[c];if(g!==s&&g.form===s.form){var w=g[Ea]||null;if(!w)throw Error(i(90));dk(g,w.value,w.defaultValue,w.defaultValue,w.checked,w.defaultChecked,w.type,w.name)}}for(c=0;c<p.length;c++)g=p[c],g.form===s.form&&m6(g)}break e;case"textarea":g6(s,p.value,p.defaultValue);break e;case"select":c=p.value,c!=null&&bu(s,!!p.multiple,c,!1)}}}var fk=!1;function w6(s,c,p){if(fk)return s(c,p);fk=!0;try{var g=s(c);return g}finally{if(fk=!1,(xu!==null||wu!==null)&&(iv(),xu&&(c=xu,s=wu,wu=xu=null,x6(c),s)))for(c=0;c<s.length;c++)x6(s[c])}}function fm(s,c){var p=s.stateNode;if(p===null)return null;var g=p[Ea]||null;if(g===null)return null;p=g[c];e:switch(c){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(g=!g.disabled)||(s=s.type,g=!(s==="button"||s==="input"||s==="select"||s==="textarea")),s=!g;break e;default:s=!1}if(s)return null;if(p&&typeof p!="function")throw Error(i(231,c,typeof p));return p}var Fo=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),gk=!1;if(Fo)try{var gm={};Object.defineProperty(gm,"passive",{get:function(){gk=!0}}),window.addEventListener("test",gm,gm),window.removeEventListener("test",gm,gm)}
vendor: 3,192 bytes, line 48
48catch{gk=!1}var nl=null,yk=null,bb=null;function k6(){if(bb)return bb;var s,c=yk,p=c.length,g,w="value"in nl?nl.value:nl.textContent,S=w.length;for(s=0;s<p&&c[s]===w[s];s++);var N=p-s;for(g=1;g<=N&&c[p-g]===w[S-g];g++);return bb=w.slice(s,1<g?1-g:void 0)}function vb(s){var c=s.keyCode;return"charCode"in s?(s=s.charCode,s===0&&c===13&&(s=13)):s=c,s===10&&(s=13),32<=s||s===13?s:0}function xb(){return!0}function j6(){return!1}function Ra(s){function c(p,g,w,S,N){this._reactName=p,this._targetInst=w,this.type=g,this.nativeEvent=S,this.target=N,this.currentTarget=null;for(var L in s)s.hasOwnProperty(L)&&(p=s[L],this[L]=p?p(S):S[L]);return this.isDefaultPrevented=(S.defaultPrevented!=null?S.defaultPrevented:S.returnValue===!1)?xb:j6,this.isPropagationStopped=j6,this}return f(c.prototype,{preventDefault:function(){this.defaultPrevented=!0;var p=this.nativeEvent;p&&(p.preventDefault?p.preventDefault():typeof p.returnValue!="unknown"&&(p.returnValue=!1),this.isDefaultPrevented=xb)},stopPropagation:function(){var p=this.nativeEvent;p&&(p.stopPropagation?p.stopPropagation():typeof p.cancelBubble!="unknown"&&(p.cancelBubble=!0),this.isPropagationStopped=xb)},persist:function(){},isPersistent:xb}),c}var Tc={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(s){return s.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},wb=Ra(Tc),ym=f({},Tc,{view:0,detail:0}),tZ=Ra(ym),bk,vk,bm,kb=f({},ym,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:wk,button:0,buttons:0,relatedTarget:function(s){return s.relatedTarget===void 0?s.fromElement===s.srcElement?s.toElement:s.fromElement:s.relatedTarget},movementX:function(s){return"movementX"in s?s.movementX:(s!==bm&&(bm&&s.type==="mousemove"?(bk=s.screenX-bm.screenX,vk=s.screenY-bm.screenY):vk=bk=0,bm=s),bk)},movementY:function(s){return"movementY"in s?s.movementY:vk}}),S6=Ra(kb),nZ=f({},kb,{dataTransfer:0}),aZ=Ra(nZ),iZ=f({},ym,{relatedTarget:0}),xk=Ra(iZ),rZ=f({},Tc,{animationName:0,elapsedTime:0,pseudoElement:0}),oZ=Ra(rZ),sZ=f({},Tc,{clipboardData:function(s){return"clipboardData"in s?s.clipboardData:window.clipboardData}}),lZ=Ra(sZ),cZ=f({},Tc,{data:0}),C6=Ra(cZ),dZ={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},uZ={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"},hZ={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function pZ(s){var c=this.nativeEvent;return c.getModifierState?c.getModifierState(s):(s=hZ[s])?!!c[s]:!1}function wk(){return pZ}var mZ=f({},ym,{key:function(s){if(s.key){var c=dZ[s.key]||s.key;if(c!=="Unidentified")return c}return s.type==="keypress"?(s=vb(s),s===13?"Enter":String.fromCharCode(s)):s.type==="
48keydown"||s.type==="keyup"?uZ[s.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:wk,charCode:function(s){return s.type==="keypress"?vb(s):0},keyCode:function(s){return s.type==="keydown"||s.type==="keyup"?s.keyCode:0},which:function(s){return s.type==="keypress"?vb(s):s.type==="keydown"||s.type==="keyup"?s.keyCode:0}}),fZ=Ra(mZ),gZ=f({},kb,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),A6=Ra(gZ),yZ=f({},ym,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:wk}),bZ=Ra(yZ),vZ=f({},Tc,{propertyName:0,elapsedTime:0,pseudoElement:0}),xZ=Ra(vZ),wZ=f({},kb,{deltaX:function(s){return"deltaX"in s?s.deltaX:"wheelDeltaX"in s?-s.wheelDeltaX:0},deltaY:function(s){return"deltaY"in s?s.deltaY:"wheelDeltaY"in s?-s.wheelDeltaY:"wheelDelta"in s?-s.wheelDelta:0},deltaZ:0,deltaMode:0}),kZ=Ra(wZ),jZ=f({},Tc,{newState:0,oldState:0}),SZ=Ra(jZ),CZ=[9,13,27,32],kk=Fo&&"CompositionEvent"in window,vm=null;Fo&&"documentMode"in document&&(vm=document.documentMode);var AZ=Fo&&"TextEvent"in window&&!vm,T6=Fo&&(!kk||vm&&8<vm&&11>=vm),_6=" ",M6=!1;function E6(s,c){switch(s){case"keyup":return CZ.indexOf(c.keyCode)!==-1;case"keydown":return c.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function R6(s){return s=s.detail,typeof s=="object"&&"data"in s?s.data:null}var ku=!1;function TZ(s,c){switch(s){case"compositionend":return R6(c);case"keypress":return c.which!==32?null:(M6=!0,_6);case"textInput":return s=c.data,s===_6&&M6?null:s;default:return null}}function _Z(s,c){if(ku)return s==="compositionend"||!kk&&E6(s,c)?(s=k6(),bb=yk=nl=null,ku=!1,s):null;switch(s){case"paste":return null;case"keypress":if(!(c.ctrlKey||c.altKey||c.metaKey)||c.ctrlKey&&c.altKey){if(c.char&&1<c.char.length)return c.char;if(c.which)return String.fromCharCode(c.which)}return null;case"compositionend":return T6&&c.locale!=="ko"?null:c.data;default:return null}}var MZ={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 N6(s){var c=s&&s.nodeName&&s.nodeName.toLowerCase();return c==="input"?!!MZ[s.type]:c==="textarea"}function O6(s,c,p,g){xu?wu?wu.push(g):wu=[g]:xu=g,c=uv(c,"onChange"),0<c.length&&(p=new wb("onChange","change",null,p,g),s.push({event:p,listeners:c}))}var xm=null,wm=null;function EZ(s){fN(s,0)}function jb(s){var c=mm(s);if(m6(c))return s}function P6(s,c){if(s==="change")return c}var I6=!1;if(Fo){var jk;if(Fo){var Sk="oninput"in document;if(!Sk){var D6=document.createElement("div");D6.setAttribute("oninput","return;"),Sk=typeof D6.oninput=="function"}jk=Sk}else jk=!1;I6=jk&&(!document.documentMode||9<document.documentMode)}function W6(){xm&&(xm.detachEvent("onpropertychange",z6),wm=xm=null)}function z6(s){if(s.propertyName==="value"&&jb(wm)){var c=[];O6(c,wm,s,mk(s)),w6(EZ,c)}}function RZ(s,c,p){s==="focusin"?(W6(),xm=c,wm=p,xm.attachEvent("onpropertychange",z6)):s==="focusout"&&W6()}function NZ(s){if(s==="selectionchange"||s==="keyup"||s==="keydown")return jb(wm)}function OZ(s,c){if(s==="click")return jb(c)}function PZ(s,c){if(s==="input"||s==="change")return jb(c)}function IZ(s,c){return s===c&&(s!==0||1/s===1/c)||s!==s&&c!==c}var Za=typeof Object.is=="function"?Object.is:IZ;function km(s,c){if(Za(s,c))return!0;if(typeof s!="object"||s===null||typeof c!="object"||c===null)return!1;var p=Object.keys(s),g=Object.keys(c);if(p.length!==g.length)return!1;for(g=0;g<p.length;g++){var w=p[g];if(!Ht.call(c,w)||!Za(s[w],c[w]))return!1}return!0}function L6(s){for(;s&&s.firstChild;)s=s.firstChild;return s}function U6(s,c){var p=L6(s);s=0;for(var g;p;){if(p.nodeType===3){if(g=s+p.textContent.length,s<=c&&g>=c)return{node:p,offset:c-s};s=g}e:{for(;p;){if(p.nextSibling){p=p.nextSibling;break e}p=p.parentNode}p=void 0}p=L6(p)}}function B6(s,c){return s&&c?s===c?!0:s&&s.nodeType===3?!1:c&&c.nodeType===3?B6(s,c.parentNode):"contains"in s?s.contains(c):s.compareDocumentPosition?!!(s.compareDocumentPosition(c)&16):!1:!1}function q6(s){s=s!=null&&s.ownerDocument!=null&&s.ownerDocument.defaultView!=null?s.ownerDocument.defaultView:window;for(var c=gb(s.document);c instanceof s.HTMLIFrameElement;){try{var p=typeof c.contentWindow.location.href=="string"}catch{p=!1}if(p)s=c.contentWindow;else break;c=gb(s.document)}return c}function Ck(s){var c=s&&s.nodeName&&s.nodeName.toLowerCase();return c&&(c==="input"&&(s.type==="text"||s.type==="search"||s.type==="tel"||s.type==="url"||s.type==="password")||c==="textarea"||s.contentEditable==="true")}var DZ=Fo&&"documentMode"in document&&11>=document.documentMode,ju=null,Ak=null,jm=null,Tk=!1;function $6(s,c,p){var g=p.window===p?p.document:p.nodeType===9?p:p.ownerDocument;Tk||ju==null||ju!==gb(g)||(g=ju,"selectionStart"in g&&Ck(g)?g={start:g.
vendor: 22,820 bytes, line 48
48selectionStart,end:g.selectionEnd}:(g=(g.ownerDocument&&g.ownerDocument.defaultView||window).getSelection(),g={anchorNode:g.anchorNode,anchorOffset:g.anchorOffset,focusNode:g.focusNode,focusOffset:g.focusOffset}),jm&&km(jm,g)||(jm=g,g=uv(Ak,"onSelect"),0<g.length&&(c=new wb("onSelect","select",null,c,p),s.push({event:c,listeners:g}),c.target=ju)))}function _c(s,c){var p={};return p[s.toLowerCase()]=c.toLowerCase(),p["Webkit"+s]="webkit"+c,p["Moz"+s]="moz"+c,p}var Su={animationend:_c("Animation","AnimationEnd"),animationiteration:_c("Animation","AnimationIteration"),animationstart:_c("Animation","AnimationStart"),transitionrun:_c("Transition","TransitionRun"),transitionstart:_c("Transition","TransitionStart"),transitioncancel:_c("Transition","TransitionCancel"),transitionend:_c("Transition","TransitionEnd")},_k={},F6={};Fo&&(F6=document.createElement("div").style,"AnimationEvent"in window||(delete Su.animationend.animation,delete Su.animationiteration.animation,delete Su.animationstart.animation),"TransitionEvent"in window||delete Su.transitionend.transition);function Mc(s){if(_k[s])return _k[s];if(!Su[s])return s;var c=Su[s],p;for(p in c)if(c.hasOwnProperty(p)&&p in F6)return _k[s]=c[p];return s}var G6=Mc("animationend"),H6=Mc("animationiteration"),Y6=Mc("animationstart"),WZ=Mc("transitionrun"),zZ=Mc("transitionstart"),LZ=Mc("transitioncancel"),V6=Mc("transitionend"),K6=new Map,Mk="abort auxClick beforeToggle 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(" ");Mk.push("scrollEnd");function ur(s,c){K6.set(s,c),Ac(c,[s])}var Sb=typeof reportError=="function"?reportError:function(s){if(typeof window=="object"&&typeof window.ErrorEvent=="function"){var c=new window.ErrorEvent("error",{bubbles:!0,cancelable:!0,message:typeof s=="object"&&s!==null&&typeof s.message=="string"?String(s.message):String(s),error:s});if(!window.dispatchEvent(c))return}else if(typeof process=="object"&&typeof process.emit=="function"){process.emit("uncaughtException",s);return}console.error(s)},Ci=[],Cu=0,Ek=0;function Cb(){for(var s=Cu,c=Ek=Cu=0;c<s;){var p=Ci[c];Ci[c++]=null;var g=Ci[c];Ci[c++]=null;var w=Ci[c];Ci[c++]=null;var S=Ci[c];if(Ci[c++]=null,g!==null&&w!==null){var N=g.pending;N===null?w.next=w:(w.next=N.next,N.next=w),g.pending=w}S!==0&&X6(p,w,S)}}function Ab(s,c,p,g){Ci[Cu++]=s,Ci[Cu++]=c,Ci[Cu++]=p,Ci[Cu++]=g,Ek|=g,s.lanes|=g,s=s.alternate,s!==null&&(s.lanes|=g)}function Rk(s,c,p,g){return Ab(s,c,p,g),Tb(s)}function Ec(s,c){return Ab(s,null,null,c),Tb(s)}function X6(s,c,p){s.lanes|=p;var g=s.alternate;g!==null&&(g.lanes|=p);for(var w=!1,S=s.return;S!==null;)S.childLanes|=p,g=S.alternate,g!==null&&(g.childLanes|=p),S.tag===22&&(s=S.stateNode,s===null||s._visibility&1||(w=!0)),s=S,S=S.return;return s.tag===3?(S=s.stateNode,w&&c!==null&&(w=31-hn(p),s=S.hiddenUpdates,g=s[w],g===null?s[w]=[c]:g.push(c),c.lane=p|536870912),S):null}function Tb(s){if(50<Gm)throw Gm=0,U2=null,Error(i(185));for(var c=s.return;c!==null;)s=c,c=s.return;return s.tag===3?s.stateNode:null}var Au={};function UZ(s,c,p,g){this.tag=s,this.key=p,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=c,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=g,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ja(s,c,p,g){return new UZ(s,c,p,g)}function Nk(s){return s=s.prototype,!(!s||!s.isReactComponent)}function Go(s,c){var p=s.alternate;return p===null?(p=Ja(s.tag,c,s.key,s.mode),p.elementType=s.elementType,p.type=s.type,p.stateNode=s.stateNode,p.alternate=s,s.alternate=p):(p.pendingProps=c,p.type=s.type,p.flags=0,p.subtreeFlags=0,p.deletions=null),p.flags=s.flags&65011712,p.childLanes=s.childLanes,p.lanes=s.lanes,p.child=s.child,p.memoizedProps=s.memoizedProps,p.memoizedState=s.memoizedState,p.updateQueue=s.updateQueue,c=s.dependencies,p.dependencies=c===null?null:{lanes:c.lanes,firstContext:c.firstContext},p.sibling=s.sibling,p.index=s.index,p.ref=s.ref,p.refCleanup=s.refCleanup,p}function Q6(s,c){s.flags&=65011714;var p=s.alternate;return p===null?(s.childLanes=0,s.lanes=c,s.child=null,s.subtreeFlags=0,s.memoizedProps=null,s.memoizedState=null,s.updateQueue=null,s.dependencies=null,s.stateNode=null):(s.childLanes=p.childLanes,s.lanes=p.lanes,s.child=p.child,s.subtreeFlags=0,s.deletions=null,s.memoizedProps=p.memoizedProps,s.memoizedState=p.memoizedState,s.updateQueue=p.updateQueue,s.type=p.type,c=p.dependencies,s.dependencies=c===null?null:{lanes:c.lanes,firstContext:c.firstContext}),s}function _b(s,c,p,g,w,S){var N=0;if(g=s,typeof s=="function")Nk(s)&&(N=1);else if(typeof s=="string")N=GJ(s,p,ne.current)?26:s==="html"||s==="head"||s==="body"?27:5;else e:switch(s){case z:return s=Ja(31,p,c,w),s.elementType=z,s.lanes=S,s;case k:return Rc(p.children,w,S,c);case v:N=8,w|=24;break;case j:return s=Ja(12,p,c,w|2),s.elementType=j,s.lanes=S,s;case _:return s=Ja(13,p,c,w),s.elementType=_,s.lanes=S,s;case E:return s=Ja(19,p,c,w),s.elementType=E,s.lanes=S,s;default:if(typeof s=="object"&&s!==null)switch(s.$$typeof){case A:N=10;break e;case T:N=9;break e;case C:N=11;break e;case R:N=14;break e;case W:N=16,g=null;break e}N=29,p=Error(i(130,s===null?"null":typeof s,"")),g=null}return c=Ja(N,p,c,w),c.elementType=s,c.type=g,c.lanes=S,c}function Rc(s,c,p,g){return s=Ja(7,s,g,c),s.lanes=p,s}function Ok(s,c,p){return s=Ja(6,s,null,c),s.lanes=p,s}function Z6(s){var c=Ja(18,null,null,0);return c.stateNode=s,c}function Pk(s,c,p){return c=Ja(4,s.children!==null?s.children:[],s.key,c),c.lanes=p,c.stateNode={containerInfo:s.containerInfo,pendingChildren:null,implementation:s.implementation},c}var J6=new WeakMap;function Ai(s,c){if(typeof s=="object"&&s!==null){var p=J6.get(s);return p!==void 0?p:(c={value:s,source:c,stack:Gt(c)},J6.set(s,c),c)}return{value:s,source:c,stack:Gt(c)}}var Tu=[],_u=0,Mb=null,Sm=0,Ti=[],_i=0,al=null,to=1,no="";function Ho(s,c){Tu[_u++]=Sm,Tu[_u++]=Mb,Mb=s,Sm=c}function e8(s,c,p){Ti[_i++]=to,Ti[_i++]=no,Ti[_i++]=al,al=s;var g=to;s=no;var w=32-hn(g)-1;g&=~(1<<w),p+=1;var S=32-hn(c)+w;if(30<S){var N=w-w%5;S=(g&(1<<N)-1).toString(32),g>>=N,w-=N,to=1<<32-hn(c)+w|p<<w|g,no=S+s}else to=1<<S|p<<w|g,no=s}function Ik(s){s.return!==null&&(Ho(s,1),e8(s,1,0))}function Dk(s){for(;s===Mb;)Mb=Tu[--_u],Tu[_u]=null,Sm=Tu[--_u],Tu[_u]=null;for(;s===al;)al=Ti[--_i],Ti[_i]=null,no=Ti[--_i],Ti[_i]=null,to=Ti[--_i],Ti[_i]=null}function t8(s,c){Ti[_i++]=to,Ti[_i++]=no,Ti[_i++]=al,to=c.id,no=c.overflow,al=s}var zn=null,Bt=null,ut=!1,il=null,Mi=!1,Wk=Error(i(519));function rl(s){var c=Error(i(418,1<arguments.length&&arguments[1]!==void 0&&arguments[1]?"text":"HTML",""));throw Cm(Ai(c,s)),Wk}function n8(s){var c=s.stateNode,p=s.type,g=s.memoizedProps;switch(c[Wn]=s,c[Ea]=g,p){case"dialog":rt("cancel",c),rt("close",c);break;case"iframe":case"object":case"embed":rt("load",c);break;case"video":case"audio":for(p=0;p<Ym.length;p++)rt(Ym[p],c);break;case"source":rt("error",c);break;case"img":case"image":case"link":rt("error",c),rt("load",c);break;case"details":rt("toggle",c);break;case"input":rt("invalid",c),f6(c,g.value,g.defaultValue,g.checked,g.defaultChecked,g.type,g.name,!0);break;case"select":rt("invalid",c);break;case"textarea":rt("invalid",c),y6(c,g.value,g.defaultValue,g.children)}p=g.children,typeof p!="string"&&typeof p!="number"&&typeof p!="bigint"||c.textContent===""+p||g.suppressHydrationWarning===!0||vN(c.textContent,p)?(g.popover!=null&&(rt("beforetoggle",c),rt("toggle",c)),g.onScroll!=null&&rt("scroll",c),g.onScrollEnd!=null&&rt("scrollend",c),g.onClick!=null&&(c.onclick=$o),c=!0):c=!1,c||rl(s,!0)}function a8(s){for(zn=s.return;zn;)switch(zn.tag){case 5:case 31:case 13:Mi=!1;return;case 27:case 3:Mi=!0;return;default:zn=zn.return}}function Mu(s){if(s!==zn)return!1;if(!ut)return a8(s),ut=!0,!1;var c=s.tag,p;if((p=c!==3&&c!==27)&&((p=c===5)&&(p=s.type,p=!(p!=="form"&&p!=="button")||tj(s.type,s.memoizedProps)),p=!p),p&&Bt&&rl(s),a8(s),c===13){if(s=s.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(i(317));Bt=_N(s)}else if(c===31){if(s=s.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(i(317));Bt=_N(s)}else c===27?(c=Bt,vl(s.type)?(s=oj,oj=null,Bt=s):Bt=c):Bt=zn?Ri(s.stateNode.nextSibling):null;return!0}function Nc(){Bt=zn=null,ut=!1}function zk(){var s=il;return s!==null&&(Ia===null?Ia=s:Ia.push.apply(Ia,s),il=null),s}function Cm(s){il===null?il=[s]:il.push(s)}var Lk=I(null),Oc=null,Yo=null;function ol(s,c,p){K(Lk,c._currentValue),c._currentValue=p}function Vo(s){s._currentValue=Lk.current,F(Lk)}function Uk(s,c,p){for(;s!==null;){var g=s.alternate;if((s.childLanes&c)!==c?(s.childLanes|=c,g!==null&&(g.childLanes|=c)):g!==null&&(g.childLanes&c)!==c&&(g.childLanes|=c),s===p)break;s=s.return}}function Bk(s,c,p,g){var w=s.child;for(w!==null&&(w.return=s);w!==null;){var S=w.dependencies;if(S!==null){var N=w.child;S=S.firstContext;e:for(;S!==null;){var L=S;S=w;for(var Q=0;Q<c.length;Q++)if(L.context===c[Q]){S.lanes|=p,L=S.alternate,L!==null&&(L.lanes|=p),Uk(S.return,p,s),g||(N=null);break e}S=L.next}}else if(w.tag===18){if(N=w.return,N===null)throw Error(i(341));N.lanes|=p,S=N.alternate,S!==null&&(S.lanes|=p),Uk(N,p,s),N=null}else N=w.child;if(N!==null)N.return=w;else for(N=w;N!==null;){if(N===s){N=null;break}if(w=N.sibling,w!==null){w.return=N.return,N=w;break}N=N.return}w=N}}function Eu(s,c,p,g){s=null;for(var w=c,S=!1;w!==null;){if(!S){if((w.flags&524288)!==0)S=!0;else if((w.flags&262144)!==0)break}if(w.tag===10){var N=w.alternate;if(N===null)throw Error(i(387));if(N=N.memoizedProps,N!==null){var L=w.type;Za(w.pendingProps.value,N.value)||(s!==null?s.push(L):s=[L])}}else if(w===be.current){if(N=w.alternate,N===null)throw Error(i(387));N.memoizedState.memoizedState!==w.memoizedState.memoizedState&&(s!==null?s.push(Zm):s=[Zm])}w=w.return}s!==null&&Bk(c,s,p,g),c.flags|=262144}function Eb(s){for(s=s.firstContext;s!==null;){if(!Za(s.context._currentValue,s.memoizedValue))return!0;s=s.next}return!1}function Pc(s){Oc=s,Yo=null,s=s.dependencies,s!==null&&(s.firstContext=null)}function Ln(s){return i8(Oc,s)}function Rb(s,c){return Oc===null&&Pc(s),i8(s,c)}function i8(s,c){var p=c._currentValue;if(c={context:c,memoizedValue:p,next:null},Yo===null){if(s===null)throw Error(i(308));Yo=c,s.dependencies={lanes:0,firstContext:c},s.flags|=524288}else Yo=Yo.next=c;return p}var BZ=typeof AbortController<"u"?AbortController:function(){var s=[],c=this.signal={aborted:!1,addEventListener:function(p,g){s.push(g)}};this.abort=function(){c.aborted=!0,s.forEach(function(p){return p()})}},qZ=e.unstable_scheduleCallback,$Z=e.unstable_NormalPriority,pn={$$typeof:A,Consumer:null,Provider:null,_currentValue:null,_currentValue2:null,_threadCount:0};function qk(){return{controller:new BZ,data:new Map,refCount:0}}function Am(s){s.refCount--,s.refCount===0&&qZ($Z,function(){s.controller.abort()})}var Tm=null,$k=0,Ru=0,Nu=null;function FZ(s,c){if(Tm===null){var p=Tm=[];$k=0,Ru=H2(),Nu={status:"pending",value:void 0,then:function(g){p.push(g)}}}return $k++,c.then(r8,r8),c}function r8(){if(--$k===0&&Tm!==null){Nu!==null&&(Nu.status="fulfilled");var s=Tm;Tm=null,Ru=0,Nu=null;for(var c=0;c<s.length;c++)(0,s[c])()}}function GZ(s,c){var p=[],g={status:"pending",value:null,reason:null,then:function(w){p.push(w)}};return s.then(function(){g.status="fulfilled",g.value=c;for(var w=0;w<p.length;w++)(0,p[w])(c)},function(w){for(g.status="rejected",g.reason=w,w=0;w<p.length;w++)(0,p[w])(void 0)}),g}var o8=O.S;O.S=function(s,c){$R=Qt(),typeof c=="object"&&c!==null&&typeof c.then=="function"&&FZ(s,c),o8!==null&&o8(s,c)};var Ic=I(null);function Fk(){var s=Ic.current;return s!==null?s:Pt.pooledCache}function Nb(s,c){c===null?K(Ic,Ic.current):K(Ic,c.pool)}function s8(){var s=Fk();return s===null?null:{parent:pn._currentValue,pool:s}}var Ou=Error(i(460)),Gk=Error(i(474)),Ob=Error(i(542)),Pb={then:function(){}};function l8(s){return s=s.status,s==="fulfilled"||s==="rejected"}function c8(s,c,p){switch(p=s[p],p===void 0?s.push(c):p!==c&&(c.then($o,$o),c=p),c.status){case"fulfilled":return c.value;case"rejected":throw s=c.reason,u8(s),s;default:if(typeof c.status=="string")c.then($o,$o);else{if(s=Pt,s!==null&&100<s.shellSuspendCounter)throw Error(i(482));s=c,s.status="pending",s.then(function(g){if(c.status==="pending"){var w=c;w.status="fulfilled",w.value=g}},function(g){if(c.status==="pending"){var w=c;w.status="rejected",w.reason=g}})}switch(c.status){case"fulfilled":return c.value;case"rejected":throw s=c.reason,u8(s),s}throw Wc=c,Ou}}function Dc(s){try{var c=s._init;return c(s._payload)}catch(p){throw p!==null&&typeof p=="object"&&typeof p.then=="function"?(Wc=p,Ou):p}}var Wc=null;function d8(){if(Wc===null)throw Error(i(459));var s=Wc;return Wc=null,s}function u8(s){if(s===Ou||s===Ob)throw Error(i(483))}var Pu=null,_m=0;function Ib(s){var c=_m;return _m+=1,Pu===null&&(Pu=[]),c8(Pu,s,c)}function Mm(s,c){c=c.props.ref,s.ref=c!==void 0?c:null}function Db(s,c){throw c.$$typeof===y?Error(i(525)):(s=Object.prototype.toString.call(c),Error(i(31,s==="[object Object]"?"object with keys {"+Object.keys(c).join(", ")+"}":s)))}function h8(s){function c(te,Z){if(s){var ie=te.deletions;ie===null?(te.deletions=[Z],te.flags|=16):ie.push(Z)}}function p(te,Z){if(!s)return null;for(;Z!==null;)c(te,Z),Z=Z.sibling;return null}function g(te){for(var Z=new Map;te!==null;)te.key!==null?Z.set(te.key,te):Z.set(te.index,te),te=te.sibling;return Z}function w(te,Z){return te=Go(te,Z),te.index=0,te.sibling=null,te}function S(te,Z,ie){return te.index=ie,s?(ie=te.alternate,ie!==null?(ie=ie.index,ie<Z?(te.flags|=67108866,Z):ie):(te.flags|=67108866,Z)):(te.flags|=1048576,Z)}function N(te){return s&&te.alternate===null&&(te.flags|=67108866),te}function L(te,Z,ie,me){return Z===null||Z.tag!==6?(Z=Ok(ie,te.mode,me),Z.return=te,Z):(Z=w(Z,ie),Z.return=te,Z)}function Q(te,Z,ie,me){var Le=ie.type;return Le===k?de(te,Z,ie.props.children,me,ie.key):Z!==null&&(Z.elementType===Le||typeof Le=="object"&&Le!==null&&Le.$$typeof===W&&Dc(Le)===Z.type)?(Z=w(Z,ie.props),Mm(Z,ie),Z.return=te,Z):(Z=_b(ie.type,ie.key,ie.props,null,te.mode,me),Mm(Z,ie),Z.return=te,Z)}function re(te,Z,ie,me){return Z===null||Z.tag!==4||Z.stateNode.containerInfo!==ie.containerInfo||Z.stateNode.implementation!==ie.implementation?(Z=Pk(ie,te.mode,me),Z.return=te,Z):(Z=w(Z,ie.children||[]),Z.return=te,Z)}function de(te,Z,ie,me,Le){return Z===null||Z.tag!==7?(Z=Rc(ie,te.mode,me,Le),Z.return=te,Z):(Z=w(Z,ie),Z.return=te,Z)}function fe(te,Z,ie){if(typeof Z=="string"&&Z!==""||typeof Z=="number"||typeof Z=="bigint")return Z=Ok(""+Z,te.mode,ie),Z.return=te,Z;if(typeof Z=="object"&&Z!==null){switch(Z.$$typeof){case b:return ie=_b(Z.type,Z.key,Z.props,null,te.mode,ie),Mm(ie,Z),ie.return=te,ie;case x:return Z=Pk(Z,te.mode,ie),Z.return=te,Z;case W:return Z=Dc(Z),fe(te,Z,ie)}if(P(Z)||U(Z))return Z=Rc(Z,te.mode,ie,null),Z.return=te,Z;if(typeof Z.then=="function")return fe(te,Ib(Z),ie);if(Z.$$typeof===A)return fe(te,Rb(te,Z),ie);Db(te,Z)}return null}function oe(te,Z,ie,me){var Le=Z!==null?Z.key:null;if(typeof ie=="string"&&ie!==""||typeof ie=="number"||typeof ie=="bigint")return Le!==null?null:L(te,Z,""+ie,me);if(typeof ie=="object"&&ie!==null){switch(ie.$$typeof){case b:return ie.key===Le?Q(te,Z,ie,me):null;case x:return ie.key===Le?re(te,Z,ie,me):null;case W:return ie=Dc(ie),oe(te,Z,ie,me)}if(P(ie)||U(ie))return Le!==null?null:de(te,Z,ie,me,null);if(typeof ie.then=="function")return oe(te,Z,Ib(ie),me);if(ie.$$typeof===A)return oe(te,Z,Rb(te,ie),me);Db(te,ie)}return null}function ce(te,Z,ie,me,Le){if(typeof me=="string"&&me!==""||typeof me=="number"||typeof me=="bigint")return te=te.get(ie)||null,L(Z,te,""+me,Le);if(typeof me=="object"&&me!==null){switch(me.$$typeof){case b:return te=te.get(me.key===null?ie:me.key)||null,Q(Z,te,me,Le);case x:return te=te.get(me.key===null?ie:me.key)||null,re(Z,te,me,Le);case W:return me=Dc(me),ce(te,Z,ie,me,Le)}if(P(me)||U(me))return te=te.get(ie)||null,de(Z,te,me,Le,null);if(typeof me.then=="function")return ce(te,Z,ie,Ib(me),Le);if(me.$$typeof===A)return ce(te,Z,ie,Rb(Z,me),Le);Db(Z,me)}return null}function Ee(te,Z,ie,me){for(var Le=null,ft=null,Ne=Z,tt=Z=0,lt=null;Ne!==null&&tt<ie.length;tt++){Ne.index>tt?(lt=Ne,Ne=null):lt=Ne.sibling;var gt=oe(te,Ne,ie[tt],me);if(gt===null){Ne===null&&(Ne=lt);break}s&&Ne&&gt.alternate===null&&c(te,Ne),Z=S(gt,Z,tt),ft===null?Le=gt:ft.sibling=gt,ft=gt,Ne=lt}if(tt===ie.length)return p(te,Ne),ut&&Ho(te,tt),Le;if(Ne===null){for(;tt<ie.length;tt++)Ne=fe(te,ie[tt],me),Ne!==null&&(Z=S(Ne,Z,tt),ft===null?Le=Ne:ft.sibling=Ne,ft=Ne);return ut&&Ho(te,tt),Le}for(Ne=g(Ne);tt<ie.length;tt++)lt=ce(Ne,te,tt,ie[tt],me),lt!==null&&(s&&lt.alternate!==null&&Ne.delete(lt.key===null?tt:lt.key),Z=S(lt,Z,tt),ft===null?Le=lt:ft.sibling=lt,ft=lt);return s&&Ne.forEach(function(Sl){return c(te,Sl)}),ut&&Ho(te,tt),Le}function qe(te,Z,ie,me){if(ie==null)throw Error(i(151));for(var Le=null,ft=null,Ne=Z,tt=Z=0,lt=null,gt=ie.next();Ne!==null&&!gt.done;tt++,gt=ie.next()){Ne.index>tt?(lt=Ne,Ne=null):lt=Ne.sibling;var Sl=oe(te,Ne,gt.value,me);if(Sl===null){Ne===null&&(Ne=lt);break}s&&Ne&&Sl.alternate===null&&c(te,Ne),Z=S(Sl,Z,tt),ft===null?Le=Sl:ft.sibling=Sl,ft=Sl,Ne=lt}if(gt.done)return p(te,Ne),ut&&Ho(te,tt),Le;if(Ne===null){for(;!gt.done;tt++,gt=ie.next())gt=fe(te,gt.value,me),gt!==null&&(Z=S(gt,Z,tt),ft===null?Le=gt:ft.sibling=gt,ft=gt);return ut&&Ho(te,tt),Le}for(Ne=g(Ne);!gt.done;tt++,gt=ie.next())gt=ce(Ne,te,tt,gt.value,me),gt!==null&&(s&&gt.alternate!==null&&Ne.delete(gt.key===null?tt:gt.key),Z=S(gt,Z,tt),ft===null?Le=gt:ft.sibling=gt,ft=gt);return s&&Ne.forEach(function(nee){return c(te,nee)}),ut&&Ho(te,tt),Le}function Mt(te,Z,ie,me){if(typeof ie=="object"&&ie!==null&&ie.type===k&&ie.key===null&&(ie=ie.props.children),typeof ie=="object"&&ie!==null){switch(ie.$$typeof){case b:e:{for(var Le=ie.key;Z!==null;){if(Z.key===Le){if(Le=ie.type,Le===k){if(Z.tag===7){p(te,Z.sibling),me=w(Z,ie.props.children),me.return=te,te=me;break e}}else if(Z.elementType===Le||typeof Le=="object"&&Le!==null&&Le.$$typeof===W&&Dc(Le)===Z.type){p(te,Z.sibling),me=w(Z,ie.props),Mm(me,ie),me.return=te,te=me;break e}p(te,Z);break}else c(te,Z);Z=Z.sibling}ie.type===k?(me=Rc(ie.props.children,te.mode,me,ie.key),me.return=te,te=me):(me=_b(ie.type,ie.key,ie.props,null,te.mode,me),Mm(me,ie),me.return=te,te=me)}return N(te);case x:e:{for(Le=ie.key;Z!==null;){if(Z.key===Le)if(Z.tag===4&&Z.stateNode.containerInfo===ie.containerInfo&&Z.stateNode.implementation===ie.implementation){p(te,Z.sibling),me=w(Z,ie.children||[]),me.return=te,te=me;break e}else{p(te,Z);break}else c(te,Z);Z=Z.sibling}me=Pk(ie,te.mode,me),me.return=te,te=me}return N(te);case W:return ie=Dc(ie),Mt(te,Z,ie,me)}if(P(ie))return Ee(te,Z,ie,me);if(U(ie)){if(Le=U(ie),typeof Le!="function")throw Error(i(150));return ie=Le.call(ie),qe(te,Z,ie,me)}if(typeof ie.then=="function")return Mt(te,Z,Ib(ie),me);if(ie.$$typeof===A)return Mt(te,Z,Rb(te,ie),me);Db(te,ie)}return typeof ie=="string"&&ie!==""||typeof ie=="number"||typeof ie=="bigint"?(ie=""+ie,Z!==null&&Z.tag===6?(p(te,Z.sibling),me=w(Z,ie),me.return=te,te=me):(p(te,Z),me=Ok(ie,te.mode,me),me.return=te,te=me),N(te)):p(te,Z)}return function(te,Z,ie,me){try{_m=0;var Le=Mt(te,Z,ie,me);return Pu=null,Le}catch(Ne){if(Ne===Ou||Ne===Ob)throw Ne;var ft=Ja(29,Ne,null,te.mode);return ft.lanes=me,ft.return=te,ft}finally{}}}var zc=h8(!0),p8=h8(!1),sl=!1;function Hk(s){s.updateQueue={baseState:s.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Yk(s,c){s=s.updateQueue,c.updateQueue===s&&(c.updateQueue={baseState:s.baseState,firstBaseUpdate:s.firstBaseUpdate,lastBaseUpdate:s.lastBaseUpdate,shared:s.shared,callbacks:null})}function ll(s){return{lane:s,tag:0,payload:null,callback:null,next:null}}function cl(s,c,p){var g=s.updateQueue;if(g===null)return null;if(g=g.shared,(xt&2)!==0){var w=g.pending;return w===null?c.next=c:(c.next=w.next,w.next=c),g.pending=c,c=Tb(s),X6(s,null,p),c}return Ab(s,g,c,p),Tb(s)}function Em(s,c,p){if(c=c.updateQueue,c!==null&&(c=c.shared,(p&4194048)!==0)){var g=c.lanes;g&=s.pendingLanes,p|=g,c.lanes=p,Ma(s,p)}}function Vk(s,c){var p=s.updateQueue,g=s.alternate;if(g!==null&&(g=g.updateQueue,p===g)){var w=null,S=null;if(p=p.firstBaseUpdate,p!==null){do{var N={lane:p.lane,tag:p.tag,payload:p.payload,callback:null,next:null};S===null?w=S=N:S=S.next=N,p=p.next}while(p!==null);S===null?w=S=c:S=S.next=c}else w=S=c;p={baseState:g.baseState,firstBaseUpdate:w,lastBaseUpdate:S,shared:g.shared,callbacks:g.callbacks},s.updateQueue=p;return}s=p.lastBaseUpdate,s===null?p.firstBaseUpdate=c:s.next=c,p.lastBaseUpdate=c}var Kk=!1;function Rm(){if(Kk){var s=Nu;if(s!==null)throw s}}function Nm(s,c,p,g){Kk=!1;var w=s.updateQueue;sl=!1;var S=w.firstBaseUpdate,N=w.lastBaseUpdate,L=w.shared.pending;if(L!==null){w.shared.pending=null;var Q=L,re=Q.next;Q.next=null,N===null?S=re:N.next=re,N=Q;var de=s.alternate;de!==null&&(de=de.updateQueue,L=de.lastBaseUpdate,L!==N&&(L===null?de.firstBaseUpdate=re:L.next=re,de.lastBaseUpdate=Q))}if(S!==null){var fe=w.baseState;N=0,de=re=Q=null,L=S;do{var oe=L.lane&-536870913,ce=oe!==L.lane;if(ce?(st&oe)===oe:(g&oe)===oe){oe!==0&&oe===Ru&&(Kk=!0),de!==null&&(de=de.next={lane:0,tag:L.tag,payload:L.payload,callback:null,next:null});e:{var Ee=s,qe=L;oe=c;var Mt=p;switch(qe.tag){case 1:if(Ee=qe.payload,typeof Ee=="function"){fe=Ee.call(Mt,fe,oe);break e}fe=Ee;break e;case 3:Ee.flags=Ee.flags&-65537|128;case 0:if(Ee=qe.payload,oe=typeof Ee=="function"?Ee.call(Mt,fe,oe):Ee,oe==null)break e;fe=f({},fe,oe);break e;case 2:sl=!0}}oe=L.callback,oe!==null&&(s.flags|=64,ce&&(s.flags|=8192),ce=w.callbacks,ce===null?w.callbacks=[oe]:ce.push(oe))}else ce={lane:oe,tag:L.tag,payload:L.payload,callback:L.callback,next:null},de===null?(re=de=ce,Q=fe):de=de.next=ce,N|=oe;if(L=L.next,L===null){if(L=w.shared.pending,L===null)break;ce=L,L=ce.next,ce.next=null,w.lastBaseUpdate=ce,w.shared.pending=null}}while(!0);de===null&&(Q=fe),w.baseState=Q,w.firstBaseUpdate=re,w.lastBaseUpdate=de,S===null&&(w.shared.lanes=0),ml|=N,s.lanes=N,s.memoizedState=fe}}function m8(s,c){if(typeof s!="function")throw Error(i(191,s));s.call(c)}function f8(s,c){var p=s.callbacks;
vendor: 5,014 bytes, line 48
48if(p!==null)for(s.callbacks=null,s=0;s<p.length;s++)m8(p[s],c)}var Iu=I(null),Wb=I(0);function g8(s,c){s=as,K(Wb,s),K(Iu,c),as=s|c.baseLanes}function Xk(){K(Wb,as),K(Iu,Iu.current)}function Qk(){as=Wb.current,F(Iu),F(Wb)}var ei=I(null),Ei=null;function dl(s){var c=s.alternate;K(cn,cn.current&1),K(ei,s),Ei===null&&(c===null||Iu.current!==null||c.memoizedState!==null)&&(Ei=s)}function Zk(s){K(cn,cn.current),K(ei,s),Ei===null&&(Ei=s)}function y8(s){s.tag===22?(K(cn,cn.current),K(ei,s),Ei===null&&(Ei=s)):ul()}function ul(){K(cn,cn.current),K(ei,ei.current)}function ti(s){F(ei),Ei===s&&(Ei=null),F(cn)}var cn=I(0);function zb(s){for(var c=s;c!==null;){if(c.tag===13){var p=c.memoizedState;if(p!==null&&(p=p.dehydrated,p===null||ij(p)||rj(p)))return c}else if(c.tag===19&&(c.memoizedProps.revealOrder==="forwards"||c.memoizedProps.revealOrder==="backwards"||c.memoizedProps.revealOrder==="unstable_legacy-backwards"||c.memoizedProps.revealOrder==="together")){if((c.flags&128)!==0)return c}else if(c.child!==null){c.child.return=c,c=c.child;continue}if(c===s)break;for(;c.sibling===null;){if(c.return===null||c.return===s)return null;c=c.return}c.sibling.return=c.return,c=c.sibling}return null}var Ko=0,et=null,Tt=null,mn=null,Lb=!1,Du=!1,Lc=!1,Ub=0,Om=0,Wu=null,HZ=0;function tn(){throw Error(i(321))}function Jk(s,c){if(c===null)return!1;for(var p=0;p<c.length&&p<s.length;p++)if(!Za(s[p],c[p]))return!1;return!0}function e2(s,c,p,g,w,S){return Ko=S,et=c,c.memoizedState=null,c.updateQueue=null,c.lanes=0,O.H=s===null||s.memoizedState===null?eR:f2,Lc=!1,S=p(g,w),Lc=!1,Du&&(S=v8(c,p,g,w)),b8(s),S}function b8(s){O.H=Dm;var c=Tt!==null&&Tt.next!==null;if(Ko=0,mn=Tt=et=null,Lb=!1,Om=0,Wu=null,c)throw Error(i(300));s===null||fn||(s=s.dependencies,s!==null&&Eb(s)&&(fn=!0))}function v8(s,c,p,g){et=s;var w=0;do{if(Du&&(Wu=null),Om=0,Du=!1,25<=w)throw Error(i(301));if(w+=1,mn=Tt=null,s.updateQueue!=null){var S=s.updateQueue;S.lastEffect=null,S.events=null,S.stores=null,S.memoCache!=null&&(S.memoCache.index=0)}O.H=tR,S=c(p,g)}while(Du);return S}function YZ(){var s=O.H,c=s.useState()[0];return c=typeof c.then=="function"?Pm(c):c,s=s.useState()[0],(Tt!==null?Tt.memoizedState:null)!==s&&(et.flags|=1024),c}function t2(){var s=Ub!==0;return Ub=0,s}function n2(s,c,p){c.updateQueue=s.updateQueue,c.flags&=-2053,s.lanes&=~p}function a2(s){if(Lb){for(s=s.memoizedState;s!==null;){var c=s.queue;c!==null&&(c.pending=null),s=s.next}Lb=!1}Ko=0,mn=Tt=et=null,Du=!1,Om=Ub=0,Wu=null}function ua(){var s={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return mn===null?et.memoizedState=mn=s:mn=mn.next=s,mn}function dn(){if(Tt===null){var s=et.alternate;s=s!==null?s.memoizedState:null}else s=Tt.next;var c=mn===null?et.memoizedState:mn.next;if(c!==null)mn=c,Tt=s;else{if(s===null)throw et.alternate===null?Error(i(467)):Error(i(310));Tt=s,s={memoizedState:Tt.memoizedState,baseState:Tt.baseState,baseQueue:Tt.baseQueue,queue:Tt.queue,next:null},mn===null?et.memoizedState=mn=s:mn=mn.next=s}return mn}function Bb(){return{lastEffect:null,events:null,stores:null,memoCache:null}}function Pm(s){var c=Om;return Om+=1,Wu===null&&(Wu=[]),s=c8(Wu,s,c),c=et,(mn===null?c.memoizedState:mn.next)===null&&(c=c.alternate,O.H=c===null||c.memoizedState===null?eR:f2),s}function qb(s){if(s!==null&&typeof s=="object"){if(typeof s.then=="function")return Pm(s);if(s.$$typeof===A)return Ln(s)}throw Error(i(438,String(s)))}function i2(s){var c=null,p=et.updateQueue;if(p!==null&&(c=p.memoCache),c==null){var g=et.alternate;g!==null&&(g=g.updateQueue,g!==null&&(g=g.memoCache,g!=null&&(c={data:g.data.map(function(w){return w.slice()}),index:0})))}if(c==null&&(c={data:[],index:0}),p===null&&(p=Bb(),et.updateQueue=p),p.memoCache=c,p=c.data[c.index],p===void 0)for(p=c.data[c.index]=Array(s),g=0;g<s;g++)p[g]=H;return c.index++,p}function Xo(s,c){return typeof c=="function"?c(s):c}function $b(s){var c=dn();return r2(c,Tt,s)}function r2(s,c,p){var g=s.queue;if(g===null)throw Error(i(311));g.lastRenderedReducer=p;var w=s.baseQueue,S=g.pending;if(S!==null){if(w!==null){var N=w.next;w.next=S.next,S.next=N}c.baseQueue=w=S,g.pending=null}if(S=s.baseState,w===null)s.memoizedState=S;else{c=w.next;var L=N=null,Q=null,re=c,de=!1;do{var fe=re.lane&-536870913;if(fe!==re.lane?(st&fe)===fe:(Ko&fe)===fe){var oe=re.revertLane;if(oe===0)Q!==null&&(Q=Q.next={lane:0,revertLane:0,gesture:null,action:re.action,hasEagerState:re.hasEagerState,eagerState:re.eagerState,next:null}),fe===Ru&&(de=!0);else if((Ko&oe)===oe){re=re.next,oe===Ru&&(de=!0);continue}else fe={lane:0,revertLane:re.revertLane,gesture:null,action:re.action,hasEagerState:re.hasEagerState,eagerState:re.eagerState,next:null},Q===null?(L=Q=fe,N=S):Q=Q.next=fe,et.lanes|=oe,ml|=oe;fe=re.action,Lc&&p(S,fe),S=re.hasEagerState?re.eagerState:p(S,fe)}else oe={lane:fe,revertLane:re.revertLane,gesture:re.gesture,action:re.action,hasEagerState:re.hasEagerState,eagerState:re.eagerState,next:null},Q===null?(L=Q=oe,N=S):Q=Q.next=oe,et.lanes|=fe,ml|=fe;re=re.next}
vendor: 14,175 bytes, line 48
48while(re!==null&&re!==c);if(Q===null?N=S:Q.next=L,!Za(S,s.memoizedState)&&(fn=!0,de&&(p=Nu,p!==null)))throw p;s.memoizedState=S,s.baseState=N,s.baseQueue=Q,g.lastRenderedState=S}return w===null&&(g.lanes=0),[s.memoizedState,g.dispatch]}function o2(s){var c=dn(),p=c.queue;if(p===null)throw Error(i(311));p.lastRenderedReducer=s;var g=p.dispatch,w=p.pending,S=c.memoizedState;if(w!==null){p.pending=null;var N=w=w.next;do S=s(S,N.action),N=N.next;while(N!==w);Za(S,c.memoizedState)||(fn=!0),c.memoizedState=S,c.baseQueue===null&&(c.baseState=S),p.lastRenderedState=S}return[S,g]}function x8(s,c,p){var g=et,w=dn(),S=ut;if(S){if(p===void 0)throw Error(i(407));p=p()}else p=c();var N=!Za((Tt||w).memoizedState,p);if(N&&(w.memoizedState=p,fn=!0),w=w.queue,c2(j8.bind(null,g,w,s),[s]),w.getSnapshot!==c||N||mn!==null&&mn.memoizedState.tag&1){if(g.flags|=2048,zu(9,{destroy:void 0},k8.bind(null,g,w,p,c),null),Pt===null)throw Error(i(349));S||(Ko&127)!==0||w8(g,c,p)}return p}function w8(s,c,p){s.flags|=16384,s={getSnapshot:c,value:p},c=et.updateQueue,c===null?(c=Bb(),et.updateQueue=c,c.stores=[s]):(p=c.stores,p===null?c.stores=[s]:p.push(s))}function k8(s,c,p,g){c.value=p,c.getSnapshot=g,S8(c)&&C8(s)}function j8(s,c,p){return p(function(){S8(c)&&C8(s)})}function S8(s){var c=s.getSnapshot;s=s.value;try{var p=c();return!Za(s,p)}catch{return!0}}function C8(s){var c=Ec(s,2);c!==null&&Da(c,s,2)}function s2(s){var c=ua();if(typeof s=="function"){var p=s;if(s=p(),Lc){cr(!0);try{p()}finally{cr(!1)}}}return c.memoizedState=c.baseState=s,c.queue={pending:null,lanes:0,dispatch:null,lastRenderedReducer:Xo,lastRenderedState:s},c}function A8(s,c,p,g){return s.baseState=p,r2(s,Tt,typeof g=="function"?g:Xo)}function VZ(s,c,p,g,w){if(Hb(s))throw Error(i(485));if(s=c.action,s!==null){var S={payload:w,action:s,next:null,isTransition:!0,status:"pending",value:null,reason:null,listeners:[],then:function(N){S.listeners.push(N)}};O.T!==null?p(!0):S.isTransition=!1,g(S),p=c.pending,p===null?(S.next=c.pending=S,T8(c,S)):(S.next=p.next,c.pending=p.next=S)}}function T8(s,c){var p=c.action,g=c.payload,w=s.state;if(c.isTransition){var S=O.T,N={};O.T=N;try{var L=p(w,g),Q=O.S;Q!==null&&Q(N,L),_8(s,c,L)}catch(re){l2(s,c,re)}finally{S!==null&&N.types!==null&&(S.types=N.types),O.T=S}}else try{S=p(w,g),_8(s,c,S)}catch(re){l2(s,c,re)}}function _8(s,c,p){p!==null&&typeof p=="object"&&typeof p.then=="function"?p.then(function(g){M8(s,c,g)},function(g){return l2(s,c,g)}):M8(s,c,p)}function M8(s,c,p){c.status="fulfilled",c.value=p,E8(c),s.state=p,c=s.pending,c!==null&&(p=c.next,p===c?s.pending=null:(p=p.next,c.next=p,T8(s,p)))}function l2(s,c,p){var g=s.pending;if(s.pending=null,g!==null){g=g.next;do c.status="rejected",c.reason=p,E8(c),c=c.next;while(c!==g)}s.action=null}function E8(s){s=s.listeners;for(var c=0;c<s.length;c++)(0,s[c])()}function R8(s,c){return c}function N8(s,c){if(ut){var p=Pt.formState;if(p!==null){e:{var g=et;if(ut){if(Bt){t:{for(var w=Bt,S=Mi;w.nodeType!==8;){if(!S){w=null;break t}if(w=Ri(w.nextSibling),w===null){w=null;break t}}S=w.data,w=S==="F!"||S==="F"?w:null}if(w){Bt=Ri(w.nextSibling),g=w.data==="F!";break e}}rl(g)}g=!1}g&&(c=p[0])}}return p=ua(),p.memoizedState=p.baseState=c,g={pending:null,lanes:0,dispatch:null,lastRenderedReducer:R8,lastRenderedState:c},p.queue=g,p=Q8.bind(null,et,g),g.dispatch=p,g=s2(!1),S=m2.bind(null,et,!1,g.queue),g=ua(),w={state:c,dispatch:null,action:s,pending:null},g.queue=w,p=VZ.bind(null,et,w,S,p),w.dispatch=p,g.memoizedState=s,[c,p,!1]}function O8(s){var c=dn();return P8(c,Tt,s)}function P8(s,c,p){if(c=r2(s,c,R8)[0],s=$b(Xo)[0],typeof c=="object"&&c!==null&&typeof c.then=="function")try{var g=Pm(c)}catch(N){throw N===Ou?Ob:N}else g=c;c=dn();var w=c.queue,S=w.dispatch;return p!==c.memoizedState&&(et.flags|=2048,zu(9,{destroy:void 0},KZ.bind(null,w,p),null)),[g,S,s]}function KZ(s,c){s.action=c}function I8(s){var c=dn(),p=Tt;if(p!==null)return P8(c,p,s);dn(),c=c.memoizedState,p=dn();var g=p.queue.dispatch;return p.memoizedState=s,[c,g,!1]}function zu(s,c,p,g){return s={tag:s,create:p,deps:g,inst:c,next:null},c=et.updateQueue,c===null&&(c=Bb(),et.updateQueue=c),p=c.lastEffect,p===null?c.lastEffect=s.next=s:(g=p.next,p.next=s,s.next=g,c.lastEffect=s),s}function D8(){return dn().memoizedState}function Fb(s,c,p,g){var w=ua();et.flags|=s,w.memoizedState=zu(1|c,{destroy:void 0},p,g===void 0?null:g)}function Gb(s,c,p,g){var w=dn();g=g===void 0?null:g;var S=w.memoizedState.inst;Tt!==null&&g!==null&&Jk(g,Tt.memoizedState.deps)?w.memoizedState=zu(c,S,p,g):(et.flags|=s,w.memoizedState=zu(1|c,S,p,g))}function W8(s,c){Fb(8390656,8,s,c)}function c2(s,c){Gb(2048,8,s,c)}function XZ(s){et.flags|=4;var c=et.updateQueue;if(c===null)c=Bb(),et.updateQueue=c,c.events=[s];else{var p=c.events;p===null?c.events=[s]:p.push(s)}}function z8(s){var c=dn().memoizedState;return XZ({ref:c,nextImpl:s}),function(){if((xt&2)!==0)throw Error(i(440));return c.impl.apply(void 0,arguments)}}function L8(s,c){return Gb(4,2,s,c)}function U8(s,c){return Gb(4,4,s,c)}function B8(s,c){if(typeof c=="function"){s=s();var p=c(s);return function(){typeof p=="function"?p():c(null)}}if(c!=null)return s=s(),c.current=s,function(){c.current=null}}function q8(s,c,p){p=p!=null?p.concat([s]):null,Gb(4,4,B8.bind(null,c,s),p)}function d2(){}function $8(s,c){var p=dn();c=c===void 0?null:c;var g=p.memoizedState;return c!==null&&Jk(c,g[1])?g[0]:(p.memoizedState=[s,c],s)}function F8(s,c){var p=dn();c=c===void 0?null:c;var g=p.memoizedState;if(c!==null&&Jk(c,g[1]))return g[0];if(g=s(),Lc){cr(!0);try{s()}finally{cr(!1)}}return p.memoizedState=[g,c],g}function u2(s,c,p){return p===void 0||(Ko&1073741824)!==0&&(st&261930)===0?s.memoizedState=c:(s.memoizedState=p,s=GR(),et.lanes|=s,ml|=s,p)}function G8(s,c,p,g){return Za(p,c)?p:Iu.current!==null?(s=u2(s,p,g),Za(s,c)||(fn=!0),s):(Ko&42)===0||(Ko&1073741824)!==0&&(st&261930)===0?(fn=!0,s.memoizedState=p):(s=GR(),et.lanes|=s,ml|=s,c)}function H8(s,c,p,g,w){var S=B.p;B.p=S!==0&&8>S?S:8;var N=O.T,L={};O.T=L,m2(s,!1,c,p);try{var Q=w(),re=O.S;if(re!==null&&re(L,Q),Q!==null&&typeof Q=="object"&&typeof Q.then=="function"){var de=GZ(Q,g);Im(s,c,de,ii(s))}else Im(s,c,g,ii(s))}catch(fe){Im(s,c,{then:function(){},status:"rejected",reason:fe},ii())}finally{B.p=S,N!==null&&L.types!==null&&(N.types=L.types),O.T=N}}function QZ(){}function h2(s,c,p,g){if(s.tag!==5)throw Error(i(476));var w=Y8(s).queue;H8(s,w,c,Y,p===null?QZ:function(){return V8(s),p(g)})}function Y8(s){var c=s.memoizedState;if(c!==null)return c;c={memoizedState:Y,baseState:Y,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Xo,lastRenderedState:Y},next:null};var p={};return c.next={memoizedState:p,baseState:p,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Xo,lastRenderedState:p},next:null},s.memoizedState=c,s=s.alternate,s!==null&&(s.memoizedState=c),c}function V8(s){var c=Y8(s);c.next===null&&(c=s.alternate.memoizedState),Im(s,c.next.queue,{},ii())}function p2(){return Ln(Zm)}function K8(){return dn().memoizedState}function X8(){return dn().memoizedState}function ZZ(s){for(var c=s.return;c!==null;){switch(c.tag){case 24:case 3:var p=ii();s=ll(p);var g=cl(c,s,p);g!==null&&(Da(g,c,p),Em(g,c,p)),c={cache:qk()},s.payload=c;return}c=c.return}}function JZ(s,c,p){var g=ii();p={lane:g,revertLane:0,gesture:null,action:p,hasEagerState:!1,eagerState:null,next:null},Hb(s)?Z8(c,p):(p=Rk(s,c,p,g),p!==null&&(Da(p,s,g),J8(p,c,g)))}function Q8(s,c,p){var g=ii();Im(s,c,p,g)}function Im(s,c,p,g){var w={lane:g,revertLane:0,gesture:null,action:p,hasEagerState:!1,eagerState:null,next:null};if(Hb(s))Z8(c,w);else{var S=s.alternate;if(s.lanes===0&&(S===null||S.lanes===0)&&(S=c.lastRenderedReducer,S!==null))try{var N=c.lastRenderedState,L=S(N,p);if(w.hasEagerState=!0,w.eagerState=L,Za(L,N))return Ab(s,c,w,0),Pt===null&&Cb(),!1}catch{}finally{}if(p=Rk(s,c,w,g),p!==null)return Da(p,s,g),J8(p,c,g),!0}return!1}function m2(s,c,p,g){if(g={lane:2,revertLane:H2(),gesture:null,action:g,hasEagerState:!1,eagerState:null,next:null},Hb(s)){if(c)throw Error(i(479))}else c=Rk(s,p,g,2),c!==null&&Da(c,s,2)}function Hb(s){var c=s.alternate;return s===et||c!==null&&c===et}function Z8(s,c){Du=Lb=!0;var p=s.pending;p===null?c.next=c:(c.next=p.next,p.next=c),s.pending=c}function J8(s,c,p){if((p&4194048)!==0){var g=c.lanes;g&=s.pendingLanes,p|=g,c.lanes=p,Ma(s,p)}}var Dm={readContext:Ln,use:qb,useCallback:tn,useContext:tn,useEffect:tn,useImperativeHandle:tn,useLayoutEffect:tn,useInsertionEffect:tn,useMemo:tn,useReducer:tn,useRef:tn,useState:tn,useDebugValue:tn,useDeferredValue:tn,useTransition:tn,useSyncExternalStore:tn,useId:tn,useHostTransitionStatus:tn,useFormState:tn,useActionState:tn,useOptimistic:tn,useMemoCache:tn,useCacheRefresh:tn};Dm.useEffectEvent=tn;var eR={readContext:Ln,use:qb,useCallback:function(s,c){return ua().memoizedState=[s,c===void 0?null:c],s},useContext:Ln,useEffect:W8,useImperativeHandle:function(s,c,p){p=p!=null?p.concat([s]):null,Fb(4194308,4,B8.bind(null,c,s),p)},useLayoutEffect:function(s,c){return Fb(4194308,4,s,c)},useInsertionEffect:function(s,c){Fb(4,2,s,c)},useMemo:function(s,c){var p=ua();c=c===void 0?null:c;var g=s();if(Lc){cr(!0);try{s()}finally{cr(!1)}}return p.memoizedState=[g,c],g},useReducer:function(s,c,p){var g=ua();if(p!==void 0){var w=p(c);if(Lc){cr(!0);try{p(c)}finally{cr(!1)}}}else w=c;return g.memoizedState=g.baseState=w,s={pending:null,lanes:0,dispatch:null,lastRenderedReducer:s,lastRenderedState:w},g.queue=s,s=s.dispatch=JZ.bind(null,et,s),[g.memoizedState,s]},useRef:function(s){var c=ua();return s={current:s},c.memoizedState=s},useState:function(s){s=s2(s);var c=s.queue,p=Q8.bind(null,et,c);return c.dispatch=p,[s.memoizedState,p]},useDebugValue:d2,useDeferredValue:function(s,c){var p=ua();return u2(p,s,c)},useTransition:function(){var s=s2(!1);return s=H8.bind(null,et,s.queue,!0,!1),ua().memoizedState=s,[!1,s]},useSyncExternalStore:function(s,c,p){var g=et,w=ua();if(ut){if(p===void 0)throw Error(i(407));p=p()}else{if(p=c(),Pt===null)throw Error(i(349));(st&127)!==0||w8(g,c,p)}w.memoizedState=p;var S={value:p,getSnapshot:c};return w.queue=S,W8(j8.bind(null,g,S,s),[s]),g.flags|=2048,zu(9,{destroy:void 0},k8.bind(null,g,S,p,c),null),p},useId:function(){var s=ua(),c=Pt.identifierPrefix;if(ut){var p=no,g=to;p=(g&~(1<<32-hn(g)-1)).toString(32)+p,c="_"+c+"R_"+p,p=Ub++,0<p&&(c+="H"+p.toString(32)),c+="_"}else p=HZ++,c="_"+c+"r_"+p.toString(32)+"_";return s.memoizedState=c},useHostTransitionStatus:p2,useFormState:N8,useActionState:N8,useOptimistic:function(s){var c=ua();c.memoizedState=c.baseState=s;var p={pending:null,lanes:0,dispatch:null,lastRenderedReducer:null,lastRenderedState:null};return c.queue=p,c=m2.bind(null,et,!0,p),p.dispatch=c,[s,c]},useMemoCache:i2,useCacheRefresh:function(){return ua().memoizedState=ZZ.bind(null,et)},useEffectEvent:function(s){var c=ua(),p={impl:s};return c.memoizedState=p,function(){if((xt&2)!==0)throw Error(i(440));return p.impl.apply(void 0,arguments)}}},f2={readContext:Ln,use:qb,useCallback:$8,useContext:Ln,useEffect:c2,useImperativeHandle:q8,useInsertionEffect:L8,useLayoutEffect:U8,useMemo:F8,useReducer:$b,useRef:D8,useState:function(){return $b(Xo)},useDebugValue:d2,useDeferredValue:function(s,c){var p=dn();return G8(p,Tt.memoizedState,s,c)},useTransition:function(){var s=$b(Xo)[0],c=dn().memoizedState;return[typeof s=="boolean"?s:Pm(s),c]},useSyncExternalStore:x8,useId:K8,useHostTransitionStatus:p2,useFormState:O8,useActionState:O8,useOptimistic:function(s,c){var p=dn();return A8(p,Tt,s,c)},useMemoCache:i2,useCacheRefresh:X8};f2.useEffectEvent=z8;var tR={readContext:Ln,use:qb,useCallback:$8,useContext:Ln,useEffect:c2,useImperativeHandle:q8,useInsertionEffect:L8,useLayoutEffect:U8,useMemo:F8,useReducer:o2,useRef:D8,useState:function(){return o2(Xo)},useDebugValue:d2,useDeferredValue:function(s,c){var p=dn();return Tt===null?u2(p,s,c):G8(p,Tt.memoizedState,s,c)},useTransition:function(){var s=o2(Xo)[0],c=dn().memoizedState;return[typeof s=="boolean"?s:Pm(s),c]},useSyncExternalStore:x8,useId:K8,useHostTransitionStatus:p2,useFormState:I8,useActionState:I8,useOptimistic:function(s,c){var p=dn();return Tt!==null?A8(p,Tt,s,c):(p.baseState=s,[s,p.queue.dispatch])},useMemoCache:i2,useCacheRefresh:X8};tR.useEffectEvent=z8;function g2(s,c,p,g){c=s.memoizedState,p=p(g,c),p=p==null?c:f({},c,p),s.memoizedState=p,s.lanes===0&&(s.updateQueue.baseState=p)}var y2={enqueueSetState:function(s,c,p){s=s._reactInternals;var g=ii(),w=ll(g);w.payload=c,p!=null&&(w.callback=p),c=cl(s,w,g),c!==null&&(Da(c,s,g),Em(c,s,g))},enqueueReplaceState:function(s,c,p){s=s._reactInternals;var g=ii(),w=ll(g);w.tag=1,w.payload=c,p!=null&&(w.callback=p),c=cl(s,w,g),c!==null&&(Da(c,s,g),Em(c,s,g))},enqueueForceUpdate:function(s,c){s=s._reactInternals;var p=ii(),g=ll(p);g.tag=2,c!=null&&(g.callback=c),c=cl(s,g,p),c!==null&&(Da(c,s,p),Em(c,s,p))}};function nR(s,c,p,g,w,S,N){return s=s.stateNode,typeof s.shouldComponentUpdate=="function"?s.shouldComponentUpdate(g,S,N):c.prototype&&c.prototype.isPureReactComponent?!km(p,g)||!km(w,S):!0}function aR(s,c,p,g){s=c.state,typeof c.componentWillReceiveProps=="function"&&c.componentWillReceiveProps(p,g),typeof c.UNSAFE_componentWillReceiveProps=="function"&&c.UNSAFE_componentWillReceiveProps(p,g),c.state!==s&&y2.enqueueReplaceState(c,c.state,null)}function Uc(s,c){var p=c;if("ref"in c){p={};for(var g in c)g!=="ref"&&(p[g]=c[g])}if(s=s.defaultProps){p===c&&(p=f({},p));for(var w in s)p[w]===void 0&&(p[w]=s[w])}return p}function iR(s){Sb(s)}function rR(s){console.error(s)}function oR(s){Sb(s)}function Yb(s,c){try{var p=s.onUncaughtError;p(c.value,{componentStack:c.stack})}catch(g){setTimeout(function(){throw g})}}function sR(s,c,p){try{var g=s.onCaughtError;g(p.value,{componentStack:p.stack,errorBoundary:c.tag===1?c.stateNode:null})}catch(w){setTimeout(function(){throw w})}}function b2(s,c,p){return p=ll(p),p.tag=3,p.payload={element:null},p.callback=function(){Yb(s,c)},p}function lR(s){return s=ll(s),s.tag=3,s}function cR(s,c,p,g){var w=p.type.getDerivedStateFromError;if(typeof w=="function"){var S=g.value;s.payload=function(){return w(S)},s.callback=function(){sR(c,p,g)}}var N=p.stateNode;
vendor: 15,660 bytes, line 48
48N!==null&&typeof N.componentDidCatch=="function"&&(s.callback=function(){sR(c,p,g),typeof w!="function"&&(fl===null?fl=new Set([this]):fl.add(this));var L=g.stack;this.componentDidCatch(g.value,{componentStack:L!==null?L:""})})}function eJ(s,c,p,g,w){if(p.flags|=32768,g!==null&&typeof g=="object"&&typeof g.then=="function"){if(c=p.alternate,c!==null&&Eu(c,p,w,!0),p=ei.current,p!==null){switch(p.tag){case 31:case 13:return Ei===null?rv():p.alternate===null&&nn===0&&(nn=3),p.flags&=-257,p.flags|=65536,p.lanes=w,g===Pb?p.flags|=16384:(c=p.updateQueue,c===null?p.updateQueue=new Set([g]):c.add(g),$2(s,g,w)),!1;case 22:return p.flags|=65536,g===Pb?p.flags|=16384:(c=p.updateQueue,c===null?(c={transitions:null,markerInstances:null,retryQueue:new Set([g])},p.updateQueue=c):(p=c.retryQueue,p===null?c.retryQueue=new Set([g]):p.add(g)),$2(s,g,w)),!1}throw Error(i(435,p.tag))}return $2(s,g,w),rv(),!1}if(ut)return c=ei.current,c!==null?((c.flags&65536)===0&&(c.flags|=256),c.flags|=65536,c.lanes=w,g!==Wk&&(s=Error(i(422),{cause:g}),Cm(Ai(s,p)))):(g!==Wk&&(c=Error(i(423),{cause:g}),Cm(Ai(c,p))),s=s.current.alternate,s.flags|=65536,w&=-w,s.lanes|=w,g=Ai(g,p),w=b2(s.stateNode,g,w),Vk(s,w),nn!==4&&(nn=2)),!1;var S=Error(i(520),{cause:g});if(S=Ai(S,p),Fm===null?Fm=[S]:Fm.push(S),nn!==4&&(nn=2),c===null)return!0;g=Ai(g,p),p=c;do{switch(p.tag){case 3:return p.flags|=65536,s=w&-w,p.lanes|=s,s=b2(p.stateNode,g,s),Vk(p,s),!1;case 1:if(c=p.type,S=p.stateNode,(p.flags&128)===0&&(typeof c.getDerivedStateFromError=="function"||S!==null&&typeof S.componentDidCatch=="function"&&(fl===null||!fl.has(S))))return p.flags|=65536,w&=-w,p.lanes|=w,w=lR(w),cR(w,s,p,g),Vk(p,w),!1}p=p.return}while(p!==null);return!1}var v2=Error(i(461)),fn=!1;function Un(s,c,p,g){c.child=s===null?p8(c,null,p,g):zc(c,s.child,p,g)}function dR(s,c,p,g,w){p=p.render;var S=c.ref;if("ref"in g){var N={};for(var L in g)L!=="ref"&&(N[L]=g[L])}else N=g;return Pc(c),g=e2(s,c,p,N,S,w),L=t2(),s!==null&&!fn?(n2(s,c,w),Qo(s,c,w)):(ut&&L&&Ik(c),c.flags|=1,Un(s,c,g,w),c.child)}function uR(s,c,p,g,w){if(s===null){var S=p.type;return typeof S=="function"&&!Nk(S)&&S.defaultProps===void 0&&p.compare===null?(c.tag=15,c.type=S,hR(s,c,S,g,w)):(s=_b(p.type,null,g,c,c.mode,w),s.ref=c.ref,s.return=c,c.child=s)}if(S=s.child,!T2(s,w)){var N=S.memoizedProps;if(p=p.compare,p=p!==null?p:km,p(N,g)&&s.ref===c.ref)return Qo(s,c,w)}return c.flags|=1,s=Go(S,g),s.ref=c.ref,s.return=c,c.child=s}function hR(s,c,p,g,w){if(s!==null){var S=s.memoizedProps;if(km(S,g)&&s.ref===c.ref)if(fn=!1,c.pendingProps=g=S,T2(s,w))(s.flags&131072)!==0&&(fn=!0);else return c.lanes=s.lanes,Qo(s,c,w)}return x2(s,c,p,g,w)}function pR(s,c,p,g){var w=g.children,S=s!==null?s.memoizedState:null;if(s===null&&c.stateNode===null&&(c.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),g.mode==="hidden"){if((c.flags&128)!==0){if(S=S!==null?S.baseLanes|p:p,s!==null){for(g=c.child=s.child,w=0;g!==null;)w=w|g.lanes|g.childLanes,g=g.sibling;g=w&~S}else g=0,c.child=null;return mR(s,c,S,p,g)}if((p&536870912)!==0)c.memoizedState={baseLanes:0,cachePool:null},s!==null&&Nb(c,S!==null?S.cachePool:null),S!==null?g8(c,S):Xk(),y8(c);else return g=c.lanes=536870912,mR(s,c,S!==null?S.baseLanes|p:p,p,g)}else S!==null?(Nb(c,S.cachePool),g8(c,S),ul(),c.memoizedState=null):(s!==null&&Nb(c,null),Xk(),ul());return Un(s,c,w,p),c.child}function Wm(s,c){return s!==null&&s.tag===22||c.stateNode!==null||(c.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),c.sibling}function mR(s,c,p,g,w){var S=Fk();return S=S===null?null:{parent:pn._currentValue,pool:S},c.memoizedState={baseLanes:p,cachePool:S},s!==null&&Nb(c,null),Xk(),y8(c),s!==null&&Eu(s,c,g,!0),c.childLanes=w,null}function Vb(s,c){return c=Xb({mode:c.mode,children:c.children},s.mode),c.ref=s.ref,s.child=c,c.return=s,c}function fR(s,c,p){return zc(c,s.child,null,p),s=Vb(c,c.pendingProps),s.flags|=2,ti(c),c.memoizedState=null,s}function tJ(s,c,p){var g=c.pendingProps,w=(c.flags&128)!==0;if(c.flags&=-129,s===null){if(ut){if(g.mode==="hidden")return s=Vb(c,g),c.lanes=536870912,Wm(null,s);if(Zk(c),(s=Bt)?(s=TN(s,Mi),s=s!==null&&s.data==="&"?s:null,s!==null&&(c.memoizedState={dehydrated:s,treeContext:al!==null?{id:to,overflow:no}:null,retryLane:536870912,hydrationErrors:null},p=Z6(s),p.return=c,c.child=p,zn=c,Bt=null)):s=null,s===null)throw rl(c);return c.lanes=536870912,null}return Vb(c,g)}var S=s.memoizedState;if(S!==null){var N=S.dehydrated;if(Zk(c),w)if(c.flags&256)c.flags&=-257,c=fR(s,c,p);else if(c.memoizedState!==null)c.child=s.child,c.flags|=128,c=null;else throw Error(i(558));else if(fn||Eu(s,c,p,!1),w=(p&s.childLanes)!==0,fn||w){if(g=Pt,g!==null&&(N=dr(g,p),N!==0&&N!==S.retryLane))throw S.retryLane=N,Ec(s,N),Da(g,s,N),v2;rv(),c=fR(s,c,p)}else s=S.treeContext,Bt=Ri(N.nextSibling),zn=c,ut=!0,il=null,Mi=!1,s!==null&&t8(c,s),c=Vb(c,g),c.flags|=4096;return c}return s=Go(s.child,{mode:g.mode,children:g.children}),s.ref=c.ref,c.child=s,s.return=c,s}function Kb(s,c){var p=c.ref;if(p===null)s!==null&&s.ref!==null&&(c.flags|=4194816);else{if(typeof p!="function"&&typeof p!="object")throw Error(i(284));(s===null||s.ref!==p)&&(c.flags|=4194816)}}function x2(s,c,p,g,w){return Pc(c),p=e2(s,c,p,g,void 0,w),g=t2(),s!==null&&!fn?(n2(s,c,w),Qo(s,c,w)):(ut&&g&&Ik(c),c.flags|=1,Un(s,c,p,w),c.child)}function gR(s,c,p,g,w,S){return Pc(c),c.updateQueue=null,p=v8(c,g,p,w),b8(s),g=t2(),s!==null&&!fn?(n2(s,c,S),Qo(s,c,S)):(ut&&g&&Ik(c),c.flags|=1,Un(s,c,p,S),c.child)}function yR(s,c,p,g,w){if(Pc(c),c.stateNode===null){var S=Au,N=p.contextType;typeof N=="object"&&N!==null&&(S=Ln(N)),S=new p(g,S),c.memoizedState=S.state!==null&&S.state!==void 0?S.state:null,S.updater=y2,c.stateNode=S,S._reactInternals=c,S=c.stateNode,S.props=g,S.state=c.memoizedState,S.refs={},Hk(c),N=p.contextType,S.context=typeof N=="object"&&N!==null?Ln(N):Au,S.state=c.memoizedState,N=p.getDerivedStateFromProps,typeof N=="function"&&(g2(c,p,N,g),S.state=c.memoizedState),typeof p.getDerivedStateFromProps=="function"||typeof S.getSnapshotBeforeUpdate=="function"||typeof S.UNSAFE_componentWillMount!="function"&&typeof S.componentWillMount!="function"||(N=S.state,typeof S.componentWillMount=="function"&&S.componentWillMount(),typeof S.UNSAFE_componentWillMount=="function"&&S.UNSAFE_componentWillMount(),N!==S.state&&y2.enqueueReplaceState(S,S.state,null),Nm(c,g,S,w),Rm(),S.state=c.memoizedState),typeof S.componentDidMount=="function"&&(c.flags|=4194308),g=!0}else if(s===null){S=c.stateNode;var L=c.memoizedProps,Q=Uc(p,L);S.props=Q;var re=S.context,de=p.contextType;N=Au,typeof de=="object"&&de!==null&&(N=Ln(de));var fe=p.getDerivedStateFromProps;de=typeof fe=="function"||typeof S.getSnapshotBeforeUpdate=="function",L=c.pendingProps!==L,de||typeof S.UNSAFE_componentWillReceiveProps!="function"&&typeof S.componentWillReceiveProps!="function"||(L||re!==N)&&aR(c,S,g,N),sl=!1;var oe=c.memoizedState;S.state=oe,Nm(c,g,S,w),Rm(),re=c.memoizedState,L||oe!==re||sl?(typeof fe=="function"&&(g2(c,p,fe,g),re=c.memoizedState),(Q=sl||nR(c,p,Q,g,oe,re,N))?(de||typeof S.UNSAFE_componentWillMount!="function"&&typeof S.componentWillMount!="function"||(typeof S.componentWillMount=="function"&&S.componentWillMount(),typeof S.UNSAFE_componentWillMount=="function"&&S.UNSAFE_componentWillMount()),typeof S.componentDidMount=="function"&&(c.flags|=4194308)):(typeof S.componentDidMount=="function"&&(c.flags|=4194308),c.memoizedProps=g,c.memoizedState=re),S.props=g,S.state=re,S.context=N,g=Q):(typeof S.componentDidMount=="function"&&(c.flags|=4194308),g=!1)}else{S=c.stateNode,Yk(s,c),N=c.memoizedProps,de=Uc(p,N),S.props=de,fe=c.pendingProps,oe=S.context,re=p.contextType,Q=Au,typeof re=="object"&&re!==null&&(Q=Ln(re)),L=p.getDerivedStateFromProps,(re=typeof L=="function"||typeof S.getSnapshotBeforeUpdate=="function")||typeof S.UNSAFE_componentWillReceiveProps!="function"&&typeof S.componentWillReceiveProps!="function"||(N!==fe||oe!==Q)&&aR(c,S,g,Q),sl=!1,oe=c.memoizedState,S.state=oe,Nm(c,g,S,w),Rm();var ce=c.memoizedState;N!==fe||oe!==ce||sl||s!==null&&s.dependencies!==null&&Eb(s.dependencies)?(typeof L=="function"&&(g2(c,p,L,g),ce=c.memoizedState),(de=sl||nR(c,p,de,g,oe,ce,Q)||s!==null&&s.dependencies!==null&&Eb(s.dependencies))?(re||typeof S.UNSAFE_componentWillUpdate!="function"&&typeof S.componentWillUpdate!="function"||(typeof S.componentWillUpdate=="function"&&S.componentWillUpdate(g,ce,Q),typeof S.UNSAFE_componentWillUpdate=="function"&&S.UNSAFE_componentWillUpdate(g,ce,Q)),typeof S.componentDidUpdate=="function"&&(c.flags|=4),typeof S.getSnapshotBeforeUpdate=="function"&&(c.flags|=1024)):(typeof S.componentDidUpdate!="function"||N===s.memoizedProps&&oe===s.memoizedState||(c.flags|=4),typeof S.getSnapshotBeforeUpdate!="function"||N===s.memoizedProps&&oe===s.memoizedState||(c.flags|=1024),c.memoizedProps=g,c.memoizedState=ce),S.props=g,S.state=ce,S.context=Q,g=de):(typeof S.componentDidUpdate!="function"||N===s.memoizedProps&&oe===s.memoizedState||(c.flags|=4),typeof S.getSnapshotBeforeUpdate!="function"||N===s.memoizedProps&&oe===s.memoizedState||(c.flags|=1024),g=!1)}return S=g,Kb(s,c),g=(c.flags&128)!==0,S||g?(S=c.stateNode,p=g&&typeof p.getDerivedStateFromError!="function"?null:S.render(),c.flags|=1,s!==null&&g?(c.child=zc(c,s.child,null,w),c.child=zc(c,null,p,w)):Un(s,c,p,w),c.memoizedState=S.state,s=c.child):s=Qo(s,c,w),s}function bR(s,c,p,g){return Nc(),c.flags|=256,Un(s,c,p,g),c.child}var w2={dehydrated:null,treeContext:null,retryLane:0,hydrationErrors:null};function k2(s){return{baseLanes:s,cachePool:s8()}}function j2(s,c,p){return s=s!==null?s.childLanes&~p:0,c&&(s|=ai),s}function vR(s,c,p){var g=c.pendingProps,w=!1,S=(c.flags&128)!==0,N;if((N=S)||(N=s!==null&&s.memoizedState===null?!1:(cn.current&2)!==0),N&&(w=!0,c.flags&=-129),N=(c.flags&32)!==0,c.flags&=-33,s===null){if(ut){if(w?dl(c):ul(),(s=Bt)?(s=TN(s,Mi),s=s!==null&&s.data!=="&"?s:null,s!==null&&(c.memoizedState={dehydrated:s,treeContext:al!==null?{id:to,overflow:no}:null,retryLane:536870912,hydrationErrors:null},p=Z6(s),p.return=c,c.child=p,zn=c,Bt=null)):s=null,s===null)throw rl(c);return rj(s)?c.lanes=32:c.lanes=536870912,null}var L=g.children;return g=g.fallback,w?(ul(),w=c.mode,L=Xb({mode:"hidden",children:L},w),g=Rc(g,w,p,null),L.return=c,g.return=c,L.sibling=g,c.child=L,g=c.child,g.memoizedState=k2(p),g.childLanes=j2(s,N,p),c.memoizedState=w2,Wm(null,g)):(dl(c),S2(c,L))}var Q=s.memoizedState;if(Q!==null&&(L=Q.dehydrated,L!==null)){if(S)c.flags&256?(dl(c),c.flags&=-257,c=C2(s,c,p)):c.memoizedState!==null?(ul(),c.child=s.child,c.flags|=128,c=null):(ul(),L=g.fallback,w=c.mode,g=Xb({mode:"visible",children:g.children},w),L=Rc(L,w,p,null),L.flags|=2,g.return=c,L.return=c,g.sibling=L,c.child=g,zc(c,s.child,null,p),g=c.child,g.memoizedState=k2(p),g.childLanes=j2(s,N,p),c.memoizedState=w2,c=Wm(null,g));else if(dl(c),rj(L)){if(N=L.nextSibling&&L.nextSibling.dataset,N)var re=N.dgst;N=re,g=Error(i(419)),g.stack="",g.digest=N,Cm({value:g,source:null,stack:null}),c=C2(s,c,p)}else if(fn||Eu(s,c,p,!1),N=(p&s.childLanes)!==0,fn||N){if(N=Pt,N!==null&&(g=dr(N,p),g!==0&&g!==Q.retryLane))throw Q.retryLane=g,Ec(s,g),Da(N,s,g),v2;ij(L)||rv(),c=C2(s,c,p)}else ij(L)?(c.flags|=192,c.child=s.child,c=null):(s=Q.treeContext,Bt=Ri(L.nextSibling),zn=c,ut=!0,il=null,Mi=!1,s!==null&&t8(c,s),c=S2(c,g.children),c.flags|=4096);return c}return w?(ul(),L=g.fallback,w=c.mode,Q=s.child,re=Q.sibling,g=Go(Q,{mode:"hidden",children:g.children}),g.subtreeFlags=Q.subtreeFlags&65011712,re!==null?L=Go(re,L):(L=Rc(L,w,p,null),L.flags|=2),L.return=c,g.return=c,g.sibling=L,c.child=g,Wm(null,g),g=c.child,L=s.child.memoizedState,L===null?L=k2(p):(w=L.cachePool,w!==null?(Q=pn._currentValue,w=w.parent!==Q?{parent:Q,pool:Q}:w):w=s8(),L={baseLanes:L.baseLanes|p,cachePool:w}),g.memoizedState=L,g.childLanes=j2(s,N,p),c.memoizedState=w2,Wm(s.child,g)):(dl(c),p=s.child,s=p.sibling,p=Go(p,{mode:"visible",children:g.children}),p.return=c,p.sibling=null,s!==null&&(N=c.deletions,N===null?(c.deletions=[s],c.flags|=16):N.push(s)),c.child=p,c.memoizedState=null,p)}function S2(s,c){return c=Xb({mode:"visible",children:c},s.mode),c.return=s,s.child=c}function Xb(s,c){return s=Ja(22,s,null,c),s.lanes=0,s}function C2(s,c,p){return zc(c,s.child,null,p),s=S2(c,c.pendingProps.children),s.flags|=2,c.memoizedState=null,s}function xR(s,c,p){s.lanes|=c;var g=s.alternate;g!==null&&(g.lanes|=c),Uk(s.return,c,p)}function A2(s,c,p,g,w,S){var N=s.memoizedState;N===null?s.memoizedState={isBackwards:c,rendering:null,renderingStartTime:0,last:g,tail:p,tailMode:w,treeForkCount:S}:(N.isBackwards=c,N.rendering=null,N.renderingStartTime=0,N.last=g,N.tail=p,N.tailMode=w,N.treeForkCount=S)}function wR(s,c,p){var g=c.pendingProps,w=g.revealOrder,S=g.tail;g=g.children;var N=cn.current,L=(N&2)!==0;if(L?(N=N&1|2,c.flags|=128):N&=1,K(cn,N),Un(s,c,g,p),g=ut?Sm:0,!L&&s!==null&&(s.flags&128)!==0)e:for(s=c.child;s!==null;){if(s.tag===13)s.memoizedState!==null&&xR(s,p,c);else if(s.tag===19)xR(s,p,c);else if(s.child!==null){s.child.return=s,s=s.child;continue}if(s===c)break e;for(;s.sibling===null;){if(s.return===null||s.return===c)break e;s=s.return}s.sibling.return=s.return,s=s.sibling}switch(w){case"forwards":for(p=c.child,w=null;p!==null;)s=p.alternate,s!==null&&zb(s)===null&&(w=p),p=p.sibling;p=w,p===null?(w=c.child,c.child=null):(w=p.sibling,p.sibling=null),A2(c,!1,w,p,S,g);break;case"backwards":case"unstable_legacy-backwards":for(p=null,w=c.child,c.child=null;w!==null;){if(s=w.alternate,s!==null&&zb(s)===null){c.child=w;break}s=w.sibling,w.sibling=p,p=w,w=s}A2(c,!0,p,null,S,g);break;case"together":A2(c,!1,null,null,void 0,g);break;default:c.memoizedState=null}return c.child}function Qo(s,c,p){if(s!==null&&(c.dependencies=s.dependencies),ml|=c.lanes,(p&c.childLanes)===0)if(s!==null){if(Eu(s,c,p,!1),(p&c.childLanes)===0)return null}else return null;if(s!==null&&c.child!==s.child)throw Error(i(153));if(c.child!==null){for(s=c.child,p=Go(s,s.pendingProps),c.child=p,p.return=c;s.sibling!==null;)s=s.sibling,p=p.sibling=Go(s,s.pendingProps),p.return=c;p.sibling=null}return c.child}function T2(s,c){return(s.lanes&c)!==0?!0:(s=s.dependencies,!!(s!==null&&Eb(s)))}function nJ(s,c,p){switch(c.tag){case 3:le(c,c.stateNode.containerInfo),ol(c,pn,s.memoizedState.cache),Nc();break;case 27:case 5:ve(c);break;case 4:le(c,c.stateNode.containerInfo);break;case 10:ol(c,c.type,c.memoizedProps.value);break;case 31:if(c.memoizedState!==null)return c.flags|=128,Zk(c),null;break;case 13:var g=c.memoizedState;if(g!==null)return g.dehydrated!==null?(dl(c),c.flags|=128,null):(p&c.child.childLanes)!==0?vR(s,c,p):(dl(c),s=Qo(s,c,p),s!==null?s.sibling:null);dl(c);break;case 19:var w=(s.flags&128)!==0;if(g=(p&c.childLanes)!==0,g||(Eu(s,c,p,!1),g=(p&c.childLanes)!==0),w){if(g)return wR(s,c,p);c.flags|=128}if(w=c.memoizedState,w!==null&&(w.rendering=null,w.tail=null,w.lastEffect=null),K(cn,cn.current),g)break;return null;case 22:return c.lanes=0,pR(s,c,p,c.pendingProps);case 24:ol(c,pn,s.memoizedState.cache)}return Qo(s,c,p)}function kR(s,c,p){if(s!==null)if(s.memoizedProps!==c.pendingProps)fn=!0;else{if(!T2(s,p)&&(c.flags&128)===0)return fn=!1,nJ(s,c,p);fn=(s.flags&131072)!==0}else fn=!1,ut&&(c.flags&1048576)!==0&&e8(c,Sm,c.index);switch(c.lanes=0,c.tag){case 16:e:{var g=c.pendingProps;if(s=Dc(c.elementType),c.type=s,typeof s=="function")Nk(s)?(g=Uc(s,g),c.tag=1,c=yR(null,c,s,g,p)):(c.tag=0,c=x2(null,c,s,g,p));else{if(s!=null){var w=s.$$typeof;if(w===C){c.tag=11,c=dR(null,c,s,g,p);break e}else if(w===R){c.tag=14,c=uR(null,c,s,g,p);break e}}throw c=D(s)||s,Error(i(306,c,""))}}return c;case 0:return x2(s,c,c.type,c.pendingProps,p);
vendor: 4,598 bytes, line 48
48case 1:return g=c.type,w=Uc(g,c.pendingProps),yR(s,c,g,w,p);case 3:e:{if(le(c,c.stateNode.containerInfo),s===null)throw Error(i(387));g=c.pendingProps;var S=c.memoizedState;w=S.element,Yk(s,c),Nm(c,g,null,p);var N=c.memoizedState;if(g=N.cache,ol(c,pn,g),g!==S.cache&&Bk(c,[pn],p,!0),Rm(),g=N.element,S.isDehydrated)if(S={element:g,isDehydrated:!1,cache:N.cache},c.updateQueue.baseState=S,c.memoizedState=S,c.flags&256){c=bR(s,c,g,p);break e}else if(g!==w){w=Ai(Error(i(424)),c),Cm(w),c=bR(s,c,g,p);break e}else{switch(s=c.stateNode.containerInfo,s.nodeType){case 9:s=s.body;break;default:s=s.nodeName==="HTML"?s.ownerDocument.body:s}for(Bt=Ri(s.firstChild),zn=c,ut=!0,il=null,Mi=!0,p=p8(c,null,g,p),c.child=p;p;)p.flags=p.flags&-3|4096,p=p.sibling}else{if(Nc(),g===w){c=Qo(s,c,p);break e}Un(s,c,g,p)}c=c.child}return c;case 26:return Kb(s,c),s===null?(p=ON(c.type,null,c.pendingProps,null))?c.memoizedState=p:ut||(p=c.type,s=c.pendingProps,g=hv(ge.current).createElement(p),g[Wn]=c,g[Ea]=s,Bn(g,p,s),Tn(g),c.stateNode=g):c.memoizedState=ON(c.type,s.memoizedProps,c.pendingProps,s.memoizedState),null;case 27:return ve(c),s===null&&ut&&(g=c.stateNode=EN(c.type,c.pendingProps,ge.current),zn=c,Mi=!0,w=Bt,vl(c.type)?(oj=w,Bt=Ri(g.firstChild)):Bt=w),Un(s,c,c.pendingProps.children,p),Kb(s,c),s===null&&(c.flags|=4194304),c.child;case 5:return s===null&&ut&&((w=g=Bt)&&(g=NJ(g,c.type,c.pendingProps,Mi),g!==null?(c.stateNode=g,zn=c,Bt=Ri(g.firstChild),Mi=!1,w=!0):w=!1),w||rl(c)),ve(c),w=c.type,S=c.pendingProps,N=s!==null?s.memoizedProps:null,g=S.children,tj(w,S)?g=null:N!==null&&tj(w,N)&&(c.flags|=32),c.memoizedState!==null&&(w=e2(s,c,YZ,null,null,p),Zm._currentValue=w),Kb(s,c),Un(s,c,g,p),c.child;case 6:return s===null&&ut&&((s=p=Bt)&&(p=OJ(p,c.pendingProps,Mi),p!==null?(c.stateNode=p,zn=c,Bt=null,s=!0):s=!1),s||rl(c)),null;case 13:return vR(s,c,p);case 4:return le(c,c.stateNode.containerInfo),g=c.pendingProps,s===null?c.child=zc(c,null,g,p):Un(s,c,g,p),c.child;case 11:return dR(s,c,c.type,c.pendingProps,p);case 7:return Un(s,c,c.pendingProps,p),c.child;case 8:return Un(s,c,c.pendingProps.children,p),c.child;case 12:return Un(s,c,c.pendingProps.children,p),c.child;case 10:return g=c.pendingProps,ol(c,c.type,g.value),Un(s,c,g.children,p),c.child;case 9:return w=c.type._context,g=c.pendingProps.children,Pc(c),w=Ln(w),g=g(w),c.flags|=1,Un(s,c,g,p),c.child;case 14:return uR(s,c,c.type,c.pendingProps,p);case 15:return hR(s,c,c.type,c.pendingProps,p);case 19:return wR(s,c,p);case 31:return tJ(s,c,p);case 22:return pR(s,c,p,c.pendingProps);case 24:return Pc(c),g=Ln(pn),s===null?(w=Fk(),w===null&&(w=Pt,S=qk(),w.pooledCache=S,S.refCount++,S!==null&&(w.pooledCacheLanes|=p),w=S),c.memoizedState={parent:g,cache:w},Hk(c),ol(c,pn,w)):((s.lanes&p)!==0&&(Yk(s,c),Nm(c,null,null,p),Rm()),w=s.memoizedState,S=c.memoizedState,w.parent!==g?(w={parent:g,cache:g},c.memoizedState=w,c.lanes===0&&(c.memoizedState=c.updateQueue.baseState=w),ol(c,pn,g)):(g=S.cache,ol(c,pn,g),g!==w.cache&&Bk(c,[pn],p,!0))),Un(s,c,c.pendingProps.children,p),c.child;case 29:throw c.pendingProps}throw Error(i(156,c.tag))}function Zo(s){s.flags|=4}function _2(s,c,p,g,w){if((c=(s.mode&32)!==0)&&(c=!1),c){if(s.flags|=16777216,(w&335544128)===w)if(s.stateNode.complete)s.flags|=8192;else if(KR())s.flags|=8192;else throw Wc=Pb,Gk}else s.flags&=-16777217}function jR(s,c){if(c.type!=="stylesheet"||(c.state.loading&4)!==0)s.flags&=-16777217;else if(s.flags|=16777216,!zN(c))if(KR())s.flags|=8192;else throw Wc=Pb,Gk}function Qb(s,c){c!==null&&(s.flags|=4),s.flags&16384&&(c=s.tag!==22?Ot():536870912,s.lanes|=c,qu|=c)}function zm(s,c){if(!ut)switch(s.tailMode){case"hidden":c=s.tail;for(var p=null;c!==null;)c.alternate!==null&&(p=c),c=c.sibling;p===null?s.tail=null:p.sibling=null;break;case"collapsed":p=s.tail;for(var g=null;p!==null;)p.alternate!==null&&(g=p),p=p.sibling;g===null?c||s.tail===null?s.tail=null:s.tail.sibling=null:g.sibling=null}}function qt(s){var c=s.alternate!==null&&s.alternate.child===s.child,p=0,g=0;if(c)for(var w=s.child;w!==null;)p|=w.lanes|w.childLanes,g|=w.subtreeFlags&65011712,g|=w.flags&65011712,w.return=s,w=w.sibling;else for(w=s.child;w!==null;)p|=w.lanes|w.childLanes,g|=w.subtreeFlags,g|=w.flags,w.return=s,w=w.sibling;return s.subtreeFlags|=g,s.childLanes=p,c}function aJ(s,c,p){var g=c.pendingProps;switch(Dk(c),c.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return qt(c),null;case 1:return qt(c),null;case 3:return p=c.stateNode,g=null,s!==null&&(g=s.memoizedState.cache),c.memoizedState.cache!==g&&(c.flags|=2048),Vo(pn),ee(),p.pendingContext&&(p.c
vendor: 5,494 bytes, line 48
48ontext=p.pendingContext,p.pendingContext=null),(s===null||s.child===null)&&(Mu(c)?Zo(c):s===null||s.memoizedState.isDehydrated&&(c.flags&256)===0||(c.flags|=1024,zk())),qt(c),null;case 26:var w=c.type,S=c.memoizedState;return s===null?(Zo(c),S!==null?(qt(c),jR(c,S)):(qt(c),_2(c,w,null,g,p))):S?S!==s.memoizedState?(Zo(c),qt(c),jR(c,S)):(qt(c),c.flags&=-16777217):(s=s.memoizedProps,s!==g&&Zo(c),qt(c),_2(c,w,s,g,p)),null;case 27:if(Se(c),p=ge.current,w=c.type,s!==null&&c.stateNode!=null)s.memoizedProps!==g&&Zo(c);else{if(!g){if(c.stateNode===null)throw Error(i(166));return qt(c),null}s=ne.current,Mu(c)?n8(c):(s=EN(w,g,p),c.stateNode=s,Zo(c))}return qt(c),null;case 5:if(Se(c),w=c.type,s!==null&&c.stateNode!=null)s.memoizedProps!==g&&Zo(c);else{if(!g){if(c.stateNode===null)throw Error(i(166));return qt(c),null}if(S=ne.current,Mu(c))n8(c);else{var N=hv(ge.current);switch(S){case 1:S=N.createElementNS("http://www.w3.org/2000/svg",w);break;case 2:S=N.createElementNS("http://www.w3.org/1998/Math/MathML",w);break;default:switch(w){case"svg":S=N.createElementNS("http://www.w3.org/2000/svg",w);break;case"math":S=N.createElementNS("http://www.w3.org/1998/Math/MathML",w);break;case"script":S=N.createElement("div"),S.innerHTML="<script><\/script>",S=S.removeChild(S.firstChild);break;case"select":S=typeof g.is=="string"?N.createElement("select",{is:g.is}):N.createElement("select"),g.multiple?S.multiple=!0:g.size&&(S.size=g.size);break;default:S=typeof g.is=="string"?N.createElement(w,{is:g.is}):N.createElement(w)}}S[Wn]=c,S[Ea]=g;e:for(N=c.child;N!==null;){if(N.tag===5||N.tag===6)S.appendChild(N.stateNode);else if(N.tag!==4&&N.tag!==27&&N.child!==null){N.child.return=N,N=N.child;continue}if(N===c)break e;for(;N.sibling===null;){if(N.return===null||N.return===c)break e;N=N.return}N.sibling.return=N.return,N=N.sibling}c.stateNode=S;e:switch(Bn(S,w,g),w){case"button":case"input":case"select":case"textarea":g=!!g.autoFocus;break e;case"img":g=!0;break e;default:g=!1}g&&Zo(c)}}return qt(c),_2(c,c.type,s===null?null:s.memoizedProps,c.pendingProps,p),null;case 6:if(s&&c.stateNode!=null)s.memoizedProps!==g&&Zo(c);else{if(typeof g!="string"&&c.stateNode===null)throw Error(i(166));if(s=ge.current,Mu(c)){if(s=c.stateNode,p=c.memoizedProps,g=null,w=zn,w!==null)switch(w.tag){case 27:case 5:g=w.memoizedProps}s[Wn]=c,s=!!(s.nodeValue===p||g!==null&&g.suppressHydrationWarning===!0||vN(s.nodeValue,p)),s||rl(c,!0)}else s=hv(s).createTextNode(g),s[Wn]=c,c.stateNode=s}return qt(c),null;case 31:if(p=c.memoizedState,s===null||s.memoizedState!==null){if(g=Mu(c),p!==null){if(s===null){if(!g)throw Error(i(318));if(s=c.memoizedState,s=s!==null?s.dehydrated:null,!s)throw Error(i(557));s[Wn]=c}else Nc(),(c.flags&128)===0&&(c.memoizedState=null),c.flags|=4;qt(c),s=!1}else p=zk(),s!==null&&s.memoizedState!==null&&(s.memoizedState.hydrationErrors=p),s=!0;if(!s)return c.flags&256?(ti(c),c):(ti(c),null);if((c.flags&128)!==0)throw Error(i(558))}return qt(c),null;case 13:if(g=c.memoizedState,s===null||s.memoizedState!==null&&s.memoizedState.dehydrated!==null){if(w=Mu(c),g!==null&&g.dehydrated!==null){if(s===null){if(!w)throw Error(i(318));if(w=c.memoizedState,w=w!==null?w.dehydrated:null,!w)throw Error(i(317));w[Wn]=c}else Nc(),(c.flags&128)===0&&(c.memoizedState=null),c.flags|=4;qt(c),w=!1}else w=zk(),s!==null&&s.memoizedState!==null&&(s.memoizedState.hydrationErrors=w),w=!0;if(!w)return c.flags&256?(ti(c),c):(ti(c),null)}return ti(c),(c.flags&128)!==0?(c.lanes=p,c):(p=g!==null,s=s!==null&&s.memoizedState!==null,p&&(g=c.child,w=null,g.alternate!==null&&g.alternate.memoizedState!==null&&g.alternate.memoizedState.cachePool!==null&&(w=g.alternate.memoizedState.cachePool.pool),S=null,g.memoizedState!==null&&g.memoizedState.cachePool!==null&&(S=g.memoizedState.cachePool.pool),S!==w&&(g.flags|=2048)),p!==s&&p&&(c.child.flags|=8192),Qb(c,c.updateQueue),qt(c),null);case 4:return ee(),s===null&&X2(c.stateNode.containerInfo),qt(c),null;case 10:return Vo(c.type),qt(c),null;case 19:if(F(cn),g=c.memoizedState,g===null)return qt(c),null;if(w=(c.flags&128)!==0,S=g.rendering,S===null)if(w)zm(g,!1);else{if(nn!==0||s!==null&&(s.flags&128)!==0)for(s=c.child;s!==null;){if(S=zb(s),S!==null){for(c.flags|=128,zm(g,!1),s=S.updateQueue,c.updateQueue=s,Qb(c,s),c.subtreeFlags=0,s=p,p=c.child;p!==null;)Q6(p,s),p=p.sibling;return K(cn,cn.current&1|2),ut&&Ho(c,g.treeForkCount),c.child}s=s.sibling}g.tail!==null&&Qt()>nv&&(c.flags|=128,w=!0,zm(g,!1),c.lanes=4194304)}else{if(!w)if(s=zb(S),s!==null){if(c.flags|=128,w=!0,s=s.updateQueue,c.updateQueue=s,Qb(c,s),zm(g,!0),g.tail===null&&g.tailMode==="hidden"&&!S.alternate&&!ut)return qt(c),null}else 2*Qt()-g.renderingStartTime>nv&&p!==536870912&&(c.flags|=128,w=!0,zm(g,!1),c.lanes=4194304);g.isBackwards?(S.sibling=c.child,c.child=S):(s=g.last,s!==null?s.sibling=S:c.child=S,g.last=S)}return g.tail!==null?(s=g.tail,g.rendering=s,g.tail=s.sibling,g.renderingStartTime=Qt(),s.sibling=null,p=cn.current,K(cn,w?p&1|2:p&1),ut&&Ho(c,g.treeForkCount),s):(qt(c),null);case 22:case 23:return ti(c),Qk(),g=c.memoizedState!==null,s!==null?s.memoizedState!==null!==g&&(c.flags|=8192):g&&(c.flags|=8192),g?(p&536870912)!==0&&(c.flags&128)===0&&(qt(c),c.subtreeFlags&6&&(c.flags|=8192)):qt(c),p=c.updateQueue,p!==null&&Qb(c,p.retryQueue),p=null,s!==null&&s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(p=s.memoizedState.cachePool.pool),g=null,c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(g=c.memoizedState.cachePool.pool),g!==p&&
vendor: 20,183 bytes, line 48
48(c.flags|=2048),s!==null&&F(Ic),null;case 24:return p=null,s!==null&&(p=s.memoizedState.cache),c.memoizedState.cache!==p&&(c.flags|=2048),Vo(pn),qt(c),null;case 25:return null;case 30:return null}throw Error(i(156,c.tag))}function iJ(s,c){switch(Dk(c),c.tag){case 1:return s=c.flags,s&65536?(c.flags=s&-65537|128,c):null;case 3:return Vo(pn),ee(),s=c.flags,(s&65536)!==0&&(s&128)===0?(c.flags=s&-65537|128,c):null;case 26:case 27:case 5:return Se(c),null;case 31:if(c.memoizedState!==null){if(ti(c),c.alternate===null)throw Error(i(340));Nc()}return s=c.flags,s&65536?(c.flags=s&-65537|128,c):null;case 13:if(ti(c),s=c.memoizedState,s!==null&&s.dehydrated!==null){if(c.alternate===null)throw Error(i(340));Nc()}return s=c.flags,s&65536?(c.flags=s&-65537|128,c):null;case 19:return F(cn),null;case 4:return ee(),null;case 10:return Vo(c.type),null;case 22:case 23:return ti(c),Qk(),s!==null&&F(Ic),s=c.flags,s&65536?(c.flags=s&-65537|128,c):null;case 24:return Vo(pn),null;case 25:return null;default:return null}}function SR(s,c){switch(Dk(c),c.tag){case 3:Vo(pn),ee();break;case 26:case 27:case 5:Se(c);break;case 4:ee();break;case 31:c.memoizedState!==null&&ti(c);break;case 13:ti(c);break;case 19:F(cn);break;case 10:Vo(c.type);break;case 22:case 23:ti(c),Qk(),s!==null&&F(Ic);break;case 24:Vo(pn)}}function Lm(s,c){try{var p=c.updateQueue,g=p!==null?p.lastEffect:null;if(g!==null){var w=g.next;p=w;do{if((p.tag&s)===s){g=void 0;var S=p.create,N=p.inst;g=S(),N.destroy=g}p=p.next}while(p!==w)}}catch(L){St(c,c.return,L)}}function hl(s,c,p){try{var g=c.updateQueue,w=g!==null?g.lastEffect:null;if(w!==null){var S=w.next;g=S;do{if((g.tag&s)===s){var N=g.inst,L=N.destroy;if(L!==void 0){N.destroy=void 0,w=c;var Q=p,re=L;try{re()}catch(de){St(w,Q,de)}}}g=g.next}while(g!==S)}}catch(de){St(c,c.return,de)}}function CR(s){var c=s.updateQueue;if(c!==null){var p=s.stateNode;try{f8(c,p)}catch(g){St(s,s.return,g)}}}function AR(s,c,p){p.props=Uc(s.type,s.memoizedProps),p.state=s.memoizedState;try{p.componentWillUnmount()}catch(g){St(s,c,g)}}function Um(s,c){try{var p=s.ref;if(p!==null){switch(s.tag){case 26:case 27:case 5:var g=s.stateNode;break;case 30:g=s.stateNode;break;default:g=s.stateNode}typeof p=="function"?s.refCleanup=p(g):p.current=g}}catch(w){St(s,c,w)}}function ao(s,c){var p=s.ref,g=s.refCleanup;if(p!==null)if(typeof g=="function")try{g()}catch(w){St(s,c,w)}finally{s.refCleanup=null,s=s.alternate,s!=null&&(s.refCleanup=null)}else if(typeof p=="function")try{p(null)}catch(w){St(s,c,w)}else p.current=null}function TR(s){var c=s.type,p=s.memoizedProps,g=s.stateNode;try{e:switch(c){case"button":case"input":case"select":case"textarea":p.autoFocus&&g.focus();break e;case"img":p.src?g.src=p.src:p.srcSet&&(g.srcset=p.srcSet)}}catch(w){St(s,s.return,w)}}function M2(s,c,p){try{var g=s.stateNode;AJ(g,s.type,p,c),g[Ea]=c}catch(w){St(s,s.return,w)}}function _R(s){return s.tag===5||s.tag===3||s.tag===26||s.tag===27&&vl(s.type)||s.tag===4}function E2(s){e:for(;;){for(;s.sibling===null;){if(s.return===null||_R(s.return))return null;s=s.return}for(s.sibling.return=s.return,s=s.sibling;s.tag!==5&&s.tag!==6&&s.tag!==18;){if(s.tag===27&&vl(s.type)||s.flags&2||s.child===null||s.tag===4)continue e;s.child.return=s,s=s.child}if(!(s.flags&2))return s.stateNode}}function R2(s,c,p){var g=s.tag;if(g===5||g===6)s=s.stateNode,c?(p.nodeType===9?p.body:p.nodeName==="HTML"?p.ownerDocument.body:p).insertBefore(s,c):(c=p.nodeType===9?p.body:p.nodeName==="HTML"?p.ownerDocument.body:p,c.appendChild(s),p=p._reactRootContainer,p!=null||c.onclick!==null||(c.onclick=$o));else if(g!==4&&(g===27&&vl(s.type)&&(p=s.stateNode,c=null),s=s.child,s!==null))for(R2(s,c,p),s=s.sibling;s!==null;)R2(s,c,p),s=s.sibling}function Zb(s,c,p){var g=s.tag;if(g===5||g===6)s=s.stateNode,c?p.insertBefore(s,c):p.appendChild(s);else if(g!==4&&(g===27&&vl(s.type)&&(p=s.stateNode),s=s.child,s!==null))for(Zb(s,c,p),s=s.sibling;s!==null;)Zb(s,c,p),s=s.sibling}function MR(s){var c=s.stateNode,p=s.memoizedProps;try{for(var g=s.type,w=c.attributes;w.length;)c.removeAttributeNode(w[0]);Bn(c,g,p),c[Wn]=s,c[Ea]=p}catch(S){St(s,s.return,S)}}var Jo=!1,gn=!1,N2=!1,ER=typeof WeakSet=="function"?WeakSet:Set,_n=null;function rJ(s,c){if(s=s.containerInfo,J2=vv,s=q6(s),Ck(s)){if("selectionStart"in s)var p={start:s.selectionStart,end:s.selectionEnd};else e:{p=(p=s.ownerDocument)&&p.defaultView||window;var g=p.getSelection&&p.getSelection();if(g&&g.rangeCount!==0){p=g.anchorNode;var w=g.anchorOffset,S=g.focusNode;g=g.focusOffset;try{p.nodeType,S.nodeType}catch{p=null;break e}var N=0,L=-1,Q=-1,re=0,de=0,fe=s,oe=null;t:for(;;){for(var ce;fe!==p||w!==0&&fe.nodeType!==3||(L=N+w),fe!==S||g!==0&&fe.nodeType!==3||(Q=N+g),fe.nodeType===3&&(N+=fe.nodeValue.length),(ce=fe.firstChild)!==null;)oe=fe,fe=ce;for(;;){if(fe===s)break t;if(oe===p&&++re===w&&(L=N),oe===S&&++de===g&&(Q=N),(ce=fe.nextSibling)!==null)break;fe=oe,oe=fe.parentNode}fe=ce}p=L===-1||Q===-1?null:{start:L,end:Q}}else p=null}p=p||{start:0,end:0}}else p=null;for(ej={focusedElem:s,selectionRange:p},vv=!1,_n=c;_n!==null;)if(c=_n,s=c.child,(c.subtreeFlags&1028)!==0&&s!==null)s.return=c,_n=s;else for(;_n!==null;){switch(c=_n,S=c.alternate,s=c.flags,c.tag){case 0:if((s&4)!==0&&(s=c.updateQueue,s=s!==null?s.events:null,s!==null))for(p=0;p<s.length;p++)w=s[p],w.ref.impl=w.nextImpl;break;case 11:case 15:break;case 1:if((s&1024)!==0&&S!==null){s=void 0,p=c,w=S.memoizedProps,S=S.memoizedState,g=p.stateNode;try{var Ee=Uc(p.type,w);s=g.getSnapshotBeforeUpdate(Ee,S),g.__reactInternalSnapshotBeforeUpdate=s}catch(qe){St(p,p.return,qe)}}break;case 3:if((s&1024)!==0){if(s=c.stateNode.containerInfo,p=s.nodeType,p===9)aj(s);else if(p===1)switch(s.nodeName){case"HEAD":case"HTML":case"BODY":aj(s);break;default:s.textContent=""}}break;case 5:case 26:case 27:case 6:case 4:case 17:break;default:if((s&1024)!==0)throw Error(i(163))}if(s=c.sibling,s!==null){s.return=c.return,_n=s;break}_n=c.return}}function RR(s,c,p){var g=p.flags;switch(p.tag){case 0:case 11:case 15:ts(s,p),g&4&&Lm(5,p);break;case 1:if(ts(s,p),g&4)if(s=p.stateNode,c===null)try{s.componentDidMount()}catch(N){St(p,p.return,N)}else{var w=Uc(p.type,c.memoizedProps);c=c.memoizedState;try{s.componentDidUpdate(w,c,s.__reactInternalSnapshotBeforeUpdate)}catch(N){St(p,p.return,N)}}g&64&&CR(p),g&512&&Um(p,p.return);break;case 3:if(ts(s,p),g&64&&(s=p.updateQueue,s!==null)){if(c=null,p.child!==null)switch(p.child.tag){case 27:case 5:c=p.child.stateNode;break;case 1:c=p.child.stateNode}try{f8(s,c)}catch(N){St(p,p.return,N)}}break;case 27:c===null&&g&4&&MR(p);case 26:case 5:ts(s,p),c===null&&g&4&&TR(p),g&512&&Um(p,p.return);break;case 12:ts(s,p);break;case 31:ts(s,p),g&4&&PR(s,p);break;case 13:ts(s,p),g&4&&IR(s,p),g&64&&(s=p.memoizedState,s!==null&&(s=s.dehydrated,s!==null&&(p=mJ.bind(null,p),PJ(s,p))));break;case 22:if(g=p.memoizedState!==null||Jo,!g){c=c!==null&&c.memoizedState!==null||gn,w=Jo;var S=gn;Jo=g,(gn=c)&&!S?ns(s,p,(p.subtreeFlags&8772)!==0):ts(s,p),Jo=w,gn=S}break;case 30:break;default:ts(s,p)}}function NR(s){var c=s.alternate;c!==null&&(s.alternate=null,NR(c)),s.child=null,s.deletions=null,s.sibling=null,s.tag===5&&(c=s.stateNode,c!==null&&lk(c)),s.stateNode=null,s.return=null,s.dependencies=null,s.memoizedProps=null,s.memoizedState=null,s.pendingProps=null,s.stateNode=null,s.updateQueue=null}var Yt=null,Na=!1;function es(s,c,p){for(p=p.child;p!==null;)OR(s,c,p),p=p.sibling}function OR(s,c,p){if(At&&typeof At.onCommitFiberUnmount=="function")try{At.onCommitFiberUnmount(An,p)}catch{}switch(p.tag){case 26:gn||ao(p,c),es(s,c,p),p.memoizedState?p.memoizedState.count--:p.stateNode&&(p=p.stateNode,p.parentNode.removeChild(p));break;case 27:gn||ao(p,c);var g=Yt,w=Na;vl(p.type)&&(Yt=p.stateNode,Na=!1),es(s,c,p),Km(p.stateNode),Yt=g,Na=w;break;case 5:gn||ao(p,c);case 6:if(g=Yt,w=Na,Yt=null,es(s,c,p),Yt=g,Na=w,Yt!==null)if(Na)try{(Yt.nodeType===9?Yt.body:Yt.nodeName==="HTML"?Yt.ownerDocument.body:Yt).removeChild(p.stateNode)}catch(S){St(p,c,S)}else try{Yt.removeChild(p.stateNode)}catch(S){St(p,c,S)}break;case 18:Yt!==null&&(Na?(s=Yt,CN(s.nodeType===9?s.body:s.nodeName==="HTML"?s.ownerDocument.body:s,p.stateNode),Xu(s)):CN(Yt,p.stateNode));break;case 4:g=Yt,w=Na,Yt=p.stateNode.containerInfo,Na=!0,es(s,c,p),Yt=g,Na=w;break;case 0:case 11:case 14:case 15:hl(2,p,c),gn||hl(4,p,c),es(s,c,p);break;case 1:gn||(ao(p,c),g=p.stateNode,typeof g.componentWillUnmount=="function"&&AR(p,c,g)),es(s,c,p);break;case 21:es(s,c,p);break;case 22:gn=(g=gn)||p.memoizedState!==null,es(s,c,p),gn=g;break;default:es(s,c,p)}}function PR(s,c){if(c.memoizedState===null&&(s=c.alternate,s!==null&&(s=s.memoizedState,s!==null))){s=s.dehydrated;try{Xu(s)}catch(p){St(c,c.return,p)}}}function IR(s,c){if(c.memoizedState===null&&(s=c.alternate,s!==null&&(s=s.memoizedState,s!==null&&(s=s.dehydrated,s!==null))))try{Xu(s)}catch(p){St(c,c.return,p)}}function oJ(s){switch(s.tag){case 31:case 13:case 19:var c=s.stateNode;return c===null&&(c=s.stateNode=new ER),c;case 22:return s=s.stateNode,c=s._retryCache,c===null&&(c=s._retryCache=new ER),c;default:throw Error(i(435,s.tag))}}function Jb(s,c){var p=oJ(s);c.forEach(function(g){if(!p.has(g)){p.add(g);var w=fJ.bind(null,s,g);g.then(w,w)}})}function Oa(s,c){var p=c.deletions;if(p!==null)for(var g=0;g<p.length;g++){var w=p[g],S=s,N=c,L=N;e:for(;L!==null;){switch(L.tag){case 27:if(vl(L.type)){Yt=L.stateNode,Na=!1;break e}break;case 5:Yt=L.stateNode,Na=!1;break e;case 3:case 4:Yt=L.stateNode.containerInfo,Na=!0;break e}L=L.return}if(Yt===null)throw Error(i(160));OR(S,N,w),Yt=null,Na=!1,S=w.alternate,S!==null&&(S.return=null),w.return=null}if(c.subtreeFlags&13886)for(c=c.child;c!==null;)DR(c,s),c=c.sibling}var hr=null;function DR(s,c){var p=s.alternate,g=s.flags;switch(s.tag){case 0:case 11:case 14:case 15:Oa(c,s),Pa(s),g&4&&(hl(3,s,s.return),Lm(3,s),hl(5,s,s.return));break;case 1:Oa(c,s),Pa(s),g&512&&(gn||p===null||ao(p,p.return)),g&64&&Jo&&(s=s.updateQueue,s!==null&&(g=s.callbacks,g!==null&&(p=s.shared.hiddenCallbacks,s.shared.hiddenCallbacks=p===null?g:p.concat(g))));break;case 26:var w=hr;if(Oa(c,s),Pa(s),g&512&&(gn||p===null||ao(p,p.return)),g&4){var S=p!==null?p.memoizedState:null;if(g=s.memoizedState,p===null)if(g===null)if(s.stateNode===null){e:{g=s.type,p=s.memoizedProps,w=w.ownerDocument||w;t:switch(g){case"title":S=w.getElementsByTagName("title")[0],(!S||S[pm]||S[Wn]||S.namespaceURI==="http://www.w3.org/2000/svg"||S.hasAttribute("itemprop"))&&(S=w.createElement(g),w.head.insertBefore(S,w.querySelector("head > title"))),Bn(S,g,p),S[Wn]=s,Tn(S),g=S;break e;case"link":var N=DN("link","href",w).get(g+(p.href||""));if(N){for(var L=0;L<N.length;L++)if(S=N[L],S.getAttribute("href")===(p.href==null||p.href===""?null:p.href)&&S.getAttribute("rel")===(p.rel==null?null:p.rel)&&S.getAttribute("title")===(p.title==null?null:p.title)&&S.getAttribute("crossorigin")===(p.crossOrigin==null?null:p.crossOrigin)){N.splice(L,1);break t}}S=w.createElement(g),Bn(S,g,p),w.head.appendChild(S);break;case"meta":if(N=DN("meta","content",w).get(g+(p.content||""))){for(L=0;L<N.length;L++)if(S=N[L],S.getAttribute("content")===(p.content==null?null:""+p.content)&&S.getAttribute("name")===(p.name==null?null:p.name)&&S.getAttribute("property")===(p.property==null?null:p.property)&&S.getAttribute("http-equiv")===(p.httpEquiv==null?null:p.httpEquiv)&&S.getAttribute("charset")===(p.charSet==null?null:p.charSet)){N.splice(L,1);break t}}S=w.createElement(g),Bn(S,g,p),w.head.appendChild(S);break;default:throw Error(i(468,g))}S[Wn]=s,Tn(S),g=S}s.stateNode=g}else WN(w,s.type,s.stateNode);else s.stateNode=IN(w,g,s.memoizedProps);else S!==g?(S===null?p.stateNode!==null&&(p=p.stateNode,p.parentNode.removeChild(p)):S.count--,g===null?WN(w,s.type,s.stateNode):IN(w,g,s.memoizedProps)):g===null&&s.stateNode!==null&&M2(s,s.memoizedProps,p.memoizedProps)}break;case 27:Oa(c,s),Pa(s),g&512&&(gn||p===null||ao(p,p.return)),p!==null&&g&4&&M2(s,s.memoizedProps,p.memoizedProps);break;case 5:if(Oa(c,s),Pa(s),g&512&&(gn||p===null||ao(p,p.return)),s.flags&32){w=s.stateNode;try{vu(w,"")}catch(Ee){St(s,s.return,Ee)}}g&4&&s.stateNode!=null&&(w=s.memoizedProps,M2(s,w,p!==null?p.memoizedProps:w)),g&1024&&(N2=!0);break;case 6:if(Oa(c,s),Pa(s),g&4){if(s.stateNode===null)throw Error(i(162));g=s.memoizedProps,p=s.stateNode;try{p.nodeValue=g}catch(Ee){St(s,s.return,Ee)}}break;case 3:if(fv=null,w=hr,hr=pv(c.containerInfo),Oa(c,s),hr=w,Pa(s),g&4&&p!==null&&p.memoizedState.isDehydrated)try{Xu(c.containerInfo)}catch(Ee){St(s,s.return,Ee)}N2&&(N2=!1,WR(s));break;case 4:g=hr,hr=pv(s.stateNode.containerInfo),Oa(c,s),Pa(s),hr=g;break;case 12:Oa(c,s),Pa(s);break;case 31:Oa(c,s),Pa(s),g&4&&(g=s.updateQueue,g!==null&&(s.updateQueue=null,Jb(s,g)));break;case 13:Oa(c,s),Pa(s),s.child.flags&8192&&s.memoizedState!==null!=(p!==null&&p.memoizedState!==null)&&(tv=Qt()),g&4&&(g=s.updateQueue,g!==null&&(s.updateQueue=null,Jb(s,g)));break;case 22:w=s.memoizedState!==null;var Q=p!==null&&p.memoizedState!==null,re=Jo,de=gn;if(Jo=re||w,gn=de||Q,Oa(c,s),gn=de,Jo=re,Pa(s),g&8192)e:for(c=s.stateNode,c._visibility=w?c._visibility&-2:c._visibility|1,w&&(p===null||Q||Jo||gn||Bc(s)),p=null,c=s;;){if(c.tag===5||c.tag===26){if(p===null){Q=p=c;try{if(S=Q.stateNode,w)N=S.style,typeof N.setProperty=="function"?N.setProperty("display","none","important"):N.display="none";else{L=Q.stateNode;var fe=Q.memoizedProps.style,oe=fe!=null&&fe.hasOwnProperty("display")?fe.display:null;L.style.display=oe==null||typeof oe=="boolean"?"":(""+oe).trim()}}catch(Ee){St(Q,Q.return,Ee)}}}else if(c.tag===6){if(p===null){Q=c;try{Q.stateNode.nodeValue=w?"":Q.memoizedProps}catch(Ee){St(Q,Q.return,Ee)}}}else if(c.tag===18){if(p===null){Q=c;try{var ce=Q.stateNode;w?AN(ce,!0):AN(Q.stateNode,!1)}catch(Ee){St(Q,Q.return,Ee)}}}else if((c.tag!==22&&c.tag!==23||c.memoizedState===null||c===s)&&c.child!==null){c.child.return=c,c=c.child;continue}if(c===s)break e;for(;c.sibling===null;){if(c.return===null||c.return===s)break e;p===c&&(p=null),c=c.return}p===c&&(p=null),c.sibling.return=c.return,c=c.sibling}g&4&&(g=s.updateQueue,g!==null&&(p=g.retryQueue,p!==null&&(g.retryQueue=null,Jb(s,p))));break;case 19:Oa(c,s),Pa(s),g&4&&(g=s.updateQueue,g!==null&&(s.updateQueue=null,Jb(s,g)));break;case 30:break;case 21:break;default:Oa(c,s),Pa(s)}}function Pa(s){var c=s.flags;if(c&2){try{for(var p,g=s.return;g!==null;){if(_R(g)){p=g;break}g=g.return}if(p==null)throw Error(i(160));switch(p.tag){case 27:var w=p.stateNode,S=E2(s);Zb(s,S,w);break;case 5:var N=p.stateNode;p.flags&32&&(vu(N,""),p.flags&=-33);var L=E2(s);Zb(s,L,N);break;case 3:case 4:var Q=p.stateNode.containerInfo,re=E2(s);R2(s,re,Q);break;default:throw Error(i(161))}}catch(de){St(s,s.return,de)}s.flags&=-3}c&4096&&(s.flags&=-4097)}function WR(s){if(s.subtreeFlags&1024)for(s=s.child;s!==null;){var c=s;WR(c),c.tag===5&&c.flags&1024&&c.stateNode.reset(),s=s.sibling}}function ts(s,c){if(c.subtreeFlags&8772)for(c=c.child;c!==null;)RR(s,c.alternate,c),c=c.sibling}function Bc(s){for(s=s.child;s!==null;){var c=s;switch(c.tag){case 0:case 11:case 14:case 15:hl(4,c,c.return),Bc(c);break;case 1:ao(c,c.return);var p=c.stateNode;typeof p.componentWillUnmount=="function"&&AR(c,c.return,p),Bc(c);break;case 27:Km(c.stateNode);case 26:case 5:ao(c,c.return),Bc(c);break;case 22:c.memoizedState===null&&Bc(c);break;case 30:Bc(c);break;default:Bc(c)}s=s.sibling}}function ns(s,c,p){for(p=p&&(c.subtreeFlags&8772)!==0,c=c.child;c!==null;){var g=c.alternate,w=s,S=c,N=S.flags;switch(S.tag){case 0:case 11:case 15:ns(w,S,p),Lm(4,S);break;case 1:if(ns(w,S,p),g=S,w=g.stateNode,typeof w.componentDidMount=="function")try{w.componentDidMount()}catch(re){St(g,g.return,re)}if(g=S,w=g.updateQueue,w!==null){var L=g.stateNode;try{var Q=w.shared.hiddenCallbacks;if(Q!==null)for(w.shared.hiddenCallbacks=null,w=0;w<Q.length;w++)m8(Q[w],L)}catch(re){St(g,g.return,re)}}p&&N&64&&CR(S),Um(S,S.return);break;case 27:MR(S);case 26:case 5:ns(w,S,p),p&&g===null&&N&4&&TR(S),Um(S,S.return);break;case 12:ns(w,S,p);break;case 31:ns(w,S,p),p&&N&4&&PR(w,S);break;case 13:ns(w,S,p),p&&N&4&&IR(w,S);break;case 22:S.memoizedState===null&&ns(w,S,p),Um(S,S.return);break;case 30:break;default:ns(w,S,p)}c=c.sibling}}function O2(s,c){var p=null;s!==null&&s.memoizedState!==null&&s.memoizedState.cachePool!==null&&(p=s.memoizedState.cachePool.pool),s=null,c.memoizedState!==null&&c.memoizedState.cachePool!==null&&(s=c.memoizedState.cachePool.pool),s!==p&&(s!=null&&s.refCount++,p!=null&&Am(p))}function P2(s,c){s=null,c.alternate!==null&&(s=c.alternate.memoizedState.cache),c=c.memoizedState.cache,c!==s&&(c.refCount++,s!=null&&Am(s))}function pr(s,c,p,g){if(c.subtreeFlags&10256)for(c=c.child;c!==null;)zR(s,c,p,g),c=c.sibling}function zR(s,c,p,g){var w=c.flags;switch(c.tag){case 0:case 11:case 15:pr(s,c,p,g),w&2048&&Lm(9,c);break;case 1:pr(s,c,p,g);break;case 3:pr(s,c,p,g),w&2048&&(s=null,c.alternate!==null&&(s=c.alternate.memoizedState.cache),c=c.memoizedState.cache,c!==s&&(c.refCount++,s!=null&&Am(s)));break;case 12:if(w&2048){pr(s,c,p,g),s=c.stateNode;try{var S=c.memoizedProps,N=S.id,L=S.onPostCommit;typeof L=="function"&&L(N,c.alternate===null?"mount":"update",s.passiveEffectDuration,-0)}catch(Q){St(c,c.return,Q)}}else pr(s,c,p,g);break;case 31:pr(s,c,p,g);break;case 13:pr(s,c,p,g);break;case 23:break;case 22:S=c.stateNode,N=c.alternate,c.memoizedState!==null?S._visibility&2?pr(s,c,p,g):Bm(s,c):S._visibility&2?pr(s,c,p,g):(S._visibility|=2,Lu(s,c,p,g,(c.subtreeFlags&10256)!==0||!1)),w&2048&&O2(N,c);break;case 24:pr(s,c,p,g),w&2048&&P2(c.alternate,c);break;default:pr(s,c,p,g)}}function Lu(s,c,p,g,w){for(w=w&&((c.subtreeFlags&10256)!==0||!1),c=c.child;c!==null;){var S=s,N=c,L=p,Q=g,re=N.flags;switch(N.tag){case 0:case 11:case 15:Lu(S,N,L,Q,w),Lm(8,N);break;case 23:break;case 22:var de=N.stateNode;N.memoizedState!==null?de._visibility&2?Lu(S,N,L,Q,w):Bm(S,N):(de._visibility|=2,Lu(S,N,L,Q,w)),w&&re&2048&&O2(N.alternate,N);break;case 24:Lu(S,N,L,Q,w),w&&re&2048&&P2(N.alternate,N);break;default:Lu(S,N,L,Q,w)}c=c.sibling}}function Bm(s,c){if(c.subtreeFlags&10256)for(c=c.child;c!==null;){var p=s,g=c,w=g.flags;switch(g.tag){case 22:Bm(p,g),w&2048&&O2(g.alternate,g);break;case 24:Bm(p,g),w&2048&&P2(g.alternate,g);break;default:Bm(p,g)}c=c.sibling}}var qm=8192;function Uu(s,c,p){if(s.subtreeFlags&qm)for(s=s.child;s!==null;)LR(s,c,p),s=s.sibling}function LR(s,c,p){switch(s.tag){case 26:Uu(s,c,p),s.flags&qm&&s.memoizedState!==null&&HJ(p,hr,s.memoizedState,s.memoizedProps);break;case 5:Uu(s,c,p);break;case 3:case 4:var g=hr;hr=pv(s.stateNode.containerInfo),Uu(s,c,p),hr=g;break;case 22:s.memoizedState===null&&(g=s.alternate,g!==null&&g.memoizedState!==null?(g=qm,qm=16777216,Uu(s,c,p),qm=g):Uu(s,c,p));break;default:Uu(s,c,p)}}function UR(s){var c=s.alternate;if(c!==null&&(s=c.child,s!==null)){c.child=null;do c=s.sibling,s.sibling=null,s=c;while(s!==null)}}function $m(s){var c=s.deletions;if((s.flags&16)!==0){if(c!==null)for(var p=0;p<c.length;p++){var g=c[p];_n=g,qR(g,s)}UR(s)}if(s.subtreeFlags&10256)for(s=s.child;s!==null;)BR(s),s=s.sibling}function BR(s){switch(s.tag){case 0:case 11:case 15:$m(s),s.flags&2048&&hl(9,s,s.return);break;case 3:$m(s);break;case 12:$m(s);break;case 22:var c=s.stateNode;s.memoizedState!==null&&c._visibility&2&&(s.return===null||s.return.tag!==13)?(c._visibility&=-3,ev(s)):$m(s);break;default:$m(s)}}function ev(s){var c=s.deletions;if((s.flags&16)!==0){if(c!==null)for(var p=0;p<c.length;p++){var g=c[p];_n=g,qR(g,s)}UR(s)}for(s=s.child;s!==null;){switch(c=s,c.tag){case 0:case 11:case 15:hl(8,c,c.return),ev(c);break;case 22:p=c.stateNode,p._visibility&2&&(p._visibility&=-3,ev(c));break;default:ev(c)}s=s.sibling}}function qR(s,c){for(;_n!==null;){var p=_n;switch(p.tag){case 0:case 11:case 15:hl(8,p,c);break;case 23:case 22:if(p.memoizedState!==null&&p.memoizedState.cachePool!==null){var g=p.memoizedState.cachePool.pool;g!=null&&g.refCount++}break;case 24:Am(p.memoizedState.cache)}if(g=p.child,g!==null)g.return=p,_n=g;else e:for(p=s;_n!==null;){g=_n;var w=g.sibling,S=g.return;if(NR(g),g===p){_n=null;break e}if(w!==null){w.return=S,_n=w;break e}_n=S}}}var sJ={getCacheForType:function(s){var c=Ln(pn),p=c.data.get(s);return p===void 0&&(p=s(),c.data.set(s,p)),p}
vendor: 14,974 bytes, line 48
48,cacheSignal:function(){return Ln(pn).controller.signal}},lJ=typeof WeakMap=="function"?WeakMap:Map,xt=0,Pt=null,it=null,st=0,jt=0,ni=null,pl=!1,Bu=!1,I2=!1,as=0,nn=0,ml=0,qc=0,D2=0,ai=0,qu=0,Fm=null,Ia=null,W2=!1,tv=0,$R=0,nv=1/0,av=null,fl=null,vn=0,gl=null,$u=null,is=0,z2=0,L2=null,FR=null,Gm=0,U2=null;function ii(){return(xt&2)!==0&&st!==0?st&-st:O.T!==null?H2():o6()}function GR(){if(ai===0)if((st&536870912)===0||ut){var s=uu;uu<<=1,(uu&3932160)===0&&(uu=262144),ai=s}else ai=536870912;return s=ei.current,s!==null&&(s.flags|=32),ai}function Da(s,c,p){(s===Pt&&(jt===2||jt===9)||s.cancelPendingCommit!==null)&&(Fu(s,0),yl(s,st,ai,!1)),Dn(s,p),((xt&2)===0||s!==Pt)&&(s===Pt&&((xt&2)===0&&(qc|=p),nn===4&&yl(s,st,ai,!1)),io(s))}function HR(s,c,p){if((xt&6)!==0)throw Error(i(327));var g=!p&&(c&127)===0&&(c&s.expiredLanes)===0||Ge(s,c),w=g?uJ(s,c):q2(s,c,!0),S=g;do{if(w===0){Bu&&!g&&yl(s,c,0,!1);break}else{if(p=s.current.alternate,S&&!cJ(p)){w=q2(s,c,!1),S=!1;continue}if(w===2){if(S=c,s.errorRecoveryDisabledLanes&S)var N=0;else N=s.pendingLanes&-536870913,N=N!==0?N:N&536870912?536870912:0;if(N!==0){c=N;e:{var L=s;w=Fm;var Q=L.current.memoizedState.isDehydrated;if(Q&&(Fu(L,N).flags|=256),N=q2(L,N,!1),N!==2){if(I2&&!Q){L.errorRecoveryDisabledLanes|=S,qc|=S,w=4;break e}S=Ia,Ia=w,S!==null&&(Ia===null?Ia=S:Ia.push.apply(Ia,S))}w=N}if(S=!1,w!==2)continue}}if(w===1){Fu(s,0),yl(s,c,0,!0);break}e:{switch(g=s,S=w,S){case 0:case 1:throw Error(i(345));case 4:if((c&4194048)!==c)break;case 6:yl(g,c,ai,!pl);break e;case 2:Ia=null;break;case 3:case 5:break;default:throw Error(i(329))}if((c&62914560)===c&&(w=tv+300-Qt(),10<w)){if(yl(g,c,ai,!pl),hu(g,0,!0)!==0)break e;is=c,g.timeoutHandle=jN(YR.bind(null,g,p,Ia,av,W2,c,ai,qc,qu,pl,S,"Throttled",-0,0),w);break e}YR(g,p,Ia,av,W2,c,ai,qc,qu,pl,S,null,-0,0)}}break}while(!0);io(s)}function YR(s,c,p,g,w,S,N,L,Q,re,de,fe,oe,ce){if(s.timeoutHandle=-1,fe=c.subtreeFlags,fe&8192||(fe&16785408)===16785408){fe={stylesheets:null,count:0,imgCount:0,imgBytes:0,suspenseyImages:[],waitingForImages:!0,waitingForViewTransition:!1,unsuspend:$o},LR(c,S,fe);var Ee=(S&62914560)===S?tv-Qt():(S&4194048)===S?$R-Qt():0;if(Ee=YJ(fe,Ee),Ee!==null){is=S,s.cancelPendingCommit=Ee(tN.bind(null,s,c,S,p,g,w,N,L,Q,de,fe,null,oe,ce)),yl(s,S,N,!re);return}}tN(s,c,S,p,g,w,N,L,Q)}function cJ(s){for(var c=s;;){var p=c.tag;if((p===0||p===11||p===15)&&c.flags&16384&&(p=c.updateQueue,p!==null&&(p=p.stores,p!==null)))for(var g=0;g<p.length;g++){var w=p[g],S=w.getSnapshot;w=w.value;try{if(!Za(S(),w))return!1}catch{return!1}}if(p=c.child,c.subtreeFlags&16384&&p!==null)p.return=c,c=p;else{if(c===s)break;for(;c.sibling===null;){if(c.return===null||c.return===s)return!0;c=c.return}c.sibling.return=c.return,c=c.sibling}}return!0}function yl(s,c,p,g){c&=~D2,c&=~qc,s.suspendedLanes|=c,s.pingedLanes&=~c,g&&(s.warmLanes|=c),g=s.expirationTimes;for(var w=c;0<w;){var S=31-hn(w),N=1<<S;g[S]=-1,w&=~N}p!==0&&eo(s,p,c)}function iv(){return(xt&6)===0?(Hm(0),!1):!0}function B2(){if(it!==null){if(jt===0)var s=it.return;else s=it,Yo=Oc=null,a2(s),Pu=null,_m=0,s=it;for(;s!==null;)SR(s.alternate,s),s=s.return;it=null}}function Fu(s,c){var p=s.timeoutHandle;p!==-1&&(s.timeoutHandle=-1,MJ(p)),p=s.cancelPendingCommit,p!==null&&(s.cancelPendingCommit=null,p()),is=0,B2(),Pt=s,it=p=Go(s.current,null),st=c,jt=0,ni=null,pl=!1,Bu=Ge(s,c),I2=!1,qu=ai=D2=qc=ml=nn=0,Ia=Fm=null,W2=!1,(c&8)!==0&&(c|=c&32);var g=s.entangledLanes;if(g!==0)for(s=s.entanglements,g&=c;0<g;){var w=31-hn(g),S=1<<w;c|=s[w],g&=~S}return as=c,Cb(),p}function VR(s,c){et=null,O.H=Dm,c===Ou||c===Ob?(c=d8(),jt=3):c===Gk?(c=d8(),jt=4):jt=c===v2?8:c!==null&&typeof c=="object"&&typeof c.then=="function"?6:1,ni=c,it===null&&(nn=1,Yb(s,Ai(c,s.current)))}function KR(){var s=ei.current;return s===null?!0:(st&4194048)===st?Ei===null:(st&62914560)===st||(st&536870912)!==0?s===Ei:!1}function XR(){var s=O.H;return O.H=Dm,s===null?Dm:s}function QR(){var s=O.A;return O.A=sJ,s}function rv(){nn=4,pl||(st&4194048)!==st&&ei.current!==null||(Bu=!0),(ml&134217727)===0&&(qc&134217727)===0||Pt===null||yl(Pt,st,ai,!1)}function q2(s,c,p){var g=xt;xt|=2;var w=XR(),S=QR();(Pt!==s||st!==c)&&(av=null,Fu(s,c)),c=!1;var N=nn;e:do try{if(jt!==0&&it!==null){var L=it,Q=ni;switch(jt){case 8:B2(),N=6;break e;case 3:case 2:case 9:case 6:ei.current===null&&(c=!0);var re=jt;if(jt=0,ni=null,Gu(s,L,Q,re),p&&Bu){N=0;break e}break;default:re=jt,jt=0,ni=null,Gu(s,L,Q,re)}}dJ(),N=nn;break}catch(de){VR(s,de)}while(!0);return c&&s.shellSuspendCounter++,Yo=Oc=null,xt=g,O.H=w,O.A=S,it===null&&(Pt=null,st=0,Cb()),N}function dJ(){for(;it!==null;)ZR(it)}function uJ(s,c){var p=xt;xt|=2;var g=XR(),w=QR();Pt!==s||st!==c?(av=null,nv=Qt()+500,Fu(s,c)):Bu=Ge(s,c);e:do try{if(jt!==0&&it!==null){c=it;var S=ni;t:switch(jt){case 1:jt=0,ni=null,Gu(s,c,S,1);break;case 2:case 9:if(l8(S)){jt=0,ni=null,JR(c);break}c=function(){jt!==2&&jt!==9||Pt!==s||(jt=7),io(s)},S.then(c,c);break e;case 3:jt=7;break e;case 4:jt=5;break e;case 7:l8(S)?(jt=0,ni=null,JR(c)):(jt=0,ni=null,Gu(s,c,S,7));break;case 5:var N=null;switch(it.tag){case 26:N=it.memoizedState;case 5:case 27:var L=it;if(N?zN(N):L.stateNode.complete){jt=0,ni=null;var Q=L.sibling;if(Q!==null)it=Q;else{var re=L.return;re!==null?(it=re,ov(re)):it=null}break t}}jt=0,ni=null,Gu(s,c,S,5);break;case 6:jt=0,ni=null,Gu(s,c,S,6);break;case 8:B2(),nn=6;break e;default:throw Error(i(462))}}hJ();break}catch(de){VR(s,de)}while(!0);return Yo=Oc=null,O.H=g,O.A=w,xt=p,it!==null?0:(Pt=null,st=0,Cb(),nn)}function hJ(){for(;it!==null&&!ln();)ZR(it)}function ZR(s){var c=kR(s.alternate,s,as);s.memoizedProps=s.pendingProps,c===null?ov(s):it=c}function JR(s){var c=s,p=c.alternate;switch(c.tag){case 15:case 0:c=gR(p,c,c.pendingProps,c.type,void 0,st);break;case 11:c=gR(p,c,c.pendingProps,c.type.render,c.ref,st);break;case 5:a2(c);default:SR(p,c),c=it=Q6(c,as),c=kR(p,c,as)}s.memoizedProps=s.pendingProps,c===null?ov(s):it=c}function Gu(s,c,p,g){Yo=Oc=null,a2(c),Pu=null,_m=0;var w=c.return;try{if(eJ(s,w,c,p,st)){nn=1,Yb(s,Ai(p,s.current)),it=null;return}}catch(S){if(w!==null)throw it=w,S;nn=1,Yb(s,Ai(p,s.current)),it=null;return}c.flags&32768?(ut||g===1?s=!0:Bu||(st&536870912)!==0?s=!1:(pl=s=!0,(g===2||g===9||g===3||g===6)&&(g=ei.current,g!==null&&g.tag===13&&(g.flags|=16384))),eN(c,s)):ov(c)}function ov(s){var c=s;do{if((c.flags&32768)!==0){eN(c,pl);return}s=c.return;var p=aJ(c.alternate,c,as);if(p!==null){it=p;return}if(c=c.sibling,c!==null){it=c;return}it=c=s}while(c!==null);nn===0&&(nn=5)}function eN(s,c){do{var p=iJ(s.alternate,s);if(p!==null){p.flags&=32767,it=p;return}if(p=s.return,p!==null&&(p.flags|=32768,p.subtreeFlags=0,p.deletions=null),!c&&(s=s.sibling,s!==null)){it=s;return}it=s=p}while(s!==null);nn=6,it=null}function tN(s,c,p,g,w,S,N,L,Q){s.cancelPendingCommit=null;do sv();while(vn!==0);if((xt&6)!==0)throw Error(i(327));if(c!==null){if(c===s.current)throw Error(i(177));if(S=c.lanes|c.childLanes,S|=Ek,Jr(s,p,S,N,L,Q),s===Pt&&(it=Pt=null,st=0),$u=c,gl=s,is=p,z2=S,L2=w,FR=g,(c.subtreeFlags&10256)!==0||(c.flags&10256)!==0?(s.callbackNode=null,s.callbackPriority=0,gJ(Qa,function(){return oN(),null})):(s.callbackNode=null,s.callbackPriority=0),g=(c.flags&13878)!==0,(c.subtreeFlags&13878)!==0||g){g=O.T,O.T=null,w=B.p,B.p=2,N=xt,xt|=4;try{rJ(s,c,p)}finally{xt=N,B.p=w,O.T=g}}vn=1,nN(),aN(),iN()}}function nN(){if(vn===1){vn=0;var s=gl,c=$u,p=(c.flags&13878)!==0;if((c.subtreeFlags&13878)!==0||p){p=O.T,O.T=null;var g=B.p;B.p=2;var w=xt;xt|=4;try{DR(c,s);var S=ej,N=q6(s.containerInfo),L=S.focusedElem,Q=S.selectionRange;if(N!==L&&L&&L.ownerDocument&&B6(L.ownerDocument.documentElement,L)){if(Q!==null&&Ck(L)){var re=Q.start,de=Q.end;if(de===void 0&&(de=re),"selectionStart"in L)L.selectionStart=re,L.selectionEnd=Math.min(de,L.value.length);else{var fe=L.ownerDocument||document,oe=fe&&fe.defaultView||window;if(oe.getSelection){var ce=oe.getSelection(),Ee=L.textContent.length,qe=Math.min(Q.start,Ee),Mt=Q.end===void 0?qe:Math.min(Q.end,Ee);!ce.extend&&qe>Mt&&(N=Mt,Mt=qe,qe=N);var te=U6(L,qe),Z=U6(L,Mt);if(te&&Z&&(ce.rangeCount!==1||ce.anchorNode!==te.node||ce.anchorOffset!==te.offset||ce.focusNode!==Z.node||ce.focusOffset!==Z.offset)){var ie=fe.createRange();ie.setStart(te.node,te.offset),ce.removeAllRanges(),qe>Mt?(ce.addRange(ie),ce.extend(Z.node,Z.offset)):(ie.setEnd(Z.node,Z.offset),ce.addRange(ie))}}}}for(fe=[],ce=L;ce=ce.parentNode;)ce.nodeType===1&&fe.push({element:ce,left:ce.scrollLeft,top:ce.scrollTop});for(typeof L.focus=="function"&&L.focus(),L=0;L<fe.length;L++){var me=fe[L];me.element.scrollLeft=me.left,me.element.scrollTop=me.top}}vv=!!J2,ej=J2=null}finally{xt=w,B.p=g,O.T=p}}s.current=c,vn=2}}function aN(){if(vn===2){vn=0;var s=gl,c=$u,p=(c.flags&8772)!==0;if((c.subtreeFlags&8772)!==0||p){p=O.T,O.T=null;var g=B.p;B.p=2;var w=xt;xt|=4;try{RR(s,c.alternate,c)}finally{xt=w,B.p=g,O.T=p}}vn=3}}function iN(){if(vn===4||vn===3){vn=0,Ct();var s=gl,c=$u,p=is,g=FR;(c.subtreeFlags&10256)!==0||(c.flags&10256)!==0?vn=5:(vn=0,$u=gl=null,rN(s,s.pendingLanes));var w=s.pendingLanes;if(w===0&&(fl=null),ok(p),c=c.stateNode,At&&typeof At.onCommitFiberRoot=="function")try{At.onCommitFiberRoot(An,c,void 0,(c.current.flags&128)===128)}catch{}if(g!==null){c=O.T,w=B.p,B.p=2,O.T=null;try{for(var S=s.onRecoverableError,N=0;N<g.length;N++){var L=g[N];S(L.value,{componentStack:L.stack})}}finally{O.T=c,B.p=w}}(is&3)!==0&&sv(),io(s),w=s.pendingLanes,(p&261930)!==0&&(w&42)!==0?s===U2?Gm++:(Gm=0,U2=s):Gm=0,Hm(0)}}function rN(s,c){(s.pooledCacheLanes&=c)===0&&(c=s.pooledCache,c!=null&&(s.pooledCache=null,Am(c)))}function sv(){return nN(),aN(),iN(),oN()}function oN(){if(vn!==5)return!1;var s=gl,c=z2;z2=0;var p=ok(is),g=O.T,w=B.p;try{B.p=32>p?32:p,O.T=null,p=L2,L2=null;var S=gl,N=is;if(vn=0,$u=gl=null,is=0,(xt&6)!==0)throw Error(i(331));var L=xt;if(xt|=4,BR(S.current),zR(S,S.current,N,p),xt=L,Hm(0,!1),At&&typeof At.onPostCommitFiberRoot=="function")try{At.onPostCommitFiberRoot(An,S)}catch{}return!0}finally{B.p=w,O.T=g,rN(s,c)}}function sN(s,c,p){c=Ai(p,c),c=b2(s.stateNode,c,2),s=cl(s,c,2),s!==null&&(Dn(s,2),io(s))}function St(s,c,p){if(s.tag===3)sN(s,s,p);else for(;c!==null;){if(c.tag===3){sN(c,s,p);break}else if(c.tag===1){var g=c.stateNode;if(typeof c.type.getDerivedStateFromError=="function"||typeof g.componentDidCatch=="function"&&(fl===null||!fl.has(g))){s=Ai(p,s),p=lR(2),g=cl(c,p,2),g!==null&&(cR(p,g,c,s),Dn(g,2),io(g));break}}c=c.return}}function $2(s,c,p){var g=s.pingCache;if(g===null){g=s.pingCache=new lJ;var w=new Set;g.set(c,w)}else w=g.get(c),w===void 0&&(w=new Set,g.set(c,w));w.has(p)||(I2=!0,w.add(p),s=pJ.bind(null,s,c,p),c.then(s,s))}function pJ(s,c,p){var g=s.pingCache;g!==null&&g.delete(c),s.pingedLanes|=s.suspendedLanes&p,s.warmLanes&=~p,Pt===s&&(st&p)===p&&(nn===4||nn===3&&(st&62914560)===st&&300>Qt()-tv?(xt&2)===0&&Fu(s,0):D2|=p,qu===st&&(qu=0)),io(s)}function lN(s,c){c===0&&(c=Ot()),s=Ec(s,c),s!==null&&(Dn(s,c),io(s))}function mJ(s){var c=s.memoizedState,p=0;c!==null&&(p=c.retryLane),lN(s,p)}function fJ(s,c){var p=0;switch(s.tag){case 31:case 13:var g=s.stateNode,w=s.memoizedState;w!==null&&(p=w.retryLane);break;case 19:g=s.stateNode;break;case 22:g=s.stateNode._retryCache;break;default:throw Error(i(314))}g!==null&&g.delete(c),lN(s,p)}function gJ(s,c){return Xa(s,c)}var lv=null,Hu=null,F2=!1,cv=!1,G2=!1,bl=0;function io(s){s!==Hu&&s.next===null&&(Hu===null?lv=Hu=s:Hu=Hu.next=s),cv=!0,F2||(F2=!0,bJ())}function Hm(s,c){if(!G2&&cv){G2=!0;do for(var p=!1,g=lv;g!==null;){if(s!==0){var w=g.pendingLanes;if(w===0)var S=0;else{var N=g.suspendedLanes,L=g.pingedLanes;S=(1<<31-hn(42|s)+1)-1,S&=w&~(N&~L),S=S&201326741?S&201326741|1:S?S|2:0}S!==0&&(p=!0,hN(g,S))}else S=st,S=hu(g,g===Pt?S:0,g.cancelPendingCommit!==null||g.timeoutHandle!==-1),(S&3)===0||Ge(g,S)||(p=!0,hN(g,S));g=g.next}while(p);G2=!1}}function yJ(){cN()}function cN(){cv=F2=!1;var s=0;bl!==0&&_J()&&(s=bl);for(var c=Qt(),p=null,g=lv;g!==null;){var w=g.next,S=dN(g,c);S===0?(g.next=null,p===null?lv=w:p.next=w,w===null&&(Hu=p)):(p=g,(s!==0||(S&3)!==0)&&(cv=!0)),g=w}vn!==0&&vn!==5||Hm(s),bl!==0&&(bl=0)}function dN(s,c){for(var p=s.suspendedLanes,g=s.pingedLanes,w=s.expirationTimes,S=s.pendingLanes&-62914561;0<S;){var N=31-hn(S),L=1<<N,Q=w[N];Q===-1?((L&p)===0||(L&g)!==0)&&(w[N]=wt(L,c)):Q<=c&&(s.expiredLanes|=L),S&=~L}if(c=Pt,p=st,p=hu(s,s===c?p:0,s.cancelPendingCommit!==null||s.timeoutHandle!==-1),g=s.callbackNode,p===0||s===c&&(jt===2||jt===9)||s.cancelPendingCommit!==null)return g!==null&&g!==null&&en(g),s.callbackNode=null,s.callbackPriority=0;if((p&3)===0||Ge(s,p)){if(c=p&-p,c===s.callbackPriority)return c;switch(g!==null&&en(g),ok(p)){case 2:case 8:p=ki;break;case 32:p=Qa;break;case 268435456:p=Zr;break;default:p=Qa}return g=uN.bind(null,s),p=Xa(p,g),s.callbackPriority=c,s.callbackNode=p,c}return g!==null&&g!==null&&en(g),s.callbackPriority=2,s.callbackNode=null,2}function uN(s,c){if(vn!==0&&vn!==5)return s.callbackNode=null,s.callbackPriority=0,null;var p=s.callbackNode;if(sv()&&s.callbackNode!==p)return null;var g=st;return g=hu(s,s===Pt?g:0,s.cancelPendingCommit!==null||s.timeoutHandle!==-1),g===0?null:(HR(s,g,c),dN(s,Qt()),s.callbackNode!=null&&s.callbackNode===p?uN.bind(null,s):null)}function hN(s,c){if(sv())return null;HR(s,c,!0)}function bJ(){EJ(function(){(xt&6)!==0?Xa(In,yJ):cN()})}function H2(){if(bl===0){var s=Ru;s===0&&(s=Cc,Cc<<=1,(Cc&261888)===0&&(Cc=256)),bl=s}return bl}function pN(s){return s==null||typeof s=="symbol"||typeof s=="boolean"?null:typeof s=="function"?s:yb(""+s)}function mN(s,c){var p=c.ownerDocument.createElement("input");return p.name=c.name,p.value=c.value,s.id&&p.setAttribute("form",s.id),c.parentNode.insertBefore(p,c),s=new FormData(s),p.parentNode.removeChild(p),s}function vJ(s,c,p,g,w){if(c==="submit"&&p&&p.stateNode===w){var S=pN((w[Ea]||null).action),N=g.submitter;N&&(c=(c=N[Ea]||null)?pN(c.formAction):N.getAttribute("formAction"),c!==null&&(S=c,N=null));var L=new wb("action","action",null,g,w);s.push({event:L,listeners:[{instance:null,listener:function(){if(g.defaultPrevented){if(bl!==0){var Q=N?mN(w,N):new FormData(w);h2(p,{pending:!0,data:Q,method:w.method,action:S},null,Q)}}else typeof S=="function"&&(L.preventDefault(),Q=N?mN(w,N):new FormData(w),h2(p,{pending:!0,data:Q,method:w.method,action:S},S,Q))},currentTarget:w}]})}}for(var Y2=0;Y2<Mk.length;Y2++){var V2=Mk[Y2],xJ=V2.toLowerCase(),wJ=V2[0].toUpperCase()+V2.slice(1);ur(xJ,"on"+wJ)}ur(G6,"onAnimationEnd"),ur(H6,"onAnimationIteration"),ur(Y6,"onAnimationStart"),ur("dblclick","onDoubleClick"),ur("focusin","onFocus"),ur("focusout","onBlur"),ur(WZ,"onTransitionRun"),ur(zZ,"onTransitionStart"),ur(LZ,"onTransitionCancel"),ur(V6,"onTransitionEnd"),yu("onMouseEnter",["mouseout","mouseover"]),yu("onMouseLeave",["mouseout","mouseover"]),yu("onPointerEnter",["pointerout","pointerover"]),yu("onPointerLeave",["pointerout","pointerover"]),Ac("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),Ac("onSelect","focusout contextmenu dragend focu
48sin keydown keyup mousedown mouseup selectionchange".split(" ")),Ac("onBeforeInput",["compositionend","keypress","textInput","paste"]),Ac("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),Ac("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),Ac("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Ym="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(" "),kJ=new Set("beforetoggle cancel close invalid load scroll scrollend toggle".split(" ").concat(Ym));function fN(s,c){c=(c&4)!==0;for(var p=0;p<s.length;p++){var g=s[p],w=g.event;g=g.listeners;e:{var S=void 0;if(c)for(var N=g.length-1;0<=N;N--){var L=g[N],Q=L.instance,re=L.currentTarget;if(L=L.listener,Q!==S&&w.isPropagationStopped())break e;S=L,w.currentTarget=re;try{S(w)}catch(de){Sb(de)}w.currentTarget=null,S=Q}else for(N=0;N<g.length;N++){if(L=g[N],Q=L.instance,re=L.currentTarget,L=L.listener,Q!==S&&w.isPropagationStopped())break e;S=L,w.currentTarget=re;try{S(w)}catch(de){Sb(de)}w.currentTarget=null,S=Q}}}}function rt(s,c){var p=c[sk];p===void 0&&(p=c[sk]=new Set);var g=s+"__bubble";p.has(g)||(gN(c,s,2,!1),p.add(g))}function K2(s,c,p){var g=0;c&&(g|=4),gN(p,s,g,c)}var dv="_reactListening"+Math.random().toString(36).slice(2);function X2(s){if(!s[dv]){s[dv]=!0,c6.forEach(function(p){p!=="selectionchange"&&(kJ.has(p)||K2(p,!1,s),K2(p,!0,s))});var c=s.nodeType===9?s:s.ownerDocument;c===null||c[dv]||(c[dv]=!0,K2("selectionchange",!1,c))}}function gN(s,c,p,g){switch(GN(c)){case 2:var w=XJ;break;case 8:w=QJ;break;default:w=uj}p=w.bind(null,c,p,s),w=void 0,!gk||c!=="touchstart"&&c!=="touchmove"&&c!=="wheel"||(w=!0),g?w!==void 0?s.addEventListener(c,p,{capture:!0,passive:w}):s.addEventListener(c,p,!0):w!==void 0?s.addEventListener(c,p,{passive:w}):s.addEventListener(c,p,!1)}function Q2(s,c,p,g,w){var S=g;if((c&1)===0&&(c&2)===0&&g!==null)e:for(;;){if(g===null)return;var N=g.tag;if(N===3||N===4){var L=g.stateNode.containerInfo;if(L===w)break;if(N===4)for(N=g.return;N!==null;){var Q=N.tag;if((Q===3||Q===4)&&N.stateNode.containerInfo===w)return;N=N.return}for(;L!==null;){if(N=mu(L),N===null)return;if(Q=N.tag,Q===5||Q===6||Q===26||Q===27){g=S=N;continue e}L=L.parentNode}}g=g.return}w6(function(){var re=S,de=mk(p),fe=[];e:{var oe=K6.get(s);if(oe!==void 0){var ce=wb,Ee=s;switch(s){case"keypress":if(vb(p)===0)break e;case"keydown":case"keyup":ce=fZ;break;case"focusin":Ee="focus",ce=xk;break;case"focusout":Ee="blur",ce=xk;break;case"beforeblur":case"afterblur":ce=xk;break;case"click":if(p.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":ce=S6;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":ce=aZ;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":ce=bZ;break;case G6:case H6:case Y6:ce=oZ;break;case V6:ce=xZ;break;case"scroll":case"scrollend":ce=tZ;break;case"wheel":ce=kZ;break;case"copy":case"cut":case"paste":ce=lZ;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":ce=A6;break;case"toggle":case"beforetoggle":ce=SZ}var qe=(c&4)!==0,Mt=!qe&&(s==="scroll"||s==="scrollend"),te=qe?oe!==null?oe+"Capture":null:oe;qe=[];for(var Z=re,ie;Z!==null;){var me=Z;if(ie=me.stateNode,me=me.tag,me!==5&&me!==26&&me!==27||ie===null||te===null||(me=fm(Z,te),me!=null&&qe.push(Vm(Z,me,ie))),Mt)break;Z=Z.return}0<qe.length&&(oe=new ce(oe,Ee,null,p,de),fe.push({event:oe,listeners:qe}))}}if((c&7)===0){e:{if(oe=s==="mouseover"||s==="pointerover",ce=s==="mouseout"||s==="pointerout",oe&&p!==pk&&(Ee=p.relatedTarget||p.fromElement)&&(mu(Ee)||Ee[pu]))break e;if((ce||oe)&&(oe=de.window===de?de:(oe=de.ownerDocument)?oe.defaultView||oe.parentWindow:window,ce?(Ee=p.relatedTarget||p.toElement,ce=re,Ee=Ee?mu(Ee):null,Ee!==null&&(Mt=o(Ee),qe=Ee.tag,Ee!==Mt||qe!==5&&qe!==27&&qe!==6)&&(Ee=null)):(ce=null,Ee=re),ce!==Ee)){if(qe=S6,me="onMouseLeave",te="onMouseEnter",Z="mouse",(s==="pointerout"||s==="pointerover")&&(qe=A6,me="onPointerLeave",te="onPointerEnter",Z="pointer"),Mt=ce==null?oe:mm(ce),ie=Ee==null?oe:mm(Ee),oe=new qe(me,Z+"leave",ce,p,de),oe.target=Mt,oe.relatedTarget=ie,me=null,mu(de)===re&&(qe=new qe(te,Z+"enter",Ee,p,de),qe.target=ie,qe.relatedTarget=Mt,me=qe),Mt=me,ce&&Ee)t:{for(qe=jJ,te=ce,Z=Ee,ie=0,me=te;me;me=qe(me))ie++;me=0;for(var Le=Z;Le;Le=qe(Le))me++;for(;0<ie-me;)te=qe(te),ie--;for(;0<me-ie;)Z=qe(Z),me--;for(;ie--;){if(te===Z||Z!==null&&te===Z.alternate){qe=te;break t}te=qe(te),Z=qe(Z)}qe=null}else qe=null;ce!==null&&yN(fe,oe,ce,qe,!1),Ee!==null&&Mt!==null&&yN(fe,Mt,Ee,qe,!0)}}
vendor: 5,244 bytes, lines 48-49
48e:{if(oe=re?mm(re):window,ce=oe.nodeName&&oe.nodeName.toLowerCase(),ce==="select"||ce==="input"&&oe.type==="file")var ft=P6;else if(N6(oe))if(I6)ft=PZ;else{ft=NZ;var Ne=RZ}else ce=oe.nodeName,!ce||ce.toLowerCase()!=="input"||oe.type!=="checkbox"&&oe.type!=="radio"?re&&hk(re.elementType)&&(ft=P6):ft=OZ;if(ft&&(ft=ft(s,re))){O6(fe,ft,p,de);break e}Ne&&Ne(s,oe,re),s==="focusout"&&re&&oe.type==="number"&&re.memoizedProps.value!=null&&uk(oe,"number",oe.value)}switch(Ne=re?mm(re):window,s){case"focusin":(N6(Ne)||Ne.contentEditable==="true")&&(ju=Ne,Ak=re,jm=null);break;case"focusout":jm=Ak=ju=null;break;case"mousedown":Tk=!0;break;case"contextmenu":case"mouseup":case"dragend":Tk=!1,$6(fe,p,de);break;case"selectionchange":if(DZ)break;case"keydown":case"keyup":$6(fe,p,de)}var tt;if(kk)e:{switch(s){case"compositionstart":var lt="onCompositionStart";break e;case"compositionend":lt="onCompositionEnd";break e;case"compositionupdate":lt="onCompositionUpdate";break e}lt=void 0}else ku?E6(s,p)&&(lt="onCompositionEnd"):s==="keydown"&&p.keyCode===229&&(lt="onCompositionStart");lt&&(T6&&p.locale!=="ko"&&(ku||lt!=="onCompositionStart"?lt==="onCompositionEnd"&&ku&&(tt=k6()):(nl=de,yk="value"in nl?nl.value:nl.textContent,ku=!0)),Ne=uv(re,lt),0<Ne.length&&(lt=new C6(lt,s,null,p,de),fe.push({event:lt,listeners:Ne}),tt?lt.data=tt:(tt=R6(p),tt!==null&&(lt.data=tt)))),(tt=AZ?TZ(s,p):_Z(s,p))&&(lt=uv(re,"onBeforeInput"),0<lt.length&&(Ne=new C6("onBeforeInput","beforeinput",null,p,de),fe.push({event:Ne,listeners:lt}),Ne.data=tt)),vJ(fe,s,re,p,de)}fN(fe,c)})}function Vm(s,c,p){return{instance:s,listener:c,currentTarget:p}}function uv(s,c){for(var p=c+"Capture",g=[];s!==null;){var w=s,S=w.stateNode;if(w=w.tag,w!==5&&w!==26&&w!==27||S===null||(w=fm(s,p),w!=null&&g.unshift(Vm(s,w,S)),w=fm(s,c),w!=null&&g.push(Vm(s,w,S))),s.tag===3)return g;s=s.return}return[]}function jJ(s){if(s===null)return null;do s=s.return;while(s&&s.tag!==5&&s.tag!==27);return s||null}function yN(s,c,p,g,w){for(var S=c._reactName,N=[];p!==null&&p!==g;){var L=p,Q=L.alternate,re=L.stateNode;if(L=L.tag,Q!==null&&Q===g)break;L!==5&&L!==26&&L!==27||re===null||(Q=re,w?(re=fm(p,S),re!=null&&N.unshift(Vm(p,re,Q))):w||(re=fm(p,S),re!=null&&N.push(Vm(p,re,Q)))),p=p.return}N.length!==0&&s.push({event:c,listeners:N})}var SJ=/\r\n?/g,CJ=/\u0000|\uFFFD/g;function bN(s){return(typeof s=="string"?s:""+s).replace(SJ,`
49`).replace(CJ,"")}function vN(s,c){return c=bN(c),bN(s)===c}function _t(s,c,p,g,w,S){switch(p){case"children":typeof g=="string"?c==="body"||c==="textarea"&&g===""||vu(s,g):(typeof g=="number"||typeof g=="bigint")&&c!=="body"&&vu(s,""+g);break;case"className":fb(s,"class",g);break;case"tabIndex":fb(s,"tabindex",g);break;case"dir":case"role":case"viewBox":case"width":case"height":fb(s,p,g);break;case"style":v6(s,g,S);break;case"data":if(c!=="object"){fb(s,"data",g);break}case"src":case"href":if(g===""&&(c!=="a"||p!=="href")){s.removeAttribute(p);break}if(g==null||typeof g=="function"||typeof g=="symbol"||typeof g=="boolean"){s.removeAttribute(p);break}g=yb(""+g),s.setAttribute(p,g);break;case"action":case"formAction":if(typeof g=="function"){s.setAttribute(p,"javascript:throw new Error('A React form was unexpectedly submitted. If you called form.submit() manually, consider using form.requestSubmit() instead. If you\\'re trying to use event.stopPropagation() in a submit event handler, consider also calling event.preventDefault().')");break}else typeof S=="function"&&(p==="formAction"?(c!=="input"&&_t(s,c,"name",w.name,w,null),_t(s,c,"formEncType",w.formEncType,w,null),_t(s,c,"formMethod",w.formMethod,w,null),_t(s,c,"formTarget",w.formTarget,w,null)):(_t(s,c,"encType",w.encType,w,null),_t(s,c,"method",w.method,w,null),_t(s,c,"target",w.target,w,null)));if(g==null||typeof g=="symbol"||typeof g=="boolean"){s.removeAttribute(p);break}g=yb(""+g),s.setAttribute(p,g);break;case"onClick":g!=null&&(s.onclick=$o);break;case"onScroll":g!=null&&rt("scroll",s);break;case"onScrollEnd":g!=null&&rt("scrollend",s);break;case"dangerouslySetInnerHTML":if(g!=null){if(typeof g!="object"||!("__html"in g))throw Error(i(61));if(p=g.__html,p!=null){if(w.children!=null)throw Error(i(60));s.innerHTML=p}}break;case"multiple":s.multiple=g&&typeof g!="function"&&typeof g!="symbol";break;case"muted":s.muted=g&&typeof g!="function"&&typeof g!="symbol";break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"defaultValue":case"defaultChecked":case"innerHTML":case"ref":break;case"autoFocus":break;case"xlinkHref":if(g==null||typeof g=="function"||typeof g=="boolean"||typeof g=="symbol"){s.removeAttribute("xlink:href");break}p=yb(""+g),s.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",p);break;case"contentEditable":case"spellCheck":case"draggable":case"value":case"autoReverse":case"externalResourcesRequired":case"focusable":case"preserveAlpha":g!=null&&typeof g!="function"&&typeof g!="symbol"?s.setAttribute(p,""+g):s.removeAttribute(p);break;case"inert":case"allowFullScreen":case"async":case"autoPlay":case"controls":case"default":case"defer":case"disabled":case"disablePictureInPicture":case"disableRemotePlayback":case"formNoValidate":case"hidden":case"loop":case"noModule":case"noValidate":case"open":case"playsInl
49ine":case"readOnly":case"required":case"reversed":case"scoped":case"seamless":case"itemScope":g&&typeof g!="function"&&typeof g!="symbol"?s.setAttribute(p,""):s.removeAttribute(p);break;case"capture":case"download":g===!0?s.setAttribute(p,""):g!==!1&&g!=null&&typeof g!="function"&&typeof g!="symbol"?s.setAttribute(p,g):s.removeAttribute(p);break;case"cols":case"rows":case"size":case"span":g!=null&&typeof g!="function"&&typeof g!="symbol"&&!isNaN(g)&&1<=g?s.setAttribute(p,g):s.removeAttribute(p);break;case"rowSpan":case"start":g==null||typeof g=="function"||typeof g=="symbol"||isNaN(g)?s.removeAttribute(p):s.setAttribute(p,g);break;case"popover":rt("beforetoggle",s),rt("toggle",s),mb(s,"popover",g);break;case"xlinkActuate":qo(s,"http://www.w3.org/1999/xlink","xlink:actuate",g);break;case"xlinkArcrole":qo(s,"http://www.w3.org/1999/xlink","xlink:arcrole",g);break;case"xlinkRole":qo(s,"http://www.w3.org/1999/xlink","xlink:role",g);break;case"xlinkShow":qo(s,"http://www.w3.org/1999/xlink","xlink:show",g);break;case"xlinkTitle":qo(s,"http://www.w3.org/1999/xlink","xlink:title",g);break;case"xlinkType":qo(s,"http://www.w3.org/1999/xlink","xlink:type",g);break;case"xmlBase":qo(s,"http://www.w3.org/XML/1998/namespace","xml:base",g);break;case"xmlLang":qo(s,"http://www.w3.org/XML/1998/namespace","xml:lang",g);break;case"xmlSpace":qo(s,"http://www.w3.org/XML/1998/namespace","xml:space",g);break;case"is":mb(s,"is",g);break;case"innerText":case"textContent":break;default:(!(2<p.length)||p[0]!=="o"&&p[0]!=="O"||p[1]!=="n"&&p[1]!=="N")&&(p=JQ.get(p)||p,mb(s,p,g))}}function Z2(s,c,p,g,w,S){switch(p){case"style":v6(s,g,S);break;case"dangerouslySetInnerHTML":if(g!=null){if(typeof g!="object"||!("__html"in g))throw Error(i(61));if(p=g.__html,p!=null){if(w.children!=null)throw Error(i(60));s.innerHTML=p}}break;case"children":typeof g=="string"?vu(s,g):(typeof g=="number"||typeof g=="bigint")&&vu(s,""+g);break;case"onScroll":g!=null&&rt("scroll",s);break;case"onScrollEnd":g!=null&&rt("scrollend",s);break;case"onClick":g!=null&&(s.onclick=$o);break;case"suppressContentEditableWarning":case"suppressHydrationWarning":case"innerHTML":case"ref":break;case"innerText":case"textContent":break;default:if(!d6.hasOwnProperty(p))e:{if(p[0]==="o"&&p[1]==="n"&&(w=p.endsWith("Capture"),c=p.slice(2,w?p.length-7:void 0),S=s[Ea]||null,S=S!=null?S[p]:null,typeof S=="function"&&s.removeEventListener(c,S,w),typeof g=="function")){typeof S!="function"&&S!==null&&(p in s?s[p]=null:s.hasAttribute(p)&&s.removeAttribute(p)),s.addEventListener(c,g,w);break e}p in s?s[p]=g:g===!0?s.setAttribute(p,""):mb(s,p,g)}}}function Bn(s,c,p){switch(c){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"img":rt("error",s),rt("load",s);var g=!1,w=!1,S;for(S in p)if(p.hasOwnProperty(S)){var N=p[S];if(N!=null)switch(S){case"src":g=!0;break;case"srcSet":w=!0;break;case"children":case"dangerouslySetInnerHTML":throw Error(i(137,c));default:_t(s,c,S,N,p,null)}}w&&_t(s,c,"srcSet",p.srcSet,p,null),g&&_t(s,c,"src",p.src,p,null);return;case"input":rt("invalid",s);var L=S=N=w=null,Q=null,re=null;for(g in p)if(p.hasOwnProperty(g)){var de=p[g];if(de!=null)switch(g){case"name":w=de;break;case"type":N=de;break;case"checked":Q=de;break;case"defaultChecked":re=de;break;case"value":S=de;break;case"defaultValue":L=de;break;case"children":case"dangerouslySetInnerHTML":if(de!=null)throw Error(i(137,c));break;default:_t(s,c,g,de,p,null)}}f6(s,S,L,Q,re,N,w,!1);return;case"select":rt("invalid",s),g=N=S=null;for(w in p)if(p.hasOwnProperty(w)&&(L=p[w],L!=null))switch(w){case"value":S=L;break;case"defaultValue":N=L;break;case"multiple":g=L;default:_t(s,c,w,L,p,null)}c=S,p=N,s.multiple=!!g,c!=null?bu(s,!!g,c,!1):p!=null&&bu(s,!!g,p,!0);return;case"textarea":rt("invalid",s),S=w=g=null;for(N in p)if(p.hasOwnProperty(N)&&(L=p[N],L!=null))switch(N){case"value":g=L;break;case"defaultValue":w=L;break;case"children":S=L;break;case"dangerouslySetInnerHTML":if(L!=null)throw Error(i(91));break;default:_t(s,c,N,L,p,null)}y6(s,g,w,S);return;case"option":for(Q in p)if(p.hasOwnProperty(Q)&&(g=p[Q],g!=null))switch(Q){case"selected":s.selected=g&&typeof g!="function"&&typeof g!="symbol";break;default:_t(s,c,Q,g,p,null)}return;case"dialog":rt("beforetoggle",s),rt("toggle",s),rt("cancel",s),rt("close",s
vendor: 4,685 bytes, line 49
49);break;case"iframe":case"object":rt("load",s);break;case"video":case"audio":for(g=0;g<Ym.length;g++)rt(Ym[g],s);break;case"image":rt("error",s),rt("load",s);break;case"details":rt("toggle",s);break;case"embed":case"source":case"link":rt("error",s),rt("load",s);case"area":case"base":case"br":case"col":case"hr":case"keygen":case"meta":case"param":case"track":case"wbr":case"menuitem":for(re in p)if(p.hasOwnProperty(re)&&(g=p[re],g!=null))switch(re){case"children":case"dangerouslySetInnerHTML":throw Error(i(137,c));default:_t(s,c,re,g,p,null)}return;default:if(hk(c)){for(de in p)p.hasOwnProperty(de)&&(g=p[de],g!==void 0&&Z2(s,c,de,g,p,void 0));return}}for(L in p)p.hasOwnProperty(L)&&(g=p[L],g!=null&&_t(s,c,L,g,p,null))}function AJ(s,c,p,g){switch(c){case"div":case"span":case"svg":case"path":case"a":case"g":case"p":case"li":break;case"input":var w=null,S=null,N=null,L=null,Q=null,re=null,de=null;for(ce in p){var fe=p[ce];if(p.hasOwnProperty(ce)&&fe!=null)switch(ce){case"checked":break;case"value":break;case"defaultValue":Q=fe;default:g.hasOwnProperty(ce)||_t(s,c,ce,null,g,fe)}}for(var oe in g){var ce=g[oe];if(fe=p[oe],g.hasOwnProperty(oe)&&(ce!=null||fe!=null))switch(oe){case"type":S=ce;break;case"name":w=ce;break;case"checked":re=ce;break;case"defaultChecked":de=ce;break;case"value":N=ce;break;case"defaultValue":L=ce;break;case"children":case"dangerouslySetInnerHTML":if(ce!=null)throw Error(i(137,c));break;default:ce!==fe&&_t(s,c,oe,ce,g,fe)}}dk(s,N,L,Q,re,de,S,w);return;case"select":ce=N=L=oe=null;for(S in p)if(Q=p[S],p.hasOwnProperty(S)&&Q!=null)switch(S){case"value":break;case"multiple":ce=Q;default:g.hasOwnProperty(S)||_t(s,c,S,null,g,Q)}for(w in g)if(S=g[w],Q=p[w],g.hasOwnProperty(w)&&(S!=null||Q!=null))switch(w){case"value":oe=S;break;case"defaultValue":L=S;break;case"multiple":N=S;default:S!==Q&&_t(s,c,w,S,g,Q)}c=L,p=N,g=ce,oe!=null?bu(s,!!p,oe,!1):!!g!=!!p&&(c!=null?bu(s,!!p,c,!0):bu(s,!!p,p?[]:"",!1));return;case"textarea":ce=oe=null;for(L in p)if(w=p[L],p.hasOwnProperty(L)&&w!=null&&!g.hasOwnProperty(L))switch(L){case"value":break;case"children":break;default:_t(s,c,L,null,g,w)}for(N in g)if(w=g[N],S=p[N],g.hasOwnProperty(N)&&(w!=null||S!=null))switch(N){case"value":oe=w;break;case"defaultValue":ce=w;break;case"children":break;case"dangerouslySetInnerHTML":if(w!=null)throw Error(i(91));break;default:w!==S&&_t(s,c,N,w,g,S)}g6(s,oe,ce);return;case"option":for(var Ee in p)if(oe=p[Ee],p.hasOwnProperty(Ee)&&oe!=null&&!g.hasOwnProperty(Ee))switch(Ee){case"selected":s.selected=!1;break;default:_t(s,c,Ee,null,g,oe)}for(Q in g)if(oe=g[Q],ce=p[Q],g.hasOwnProperty(Q)&&oe!==ce&&(oe!=null||ce!=null))switch(Q){case"selected":s.selected=oe&&typeof oe!="function"&&typeof oe!="symbol";break;default:_t(s,c,Q,oe,g,ce)}return;case"img":case"link":case"area":case"base":case"br":case"col":case"embed":case"hr":case"keygen":case"meta":case"param":case"source":case"track":case"wbr":case"menuitem":for(var qe in p)oe=p[qe],p.hasOwnProperty(qe)&&oe!=null&&!g.hasOwnProperty(qe)&&_t(s,c,qe,null,g,oe);for(re in g)if(oe=g[re],ce=p[re],g.hasOwnProperty(re)&&oe!==ce&&(oe!=null||ce!=null))switch(re){case"children":case"dangerouslySetInnerHTML":if(oe!=null)throw Error(i(137,c));break;default:_t(s,c,re,oe,g,ce)}return;default:if(hk(c)){for(var Mt in p)oe=p[Mt],p.hasOwnProperty(Mt)&&oe!==void 0&&!g.hasOwnProperty(Mt)&&Z2(s,c,Mt,void 0,g,oe);for(de in g)oe=g[de],ce=p[de],!g.hasOwnProperty(de)||oe===ce||oe===void 0&&ce===void 0||Z2(s,c,de,oe,g,ce);return}}for(var te in p)oe=p[te],p.hasOwnProperty(te)&&oe!=null&&!g.hasOwnProperty(te)&&_t(s,c,te,null,g,oe);for(fe in g)oe=g[fe],ce=p[fe],!g.hasOwnProperty(fe)||oe===ce||oe==null&&ce==null||_t(s,c,fe,oe,g,ce)}function xN(s){switch(s){case"css":case"script":case"font":case"img":case"image":case"input":case"link":return!0;default:return!1}}function TJ(){if(typeof performance.getEntriesByType=="function"){for(var s=0,c=0,p=performance.getEntriesByType("resource"),g=0;g<p.length;g++){var w=p[g],S=w.transferSize,N=w.initiatorType,L=w.duration;if(S&&L&&xN(N)){for(N=0,L=w.responseEnd,g+=1;g<p.length;g++){var Q=p[g],re=Q.startTime;if(re>L)break;var de=Q.transferSize,fe=Q.initiatorType;de&&xN(fe)&&(Q=Q.responseEnd,N+=de*(Q<L?1:(L-re)/(Q-re)))}if(--g,c+=8*(S+N)/(w.duration/1e3),s++,10<s)break}}if(0<s)return c/s/1e6}return navigator.connection&&(s=navigator.connection.downlink,typeof s=="number")?s:5}var J2=null,ej=null;function hv(s){return s.nodeType===9?s:s.ownerDocument}function wN(s){switch(s){case"http://www.w3.org/2000/svg":return 1;case"http://www.w3.org/1998/Math/MathML":return 2;default:return 0}}function kN(s,c){if(s===0)switch(c){case"svg":return 1;case"math":return 2;default:return 0}
vendor: 14,100 bytes, line 49
49return s===1&&c==="foreignObject"?0:s}function tj(s,c){return s==="textarea"||s==="noscript"||typeof c.children=="string"||typeof c.children=="number"||typeof c.children=="bigint"||typeof c.dangerouslySetInnerHTML=="object"&&c.dangerouslySetInnerHTML!==null&&c.dangerouslySetInnerHTML.__html!=null}var nj=null;function _J(){var s=window.event;return s&&s.type==="popstate"?s===nj?!1:(nj=s,!0):(nj=null,!1)}var jN=typeof setTimeout=="function"?setTimeout:void 0,MJ=typeof clearTimeout=="function"?clearTimeout:void 0,SN=typeof Promise=="function"?Promise:void 0,EJ=typeof queueMicrotask=="function"?queueMicrotask:typeof SN<"u"?function(s){return SN.resolve(null).then(s).catch(RJ)}:jN;function RJ(s){setTimeout(function(){throw s})}function vl(s){return s==="head"}function CN(s,c){var p=c,g=0;do{var w=p.nextSibling;if(s.removeChild(p),w&&w.nodeType===8)if(p=w.data,p==="/$"||p==="/&"){if(g===0){s.removeChild(w),Xu(c);return}g--}else if(p==="$"||p==="$?"||p==="$~"||p==="$!"||p==="&")g++;else if(p==="html")Km(s.ownerDocument.documentElement);else if(p==="head"){p=s.ownerDocument.head,Km(p);for(var S=p.firstChild;S;){var N=S.nextSibling,L=S.nodeName;S[pm]||L==="SCRIPT"||L==="STYLE"||L==="LINK"&&S.rel.toLowerCase()==="stylesheet"||p.removeChild(S),S=N}}else p==="body"&&Km(s.ownerDocument.body);p=w}while(p);Xu(c)}function AN(s,c){var p=s;s=0;do{var g=p.nextSibling;if(p.nodeType===1?c?(p._stashedDisplay=p.style.display,p.style.display="none"):(p.style.display=p._stashedDisplay||"",p.getAttribute("style")===""&&p.removeAttribute("style")):p.nodeType===3&&(c?(p._stashedText=p.nodeValue,p.nodeValue=""):p.nodeValue=p._stashedText||""),g&&g.nodeType===8)if(p=g.data,p==="/$"){if(s===0)break;s--}else p!=="$"&&p!=="$?"&&p!=="$~"&&p!=="$!"||s++;p=g}while(p)}function aj(s){var c=s.firstChild;for(c&&c.nodeType===10&&(c=c.nextSibling);c;){var p=c;switch(c=c.nextSibling,p.nodeName){case"HTML":case"HEAD":case"BODY":aj(p),lk(p);continue;case"SCRIPT":case"STYLE":continue;case"LINK":if(p.rel.toLowerCase()==="stylesheet")continue}s.removeChild(p)}}function NJ(s,c,p,g){for(;s.nodeType===1;){var w=p;if(s.nodeName.toLowerCase()!==c.toLowerCase()){if(!g&&(s.nodeName!=="INPUT"||s.type!=="hidden"))break}else if(g){if(!s[pm])switch(c){case"meta":if(!s.hasAttribute("itemprop"))break;return s;case"link":if(S=s.getAttribute("rel"),S==="stylesheet"&&s.hasAttribute("data-precedence"))break;if(S!==w.rel||s.getAttribute("href")!==(w.href==null||w.href===""?null:w.href)||s.getAttribute("crossorigin")!==(w.crossOrigin==null?null:w.crossOrigin)||s.getAttribute("title")!==(w.title==null?null:w.title))break;return s;case"style":if(s.hasAttribute("data-precedence"))break;return s;case"script":if(S=s.getAttribute("src"),(S!==(w.src==null?null:w.src)||s.getAttribute("type")!==(w.type==null?null:w.type)||s.getAttribute("crossorigin")!==(w.crossOrigin==null?null:w.crossOrigin))&&S&&s.hasAttribute("async")&&!s.hasAttribute("itemprop"))break;return s;default:return s}}else if(c==="input"&&s.type==="hidden"){var S=w.name==null?null:""+w.name;if(w.type==="hidden"&&s.getAttribute("name")===S)return s}else return s;if(s=Ri(s.nextSibling),s===null)break}return null}function OJ(s,c,p){if(c==="")return null;for(;s.nodeType!==3;)if((s.nodeType!==1||s.nodeName!=="INPUT"||s.type!=="hidden")&&!p||(s=Ri(s.nextSibling),s===null))return null;return s}function TN(s,c){for(;s.nodeType!==8;)if((s.nodeType!==1||s.nodeName!=="INPUT"||s.type!=="hidden")&&!c||(s=Ri(s.nextSibling),s===null))return null;return s}function ij(s){return s.data==="$?"||s.data==="$~"}function rj(s){return s.data==="$!"||s.data==="$?"&&s.ownerDocument.readyState!=="loading"}function PJ(s,c){var p=s.ownerDocument;if(s.data==="$~")s._reactRetry=c;else if(s.data!=="$?"||p.readyState!=="loading")c();else{var g=function(){c(),p.removeEventListener("DOMContentLoaded",g)};p.addEventListener("DOMContentLoaded",g),s._reactRetry=g}}function Ri(s){for(;s!=null;s=s.nextSibling){var c=s.nodeType;if(c===1||c===3)break;if(c===8){if(c=s.data,c==="$"||c==="$!"||c==="$?"||c==="$~"||c==="&"||c==="F!"||c==="F")break;if(c==="/$"||c==="/&")return null}}return s}var oj=null;function _N(s){s=s.nextSibling;for(var c=0;s;){if(s.nodeType===8){var p=s.data;if(p==="/$"||p==="/&"){if(c===0)return Ri(s.nextSibling);c--}else p!=="$"&&p!=="$!"&&p!=="$?"&&p!=="$~"&&p!=="&"||c++}s=s.nextSibling}return null}function MN(s){s=s.previousSibling;for(var c=0;s;){if(s.nodeType===8){var p=s.data;if(p==="$"||p==="$!"||p==="$?"||p==="$~"||p==="&"){if(c===0)return s;c--}else p!=="/$"&&p!=="/&"||c++}s=s.previousSibling}return null}function EN(s,c,p){switch(c=hv(p),s){case"html":if(s=c.documentElement,!s)throw Error(i(452));return s;case"head":if(s=c.head,!s)throw Error(i(453));return s;case"body":if(s=c.body,!s)throw Error(i(454));return s;default:throw Error(i(451))}}function Km(s){for(var c=s.attributes;c.length;)s.removeAttributeNode(c[0]);lk(s)}var Ni=new Map,RN=new Set;function pv(s){return typeof s.getRootNode=="function"?s.getRootNode():s.nodeType===9?s:s.ownerDocument}var rs=B.d;B.d={f:IJ,r:DJ,D:WJ,C:zJ,L:LJ,m:UJ,X:qJ,S:BJ,M:$J};function IJ(){var s=rs.f(),c=iv();return s||c}function DJ(s){var c=fu(s);c!==null&&c.tag===5&&c.type==="form"?V8(c):rs.r(s)}var Yu=typeof document>"u"?null:document;function NN(s,c,p){var g=Yu;if(g&&typeof c=="string"&&c){var w=Si(c);w='link[rel="'+s+'"][href="'+w+'"]',typeof p=="string"&&(w+='[crossorigin="'+p+'"]'),RN.has(w)||(RN.add(w),s={rel:s,crossOrigin:p,href:c},g.querySelector(w)===null&&(c=g.createElement("link"),Bn(c,"link",s),Tn(c),g.head.appendChild(c)))}}function WJ(s){rs.D(s),NN("dns-prefetch",s,null)}function zJ(s,c){rs.C(s,c),NN("preconnect",s,c)}function LJ(s,c,p){rs.L(s,c,p);var g=Yu;if(g&&s&&c){var w='link[rel="preload"][as="'+Si(c)+'"]';c==="image"&&p&&p.imageSrcSet?(w+='[imagesrcset="'+Si(p.imageSrcSet)+'"]',typeof p.imageSizes=="string"&&(w+='[imagesizes="'+Si(p.imageSizes)+'"]')):w+='[href="'+Si(s)+'"]';var S=w;switch(c){case"style":S=Vu(s);break;case"script":S=Ku(s)}Ni.has(S)||(s=f({rel:"preload",href:c==="image"&&p&&p.imageSrcSet?void 0:s,as:c},p),Ni.set(S,s),g.querySelector(w)!==null||c==="style"&&g.querySelector(Xm(S))||c==="script"&&g.querySelector(Qm(S))||(c=g.createElement("link"),Bn(c,"link",s),Tn(c),g.head.appendChild(c)))}}function UJ(s,c){rs.m(s,c);var p=Yu;if(p&&s){var g=c&&typeof c.as=="string"?c.as:"script",w='link[rel="modulepreload"][as="'+Si(g)+'"][href="'+Si(s)+'"]',S=w;switch(g){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":S=Ku(s)}if(!Ni.has(S)&&(s=f({rel:"modulepreload",href:s},c),Ni.set(S,s),p.querySelector(w)===null)){switch(g){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(p.querySelector(Qm(S)))return}g=p.createElement("link"),Bn(g,"link",s),Tn(g),p.head.appendChild(g)}}}function BJ(s,c,p){rs.S(s,c,p);var g=Yu;if(g&&s){var w=gu(g).hoistableStyles,S=Vu(s);c=c||"default";var N=w.get(S);if(!N){var L={loading:0,preload:null};if(N=g.querySelector(Xm(S)))L.loading=5;else{s=f({rel:"stylesheet",href:s,"data-precedence":c},p),(p=Ni.get(S))&&sj(s,p);var Q=N=g.createElement("link");Tn(Q),Bn(Q,"link",s),Q._p=new Promise(function(re,de){Q.onload=re,Q.onerror=de}),Q.addEventListener("load",function(){L.loading|=1}),Q.addEventListener("error",function(){L.loading|=2}),L.loading|=4,mv(N,c,g)}N={type:"stylesheet",instance:N,count:1,state:L},w.set(S,N)}}}function qJ(s,c){rs.X(s,c);var p=Yu;if(p&&s){var g=gu(p).hoistableScripts,w=Ku(s),S=g.get(w);S||(S=p.querySelector(Qm(w)),S||(s=f({src:s,async:!0},c),(c=Ni.get(w))&&lj(s,c),S=p.createElement("script"),Tn(S),Bn(S,"link",s),p.head.appendChild(S)),S={type:"script",instance:S,count:1,state:null},g.set(w,S))}}function $J(s,c){rs.M(s,c);var p=Yu;if(p&&s){var g=gu(p).hoistableScripts,w=Ku(s),S=g.get(w);S||(S=p.querySelector(Qm(w)),S||(s=f({src:s,async:!0,type:"module"},c),(c=Ni.get(w))&&lj(s,c),S=p.createElement("script"),Tn(S),Bn(S,"link",s),p.head.appendChild(S)),S={type:"script",instance:S,count:1,state:null},g.set(w,S))}}function ON(s,c,p,g){var w=(w=ge.current)?pv(w):null;if(!w)throw Error(i(446));switch(s){case"meta":case"title":return null;case"style":return typeof p.precedence=="string"&&typeof p.href=="string"?(c=Vu(p.href),p=gu(w).hoistableStyles,g=p.get(c),g||(g={type:"style",instance:null,count:0,state:null},p.set(c,g)),g):{type:"void",instance:null,count:0,state:null};case"link":if(p.rel==="stylesheet"&&typeof p.href=="string"&&typeof p.precedence=="string"){s=Vu(p.href);var S=gu(w).hoistableStyles,N=S.get(s);if(N||(w=w.ownerDocument||w,N={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},S.set(s,N),(S=w.querySelector(Xm(s)))&&!S._p&&(N.instance=S,N.state.loading=5),Ni.has(s)||(p={rel:"preload",as:"style",href:p.href,crossOrigin:p.crossOrigin,integrity:p.integrity,media:p.media,hrefLang:p.hrefLang,referrerPolicy:p.referrerPolicy},Ni.set(s,p),S||FJ(w,s,p,N.state))),c&&g===null)throw Error(i(528,""));return N}if(c&&g!==null)throw Error(i(529,""));return null;case"script":return c=p.async,p=p.src,typeof p=="string"&&c&&typeof c!="function"&&typeof c!="symbol"?(c=Ku(p),p=gu(w).hoistableScripts,g=p.get(c),g||(g={type:"script",instance:null,count:0,state:null},p.set(c,g)),g):{type:"void",instance:null,count:0,state:null};default:throw Error(i(444,s))}}function Vu(s){return'href="'+Si(s)+'"'}function Xm(s){return'link[rel="stylesheet"]['+s+"]"}function PN(s){return f({},s,{"data-precedence":s.precedence,precedence:null})}function FJ(s,c,p,g){s.querySelector('link[rel="preload"][as="style"]['+c+"]")?g.loading=1:(c=s.createElement("link"),g.preload=c,c.addEventListener("load",function(){return g.loading|=1}),c.addEventListener("error",function(){return g.loading|=2}),Bn(c,"link",p),Tn(c),s.head.appendChild(c))}function Ku(s){return'[src="'+Si(s)+'"]'}function Qm(s){return"script[async]"+s}function IN(s,c,p){if(c.count++,c.instance===null)switch(c.type){case"style":var g=s.querySelector('style[data-href~="'+Si(p.href)+'"]');if(g)return c.instance=g,Tn(g),g;var w=f({},p,{"data-href":p.href,"data-precedence":p.precedence,href:null,precedence:null});return g=(s.ownerDocument||s).createElement("style"),Tn(g),Bn(g,"style",w),mv(g,p.precedence,s),c.instance=g;case"stylesheet":w=Vu(p.href);var S=s.querySelector(Xm(w));if(S)return c.state.loading|=4,c.instance=S,Tn(S),S;g=PN(p),(w=Ni.get(w))&&sj(g,w),S=(s.ownerDocument||s).createElement("link"),Tn(S);var N=S;return N._p=new Promise(function(L,Q){N.onload=L,N.onerror=Q}),Bn(S,"link",g),c.state.loading|=4,mv(S,p.precedence,s),c.instance=S;case"script":return S=Ku(p.src),(w=s.querySelector(Qm(S)))?(c.instance=w,Tn(w),w):(g=p,(w=Ni.get(S))&&(g=f({},p),lj(g,w)),s=s.ownerDocument||s,w=s.createElement("script"),Tn(w),Bn(w,"link",g),s.head.appendChild(w),c.instance=w);case"void":return null;default:throw Error(i(443,c.type))}else c.type==="stylesheet"&&(c.state.loading&4)===0&&(g=c.instance,c.state.loading|=4,mv(g,p.precedence,s));return c.instance}function mv(s,c,p){for(var g=p.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),w=g.length?g[g.length-1]:null,S=w,N=0;N<g.length;N++){var L=g[N];if(L.dataset.precedence===c)S=L;else if(S!==w)break}S?S.parentNode.insertBefore(s,S.nextSibling):(c=p.nodeType===9?p.head:p,c.insertBefore(s,c.firstChild))}function sj(s,c){s.crossOrigin==null&&(s.crossOrigin=c.crossOrigin),s.referrerPolicy==null&&(s.referrerPolicy=c.referrerPolicy),s.title==null&&(s.title=c.title)}function lj(s,c){s.crossOrigin==null&&(s.crossOrigin=c.crossOrigin),s.referrerPolicy==null&&(s.referrerPolicy=c.referrerPolicy),s.integrity==null&&(s.integrity=c.integrity)}var fv=null;function DN(s,c,p){if(fv===null){var g=new Map,w=fv=new Map;w.set(p,g)}else w=fv,g=w.get(p),g||(g=new Map,w.set(p,g));if(g.has(s))return g;for(g.set(s,null),p=p.getElementsByTagName(s),w=0;w<p.length;w++){var S=p[w];if(!(S[pm]||S[Wn]||s==="link"&&S.getAttribute("rel")==="stylesheet")&&S.namespaceURI!=="http://www.w3.org/2000/svg"){var N=S.getAttribute(c)||"";N=s+N;var L=g.get(N);L?L.push(S):g.set(N,[S])}}return g}function WN(s,c,p){s=s.ownerDocument||s,s.head.insertBefore(p,c==="title"?s.querySelector("head > title"):null)}function GJ(s,c,p){if(p===1||c.itemProp!=null)return!1;switch(s){case"meta":case"title":return!0;case"style":if(typeof c.precedence!="string"||typeof c.href!="string"||c.href==="")break;return!0;case"link":if(typeof c.rel!="string"||typeof c.href!="string"||c.href===""||c.onLoad||c.onError)break;switch(c.rel){case"stylesheet":return s=c.disabled,typeof c.precedence=="string"&&s==null;default:return!0}case"script":if(c.async&&typeof c.async!="function"&&typeof c.async!="symbol"&&!c.onLoad&&!c.onError&&c.src&&typeof c.src=="string")return!0}return!1}function zN(s){return!(s.type==="stylesheet"&&(s.state.loading&3)===0)}function HJ(s,c,p,g){if(p.type==="stylesheet"&&(typeof g.media!="string"||matchMedia(g.media).matches!==!1)&&(p.state.loading&4)===0){if(p.instance===null){var w=Vu(g.href),S=c.querySelector(Xm(w));if(S){c=S._p,c!==null&&typeof c=="object"&&typeof c.then=="function"&&(s.count++,s=gv.bind(s),c.then(s,s)),p.state.loading|=4,p.instance=S,Tn(S);return}S=c.ownerDocument||c,g=PN(g),(w=Ni.get(w))&&sj(g,w),S=S.createElement("link"),Tn(S);var N=S;N._p=new Promise(function(L,Q){N.onload=L,N.onerror=Q}),Bn(S,"link",g),p.instance=S}s.stylesheets===null&&(s.stylesheets=new Map),s.stylesheets.set(p,c),(c=p.state.preload)&&(p.state.loading&3)===0&&(s.count++,p=gv.bind(s),c.addEventListener("load",p),c.addEventListener("error",p))}}var cj=0;function YJ(s,c){return s.stylesheets&&s.count===0&&bv(s,s.stylesheets),0<s.count||0<s.imgCount?function(p){var g=setTimeout(function(){if(s.stylesheets&&bv(s,s.stylesheets),s.unsuspend){var S=s.unsuspend;s.unsuspend=null,S()}},6e4+c);0<s.imgBytes&&cj===0&&(cj=62500*TJ());var w=setTimeout(function(){if(s.waitingForImages=!1,s.count===0&&(s.stylesheets&&bv(s,s.stylesheets),s.unsuspend)){var S=s.unsuspend;s.unsuspend=null,S()}},(s.imgBytes>cj?50:800)+c);return s.unsuspend=p,function(){s.unsuspend=null,clearTimeout(g),clearTimeout(w)}}:null}
vendor: 10,169 bytes, line 49
49function gv(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)bv(this,this.stylesheets);else if(this.unsuspend){var s=this.unsuspend;this.unsuspend=null,s()}}}var yv=null;function bv(s,c){s.stylesheets=null,s.unsuspend!==null&&(s.count++,yv=new Map,c.forEach(VJ,s),yv=null,gv.call(s))}function VJ(s,c){if(!(c.state.loading&4)){var p=yv.get(s);if(p)var g=p.get(null);else{p=new Map,yv.set(s,p);for(var w=s.querySelectorAll("link[data-precedence],style[data-precedence]"),S=0;S<w.length;S++){var N=w[S];(N.nodeName==="LINK"||N.getAttribute("media")!=="not all")&&(p.set(N.dataset.precedence,N),g=N)}g&&p.set(null,g)}w=c.instance,N=w.getAttribute("data-precedence"),S=p.get(N)||g,S===g&&p.set(null,w),p.set(N,w),this.count++,g=gv.bind(this),w.addEventListener("load",g),w.addEventListener("error",g),S?S.parentNode.insertBefore(w,S.nextSibling):(s=s.nodeType===9?s.head:s,s.insertBefore(w,s.firstChild)),c.state.loading|=4}}var Zm={$$typeof:A,Provider:null,Consumer:null,_currentValue:Y,_currentValue2:Y,_threadCount:0};function KJ(s,c,p,g,w,S,N,L,Q){this.tag=1,this.containerInfo=s,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=da(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=da(0),this.hiddenUpdates=da(null),this.identifierPrefix=g,this.onUncaughtError=w,this.onCaughtError=S,this.onRecoverableError=N,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=Q,this.incompleteTransitions=new Map}function LN(s,c,p,g,w,S,N,L,Q,re,de,fe){return s=new KJ(s,c,p,N,Q,re,de,fe,L),c=1,S===!0&&(c|=24),S=Ja(3,null,null,c),s.current=S,S.stateNode=s,c=qk(),c.refCount++,s.pooledCache=c,c.refCount++,S.memoizedState={element:g,isDehydrated:p,cache:c},Hk(S),s}function UN(s){return s?(s=Au,s):Au}function BN(s,c,p,g,w,S){w=UN(w),g.context===null?g.context=w:g.pendingContext=w,g=ll(c),g.payload={element:p},S=S===void 0?null:S,S!==null&&(g.callback=S),p=cl(s,g,c),p!==null&&(Da(p,s,c),Em(p,s,c))}function qN(s,c){if(s=s.memoizedState,s!==null&&s.dehydrated!==null){var p=s.retryLane;s.retryLane=p!==0&&p<c?p:c}}function dj(s,c){qN(s,c),(s=s.alternate)&&qN(s,c)}function $N(s){if(s.tag===13||s.tag===31){var c=Ec(s,67108864);c!==null&&Da(c,s,67108864),dj(s,67108864)}}function FN(s){if(s.tag===13||s.tag===31){var c=ii();c=rk(c);var p=Ec(s,c);p!==null&&Da(p,s,c),dj(s,c)}}var vv=!0;function XJ(s,c,p,g){var w=O.T;O.T=null;var S=B.p;try{B.p=2,uj(s,c,p,g)}finally{B.p=S,O.T=w}}function QJ(s,c,p,g){var w=O.T;O.T=null;var S=B.p;try{B.p=8,uj(s,c,p,g)}finally{B.p=S,O.T=w}}function uj(s,c,p,g){if(vv){var w=hj(g);if(w===null)Q2(s,c,g,xv,p),HN(s,g);else if(JJ(w,s,c,p,g))g.stopPropagation();else if(HN(s,g),c&4&&-1<ZJ.indexOf(s)){for(;w!==null;){var S=fu(w);if(S!==null)switch(S.tag){case 3:if(S=S.stateNode,S.current.memoizedState.isDehydrated){var N=Xn(S.pendingLanes);if(N!==0){var L=S;for(L.pendingLanes|=2,L.entangledLanes|=2;N;){var Q=1<<31-hn(N);L.entanglements[1]|=Q,N&=~Q}io(S),(xt&6)===0&&(nv=Qt()+500,Hm(0))}}break;case 31:case 13:L=Ec(S,2),L!==null&&Da(L,S,2),iv(),dj(S,2)}if(S=hj(g),S===null&&Q2(s,c,g,xv,p),S===w)break;w=S}w!==null&&g.stopPropagation()}else Q2(s,c,g,null,p)}}function hj(s){return s=mk(s),pj(s)}var xv=null;function pj(s){if(xv=null,s=mu(s),s!==null){var c=o(s);if(c===null)s=null;else{var p=c.tag;if(p===13){if(s=l(c),s!==null)return s;s=null}else if(p===31){if(s=d(c),s!==null)return s;s=null}else if(p===3){if(c.stateNode.current.memoizedState.isDehydrated)return c.tag===3?c.stateNode.containerInfo:null;s=null}else c!==s&&(s=null)}}return xv=s,null}function GN(s){switch(s){case"beforetoggle":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"toggle":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 2;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"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 8;case"message":switch(lr()){case In:return 2;case ki:return 8;case Qa:case du:return 32;case Zr:return 268435456;default:return 32}default:return 32}}var mj=!1,xl=null,wl=null,kl=null,Jm=new Map,ef=new Map,jl=[],ZJ="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".split(" ");function HN(s,c){switch(s){case"focusin":case"focusout":xl=null;break;case"dragenter":case"dragleave":wl=null;break;case"mouseover":case"mouseout":kl=null;break;case"pointerover":case"pointerout":Jm.delete(c.pointerId);break;case"gotpointercapture":case"lostpointercapture":ef.delete(c.pointerId)}}function tf(s,c,p,g,w,S){return s===null||s.nativeEvent!==S?(s={blockedOn:c,domEventName:p,eventSystemFlags:g,nativeEvent:S,targetContainers:[w]},c!==null&&(c=fu(c),c!==null&&$N(c)),s):(s.eventSystemFlags|=g,c=s.targetContainers,w!==null&&c.indexOf(w)===-1&&c.push(w),s)}function JJ(s,c,p,g,w){switch(c){case"focusin":return xl=tf(xl,s,c,p,g,w),!0;case"dragenter":return wl=tf(wl,s,c,p,g,w),!0;case"mouseover":return kl=tf(kl,s,c,p,g,w),!0;case"pointerover":var S=w.pointerId;return Jm.set(S,tf(Jm.get(S)||null,s,c,p,g,w)),!0;case"gotpointercapture":return S=w.pointerId,ef.set(S,tf(ef.get(S)||null,s,c,p,g,w)),!0}return!1}function YN(s){var c=mu(s.target);if(c!==null){var p=o(c);if(p!==null){if(c=p.tag,c===13){if(c=l(p),c!==null){s.blockedOn=c,s6(s.priority,function(){FN(p)});return}}else if(c===31){if(c=d(p),c!==null){s.blockedOn=c,s6(s.priority,function(){FN(p)});return}}else if(c===3&&p.stateNode.current.memoizedState.isDehydrated){s.blockedOn=p.tag===3?p.stateNode.containerInfo:null;return}}}s.blockedOn=null}function wv(s){if(s.blockedOn!==null)return!1;for(var c=s.targetContainers;0<c.length;){var p=hj(s.nativeEvent);if(p===null){p=s.nativeEvent;var g=new p.constructor(p.type,p);pk=g,p.target.dispatchEvent(g),pk=null}else return c=fu(p),c!==null&&$N(c),s.blockedOn=p,!1;c.shift()}return!0}function VN(s,c,p){wv(s)&&p.delete(c)}function eee(){mj=!1,xl!==null&&wv(xl)&&(xl=null),wl!==null&&wv(wl)&&(wl=null),kl!==null&&wv(kl)&&(kl=null),Jm.forEach(VN),ef.forEach(VN)}function kv(s,c){s.blockedOn===c&&(s.blockedOn=null,mj||(mj=!0,e.unstable_scheduleCallback(e.unstable_NormalPriority,eee)))}var jv=null;function KN(s){jv!==s&&(jv=s,e.unstable_scheduleCallback(e.unstable_NormalPriority,function(){jv===s&&(jv=null);for(var c=0;c<s.length;c+=3){var p=s[c],g=s[c+1],w=s[c+2];if(typeof g!="function"){if(pj(g||p)===null)continue;break}var S=fu(p);S!==null&&(s.splice(c,3),c-=3,h2(S,{pending:!0,data:w,method:p.method,action:g},g,w))}}))}function Xu(s){function c(Q){return kv(Q,s)}xl!==null&&kv(xl,s),wl!==null&&kv(wl,s),kl!==null&&kv(kl,s),Jm.forEach(c),ef.forEach(c);for(var p=0;p<jl.length;p++){var g=jl[p];g.blockedOn===s&&(g.blockedOn=null)}for(;0<jl.length&&(p=jl[0],p.blockedOn===null);)YN(p),p.blockedOn===null&&jl.shift();if(p=(s.ownerDocument||s).$$reactFormReplay,p!=null)for(g=0;g<p.length;g+=3){var w=p[g],S=p[g+1],N=w[Ea]||null;if(typeof S=="function")N||KN(p);else if(N){var L=null;if(S&&S.hasAttribute("formAction")){if(w=S,N=S[Ea]||null)L=N.formAction;else if(pj(w)!==null)continue}else L=N.action;typeof L=="function"?p[g+1]=L:(p.splice(g,3),g-=3),KN(p)}}}function XN(){function s(S){S.canIntercept&&S.info==="react-transition"&&S.intercept({handler:function(){return new Promise(function(N){return w=N})},focusReset:"manual",scroll:"manual"})}function c(){w!==null&&(w(),w=null),g||setTimeout(p,20)}function p(){if(!g&&!navigation.transition){var S=navigation.currentEntry;S&&S.url!=null&&navigation.navigate(S.url,{state:S.getState(),info:"react-transition",history:"replace"})}}if(typeof navigation=="object"){var g=!1,w=null;return navigation.addEventListener("navigate",s),navigation.addEventListener("navigatesuccess",c),navigation.addEventListener("navigateerror",c),setTimeout(p,100),function(){g=!0,navigation.removeEventListener("navigate",s),navigation.removeEventListener("navigatesuccess",c),navigation.removeEventListener("navigateerror",c),w!==null&&(w(),w=null)}}}function fj(s){this._internalRoot=s}Sv.prototype.render=fj.prototype.render=function(s){var c=this._internalRoot;if(c===null)throw Error(i(409));var p=c.current,g=ii();BN(p,g,s,c,null,null)},Sv.prototype.unmount=fj.prototype.unmount=function(){var s=this._internalRoot;if(s!==null){this._internalRoot=null;var c=s.containerInfo;BN(s.current,2,null,s,null,null),iv(),c[pu]=null}};function Sv(s){this._internalRoot=s}Sv.prototype.unstable_scheduleHydration=function(s){if(s){var c=o6();s={blockedOn:null,target:s,priority:c};for(var p=0;p<jl.length&&c!==0&&c<jl[p].priority;p++);jl.splice(p,0,s),p===0&&YN(s)}};var QN=t.version;if(QN!=="19.2.8")throw Error(i(527,QN,"19.2.8"));B.findDOMNode=function(s){var c=s._reactInternals;if(c===void 0)throw typeof s.render=="function"?Error(i(188)):(s=Object.keys(s).join(","),Error(i(268,s)));return s=h(c),s=s!==null?m(s):null,s=s===null?null:s.stateNode,s};var tee={bundleType:0,version:"19.2.8",rendererPackageName:"react-dom",currentDispatcherRef:O,reconcilerVersion:"19.2.8"};
49if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Cv=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Cv.isDisabled&&Cv.supportsFiber)try{An=Cv.inject(tee),At=Cv}catch{}}return af.createRoot=function(s,c){if(!r(s))throw Error(i(299));var p=!1,g="",w=iR,S=rR,N=oR;return c!=null&&(c.unstable_strictMode===!0&&(p=!0),c.identifierPrefix!==void 0&&(g=c.identifierPrefix),c.onUncaughtError!==void 0&&(w=c.onUncaughtError),c.onCaughtError!==void 0&&(S=c.onCaughtError),c.onRecoverableError!==void 0&&(N=c.onRecoverableError)),c=LN(s,1,!1,null,null,p,g,null,w,S,N,XN),s[pu]=c.current,X2(s),new fj(c)},af.hydrateRoot=function(s,c,p){if(!r(s))throw Error(i(299));var g=!1,w="",S=iR,N=rR,L=oR,Q=null;return p!=null&&(p.unstable_strictMode===!0&&(g=!0),p.identifierPrefix!==void 0&&(w=p.identifierPrefix),p.onUncaughtError!==void 0&&(S=p.onUncaughtError),p.onCaughtError!==void 0&&(N=p.onCaughtError),p.onRecoverableError!==void 0&&(L=p.onRecoverableError),p.formState!==void 0&&(Q=p.formState)),c=LN(s,1,!0,c,p??null,g,w,Q,S,N,L,XN),c.context=UN(null),p=c.current,g=ii(),g=rk(g),w=ll(g),w.callback=null,cl(p,w,g),p=g,c.current.lanes=p,Dn(c,p),io(c),s[pu]=c.current,X2(s),new Sv(c)},af.version="19.2.8",af}var lO;function pee(){if(lO)return bj.exports;lO=1;function e(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),bj.exports=hee(),bj.exports}var mee=pee(),M=J_();const q=vt(M),fee=ree({__proto__:null,default:q},[M]),gee=1,yee=1e6;let jj=0;function bee(){return jj=(jj+1)%Number.MAX_SAFE_INTEGER,jj.toString()}const Sj=new Map,cO=e=>{if(Sj.has(e))return;const t=setTimeout(()=>{Sj.delete(e),Qf({type:"REMOVE_TOAST",toastId:e})},yee);Sj.set(e,t)},vee=(e,t)=>{switch(t.type){case"ADD_TOAST":return{...e,toasts:[t.toast,...e.toasts].slice(0,gee)};case"UPDATE_TOAST":return{...e,toasts:e.toasts.map(a=>a.id===t.toast.id?{...a,...t.toast}:a)};case"DISMISS_TOAST":{const{toastId:a}=t;return a?cO(a):e.toasts.forEach(i=>{cO(i.id)}),{...e,toasts:e.toasts.map(i=>i.id===a||a===void 0?{...i,open:!1}:i)}}case"REMOVE_TOAST":return t.toastId===void 0?{...e,toasts:[]}:{...e,toasts:e.toasts.filter(a=>a.id!==t.toastId)}}},b0=[];let v0={toasts:[]};function Qf(e){v0=vee(v0,e),b0.forEach(t=>{t(v0)})}function xee({...e}){const t=bee(),a=r=>Qf({type:"UPDATE_TOAST",toast:{...r,id:t}}),i=()=>Qf({type:"DISMISS_TOAST",toastId:t});return Qf({type:"ADD_TOAST",toast:{...e,id:t,open:!0,onOpenChange:r=>{r||i()}}}),{id:t,dismiss:i,update:a}}function wee(){const[e,t]=M.useState(v0);return M.useEffect(()=>(b0.push(t),()=>{const a=b0.indexOf(t);a>-1&&b0.splice(a,1)}),[e]),{...e,toast:xee,dismiss:a=>Qf({type:"DISMISS_TOAST",toastId:a})}}var Fp=Gq();const Hq=vt(Fp);function jn(e,t,{checkForDefaultPrevented:a=!0}={}){return function(r){if(e==null||e(r),a===!1||!r.defaultPrevented)return t==null?void 0:t(r)}}function dO(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Yq(...e){return t=>{let a=!1;const i=e.map(r=>{const o=dO(r,t);return!a&&typeof o=="function"&&(a=!0),o});if(a)return()=>{for(let r=0;r<i.length;r++){const o=i[r];typeof o=="function"?o():dO(e[r],null)}}}}function Ur(...e){return M.useCallback(Yq(...e),e)}function Dw(e,t=[]){let a=[];function i(o,l){const d=M.createContext(l),u=a.length;a=[...a,l];const h=f=>{var j;const{scope:y,children:b,...x}=f,k=((j=y==null?void 0:y[e])==null?void 0:j[u])||d,v=M.useMemo(()=>x,Object.values(x));return n.jsx(k.Provider,{value:v,children:b})};h.displayName=o+"Provider";function m(f,y){var k;const b=((k=y==null?void 0:y[e])==null?void 0:k[u])||d,x=M.useContext(b);if(x)return x;if(l!==void 0)return l;throw new Error(`\`${f}\` must be used within \`${o}\``)}return[h,m]}const r=()=>{const o=a.map(l=>M.createContext(l));return function(d){const u=(d==null?void 0:d[e])||o;return M.useMemo(()=>({[`__scope${e}`]:{...d,[e]:u}}),[d,u])}};return r.scopeName=e,[i,kee(r,...t)]}function kee(...e){const t=e[0];if(e.length===1)return t;const a=()=>{const i=e.map(r=>({useScope:r(),scopeName:r.scopeName}));return function(o){const l=i.reduce((d,{useScope:u,scopeName:h})=>{const f=u(o)[`__scope${h}`];return{...d,...f}},{});return M.useMemo(()=>({[`__scope${t.scopeName}`]:l}),[l])}};return a.scopeName=t.scopeName,a}function l4(e){const t=jee(e),a=M.forwardRef((i,r)=>{const{children:o,...l}=i,d=M.Children.toArray(o),u=d.find(Cee);if(u){const h=u.props.children,m=d.map(f=>f===u?M.Children.count(h)>1?M.Children.only(null):M.isValidElement(h)?h.props.children:null:f);return n.jsx(t,{...l,ref:r,children:M.isValidElement(h)?M.cloneElement(h,void 0,m):null})}return n.jsx(t,{...l,ref:r,children:o})});return a.displayName=`${e}.Slot`,a}function jee(e){const t=M.forwardRef((a,i)=>{const{children:r,...o}=a;if(M.isValidElement(r)){const l=Tee(r),d=Aee(o,r.props);return r.type!==M.Fragment&&(d.ref=i?Yq(i,l):l),M.cloneElement(r,d)}return M.Children.count(r)>1?M.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Vq=Symbol("radix.slottable");function See(e){const t=({children:a})=>n.jsx(n.Fragment,{children:a});return t.displayName=`${e}.Slottable`,t.__radixId=Vq,t}function Cee(e){return M.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===Vq}function Aee(e,t){const a={...t};for(const i in t){const r=e[i],o=t[i];/^on[A-Z]/.test(i)?r&&o?a[i]=(...d)=>{const u=o(...d);return r(...d),u}:r&&(a[i]=r):i==="style"?a[i]={...r,...o}
vendor: 6,995 bytes, line 49
49:i==="className"&&(a[i]=[r,o].filter(Boolean).join(" "))}return{...e,...a}}function Tee(e){var i,r;let t=(i=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:i.get,a=t&&"isReactWarning"in t&&t.isReactWarning;return a?e.ref:(t=(r=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:r.get,a=t&&"isReactWarning"in t&&t.isReactWarning,a?e.props.ref:e.props.ref||e.ref)}function _ee(e){const t=e+"CollectionProvider",[a,i]=Dw(t),[r,o]=a(t,{collectionRef:{current:null},itemMap:new Map}),l=k=>{const{scope:v,children:j}=k,T=q.useRef(null),A=q.useRef(new Map).current;return n.jsx(r,{scope:v,itemMap:A,collectionRef:T,children:j})};l.displayName=t;const d=e+"CollectionSlot",u=l4(d),h=q.forwardRef((k,v)=>{const{scope:j,children:T}=k,A=o(d,j),C=Ur(v,A.collectionRef);return n.jsx(u,{ref:C,children:T})});h.displayName=d;const m=e+"CollectionItemSlot",f="data-radix-collection-item",y=l4(m),b=q.forwardRef((k,v)=>{const{scope:j,children:T,...A}=k,C=q.useRef(null),_=Ur(v,C),E=o(m,j);return q.useEffect(()=>(E.itemMap.set(C,{ref:C,...A}),()=>void E.itemMap.delete(C))),n.jsx(y,{[f]:"",ref:_,children:T})});b.displayName=m;function x(k){const v=o(e+"CollectionConsumer",k);return q.useCallback(()=>{const T=v.collectionRef.current;if(!T)return[];const A=Array.from(T.querySelectorAll(`[${f}]`));return Array.from(v.itemMap.values()).sort((E,R)=>A.indexOf(E.ref.current)-A.indexOf(R.ref.current))},[v.collectionRef,v.itemMap])}return[{Provider:l,Slot:h,ItemSlot:b},x,i]}var Mee=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Ka=Mee.reduce((e,t)=>{const a=l4(`Primitive.${t}`),i=M.forwardRef((r,o)=>{const{asChild:l,...d}=r,u=l?a:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),n.jsx(u,{...d,ref:o})});return i.displayName=`Primitive.${t}`,{...e,[t]:i}},{});function Kq(e,t){e&&Fp.flushSync(()=>e.dispatchEvent(t))}function ic(e){const t=M.useRef(e);return M.useEffect(()=>{t.current=e}),M.useMemo(()=>(...a)=>{var i;return(i=t.current)==null?void 0:i.call(t,...a)},[])}function Eee(e,t=globalThis==null?void 0:globalThis.document){const a=ic(e);M.useEffect(()=>{const i=r=>{r.key==="Escape"&&a(r)};return t.addEventListener("keydown",i,{capture:!0}),()=>t.removeEventListener("keydown",i,{capture:!0})},[a,t])}var Ree="DismissableLayer",c4="dismissableLayer.update",Nee="dismissableLayer.pointerDownOutside",Oee="dismissableLayer.focusOutside",uO,Xq=M.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),eM=M.forwardRef((e,t)=>{const{disableOutsidePointerEvents:a=!1,onEscapeKeyDown:i,onPointerDownOutside:r,onFocusOutside:o,onInteractOutside:l,onDismiss:d,...u}=e,h=M.useContext(Xq),[m,f]=M.useState(null),y=(m==null?void 0:m.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,b]=M.useState({}),x=Ur(t,R=>f(R)),k=Array.from(h.layers),[v]=[...h.layersWithOutsidePointerEventsDisabled].slice(-1),j=k.indexOf(v),T=m?k.indexOf(m):-1,A=h.layersWithOutsidePointerEventsDisabled.size>0,C=T>=j,_=Iee(R=>{const W=R.target,z=[...h.branches].some(H=>H.contains(W));!C||z||(r==null||r(R),l==null||l(R),R.defaultPrevented||d==null||d())},y),E=Dee(R=>{const W=R.target;[...h.branches].some(H=>H.contains(W))||(o==null||o(R),l==null||l(R),R.defaultPrevented||d==null||d())},y);return Eee(R=>{T===h.layers.size-1&&(i==null||i(R),!R.defaultPrevented&&d&&(R.preventDefault(),d()))},y),M.useEffect(()=>{if(m)return a&&(h.layersWithOutsidePointerEventsDisabled.size===0&&(uO=y.body.style.pointerEvents,y.body.style.pointerEvents="none"),h.layersWithOutsidePointerEventsDisabled.add(m)),h.layers.add(m),hO(),()=>{a&&h.layersWithOutsidePointerEventsDisabled.size===1&&(y.body.style.pointerEvents=uO)}},[m,y,a,h]),M.useEffect(()=>()=>{m&&(h.layers.delete(m),h.layersWithOutsidePointerEventsDisabled.delete(m),hO())},[m,h]),M.useEffect(()=>{const R=()=>b({});return document.addEventListener(c4,R),()=>document.removeEventListener(c4,R)},[]),n.jsx(Ka.div,{...u,ref:x,style:{pointerEvents:A?C?"auto":"none":void 0,...e.style},onFocusCapture:jn(e.onFocusCapture,E.onFocusCapture),onBlurCapture:jn(e.onBlurCapture,E.onBlurCapture),onPointerDownCapture:jn(e.onPointerDownCapture,_.onPointerDownCapture)})});eM.displayName=Ree;var Pee="DismissableLayerBranch",Qq=M.forwardRef((e,t)=>{const a=M.useContext(Xq),i=M.useRef(null),r=Ur(t,i);return M.useEffect(()=>{const o=i.current;if(o)return a.branches.add(o),()=>{a.branches.delete(o)}},[a.branches]),n.jsx(Ka.div,{...e,ref:r})});Qq.displayName=Pee;function Iee(e,t=globalThis==null?void 0:globalThis.document){const a=ic(e),i=M.useRef(!1),r=M.useRef(()=>{});return M.useEffect(()=>{const o=d=>{if(d.target&&!i.current){let u=function(){Zq(Nee,a,h,{discrete:!0})};const h={originalEvent:d};d.pointerType==="touch"?(t.removeEventListener("click",r.current),r.current=u,t.addEventListener("click",r.current,{once:!0})):u()}else t.removeEventListener("click",r.current);i.current=!1},l=window.setTimeout(()=>{t.addEventListener("pointerdown",o)},0);return()=>{window.clearTimeout(l),t.removeEventListener("pointerdown",o),t.removeEventListener("click",r.current)}},[t,a]),{onPointerDownCapture:()=>i.current=!0}}function Dee(e,t=globalThis==null?void 0:globalThis.document){const a=ic(e),i=M.useRef(!1);return M.useEffect(()=>{const r=o=>{o.target&&!i.current&&Zq(Oee,a,{originalEvent:o},{discrete:!1})};return t.addEventListener("focusin",r),()=>t.removeEventListener("focusin",r)},[t,a]),{onFocusCapture:()=>i.current=!0,onBlurCapture:()=>i.current=!1}}function hO(){const e=new CustomEvent(c4);document.dispatchEvent(e)}function Zq(e,t,a,{discrete:i}){const r=a.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:a});t&&r.addEventListener(e,t,{once:!0}),i?Kq(r,o):r.dispatchEvent(o)}var Wee=eM,zee=Qq,rc=globalThis!=null&&globalThis.document?M.useLayoutEffect:()=>{},Lee="Portal",Jq=M.forwardRef((e,t)=>{var d;const{container:a,...i}=e,[r,o]=M.useState(!1);rc(()=>o(!0),[]);const l=a||r&&((d=globalThis==null?void 0:globalThis.document)==null?void 0:d.body);return l?Hq.createPortal(n.jsx(Ka.div,{...i,ref:t}),l):null});Jq.displayName=Lee;function Uee(e,t){return M.useReducer((a,i)=>t[a][i]??a,e)}var tM=e=>{const{present:t,children:a}=e,i=Bee(t),r=typeof a=="function"?a({present:i.isPresent}):M.Children.only(a),o=Ur(i.ref,qee(r));return typeof a=="function"||i.isPresent?M.cloneElement(r,{ref:o}):null};tM.displayName="Presence";function Bee(e){const[t,a]=M.useState(),i=M.useRef(null),r=M.useRef(e),o=M.useRef("none"),l=e?"mounted":"unmounted",[d,u]=Uee(l,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return M.useEffect(()=>{const h=_v(i.current);o.current=d==="mounted"?h:"none"},[d]),rc(()=>{const h=i.current,m=r.current;if(m!==e){const y=o.current,b=_v(h);e?u("MOUNT"):b==="none"||(h==null?void 0:h.display)==="none"?u("UNMOUNT"):u(m&&y!==b?"ANIMATION_OUT":"UNMOUNT"),r.current=e}},[e,u]),rc(()=>
49{if(t){let h;const m=t.ownerDocument.defaultView??window,f=b=>{const k=_v(i.current).includes(CSS.escape(b.animationName));if(b.target===t&&k&&(u("ANIMATION_END"),!r.current)){const v=t.style.animationFillMode;t.style.animationFillMode="forwards",h=m.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=v)})}},y=b=>{b.target===t&&(o.current=_v(i.current))};return t.addEventListener("animationstart",y),t.addEventListener("animationcancel",f),t.addEventListener("animationend",f),()=>{m.clearTimeout(h),t.removeEventListener("animationstart",y),t.removeEventListener("animationcancel",f),t.removeEventListener("animationend",f)}}else u("ANIMATION_END")},[t,u]),{isPresent:["mounted","unmountSuspended"].includes(d),ref:M.useCallback(h=>{i.current=h?getComputedStyle(h):null,a(h)},[])}}function _v(e){return(e==null?void 0:e.animationName)||"none"}function qee(e){var i,r;let t=(i=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:i.get,a=t&&"isReactWarning"in t&&t.isReactWarning;return a?e.ref:(t=(r=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:r.get,a=t&&"isReactWarning"in t&&t.isReactWarning,a?e.props.ref:e.props.ref||e.ref)}var $ee=fee[" useInsertionEffect ".trim().toString()]||rc;function Fee({prop:e,defaultProp:t,onChange:a=()=>{},caller:i}){const[r,o,l]=Gee({defaultProp:t,onChange:a}),d=e!==void 0,u=d?e:r;{const m=M.useRef(e!==void 0);M.useEffect(()=>{const f=m.current;f!==d&&console.warn(`${i} is changing from ${f?"controlled":"uncontrolled"} to ${d?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),m.current=d},[d,i])}const h=M.useCallback(m=>{var f;if(d){const y=Hee(m)?m(e):m;y!==e&&((f=l.current)==null||f.call(l,y))}else o(m)},[d,e,o,l]);return[u,h]}function Gee({defaultProp:e,onChange:t}){const[a,i]=M.useState(e),r=M.useRef(a),o=M.useRef(t);return $ee(()=>{o.current=t},[t]),M.useEffect(()=>{var l;r.current!==a&&((l=o.current)==null||l.call(o,a),r.current=a)},[a,r]),[a,i,o]}function Hee(e){return typeof e=="function"}var Yee=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),Vee="VisuallyHidden",Ww=M.forwardRef((e,t)=>n.jsx(Ka.span,{...e,ref:t,style:{...Yee,...e.style}}));Ww.displayName=Vee;var Kee=Ww,nM="ToastProvider",[aM,Xee,Qee]=_ee("Toast"),[e$]=Dw("Toast",[Qee]),[Zee,zw]=e$(nM),t$=e=>{const{__scopeToast:t,label:a="Notification",duration:i=5e3,swipeDirection:r="right",swipeThreshold:o=50,children:l}=e,[d,u]=M.useState(null),[h,m]=M.useState(0),f=M.useRef(!1),y=M.useRef(!1);return a.trim()||console.error(`Invalid prop \`label\` supplied to \`${nM}\`. Expected non-empty \`string\`.`),n.jsx(aM.Provider,{scope:t,children:n.jsx(Zee,{scope:t,label:a,duration:i,swipeDirection:r,swipeThreshold:o,toastCount:h,viewport:d,onViewportChange:u,onToastAdd:M.useCallback(()=>m(b=>b+1),[]),onToastRemove:M.useCallback(()=>m(b=>b-1),[]),isFocusedToastEscapeKeyDownRef:f,isClosePausedRef:y,children:l})})};t$.displayName=nM;var n$="ToastViewport",Jee=["F8"],d4="toast.viewportPause",u4="toast.viewportResume",a$=M.forwardRef((e,t)=>{const{__scopeToast:a,hotkey:i=Jee,label:r="Notifications ({hotkey})",...o}=e,l=zw(n$,a),d=Xee(a),u=M.useRef(null),h=M.useRef(null),m=M.useRef(null),f=M.useRef(null),y=Ur(t,f,l.onViewportChange),b=i.join("+").replace(/Key/g,"").replace(/Digit/g,""),x=l.toastCount>0;M.useEffect(()=>{const v=j=>{var A;i.length!==0&&i.every(C=>j[C]||j.code===C)&&((A=f.current)==null||A.focus())};return document.addEventListener("keydown",v),()=>document.removeEventListener("keydown",v)},[i]),M.useEffect(()=>{const v=u.current,j=f.current;if(x&&v&&j){const T=()=>{if(!l.isClosePausedRef.current){const E=new CustomEvent(d4);j.dispatchEvent(E),l.isClosePausedRef.current=!0}},A=()=>{if(l.isClosePausedRef.current){const E=new CustomEvent(u4);j.dispatchEvent(E),l.isClosePausedRef.current=!1}},C=E=>{!v.contains(E.relatedTarget)&&A()},_=()=>{v.contains(document.activeElement)||A()};return v.addEventListener("focusin",T),v.addEventListener("focusout",C),v.addEventListener("pointermove",T),v.addEventListener("pointerleave",_),window.addEventListener("blur",T),window.addEventListener("focus",A),()=>{v.removeEventListener("focusin",T),v.removeEventListener("focusout",C),v.removeEventListener("pointermove",T),v.removeEventListener("pointerleave",_),window.removeEventListener("blur",T),window.removeEventListener("focus",A)}}},[x,l.isClosePausedRef]);const k=M.useCallback(({tabbingDirection:v})=>{const T=d().map(A=>{const C=A.ref.current,_=[C,...hte(C)];return v==="forwards"?_:_.reverse()});return(v==="forwards"?T.reverse():T).flat()},[d]);return M.useEffect(()=>{const v=f.current;if(v){const j=T=>{var _,E,R;const A=T.altKey||T.ctrlKey||T.metaKey;if(T.key==="Tab"&&!A){const W=document.activeElement,z=T.shiftKey;if(T.target===v&&z){(_=h.current)==null||_.focus();return}const U=k({tabbingDirection:z?"backwards":"forwards"}),X=U.findIndex(D=>D===W);Cj(U.slice(X+1))?T.preventDefault():z?(E=h.current)==null||E.focus():(R=m.current)==null||R.focus()}};return v.addEventListener("keydown",j),()=>v.removeEventListener("keydown",j)}},[d,k]),n.jsxs(zee,{ref:u,role:"region","aria-label":r.replace("{hotkey}",b),tabIndex:-1,style:{pointerEvents:x?void 0:"none"},children:[x&&n.jsx(h4,{ref:h,onFocusFromOutsideViewport:()=>{const v=k({tabbingDirection:"forwards"});Cj(v)}}),n.jsx(aM.Slot,{scope:a,children:n.jsx(Ka.ol,{tabIndex:-1,...o,ref:y})}),x&&n.jsx(h4,{ref:m,onFocusFromOutsideViewport:()=>{const v=k({tabbingDirection:"backwards"});Cj(v)}})]})});a$.displayName=n$;var i$="ToastFocusProxy",h4=M.forwardRef((e,t)=>
49{const{__scopeToast:a,onFocusFromOutsideViewport:i,...r}=e,o=zw(i$,a);return n.jsx(Ww,{tabIndex:0,...r,ref:t,style:{position:"fixed"},onFocus:l=>{var h;const d=l.relatedTarget;!((h=o.viewport)!=null&&h.contains(d))&&i()}})});h4.displayName=i$;var by="Toast",ete="toast.swipeStart",tte="toast.swipeMove",nte="toast.swipeCancel",ate="toast.swipeEnd",r$=M.forwardRef((e,t)=>{const{forceMount:a,open:i,defaultOpen:r,onOpenChange:o,...l}=e,[d,u]=Fee({prop:i,defaultProp:r??!0,onChange:o,caller:by});return n.jsx(tM,{present:a||d,children:n.jsx(ote,{open:d,...l,ref:t,onClose:()=>u(!1),onPause:ic(e.onPause),onResume:ic(e.onResume),onSwipeStart:jn(e.onSwipeStart,h=>{h.currentTarget.setAttribute("data-swipe","start")}),onSwipeMove:jn(e.onSwipeMove,h=>{const{x:m,y:f}=h.detail.delta;h.currentTarget.setAttribute("data-swipe","move"),h.currentTarget.style.setProperty("--radix-toast-swipe-move-x",`${m}px`),h.currentTarget.style.setProperty("--radix-toast-swipe-move-y",`${f}px`)}),onSwipeCancel:jn(e.onSwipeCancel,h=>{h.currentTarget.setAttribute("data-swipe","cancel"),h.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),h.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),h.currentTarget.style.removeProperty("--radix-toast-swipe-end-x"),h.currentTarget.style.removeProperty("--radix-toast-swipe-end-y")}),onSwipeEnd:jn(e.onSwipeEnd,h=>{const{x:m,y:f}=h.detail.delta;h.currentTarget.setAttribute("data-swipe","end"),h.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),h.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),h.currentTarget.style.setProperty("--radix-toast-swipe-end-x",`${m}px`),h.currentTarget.style.setProperty("--radix-toast-swipe-end-y",`${f}px`),u(!1)})})})});r$.displayName=by;var[ite,rte]=e$(by,{onClose(){}}),ote=M.forwardRef((e,t)=>{const{__scopeToast:a,type:i="foreground",duration:r,open:o,onClose:l,onEscapeKeyDown:d,onPause:u,onResume:h,onSwipeStart:m,onSwipeMove:f,onSwipeCancel:y,onSwipeEnd:b,...x}=e,k=zw(by,a),[v,j]=M.useState(null),T=Ur(t,D=>j(D)),A=M.useRef(null),C=M.useRef(null),_=r||k.duration,E=M.useRef(0),R=M.useRef(_),W=M.useRef(0),{onToastAdd:z,onToastRemove:H}=k,$=ic(()=>{var P;(v==null?void 0:v.contains(document.activeElement))&&((P=k.viewport)==null||P.focus()),l()}),U=M.useCallback(D=>{!D||D===1/0||(window.clearTimeout(W.current),E.current=new Date().getTime(),W.current=window.setTimeout($,D))},[$]);M.useEffect(()=>{const D=k.viewport;if(D){const P=()=>{U(R.current),h==null||h()},O=()=>{const B=new Date().getTime()-E.current;R.current=R.current-B,window.clearTimeout(W.current),u==null||u()};return D.addEventListener(d4,O),D.addEventListener(u4,P),()=>{D.removeEventListener(d4,O),D.removeEventListener(u4,P)}}},[k.viewport,_,u,h,U]),M.useEffect(()=>{o&&!k.isClosePausedRef.current&&U(_)},[o,_,k.isClosePausedRef,U]),M.useEffect(()=>(z(),()=>H()),[z,H]);const X=M.useMemo(()=>v?h$(v):null,[v]);return k.viewport?n.jsxs(n.Fragment,{children:[X&&n.jsx(ste,{__scopeToast:a,role:"status","aria-live":i==="foreground"?"assertive":"polite",children:X}),n.jsx(ite,{scope:a,onClose:$,children:Fp.createPortal(n.jsx(aM.ItemSlot,{scope:a,children:n.jsx(Wee,{asChild:!0,onEscapeKeyDown:jn(d,()=>{k.isFocusedToastEscapeKeyDownRef.current||$(),k.isFocusedToastEscapeKeyDownRef.current=!1}),children:n.jsx(Ka.li,{tabIndex:0,"data-state":o?"open":"closed","data-swipe-direction":k.swipeDirection,...x,ref:T,style:{userSelect:"none",touchAction:"none",...e.style},onKeyDown:jn(e.onKeyDown,D=>{D.key==="Escape"&&(d==null||d(D.nativeEvent),D.nativeEvent.defaultPrevented||(k.isFocusedToastEscapeKeyDownRef.current=!0,$()))}),onPointerDown:jn(e.onPointerDown,D=>{D.button===0&&(A.current={x:D.clientX,y:D.clientY})}),onPointerMove:jn(e.onPointerMove,D=>{if(!A.current)return;const P=D.clientX-A.current.x,O=D.clientY-A.current.y,B=!!C.current,Y=["left","right"].includes(k.swipeDirection),V=["left","up"].includes(k.swipeDirection)?Math.min:Math.max,G=Y?V(0,P):0,I=Y?0:V(0,O),F=D.pointerType==="touch"?10:2,K={x:G,y:I},ne={originalEvent:D,delta:K};B?(C.current=K,Mv(tte,f,ne,{discrete:!1})):pO(K,k.swipeDirection,F)?(C.current=K,Mv(ete,m,ne,{discrete:!1}),D.target.setPointerCapture(D.pointerId)):(Math.abs(P)>F||Math.abs(O)>F)&&(A.current=null)}),onPointerUp:jn(e.onPointerUp,D=>{const P=C.current,O=D.target;if(O.hasPointerCapture(D.pointerId)&&O.releasePointerCapture(D.pointerId),C.current=null,A.current=null,P){const B=D.currentTarget,Y={originalEvent:D,delta:P};pO(P,k.swipeDirection,k.swipeThreshold)?Mv(ate,b,Y,{discrete:!0}):Mv(nte,y,Y,{discrete:!0}),B.addEventListener("click",V=>V.preventDefault(),{once:!0})}})})})}),k.viewport)})]}):null}),ste=e=>{const{__scopeToast:t,children:a,...i}=e,r=zw(by,t),[o,l]=M.useState(!1),[d,u]=M.useState(!1);return dte(()=>l(!0)),M.useEffect(()=>{const h=window.setTimeout(()=>u(!0),1e3);return()=>window.clearTimeout(h)},[]),d?null:n.jsx(Jq,{asChild:!0,children:n.jsx(Ww,{...i,children:o&&n.jsxs(n.Fragment,{children:[r.label," ",a]})})})},lte="ToastTitle",o$=M.forwardRef((e,t)=>
49{const{__scopeToast:a,...i}=e;return n.jsx(Ka.div,{...i,ref:t})});o$.displayName=lte;var cte="ToastDescription",s$=M.forwardRef((e,t)=>{const{__scopeToast:a,...i}=e;return n.jsx(Ka.div,{...i,ref:t})});s$.displayName=cte;var l$="ToastAction",c$=M.forwardRef((e,t)=>{const{altText:a,...i}=e;return a.trim()?n.jsx(u$,{altText:a,asChild:!0,children:n.jsx(iM,{...i,ref:t})}):(console.error(`Invalid prop \`altText\` supplied to \`${l$}\`. Expected non-empty \`string\`.`),null)});c$.displayName=l$;var d$="ToastClose",iM=M.forwardRef((e,t)=>{const{__scopeToast:a,...i}=e,r=rte(d$,a);return n.jsx(u$,{asChild:!0,children:n.jsx(Ka.button,{type:"button",...i,ref:t,onClick:jn(e.onClick,r.onClose)})})});iM.displayName=d$;var u$=M.forwardRef((e,t)=>{const{__scopeToast:a,altText:i,...r}=e;return n.jsx(Ka.div,{"data-radix-toast-announce-exclude":"","data-radix-toast-announce-alt":i||void 0,...r,ref:t})});function h$(e){const t=[];return Array.from(e.childNodes).forEach(i=>{if(i.nodeType===i.TEXT_NODE&&i.textContent&&t.push(i.textContent),ute(i)){const r=i.ariaHidden||i.hidden||i.style.display==="none",o=i.dataset.radixToastAnnounceExclude==="";if(!r)if(o){const l=i.dataset.radixToastAnnounceAlt;l&&t.push(l)}else t.push(...h$(i))}}),t}function Mv(e,t,a,{discrete:i}){const r=a.originalEvent.currentTarget,o=new CustomEvent(e,{bubbles:!0,cancelable:!0,detail:a});t&&r.addEventListener(e,t,{once:!0}),i?Kq(r,o):r.dispatchEvent(o)}var pO=(e,t,a=0)=>{const i=Math.abs(e.x),r=Math.abs(e.y),o=i>r;return t==="left"||t==="right"?o&&i>a:!o&&r>a};function dte(e=()=>{}){const t=ic(e);rc(()=>{let a=0,i=0;return a=window.requestAnimationFrame(()=>i=window.requestAnimationFrame(t)),()=>{window.cancelAnimationFrame(a),window.cancelAnimationFrame(i)}},[t])}function ute(e){return e.nodeType===e.ELEMENT_NODE}function hte(e){const t=[],a=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:i=>{const r=i.tagName==="INPUT"&&i.type==="hidden";return i.disabled||i.hidden||r?NodeFilter.FILTER_SKIP:i.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;a.nextNode();)t.push(a.currentNode);return t}function Cj(e){const t=document.activeElement;return e.some(a=>a===t?!0:(a.focus(),document.activeElement!==t))}var pte=t$,p$=a$,m$=r$,f$=o$,g$=s$,y$=c$,b$=iM;function v$(e){var t,a,i="";if(typeof e=="string"||typeof e=="number")i+=e;else if(typeof e=="object")if(Array.isArray(e)){var r=e.length;for(t=0;t<r;t++)e[t]&&(a=v$(e[t]))&&(i&&(i+=" "),i+=a)}else for(a in e)e[a]&&(i&&(i+=" "),i+=a);return i}function ot(){for(var e,t,a=0,i="",r=arguments.length;a<r;a++)(e=arguments[a])&&(t=v$(e))&&(i&&(i+=" "),i+=t);return i}const mO=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,fO=ot,mte=(e,t)=>a=>{var i;if((t==null?void 0:t.variants)==null)return fO(e,a==null?void 0:a.class,a==null?void 0:a.className);const{variants:r,defaultVariants:o}=t,l=Object.keys(r).map(h=>{const m=a==null?void 0:a[h],f=o==null?void 0:o[h];if(m===null)return null;const y=mO(m)||mO(f);return r[h][y]}),d=a&&Object.entries(a).reduce((h,m)=>{let[f,y]=m;return y===void 0||(h[f]=y),h},{}),u=t==null||(i=t.compoundVariants)===null||i===void 0?void 0:i.reduce((h,m)=>{let{class:f,className:y,...b}=m;return Object.entries(b).every(x=>{let[k,v]=x;return Array.isArray(v)?v.includes({...o,...d}[k]):{...o,...d}[k]===v})?[...h,f,y]:h},[]);return fO(e,l,u,a==null?void 0:a.class,a==null?void 0:a.className)};/**
50 * @license lucide-react v0.469.0 - ISC
51 *
52 * This source code is licensed under the ISC license.
53 * See the LICENSE file in the root directory of this source tree.
54 */const fte=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),x$=(...e)=>e.filter((t,a,i)=>!!t&&t.trim()!==""&&i.indexOf(t)===a).join(" ").trim();/**
55 * @license lucide-react v0.469.0 - ISC
56 *
57 * This source code is licensed under the ISC license.
58 * See the LICENSE file in the root directory of this source tree.
59 */var gte={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"};/**
60 * @license lucide-react v0.469.0 - ISC
61 *
62 * This source code is licensed under the ISC license.
63 * See the LICENSE file in the root directory of this source tree.
vendor: 5,909 bytes, lines 64-124
64 */const yte=M.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:a=2,absoluteStrokeWidth:i,className:r="",children:o,iconNode:l,...d},u)=>M.createElement("svg",{ref:u,...gte,width:t,height:t,stroke:e,strokeWidth:i?Number(a)*24/Number(t):a,className:x$("lucide",r),...d},[...l.map(([h,m])=>M.createElement(h,m)),...Array.isArray(o)?o:[o]]));/**
65 * @license lucide-react v0.469.0 - ISC
66 *
67 * This source code is licensed under the ISC license.
68 * See the LICENSE file in the root directory of this source tree.
69 */const je=(e,t)=>{const a=M.forwardRef(({className:i,...r},o)=>M.createElement(yte,{ref:o,iconNode:t,className:x$(`lucide-${fte(e)}`,i),...r}));return a.displayName=`${e}`,a};/**
70 * @license lucide-react v0.469.0 - ISC
71 *
72 * This source code is licensed under the ISC license.
73 * See the LICENSE file in the root directory of this source tree.
74 */const bte=je("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"}]]);/**
75 * @license lucide-react v0.469.0 - ISC
76 *
77 * This source code is licensed under the ISC license.
78 * See the LICENSE file in the root directory of this source tree.
79 */const w$=je("AppWindow",[["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}],["path",{d:"M10 4v4",key:"pp8u80"}],["path",{d:"M2 8h20",key:"d11cs7"}],["path",{d:"M6 4v4",key:"1svtjw"}]]);/**
80 * @license lucide-react v0.469.0 - ISC
81 *
82 * This source code is licensed under the ISC license.
83 * See the LICENSE file in the root directory of this source tree.
84 */const vy=je("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/**
85 * @license lucide-react v0.469.0 - ISC
86 *
87 * This source code is licensed under the ISC license.
88 * See the LICENSE file in the root directory of this source tree.
89 */const vte=je("ArrowUp",[["path",{d:"m5 12 7-7 7 7",key:"hav0vg"}],["path",{d:"M12 19V5",key:"x0mq9r"}]]);/**
90 * @license lucide-react v0.469.0 - ISC
91 *
92 * This source code is licensed under the ISC license.
93 * See the LICENSE file in the root directory of this source tree.
94 */const xte=je("Blocks",[["rect",{width:"7",height:"7",x:"14",y:"3",rx:"1",key:"6d4xhi"}],["path",{d:"M10 21V8a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1v12a1 1 0 0 0 1 1h12a1 1 0 0 0 1-1v-5a1 1 0 0 0-1-1H3",key:"1fpvtg"}]]);/**
95 * @license lucide-react v0.469.0 - ISC
96 *
97 * This source code is licensed under the ISC license.
98 * See the LICENSE file in the root directory of this source tree.
99 */const wte=je("BookOpen",[["path",{d:"M12 7v14",key:"1akyts"}],["path",{d:"M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z",key:"ruj8y"}]]);/**
100 * @license lucide-react v0.469.0 - ISC
101 *
102 * This source code is licensed under the ISC license.
103 * See the LICENSE file in the root directory of this source tree.
104 */const rM=je("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"}]]);/**
105 * @license lucide-react v0.469.0 - ISC
106 *
107 * This source code is licensed under the ISC license.
108 * See the LICENSE file in the root directory of this source tree.
109 */const kte=je("Box",[["path",{d:"M21 8a2 2 0 0 0-1-1.73l-7-4a2 2 0 0 0-2 0l-7 4A2 2 0 0 0 3 8v8a2 2 0 0 0 1 1.73l7 4a2 2 0 0 0 2 0l7-4A2 2 0 0 0 21 16Z",key:"hh9hay"}],["path",{d:"m3.3 7 8.7 5 8.7-5",key:"g66t2b"}],["path",{d:"M12 22V12",key:"d0xqtd"}]]);/**
110 * @license lucide-react v0.469.0 - ISC
111 *
112 * This source code is licensed under the ISC license.
113 * See the LICENSE file in the root directory of this source tree.
114 */const jte=je("Boxes",[["path",{d:"M2.97 12.92A2 2 0 0 0 2 14.63v3.24a2 2 0 0 0 .97 1.71l3 1.8a2 2 0 0 0 2.06 0L12 19v-5.5l-5-3-4.03 2.42Z",key:"lc1i9w"}],["path",{d:"m7 16.5-4.74-2.85",key:"1o9zyk"}],["path",{d:"m7 16.5 5-3",key:"va8pkn"}],["path",{d:"M7 16.5v5.17",key:"jnp8gn"}],["path",{d:"M12 13.5V19l3.97 2.38a2 2 0 0 0 2.06 0l3-1.8a2 2 0 0 0 .97-1.71v-3.24a2 2 0 0 0-.97-1.71L17 10.5l-5 3Z",key:"8zsnat"}],["path",{d:"m17 16.5-5-3",key:"8arw3v"}],["path",{d:"m17 16.5 4.74-2.85",key:"8rfmw"}],["path",{d:"M17 16.5v5.17",key:"k6z78m"}],["path",{d:"M7.97 4.42A2 2 0 0 0 7 6.13v4.37l5 3 5-3V6.13a2 2 0 0 0-.97-1.71l-3-1.8a2 2 0 0 0-2.06 0l-3 1.8Z",key:"1xygjf"}],["path",{d:"M12 8 7.26 5.15",key:"1vbdud"}],["path",{d:"m12 8 4.74-2.85",key:"3rx089"}],["path",{d:"M12 13.5V8",key:"1io7kd"}]]);/**
115 * @license lucide-react v0.469.0 - ISC
116 *
117 * This source code is licensed under the ISC license.
118 * See the LICENSE file in the root directory of this source tree.
119 */const Ste=je("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"}]]);/**
120 * @license lucide-react v0.469.0 - ISC
121 *
122 * This source code is licensed under the ISC license.
123 * See the LICENSE file in the root directory of this source tree.
124 */const k$=je("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"}
124],["path",{d:"M10 14h4",key:"kelpxr"}],["path",{d:"M10 18h4",key:"1ulq68"}]]);/**
125 * @license lucide-react v0.469.0 - ISC
126 *
127 * This source code is licensed under the ISC license.
128 * See the LICENSE file in the root directory of this source tree.
129 */const Cte=je("Cable",[["path",{d:"M17 21v-2a1 1 0 0 1-1-1v-1a2 2 0 0 1 2-2h2a2 2 0 0 1 2 2v1a1 1 0 0 1-1 1",key:"10bnsj"}],["path",{d:"M19 15V6.5a1 1 0 0 0-7 0v11a1 1 0 0 1-7 0V9",key:"1eqmu1"}],["path",{d:"M21 21v-2h-4",key:"14zm7j"}],["path",{d:"M3 5h4V3",key:"z442eg"}],["path",{d:"M7 5a1 1 0 0 1 1 1v1a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V6a1 1 0 0 1 1-1V3",key:"ebdjd7"}]]);/**
130 * @license lucide-react v0.469.0 - ISC
131 *
132 * This source code is licensed under the ISC license.
133 * See the LICENSE file in the root directory of this source tree.
134 */const Ate=je("Calculator",[["rect",{width:"16",height:"20",x:"4",y:"2",rx:"2",key:"1nb95v"}],["line",{x1:"8",x2:"16",y1:"6",y2:"6",key:"x4nwl0"}],["line",{x1:"16",x2:"16",y1:"14",y2:"18",key:"wjye3r"}],["path",{d:"M16 10h.01",key:"1m94wz"}],["path",{d:"M12 10h.01",key:"1nrarc"}],["path",{d:"M8 10h.01",key:"19clt8"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M8 18h.01",key:"lrp35t"}]]);/**
135 * @license lucide-react v0.469.0 - ISC
136 *
137 * This source code is licensed under the ISC license.
138 * See the LICENSE file in the root directory of this source tree.
139 */const j$=je("CalendarDays",[["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"}],["path",{d:"M8 14h.01",key:"6423bh"}],["path",{d:"M12 14h.01",key:"1etili"}],["path",{d:"M16 14h.01",key:"1gbofw"}],["path",{d:"M8 18h.01",key:"lrp35t"}],["path",{d:"M12 18h.01",key:"mhygvu"}],["path",{d:"M16 18h.01",key:"kzsmim"}]]);/**
140 * @license lucide-react v0.469.0 - ISC
141 *
142 * This source code is licensed under the ISC license.
143 * See the LICENSE file in the root directory of this source tree.
144 */const S$=je("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"}]]);/**
145 * @license lucide-react v0.469.0 - ISC
146 *
147 * This source code is licensed under the ISC license.
148 * See the LICENSE file in the root directory of this source tree.
149 */const Tte=je("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"}]]);/**
150 * @license lucide-react v0.469.0 - ISC
151 *
152 * This source code is licensed under the ISC license.
153 * See the LICENSE file in the root directory of this source tree.
154 */const oM=je("ChartLine",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"m19 9-5 5-4-4-3 3",key:"2osh9i"}]]);/**
155 * @license lucide-react v0.469.0 - ISC
156 *
157 * This source code is licensed under the ISC license.
158 * See the LICENSE file in the root directory of this source tree.
159 */const _te=je("ChartPie",[["path",{d:"M21 12c.552 0 1.005-.449.95-.998a10 10 0 0 0-8.953-8.951c-.55-.055-.998.398-.998.95v8a1 1 0 0 0 1 1z",key:"pzmjnu"}],["path",{d:"M21.21 15.89A10 10 0 1 1 8 2.83",key:"k2fpak"}]]);/**
160 * @license lucide-react v0.469.0 - ISC
161 *
162 * This source code is licensed under the ISC license.
163 * See the LICENSE file in the root directory of this source tree.
164 */const C$=je("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/**
165 * @license lucide-react v0.469.0 - ISC
166 *
167 * This source code is licensed under the ISC license.
168 * See the LICENSE file in the root directory of this source tree.
169 */const Mte=je("CircleCheck",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/**
170 * @license lucide-react v0.469.0 - ISC
171 *
172 * This source code is licensed under the ISC license.
173 * See the LICENSE file in the root directory of this source tree.
174 */const Ete=je("ClipboardList",[["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:"M12 11h4",key:"1jrz19"}],["path",{d:"M12 16h4",key:"n85exb"}],["path",{d:"M8 11h.01",key:"1dfujw"}],["path",{d:"M8 16h.01",key:"18s6g9"}]]);/**
175 * @license lucide-react v0.469.0 - ISC
176 *
177 * This source code is licensed under the ISC license.
178 * See the LICENSE file in the root directory of this source tree.
179 */const Rte=je("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/**
180 * @license lucide-react v0.469.0 - ISC
181 *
182 * This source code is licensed under the ISC license.
183 * See the LICENSE file in the root directory of this source tree.
184 */const Nte=je("Code",[["polyline",{points:"16 18 22 12 16 6",key:"z7tu5w"}],["polyline",{points:"8 6 2 12 8 18",key:"1eg1df"}]]);/**
185 * @license lucide-react v0.469.0 - ISC
186 *
187 * This source code is licensed under the ISC license.
188 * See the LICENSE file in the root directory of this source tree.
189 */const Ote=je("Columns3",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M9 3v18",key:"fh3hqa"}],["path",{d:"M15 3v18",key:"14nvp0"}]]);/**
190 * @license lucide-react v0.469.0 - ISC
191 *
192 * This source code is licensed under the ISC license.
193 * See the LICENSE file in the root directory of this source tree.
194 */const Pte=je("Compass",[["path",{d:"m16.24 7.76-1.804 5.411a2 2 0 0 1-1.265 1.265L7.76 16.24l1.804-5.411a2 2 0 0 1 1.265-1.265z",ke
194y:"9ktpf1"}],["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}]]);/**
195 * @license lucide-react v0.469.0 - ISC
196 *
197 * This source code is licensed under the ISC license.
198 * See the LICENSE file in the root directory of this source tree.
199 */const A$=je("Crosshair",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"22",x2:"18",y1:"12",y2:"12",key:"l9bcsi"}],["line",{x1:"6",x2:"2",y1:"12",y2:"12",key:"13hhkx"}],["line",{x1:"12",x2:"12",y1:"6",y2:"2",key:"10w3f3"}],["line",{x1:"12",x2:"12",y1:"22",y2:"18",key:"15g9kq"}]]);/**
200 * @license lucide-react v0.469.0 - ISC
201 *
202 * This source code is licensed under the ISC license.
203 * See the LICENSE file in the root directory of this source tree.
204 */const Lw=je("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"}]]);/**
205 * @license lucide-react v0.469.0 - ISC
206 *
207 * This source code is licensed under the ISC license.
208 * See the LICENSE file in the root directory of this source tree.
209 */const Ite=je("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"}]]);/**
210 * @license lucide-react v0.469.0 - ISC
211 *
212 * This source code is licensed under the ISC license.
213 * See the LICENSE file in the root directory of this source tree.
214 */const Dte=je("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/**
215 * @license lucide-react v0.469.0 - ISC
216 *
217 * This source code is licensed under the ISC license.
218 * See the LICENSE file in the root directory of this source tree.
219 */const sM=je("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"}]]);/**
220 * @license lucide-react v0.469.0 - ISC
221 *
222 * This source code is licensed under the ISC license.
223 * See the LICENSE file in the root directory of this source tree.
224 */const Wte=je("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"}]]);/**
225 * @license lucide-react v0.469.0 - ISC
226 *
227 * This source code is licensed under the ISC license.
228 * See the LICENSE file in the root directory of this source tree.
229 */const T$=je("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"}]]);/**
230 * @license lucide-react v0.469.0 - ISC
231 *
232 * This source code is licensed under the ISC license.
233 * See the LICENSE file in the root directory of this source tree.
234 */const zte=je("Filter",[["polygon",{points:"22 3 2 3 10 12.46 10 19 14 21 14 12.46 22 3",key:"1yg77f"}]]);/**
235 * @license lucide-react v0.469.0 - ISC
236 *
237 * This source code is licensed under the ISC license.
238 * See the LICENSE file in the root directory of this source tree.
239 */const Lte=je("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/**
240 * @license lucide-react v0.469.0 - ISC
241 *
242 * This source code is licensed under the ISC license.
243 * See the LICENSE file in the root directory of this source tree.
244 */const Ute=je("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);/**
245 * @license lucide-react v0.469.0 - ISC
246 *
247 * This source code is licensed under the ISC license.
248 * See the LICENSE file in the root directory of this source tree.
249 */const Bte=je("GitMerge",[["circle",{cx:"18",cy:"18",r:"3",key:"1xkwt0"}],["circle",{cx:"6",cy:"6",r:"3",key:"1lh9wr"}],["path",{d:"M6 21V9a9 9 0 0 0 9 9",key:"7kw0sc"}]]);/**
250 * @license lucide-react v0.469.0 - ISC
251 *
252 * This source code is licensed under the ISC license.
253 * See the LICENSE file in the root directory of this source tree.
254 */const _$=je("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"}]]);/**
255 * @license lucide-react v0.469.0 - ISC
256 *
257 * This source code is licensed under the ISC license.
258 * See the LICENSE file in the root directory of this source tree.
259 */const qte=je("Handshake",[["path",{d:"m11 17 2 2a1 1 0 1 0 3-3",key:"efffak"}],["path",{d:"m14 14 2.5 2.5a1 1 0 1 0 3-3l-3.88-3.88a3 3 0 0 0-4.24 0l-.88.88a1 1 0 1 1-3-3l2.81-2.81a5.79 5.79 0 0 1 7.06-.87l.47.28a2 2 0 0 0 1.42.25L21 4",key:"9pr0kb"}],["path",{d:"m21 3 1 11h-2",key:"1tisrp"}],["path",{d:"M3 3 2 14l6.5 6.5a1 1 0 1 0 3-3",key:"1uvwmv"}],["path",{d:"M3 4h8",key:"1ep09j"}]]);/**
260 * @license lucide-react v0.469.0 - ISC
261 *
262 * This source code is licensed under the ISC license.
263 * See the LICENSE file in the root directory of this source tree.
264 */const $te=je("HeartPulse",[["path",{d:"M19 14c1.49-1.46 3-3.21 3-5.5A5.5 5.5 0 0 0 16.5 3c-1.76 0-3 .5-4.5 2-1.5-1.5-2.74-2-4.5-2A5.5 5.5 0 0 0 2 8.5c0 2.3 1.5 4.05 3 5.5l7 7Z",key:"c3ymky"}],["path",{d:"M3.22 12H9.5l.5-1 2 4.5 2-7 1.5 3.5h5.27",key:"1uw2ng"}]]);/**
265 * @license lucide-react v0.469.0 - ISC
266 *
267 * This source code is licensed under the ISC license.
268 * See the LICENSE file in the root directory of this source tree.
269 */const Fte=je("Layers",[["path",{d:"M12.83 2.18a2 2 0 0 0-1.66 0L2.6 6.08a1 1 0 0 0 0 1.83l8.58 3.91a2 2 0 0 0 1.66 0l8.58-3.9a1 1 0 0 0 0-1.83z",key:"zw3jo"}],["path",{d:"M2 12a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 12",key:"1wduqc"}],["path",{d:"M2 17a1 1 0 0 0 .58.91l8.6 3.91a2 2 0 0 0 1.65 0l8.58-3.9A1 1 0 0 0 22 17",key:"kqbvx6"}]]);/**
270 * @license lucide-react v0.469.0 - ISC
271 *
272 * This source code is licensed under the ISC license.
273 * See the LICENSE file in the root directory of this source tree.
274 */const M$=je("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"}]]);/**
275 * @license lucide-react v0.469.0 - ISC
276 *
277 * This source code is licensed under the ISC license.
278 * See the LICENSE file in the root directory of this source tree.
279 */const E$=je("Library",[["path",{d:"m16 6 4 14",key:"ji33uf"}],["path",{d:"M12 6v14",key:"1n7gus"}],["path",{d:"M8 8v12",key:"1gg7y9"}],["path",{d:"M4 4v16",key:"6qkkli"}]]);/**
280 * @license lucide-react v0.469.0 - ISC
281 *
282 * This source code is licensed under the ISC license.
283 * See the LICENSE file in the root directory of this source tree.
284 */const Gte=je("Link2",[["path",{d:"M9 17H7A5 5 0 0 1 7 7h2",key:"8i5ue5"}],["path",{d:"M15 7h2a5 5 0 1 1 0 10h-2",key:"1b9ql8"}],["line",{x1:"8",x2:"16",y1:"12",y2:"12",key:"1jonct"}]]);/**
285 * @license lucide-react v0.469.0 - ISC
286 *
287 * This source code is licensed under the ISC license.
288 * See the LICENSE file in the root directory of this source tree.
289 */const Hte=je("ListChecks",[["path",{d:"m3 17 2 2 4-4",key:"1jhpwq"}],["path",{d:"m3 7 2 2 4-4",key:"1obspn"}],["path",{d:"M13 6h8",key:"15sg57"}],["path",{d:"M13 12h8",key:"h98zly"}],["path",{d:"M13 18h8",key:"oe0vm4"}]]);/**
290 * @license lucide-react v0.469.0 - ISC
291 *
292 * This source code is licensed under the ISC license.
293 * See the LICENSE file in the root directory of this source tree.
294 */const Uw=je("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"}]]);/**
295 * @license lucide-react v0.469.0 - ISC
296 *
297 * This source code is licensed under the ISC license.
298 * See the LICENSE file in the root directory of this source tree.
299 */const xy=je("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"}]]);/**
300 * @license lucide-react v0.469.0 - ISC
301 *
302 * This source code is licensed under the ISC license.
303 * See the LICENSE file in the root directory of this source tree.
304 */const Yte=je("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"}]]);/**
305 * @license lucide-react v0.469.0 - ISC
306 *
307 * This source code is licensed under the ISC license.
308 * See the LICENSE file in the root directory of this source tree.
309 */const R$=je("Megaphone",[["path",{d:"m3 11 18-5v12L3 14v-3z",key:"n962bs"}],["path",{d:"M11.6 16.8a3 3 0 1 1-5.8-1.6",key:"1yl0tm"}]]);/**
310 * @license lucide-react v0.469.0 - ISC
311 *
312 * This source code is licensed under the ISC license.
313 * See the LICENSE file in the root directory of this source tree.
314 */const Vte=je("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"}]]);/**
315 * @license lucide-react v0.469.0 - ISC
316 *
317 * This source code is licensed under the ISC license.
318 * See the LICENSE file in the root directory of this source tree.
319 */const Kte=je("Microscope",[["path",{d:"M6 18h8",key:"1borvv"}],["path",{d:"M3 22h18",key:"8prr45"}],["path",{d:"M14 22a7 7 0 1 0 0-14h-1",key:"1jwaiy"}],["path",{d:"M9 14h2",key:"197e7h"}],["path",{d:"M9 12a2 2 0 0 1-2-2V6h6v4a2 2 0 0 1-2 2Z",key:"1bmzmy"}],["path",{d:"M12 6V3a1 1 0 0 0-1-1H9a1 1 0 0 0-1 1v3",key:"1drr47"}]]);/**
320 * @license lucide-react v0.469.0 - ISC
321 *
322 * This source code is licensed under the ISC license.
323 * See the LICENSE file in the root directory of this source tree.
324 */const Xte=je("Milestone",[["path",{d:"M12 13v8",key:"1l5pq0"}],["path",{d:"M12 3v3",key:"1n5kay"}],["path",{d:"M4 6a1 1 0 0 0-1 1v5a1 1 0 0 0 1 1h13a2 2 0 0 0 1.152-.365l3.424-2.317a1 1 0 0 0 0-1.635l-3.424-2.318A2 2 0 0 0 17 6z",key:"1btarq"}]]);/**
325 * @license lucide-react v0.469.0 - ISC
326 *
327 * This source code is licensed under the ISC license.
328 * See the LICENSE file in the root directory of this source tree.
329 */const N$=je("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"}]]);/**
330 * @license lucide-react v0.469.0 - ISC
331 *
332 * This source code is licensed under the ISC license.
333 * See the LICENSE file in the root directory of this source tree.
334 */const Qte=je("Pencil",[["path",{d:"M21.174 6.812a1 1 0 0 0-3.986-3.987L3.842 16.174a2 2 0 0 0-.5.83l-1.321 4.352a.5.5 0 0 0 .623.622l4.353-1.32a2 2 0 0 0 .83-.497z",key:"1a8usu"}],["path",{d:"m15 5 4 4",key:"1mk7zo"}]]);/**
335 * @license lucide-react v0.469.0 - ISC
336 *
337 * This source code is licensed under the ISC license.
338 * See the LICENSE file in the root directory of this source tree.
339 */const Bw=je("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"}]]);/**
340 * @license lucide-react v0.469.0 - ISC
341 *
342 * This source code is licensed under the ISC license.
343 * See the LICENSE file in the root directory of this source tree.
344 */const O$=je("Plug",[["path",{d:"M12 22v-5",key:"1ega77"}
344],["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"}]]);/**
345 * @license lucide-react v0.469.0 - ISC
346 *
347 * This source code is licensed under the ISC license.
348 * See the LICENSE file in the root directory of this source tree.
349 */const Zte=je("Presentation",[["path",{d:"M2 3h20",key:"91anmk"}],["path",{d:"M21 3v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V3",key:"2k9sn8"}],["path",{d:"m7 21 5-5 5 5",key:"bip4we"}]]);/**
350 * @license lucide-react v0.469.0 - ISC
351 *
352 * This source code is licensed under the ISC license.
353 * See the LICENSE file in the root directory of this source tree.
354 */const P$=je("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"}]]);/**
355 * @license lucide-react v0.469.0 - ISC
356 *
357 * This source code is licensed under the ISC license.
358 * See the LICENSE file in the root directory of this source tree.
359 */const Jte=je("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"}]]);/**
360 * @license lucide-react v0.469.0 - ISC
361 *
362 * This source code is licensed under the ISC license.
363 * See the LICENSE file in the root directory of this source tree.
364 */const ene=je("Repeat",[["path",{d:"m17 2 4 4-4 4",key:"nntrym"}],["path",{d:"M3 11v-1a4 4 0 0 1 4-4h14",key:"84bu3i"}],["path",{d:"m7 22-4-4 4-4",key:"1wqhfi"}],["path",{d:"M21 13v1a4 4 0 0 1-4 4H3",key:"1rx37r"}]]);/**
365 * @license lucide-react v0.469.0 - ISC
366 *
367 * This source code is licensed under the ISC license.
368 * See the LICENSE file in the root directory of this source tree.
369 */const tne=je("Route",[["circle",{cx:"6",cy:"19",r:"3",key:"1kj8tv"}],["path",{d:"M9 19h8.5a3.5 3.5 0 0 0 0-7h-11a3.5 3.5 0 0 1 0-7H15",key:"1d8sl"}],["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}]]);/**
370 * @license lucide-react v0.469.0 - ISC
371 *
372 * This source code is licensed under the ISC license.
373 * See the LICENSE file in the root directory of this source tree.
374 */const nne=je("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/**
375 * @license lucide-react v0.469.0 - ISC
376 *
377 * This source code is licensed under the ISC license.
378 * See the LICENSE file in the root directory of this source tree.
379 */const ane=je("Send",[["path",{d:"M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z",key:"1ffxy3"}],["path",{d:"m21.854 2.147-10.94 10.939",key:"12cjpa"}]]);/**
380 * @license lucide-react v0.469.0 - ISC
381 *
382 * This source code is licensed under the ISC license.
383 * See the LICENSE file in the root directory of this source tree.
384 */const ine=je("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"}]]);/**
385 * @license lucide-react v0.469.0 - ISC
386 *
387 * This source code is licensed under the ISC license.
388 * See the LICENSE file in the root directory of this source tree.
389 */const rne=je("Share2",[["circle",{cx:"18",cy:"5",r:"3",key:"gq8acd"}],["circle",{cx:"6",cy:"12",r:"3",key:"w7nqdw"}],["circle",{cx:"18",cy:"19",r:"3",key:"1xt0gg"}],["line",{x1:"8.59",x2:"15.42",y1:"13.51",y2:"17.49",key:"47mynk"}],["line",{x1:"15.41",x2:"8.59",y1:"6.51",y2:"10.49",key:"1n3mei"}]]);/**
390 * @license lucide-react v0.469.0 - ISC
391 *
392 * This source code is licensed under the ISC license.
393 * See the LICENSE file in the root directory of this source tree.
394 */const I$=je("ShieldCheck",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",ke
394y:"oel41y"}],["path",{d:"m9 12 2 2 4-4",key:"dzmm74"}]]);/**
395 * @license lucide-react v0.469.0 - ISC
396 *
397 * This source code is licensed under the ISC license.
398 * See the LICENSE file in the root directory of this source tree.
399 */const one=je("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);/**
400 * @license lucide-react v0.469.0 - ISC
401 *
402 * This source code is licensed under the ISC license.
403 * See the LICENSE file in the root directory of this source tree.
404 */const sne=je("Sigma",[["path",{d:"M18 7V5a1 1 0 0 0-1-1H6.5a.5.5 0 0 0-.4.8l4.5 6a2 2 0 0 1 0 2.4l-4.5 6a.5.5 0 0 0 .4.8H17a1 1 0 0 0 1-1v-2",key:"wuwx1p"}]]);/**
405 * @license lucide-react v0.469.0 - ISC
406 *
407 * This source code is licensed under the ISC license.
408 * See the LICENSE file in the root directory of this source tree.
409 */const lne=je("SlidersHorizontal",[["line",{x1:"21",x2:"14",y1:"4",y2:"4",key:"obuewd"}],["line",{x1:"10",x2:"3",y1:"4",y2:"4",key:"1q6298"}],["line",{x1:"21",x2:"12",y1:"12",y2:"12",key:"1iu8h1"}],["line",{x1:"8",x2:"3",y1:"12",y2:"12",key:"ntss68"}],["line",{x1:"21",x2:"16",y1:"20",y2:"20",key:"14d8ph"}],["line",{x1:"12",x2:"3",y1:"20",y2:"20",key:"m0wm8r"}],["line",{x1:"14",x2:"14",y1:"2",y2:"6",key:"14e1ph"}],["line",{x1:"8",x2:"8",y1:"10",y2:"14",key:"1i6ji0"}],["line",{x1:"16",x2:"16",y1:"18",y2:"22",key:"1lctlv"}]]);/**
410 * @license lucide-react v0.469.0 - ISC
411 *
412 * This source code is licensed under the ISC license.
413 * See the LICENSE file in the root directory of this source tree.
414 */const L0=je("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"}]]);/**
415 * @license lucide-react v0.469.0 - ISC
416 *
417 * This source code is licensed under the ISC license.
418 * See the LICENSE file in the root directory of this source tree.
419 */const cne=je("Table",[["path",{d:"M12 3v18",key:"108xh3"}],["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M3 9h18",key:"1pudct"}],["path",{d:"M3 15h18",key:"5xshup"}]]);/**
420 * @license lucide-react v0.469.0 - ISC
421 *
422 * This source code is licensed under the ISC license.
423 * See the LICENSE file in the root directory of this source tree.
424 */const dne=je("Tag",[["path",{d:"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z",key:"vktsd0"}],["circle",{cx:"7.5",cy:"7.5",r:".5",fill:"currentColor",key:"kqv944"}]]);/**
425 * @license lucide-react v0.469.0 - ISC
426 *
427 * This source code is licensed under the ISC license.
428 * See the LICENSE file in the root directory of this source tree.
429 */const une=je("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"}]]);/**
430 * @license lucide-react v0.469.0 - ISC
431 *
432 * This source code is licensed under the ISC license.
433 * See the LICENSE file in the root directory of this source tree.
434 */const D$=je("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"}]]);/**
435 * @license lucide-react v0.469.0 - ISC
436 *
437 * This source code is licensed under the ISC license.
438 * See the LICENSE file in the root directory of this source tree.
439 */const hne=je("Terminal",[["polyline",{points:"4 17 10 11 4 5",key:"akl6gq"}],["line",{x1:"12",x2:"20",y1:"19",y2:"19",key:"q2wloq"}]]);/**
440 * @license lucide-react v0.469.0 - ISC
441 *
442 * This source code is licensed under the ISC license.
443 * See the LICENSE file in the root directory of this source tree.
444 */const pne=je("Timer",[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]]);/**
445 * @license lucide-react v0.469.0 - ISC
446 *
447 * This source code is licensed under the ISC license.
448 * See the LICENSE file in the root directory of this source tree.
449 */const mne=je("Upload",[["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}],["polyline",{points:"17 8 12 3 7 8",key:"t8dd8p"}],["line",{x1:"12",x2:"12",y1:"3",y2:"15",key:"widbto"}]]);/**
450 * @license lucide-react v0.469.0 - ISC
451 *
452 * This source code is licensed under the ISC license.
453 * See the LICENSE file in the root directory of this source tree.
454 */const fne=je("UserPlus",[["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"}],["line",{x1:"19",x2:"19",y1:"8",y2:"14",key:"1bvyxn"}],["line",{x1:"22",x2:"16",y1:"11",y2:"11",key:"1shjgl"}]]);/**
455 * @license lucide-react v0.469.0 - ISC
456 *
457 * This source code is licensed under the ISC license.
458 * See the LICENSE file in the root directory of this source tree.
459 */const W$=je("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"}]]);/**
460 * @license lucide-react v0.469.0 - ISC
461 *
462 * This source code is licensed under the ISC license.
463 * See the LICENSE file in the root directory of this source tree.
464 */const gne=je("Webhook",[["path",{d:"M18 16.98h-5.99c-1.1 0-1.95.94-2.48 1.9A4 4 0 0 1 2 17c.01-.7.2-1.4.57-2",key:"q3hayz"}],["path",{d:"m6 17 3.13-5.78c.53-.97.1-2.18-.5-3.1a4 4 0 1 1 6.89-4.06",key:"1go1hn"}],["path",{d:"m12 6 3.13 5.73C15.66 12.7 16.9 13 18 13a4 4 0 0 1 0 8",key:"qlwsc0"}]]);/**
465 * @license lucide-react v0.469.0 - ISC
466 *
467 * This source code is licensed under the ISC license.
468 * See the LICENSE file in the root directory of this source tree.
469 */const z$=je("Workflow",[["rect",{width:"8",height:"8",x:"3",y:"3",rx:"2",key:"by2w9f"}],["path",{d:"M7 11v4a2 2 0 0 0 2 2h4",key:"xkn7yn"}],["rect",{width:"8",height:"8",x:"13",y:"13",rx:"2",key:"1cgmvn"}]]);/**
470 * @license lucide-react v0.469.0 - ISC
471 *
472 * This source code is licensed under the ISC license.
473 * See the LICENSE file in the root directory of this source tree.
474 */const yne=je("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"}]]);/**
475 * @license lucide-react v0.469.0 - ISC
476 *
477 * This source code is licensed under the ISC license.
478 * See the LICENSE file in the root directory of this source tree.
479 */const L$=je("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/**
480 * @license lucide-react v0.469.0 - ISC
481 *
482 * This source code is licensed under the ISC license.
483 * See the LICENSE file in the root directory of this source tree.
484 */const bne=je("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"}]]),lM="-",vne=e=>{const t=wne(e),{conflictingClassGroups:a,conflictingClassGroupModifiers:i}=e;return{getClassGroupId:l=>{const d=l.split(lM);return d[0]===""&&d.length!==1&&d.shift(),U$(d,t)||xne(l)},getConflictingClassGroupIds:(l,d)=>{const u=a[l]||[];return d&&i[l]?[...u,...i[l]]:u}}},U$=(e,t)=>{var l;if(e.length===0)return t.classGroupId;const a=e[0],i=t.nextPart.get(a),r=i?U$(e.slice(1),i):void 0;if(r)return r;if(t.validators.length===0)return;const o=e.join(lM);return(l=t.validators.find(({validator:d})=>d(o)))==null?void 0:l.classGroupId},gO=/^\[(.+)\]$/,xne=e=>{if(gO.test(e)){const t=gO.exec(e)[1],a=t==null?void 0:t.substring(0,t.indexOf(":"));if(a)return"arbitrary.."+a}},wne=e=>{const{theme:t,prefix:a}=e,i={nextPart:new Map,validators:[]};return jne(Object.entries(e.classGroups),a).forEach(([o,l])=>{p4(l,i,o,t)}),i},p4=(e,t,a,i)=>{e.forEach(r=>{if(typeof r=="string"){const o=r===""?t:yO(t,r);o.classGroupId=a;return}if(typeof r=="function"){if(kne(r)){p4(r(i),t,a,i);return}t.validators.push({validator:r,classGroupId:a});return}Object.entries(r).forEach(([o,l])=>
vendor: 4,852 bytes, line 484
484{p4(l,yO(t,o),a,i)})})},yO=(e,t)=>{let a=e;return t.split(lM).forEach(i=>{a.nextPart.has(i)||a.nextPart.set(i,{nextPart:new Map,validators:[]}),a=a.nextPart.get(i)}),a},kne=e=>e.isThemeGetter,jne=(e,t)=>t?e.map(([a,i])=>{const r=i.map(o=>typeof o=="string"?t+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([l,d])=>[t+l,d])):o);return[a,r]}):e,Sne=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,a=new Map,i=new Map;const r=(o,l)=>{a.set(o,l),t++,t>e&&(t=0,i=a,a=new Map)};return{get(o){let l=a.get(o);if(l!==void 0)return l;if((l=i.get(o))!==void 0)return r(o,l),l},set(o,l){a.has(o)?a.set(o,l):r(o,l)}}},B$="!",Cne=e=>{const{separator:t,experimentalParseClassName:a}=e,i=t.length===1,r=t[0],o=t.length,l=d=>{const u=[];let h=0,m=0,f;for(let v=0;v<d.length;v++){let j=d[v];if(h===0){if(j===r&&(i||d.slice(v,v+o)===t)){u.push(d.slice(m,v)),m=v+o;continue}if(j==="/"){f=v;continue}}j==="["?h++:j==="]"&&h--}const y=u.length===0?d:d.substring(m),b=y.startsWith(B$),x=b?y.substring(1):y,k=f&&f>m?f-m:void 0;return{modifiers:u,hasImportantModifier:b,baseClassName:x,maybePostfixModifierPosition:k}};return a?d=>a({className:d,parseClassName:l}):l},Ane=e=>{if(e.length<=1)return e;const t=[];let a=[];return e.forEach(i=>{i[0]==="["?(t.push(...a.sort(),i),a=[]):a.push(i)}),t.push(...a.sort()),t},Tne=e=>({cache:Sne(e.cacheSize),parseClassName:Cne(e),...vne(e)}),_ne=/\s+/,Mne=(e,t)=>{const{parseClassName:a,getClassGroupId:i,getConflictingClassGroupIds:r}=t,o=[],l=e.trim().split(_ne);let d="";for(let u=l.length-1;u>=0;u-=1){const h=l[u],{modifiers:m,hasImportantModifier:f,baseClassName:y,maybePostfixModifierPosition:b}=a(h);let x=!!b,k=i(x?y.substring(0,b):y);if(!k){if(!x){d=h+(d.length>0?" "+d:d);continue}if(k=i(y),!k){d=h+(d.length>0?" "+d:d);continue}x=!1}const v=Ane(m).join(":"),j=f?v+B$:v,T=j+k;if(o.includes(T))continue;o.push(T);const A=r(k,x);for(let C=0;C<A.length;++C){const _=A[C];o.push(j+_)}d=h+(d.length>0?" "+d:d)}return d};function Ene(){let e=0,t,a,i="";for(;e<arguments.length;)(t=arguments[e++])&&(a=q$(t))&&(i&&(i+=" "),i+=a);return i}const q$=e=>{if(typeof e=="string")return e;let t,a="";for(let i=0;i<e.length;i++)e[i]&&(t=q$(e[i]))&&(a&&(a+=" "),a+=t);return a};function Rne(e,...t){let a,i,r,o=l;function l(u){const h=t.reduce((m,f)=>f(m),e());return a=Tne(h),i=a.cache.get,r=a.cache.set,o=d,d(u)}function d(u){const h=i(u);if(h)return h;const m=Mne(u,a);return r(u,m),m}return function(){return o(Ene.apply(null,arguments))}}const $t=e=>{const t=a=>a[e]||[];return t.isThemeGetter=!0,t},$$=/^\[(?:([a-z-]+):)?(.+)\]$/i,Nne=/^\d+\/\d+$/,One=new Set(["px","full","screen"]),Pne=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Ine=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,Dne=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,Wne=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,zne=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,os=e=>jh(e)||One.has(e)||Nne.test(e),Cl=e=>Gp(e,"length",Hne),jh=e=>!!e&&!Number.isNaN(Number(e)),Aj=e=>Gp(e,"number",jh),rf=e=>!!e&&Number.isInteger(Number(e)),Lne=e=>e.endsWith("%")&&jh(e.slice(0,-1)),nt=e=>$$.test(e),Al=e=>Pne.test(e),Une=new Set(["length","size","percentage"]),Bne=e=>Gp(e,Une,F$),qne=e=>Gp(e,"position",F$),$ne=new Set(["image","url"]),Fne=e=>Gp(e,$ne,Vne),Gne=e=>Gp(e,"",Yne),of=()=>!0,Gp=(e,t,a)=>{const i=$$.exec(e);return i?i[1]?typeof t=="string"?i[1]===t:t.has(i[1]):a(i[2]):!1},Hne=e=>Ine.test(e)&&!Dne.test(e),F$=()=>!1,Yne=e=>Wne.test(e),Vne=e=>zne.test(e),Kne=()=>{const e=$t("colors"),t=$t("spacing"),a=$t("blur"),i=$t("brightness"),r=$t("borderColor"),o=$t("borderRadius"),l=$t("borderSpacing"),d=$t("borderWidth"),u=$t("contrast"),h=$t("grayscale"),m=$t("hueRotate"),f=$t("invert"),y=$t("gap"),b=$t("gradientColorStops"),x=$t("gradientColorStopPositions"),k=$t("inset"),v=$t("margin"),j=$t("opacity"),T=$t("padding"),A=$t("saturate"),C=$t("scale"),_=$t("sepia"),E=$t("skew"),R=$t("space"),W=$t("translate"),z=()=>["auto","contain","none"],H=()=>["auto","hidden","clip","visible","scroll"],$=()=>["auto",nt,t],U=()=>[nt,t],X=()=>["",os,Cl],D=()=>["auto",jh,nt],P=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],O=()=>["solid","dashed","dotted","double","none"],B=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Y=()=>["start","end","center","between","around","evenly","stretch"],V=()=>["","0",nt],G=()=>["auto","avoid","all","avoid-page","page","left","right","column"],I=()=>[jh,nt];return{cacheSize:500,separator:":",theme:{colors:[of],spacing:[os,Cl],blur:["none","",Al,nt],brightness:I(),borderColor:[e],borderRadius:["n
484one","","full",Al,nt],borderSpacing:U(),borderWidth:X(),contrast:I(),grayscale:V(),hueRotate:I(),invert:V(),gap:U(),gradientColorStops:[e],gradientColorStopPositions:[Lne,Cl],inset:$(),margin:$(),opacity:I(),padding:U(),saturate:I(),scale:I(),sepia:V(),skew:I(),space:U(),translate:U()},classGroups:{aspect:[{aspect:["auto","square","video",nt]}],container:["container"],columns:[{columns:[Al]}],"break-after":[{"break-after":G()}],"break-before":[{"break-before":G()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...P(),nt]}],overflow:[{overflow:H()}],"overflow-x":[{"overflow-x":H()}],"overflow-y":[{"overflow-y":H()}],overscroll:[{overscroll:z()}],"overscroll-x":[{"overscroll-x":z()}],"overscroll-y":[{"overscroll-y":z()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[k]}],"inset-x":[{"inset-x":[k]}],"inset-y":[{"inset-y":[k]}],start:[{start:[k]}],end:[{end:[k]}],top:[{top:[k]}],right:[{right:[k]}],bottom:[{bottom:[k]}],left:[{left:[k]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",rf,nt]}],basis:[{basis:$()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",nt]}],grow:[{grow:V()}],shrink:[{shrink:V()}],order:[{order:["first","last","none",rf,nt]}],"grid-cols":[{"grid-cols":[of]}],"col-start-end":[{col:["auto",{span:["full",rf,nt]},nt]}],"col-start":[{"col-start":D()}],"col-end":[{"col-end":D()}],"grid-rows":[{"grid-rows":[of]}],"row-start-end":[{row:["auto",{span:[rf,nt]},nt]}],"row-start":[{"row-start":D()}],"row-end":[{"row-end":D()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",nt]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",nt]}],gap:[{gap:[y]}],"gap-x":[{"gap-x":[y]}],"gap-y":[{"gap-y":[y]}],"justify-content":[{justify:["normal",...Y()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...Y(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...Y(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[T]}],px:[{px:[T]}],py:[{py:[T]}],ps:[{ps:[T]}],pe:[{pe:[T]}],pt:[{pt:[T]}],pr:[{pr:[T]}],pb:[{pb:[T]}],pl:[{pl:[T]}],m:[{m:[v]}],mx:[{mx:[v]}],my:[{my:[v]}],ms:[{ms:[v]}],me:[{me:[v]}],mt:[{mt:[v]}],mr:[{mr:[v]}],mb:[{mb:[v]}],ml:[{ml:[v]}],"space-x":[{"space-x":[R]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[R]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",nt,t]}],"min-w":[{"min-w":[nt,t,"min","max","fit"]}],"max-w":[{"max-w":[nt,t,"none","full","min","max","fit","prose",{screen:[Al]},Al]}],h:[{h:[nt,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[nt,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[nt,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[nt,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Al,Cl]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Aj]}],"font-family":[{font:[of]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",nt]}],"line-clamp":[{"line-clamp":["none",jh,Aj]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",os,nt]}],"list-image":[{"list-image":["none",nt]}],"list-style-type":[{list:["none","disc","decimal",nt]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[j]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[j]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...O(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",os,Cl]}],"underline-offset":[{"underline-offset":["auto",os,nt]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:U()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",nt]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",nt]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[j]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...P(),qne]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",Bne]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},Fne]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[x]}
vendor: 5,181 bytes, line 484
484],"gradient-via-pos":[{via:[x]}],"gradient-to-pos":[{to:[x]}],"gradient-from":[{from:[b]}],"gradient-via":[{via:[b]}],"gradient-to":[{to:[b]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[d]}],"border-w-x":[{"border-x":[d]}],"border-w-y":[{"border-y":[d]}],"border-w-s":[{"border-s":[d]}],"border-w-e":[{"border-e":[d]}],"border-w-t":[{"border-t":[d]}],"border-w-r":[{"border-r":[d]}],"border-w-b":[{"border-b":[d]}],"border-w-l":[{"border-l":[d]}],"border-opacity":[{"border-opacity":[j]}],"border-style":[{border:[...O(),"hidden"]}],"divide-x":[{"divide-x":[d]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[d]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[j]}],"divide-style":[{divide:O()}],"border-color":[{border:[r]}],"border-color-x":[{"border-x":[r]}],"border-color-y":[{"border-y":[r]}],"border-color-s":[{"border-s":[r]}],"border-color-e":[{"border-e":[r]}],"border-color-t":[{"border-t":[r]}],"border-color-r":[{"border-r":[r]}],"border-color-b":[{"border-b":[r]}],"border-color-l":[{"border-l":[r]}],"divide-color":[{divide:[r]}],"outline-style":[{outline:["",...O()]}],"outline-offset":[{"outline-offset":[os,nt]}],"outline-w":[{outline:[os,Cl]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:X()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[j]}],"ring-offset-w":[{"ring-offset":[os,Cl]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Al,Gne]}],"shadow-color":[{shadow:[of]}],opacity:[{opacity:[j]}],"mix-blend":[{"mix-blend":[...B(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":B()}],filter:[{filter:["","none"]}],blur:[{blur:[a]}],brightness:[{brightness:[i]}],contrast:[{contrast:[u]}],"drop-shadow":[{"drop-shadow":["","none",Al,nt]}],grayscale:[{grayscale:[h]}],"hue-rotate":[{"hue-rotate":[m]}],invert:[{invert:[f]}],saturate:[{saturate:[A]}],sepia:[{sepia:[_]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[a]}],"backdrop-brightness":[{"backdrop-brightness":[i]}],"backdrop-contrast":[{"backdrop-contrast":[u]}],"backdrop-grayscale":[{"backdrop-grayscale":[h]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[m]}],"backdrop-invert":[{"backdrop-invert":[f]}],"backdrop-opacity":[{"backdrop-opacity":[j]}],"backdrop-saturate":[{"backdrop-saturate":[A]}],"backdrop-sepia":[{"backdrop-sepia":[_]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[l]}],"border-spacing-x":[{"border-spacing-x":[l]}],"border-spacing-y":[{"border-spacing-y":[l]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",nt]}],duration:[{duration:I()}],ease:[{ease:["linear","in","out","in-out",nt]}],delay:[{delay:I()}],animate:[{animate:["none","spin","ping","pulse","bounce",nt]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[C]}],"scale-x":[{"scale-x":[C]}],"scale-y":[{"scale-y":[C]}],rotate:[{rotate:[rf,nt]}],"translate-x":[{"translate-x":[W]}],"translate-y":[{"translate-y":[W]}],"skew-x":[{"skew-x":[E]}],"skew-y":[{"skew-y":[E]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",nt]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",nt]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":U()}],"scroll-mx":[{"scroll-mx":U()}],"scroll-my":[{"scroll-my":U()}],"scroll-ms":[{"scroll-ms":U()}],"scroll-me":[{"scroll-me":U()}],"scroll-mt":[{"scroll-mt":U()}],"scroll-mr":[{"scroll-mr":U()}],"scroll-mb":[{"scroll-mb":U()}],"scroll-ml":[{"scroll-ml":U()}],"scroll-p":[{"scroll-p":U()}],"scroll-px":[{"scroll-px":U()}],"scroll-py":[{"scroll-py":U()}],"scroll-ps":[{"scroll-ps":U()}],"scroll-pe":[{"scroll-pe":U()}],"scroll-pt":[{"scroll-pt":U()}],"scroll-pr":[{"scroll-pr":U()}],"scroll-pb":[{"scroll-pb":U()}],"scroll-pl":[{"scroll-pl":U()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}
484],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",nt]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[os,Cl,Aj]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},Xne=Rne(Kne);function nu(...e){return Xne(ot(e))}function Qne(e){return function(){let t=e+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}function Zne(e,t=Math.random){const a=e.slice();for(let i=a.length-1;i>0;i--){const r=Math.floor(t()*(i+1));[a[i],a[r]]=[a[r],a[i]]}return a}const Jne=pte,G$=M.forwardRef(({className:e,...t},a)=>n.jsx(p$,{ref:a,className:nu("fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]",e),...t}));G$.displayName=p$.displayName;const eae=mte("group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full",{variants:{variant:{default:"border bg-background text-foreground",destructive:"destructive group border-destructive bg-destructive text-destructive-foreground"}},defaultVariants:{variant:"default"}}),H$=M.forwardRef(({className:e,variant:t,...a},i)=>n.jsx(m$,{ref:i,className:nu(eae({variant:t}),e),...a}));H$.displayName=m$.displayName;const tae=M.forwardRef(({className:e,...t},a)=>n.jsx(y$,{ref:a,className:nu("inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium ring-offset-background transition-colors group-[.destructive]:border-muted/40 hover:bg-secondary group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 group-[.destructive]:focus:ring-destructive disabled:pointer-events-none disabled:opacity-50",e),...t}));tae.displayName=y$.displayName;const Y$=M.forwardRef(({className:e,...t},a)=>n.jsx(b$,{ref:a,className:nu("absolute right-2 top-2 rounded-md p-1 text-foreground
484/50 opacity-0 transition-opacity group-hover:opacity-100 group-[.destructive]:text-red-300 hover:text-foreground group-[.destructive]:hover:text-red-50 focus:opacity-100 focus:outline-none focus:ring-2 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600",e),"toast-close":"",...t,children:n.jsx(L$,{className:"h-4 w-4"})}));Y$.displayName=b$.displayName;const V$=M.forwardRef(({className:e,...t},a)=>n.jsx(f$,{ref:a,className:nu("text-sm font-semibold",e),...t}));V$.displayName=f$.displayName;const K$=M.forwardRef(({className:e,...t},a)=>n.jsx(g$,{ref:a,className:nu("text-sm opacity-90",e),...t}));K$.displayName=g$.displayName;function nae(){const{toasts:e}=wee();return n.jsxs(Jne,{children:[e.map(function({id:t,title:a,description:i,action:r,...o}){return n.jsxs(H$,{...o,children:[n.jsxs("div",{className:"grid gap-1",children:[a&&n.jsx(V$,{children:a}),i&&n.jsx(K$,{children:i})]}),r,n.jsx(Y$,{})]},t)}),n.jsx(G$,{})]})}var aae=(e,t,a,i,r,o,l,d)=>{let u=document.documentElement,h=["light","dark"];function m(b){(Array.isArray(e)?e:[e]).forEach(x=>{let k=x==="class",v=k&&o?r.map(j=>o[j]||j):r;k?(u.classList.remove(...v),u.classList.add(o&&o[b]?o[b]:b)):u.setAttribute(x,b)}),f(b)}function f(b){d&&h.includes(b)&&(u.style.colorScheme=b)}function y(){return window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}if(i)m(i);else try{let b=localStorage.getItem(t)||a,x=l&&b==="system"?y():b;m(x)}catch{}},iae=M.createContext(void 0),rae={setTheme:e=>{},themes:[]},oae=()=>{var e;return(e=M.useContext(iae))!=null?e:rae};M.memo(({forcedTheme:e,storageKey:t,attribute:a,enableSystem:i,enableColorScheme:r,defaultTheme:o,value:l,themes:d,nonce:u,scriptProps:h})=>{let m=JSON.stringify([a,t,o,e,d,l,i,r]).slice(1,-1);return M.createElement("script",{...h,suppressHydrationWarning:!0,nonce:typeof window>"u"?u:"",dangerouslySetInnerHTML:{__html:`(${aae.toString()})(${m})`}})});var sae=e=>{switch(e){case"success":return dae;case"info":return hae;case"warning":return uae;case"error":return pae;default:return null}},lae=Array(12).fill(0),cae=({visible:e,className:t})=>q.createElement("div",{className:["sonner-loading-wrapper",t].filter(Boolean).join(" "),"data-visible":e},q.createElement("div",{className:"sonner-spinner"},lae.map((a,i)=>q.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${i}`})))),dae=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},q.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),uae=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},q.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),hae=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},q.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),pae=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},q.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),mae=q.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},q.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),q.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),fae=()=>{let[e,t]=q.useState(document.hidden);return q.useEffect(()=>{let a=()=>{t(document.hidden)};return document.addEventListener("visibilitychange",a),()=>window.removeEventListener("visibilitychange",a)},[]),e},m4=1,gae=class{constructor(){this.subscribe=e=>(this.subscribers.push(e),()=>{let t=this.subscribers.indexOf(e);this.subscribers.splice(t,1)}),this.publish=e=>
vendor: 1,050 bytes, line 484
484{this.subscribers.forEach(t=>t(e))},this.addToast=e=>{this.publish(e),this.toasts=[...this.toasts,e]},this.create=e=>{var t;let{message:a,...i}=e,r=typeof(e==null?void 0:e.id)=="number"||((t=e.id)==null?void 0:t.length)>0?e.id:m4++,o=this.toasts.find(d=>d.id===r),l=e.dismissible===void 0?!0:e.dismissible;return this.dismissedToasts.has(r)&&this.dismissedToasts.delete(r),o?this.toasts=this.toasts.map(d=>d.id===r?(this.publish({...d,...e,id:r,title:a}),{...d,...e,id:r,dismissible:l,title:a}):d):this.addToast({title:a,...i,dismissible:l,id:r}),r},this.dismiss=e=>(this.dismissedToasts.add(e),e||this.toasts.forEach(t=>{this.subscribers.forEach(a=>a({id:t.id,dismiss:!0}))}),this.subscribers.forEach(t=>t({id:e,dismiss:!0})),e),this.message=(e,t)=>this.create({...t,message:e}),this.error=(e,t)=>this.create({...t,message:e,type:"error"}),this.success=(e,t)=>this.create({...t,type:"success",message:e}),this.info=(e,t)=>this.create({...t,type:"info",message:e}),this.warning=(e,t)=>this.create({...t,type:"warning",message:e}),this.loading=(e,t)=>
484this.create({...t,type:"loading",message:e}),this.promise=(e,t)=>{if(!t)return;let a;t.loading!==void 0&&(a=this.create({...t,promise:e,type:"loading",message:t.loading,description:typeof t.description!="function"?t.description:void 0}));let i=e instanceof Promise?e:e(),r=a!==void 0,o,l=i.then(async u=>{if(o=["resolve",u],q.isValidElement(u))r=!1,this.create({id:a,type:"default",message:u});else if(bae(u)&&!u.ok){r=!1;let h=typeof t.error=="function"?await t.error(`HTTP error! status: ${u.status}`):t.error,m=typeof t.description=="function"?await t.description(`HTTP error! status: ${u.status}`):t.description;this.create({id:a,type:"error",message:h,description:m})}else if(t.success!==void 0){r=!1;let h=typeof t.success=="function"?await t.success(u):t.success,m=typeof t.description=="function"?await t.description(u):t.description;this.create({id:a,type:"success",message:h,description:m})}}).catch(async u=>{if(o=["reject",u],t.error!==void 0){r=!1;let h=typeof t.error=="function"?await t.error(u):t.error,m=typeof t.description=="function"?await t.description(u):t.description;this.create({id:a,type:"error",message:h,description:m})}}).finally(()=>{var u;r&&(this.dismiss(a),a=void 0),(u=t.finally)==null||u.call(t)}),d=()=>new Promise((u,h)=>l.then(()=>o[0]==="reject"?h(o[1]):u(o[1])).catch(h));return typeof a!="string"&&typeof a!="number"?{unwrap:d}:Object.assign(a,{unwrap:d})},this.custom=(e,t)=>{let a=(t==null?void 0:t.id)||m4++;return this.create({jsx:e(a),id:a,...t}),a},this.getActiveToasts=()=>this.toasts.filter(e=>!this.dismissedToasts.has(e.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},Wa=new gae,yae=(e,t)=>{let a=(t==null?void 0:t.id)||m4++;return Wa.addToast({title:e,...t,id:a}),a},bae=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",vae=yae,xae=()=>Wa.toasts,wae=()=>Wa.getActiveToasts();Object.assign(vae,{success:Wa.success,info:Wa.info,warning:Wa.warning,error:Wa.error,custom:Wa.custom,message:Wa.message,promise:Wa.promise,dismiss:Wa.dismiss,loading:Wa.loading},{getHistory:xae,getToasts:wae});function kae(e,{insertAt:t}={}){if(typeof document>"u")return;let a=document.head||document.getElementsByTagName("head")[0],i=document.createElement("style");i.type="text/css",t==="top"&&a.firstChild?a.insertBefore(i,a.firstChild):a.appendChild(i),i.styleSheet?i.styleSheet.cssText=e:i.appendChild(document.createTextNode(e))}kae(`:where(html[dir="ltr"]),:where([data-sonner-toaster][dir="ltr"]){--toast-icon-margin-start: -3px;--toast-icon-margin-end: 4px;--toast-svg-margin-start: -1px;--toast-svg-margin-end: 0px;--toast-button-margin-start: auto;--toast-button-margin-end: 0;--toast-close-button-start: 0;--toast-close-button-end: unset;--toast-close-button-transform: translate(-35%, -35%)}:where(html[dir="rtl"]),:where([data-sonner-toaster][dir="rtl"]){--toast-icon-margin-start: 4px;--toast-icon-margin-end: -3px;--toast-svg-margin-start: 0px;--toast-svg-margin-end: -1px;--toast-button-margin-start: 0;--toast-button-margin-end: auto;--toast-close-button-start: unset;--toast-close-button-end: 0;--toast-close-button-transform: translate(35%, -35%)}:where([data-sonner-toaster]){position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1: hsl(0, 0%, 99%);--gray2: hsl(0, 0%, 97.3%);--gray3: hsl(0, 0%, 95.1%);--gray4: hsl(0, 0%, 93%);--gray5: hsl(0, 0%, 90.9%);--gray6: hsl(0, 0%, 88.7%);--gray7: hsl(0, 0%, 85.8%);--gray8: hsl(0, 0%, 78%);--gray9: hsl(0, 0%, 56.1%);--gray10: hsl(0, 0%, 52.3%);--gray11: hsl(0, 0%, 43.5%);--gray12: hsl(0, 0%, 9%);--border-radius: 8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:none;z-index:999999999;transition:transform .4s ease}:where([data-sonner-toaster][data-lifted="true"]){transform:translateY(-10px)}@media (hover: none) and (pointer: coarse){:where([data-sonner-toaster][data-lifted="true"]){transform:none}}:where([data-sonner-toaster][data-x-position="right"]){right:var(--offset-right)}:where([data-sonner-toaster][data-x-position="left"]){left:var(--offset-left)}:where([data-sonner-toaster][data-x-position="center"]){left:50%;transform:translate(-50%)}:where([data-sonner-toaster][data-y-position="top"]){top:var(--offset-top)}:where([data-sonner-toaster][data-y-position="bottom"]){bottom:var(--offset-bottom)}:where([data-sonner-toast]){--y: translateY(100%);--lift-amount: calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);filter:blur(0);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:none;overflow-wrap:anywhere}:where([data-sonner-toast][data-styled="true"]){padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px #0000001a;width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}:where([data-sonner-toast]:focus-visible){box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast][data-y-position="top"]){top:0;--y: translateY(-100%);--lift: 1;--lift-amount: calc(1 * var(--gap))}:where([data-sonner-toast][data-y-position="bottom"]){bottom:0;--y: translateY(100%);--lift: -1;--lift-amount: calc(var(--lift) * var(--gap))}:where([data-sonner-toast]) :where([data-description]){font-weight:400;line-height:1.4;color:inherit}:where([data-sonner-toast]) :where([data-title]){font-weight:500;line-height:1.5;color:inherit}:where([data-sonner-toast]) :where([data-icon]){display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}:where([data-sonner-toast][data-promise="true"]) :where([data-icon])>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}:where([data-sonner-toast]) :where([data-icon])>*{flex-shrink:0}:where([data-sonner-toast]) :where([data-icon]) svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}:where([data-sonner-toast]) :where([data-content]){display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;cursor:pointer;outline:none;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}:where([data-sonner-toast]) :where([data-button]):focus-visible{box-shadow:0 0 0 2px #0006}:where([data-sonner-toast]) :where([data-button]):first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}:where([data-sonner-toast]) :where([data-cancel]){color:var(--normal-text);background:rgba(0,0,0,.08)}:where([data-sonner-toast][data-theme="dark"]) :where([data-cancel]){background:rgba(255,255,255,.3)}:where([data-sonner-toast]) :where([data-close-button]){position:absolute;
484left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast] [data-close-button]{background:var(--gray1)}:where([data-sonner-toast]) :where([data-close-button]):focus-visible{box-shadow:0 4px 12px #0000001a,0 0 0 2px #0003}:where([data-sonner-toast]) :where([data-disabled="true"]){cursor:not-allowed}:where([data-sonner-toast]):hover :where([data-close-button]):hover{background:var(--gray2);border-color:var(--gray5)}:where([data-sonner-toast][data-swiping="true"]):before{content:"";position:absolute;left:-50%;right:-50%;height:100%;z-index:-1}:where([data-sonner-toast][data-y-position="top"][data-swiping="true"]):before{bottom:50%;transform:scaleY(3) translateY(50%)}:where([data-sonner-toast][data-y-position="bottom"][data-swiping="true"]):before{top:50%;transform:scaleY(3) translateY(-50%)}:where([data-sonner-toast][data-swiping="false"][data-removed="true"]):before{content:"";position:absolute;inset:0;transform:scaleY(2)}:where([data-sonner-toast]):after{content:"";position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}:where([data-sonner-toast][data-mounted="true"]){--y: translateY(0);opacity:1}:where([data-sonner-toast][data-expanded="false"][data-front="false"]){--scale: var(--toasts-before) * .05 + 1;--y: translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}:where([data-sonner-toast])>*{transition:opacity .4s}:where([data-sonner-toast][data-expanded="false"][data-front="false"][data-styled="true"])>*{opacity:0}
484:where([data-sonner-toast][data-visible="false"]){opacity:0;pointer-events:none}:where([data-sonner-toast][data-mounted="true"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}:where([data-sonner-toast][data-removed="true"][data-front="true"][data-swipe-out="false"]){--y: translateY(calc(var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="true"]){--y: translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}:where([data-sonner-toast][data-removed="true"][data-front="false"][data-swipe-out="false"][data-expanded="false"]){--y: translateY(40%);opacity:0;transition:transform .5s,opacity .2s}:where([data-sonner-toast][data-removed="true"][data-front="false"]):before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y, 0px)) translate(var(--swipe-amount-x, 0px));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{0%{transform:var(--y) translate(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translate(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{0%{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width: 600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-theme=light]{--normal-bg: #fff;--normal-border: var(--gray4);--normal-text: var(--gray12);--success-bg: hsl(143, 85%, 96%);--success-border: hsl(145, 92%, 91%);--success-text: hsl(140, 100%, 27%);--info-bg: hsl(208, 100%, 97%);--info-border: hsl(221, 91%, 91%);--info-text: hsl(210, 92%, 45%);--warning-bg: hsl(49, 100%, 97%);--warning-border: hsl(49, 91%, 91%);--warning-text: hsl(31, 92%, 45%);--error-bg: hsl(359, 100%, 97%);--error-border: hsl(359, 100%, 94%);--error-text: hsl(360, 100%, 45%)}[data-sonner-toaster][data-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg: #000;--normal-border: hsl(0, 0%, 20%);--normal-text: var(--gray1)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg: #fff;--normal-border: var(--gray3);--normal-text: var(--gray12)}[data-sonner-toaster][data-theme=dark]{--normal-bg: #000;--normal-bg-hover: hsl(0, 0%, 12%);--normal-border: hsl(0, 0%, 20%);--normal-border-hover: hsl(0, 0%, 25%);--normal-text: var(--gray1);--success-bg: hsl(150, 100%, 6%);--success-border: hsl(147, 100%, 12%);--success-text: hsl(150, 86%, 65%);--info-bg: hsl(215, 100%, 6%);--info-border: hsl(223, 100%, 12%);--info-text: hsl(216, 87%, 65%);--warning-bg: hsl(64, 100%, 6%);--warning-border: hsl(60, 100%, 12%);--warning-text: hsl(46, 87%, 65%);--error-bg: hsl(358, 76%, 10%);--error-border: hsl(357, 89%, 16%);
484--error-text: hsl(358, 100%, 81%)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success],[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info],[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning],[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error],[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size: 16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:nth-child(1){animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}to{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}to{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}to{opacity:.15}}@media (prefers-reduced-motion){[data-sonner-toast],[data-sonner-toast]>*,.sonner-loading-bar{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}
485`);function Ev(e){return e.label!==void 0}var jae=3,Sae="32px",Cae="16px",bO=4e3,Aae=356,Tae=14,_ae=20,Mae=200;function mr(...e){return e.filter(Boolean).join(" ")}function Eae(e){let[t,a]=e.split("-"),i=[];return t&&i.push(t),a&&i.push(a),i}var Rae=e=>{var t,a,i,r,o,l,d,u,h,m,f;let{invert:y,toast:b,unstyled:x,interacting:k,setHeights:v,visibleToasts:j,heights:T,index:A,toasts:C,expanded:_,removeToast:E,defaultRichColors:R,closeButton:W,style:z,cancelButtonStyle:H,actionButtonStyle:$,className:U="",descriptionClassName:X="",duration:D,position:P,gap:O,loadingIcon:B,expandByDefault:Y,classNames:V,icons:G,closeButtonAriaLabel:I="Close toast",pauseWhenPageIsHidden:F}=e,[K,ne]=q.useState(null),[ae,ge]=q.useState(null),[be,le]=q.useState(!1),[ee,ve]=q.useState(!1),[Se,pe]=q.useState(!1),[Ye,ze]=q.useState(!1),[Re,mt]=q.useState(!1),[$e,Gt]=q.useState(0),[Ht,Xa]=q.useState(0),en=q.useRef(b.duration||D||bO),ln=q.useRef(null),Ct=q.useRef(null),Qt=A===0,lr=A+1<=j,In=b.type,ki=b.dismissible!==!1,Qa=b.className||"",du=b.descriptionClassName||"",Zr=q.useMemo(()=>T.findIndex(Ge=>Ge.toastId===b.id)||0,[T,b.id]),hm=q.useMemo(()=>{var Ge;return(Ge=b.closeButton)!=null?Ge:W},[b.closeButton,W]),Sc=q.useMemo(()=>b.duration||D||bO,[b.duration,D]),An=q.useRef(0),At=q.useRef(0),cr=q.useRef(0),hn=q.useRef(null),[ak,ik]=P.split("-"),pb=q.useMemo(()=>T.reduce((Ge,wt,Ot)=>
485Ot>=Zr?Ge:Ge+wt.height,0),[T,Zr]),Cc=fae(),uu=b.invert||y,el=In==="loading";At.current=q.useMemo(()=>Zr*O+pb,[Zr,pb]),q.useEffect(()=>{en.current=Sc},[Sc]),q.useEffect(()=>{le(!0)},[]),q.useEffect(()=>{let Ge=Ct.current;if(Ge){let wt=Ge.getBoundingClientRect().height;return Xa(wt),v(Ot=>[{toastId:b.id,height:wt,position:b.position},...Ot]),()=>v(Ot=>Ot.filter(da=>da.toastId!==b.id))}},[v,b.id]),q.useLayoutEffect(()=>{if(!be)return;let Ge=Ct.current,wt=Ge.style.height;Ge.style.height="auto";let Ot=Ge.getBoundingClientRect().height;Ge.style.height=wt,Xa(Ot),v(da=>da.find(Dn=>Dn.toastId===b.id)?da.map(Dn=>Dn.toastId===b.id?{...Dn,height:Ot}:Dn):[{toastId:b.id,height:Ot,position:b.position},...da])},[be,b.title,b.description,v,b.id]);let Xn=q.useCallback(()=>{ve(!0),Gt(At.current),v(Ge=>Ge.filter(wt=>wt.toastId!==b.id)),setTimeout(()=>{E(b)},Mae)},[b,E,v,At]);q.useEffect(()=>{if(b.promise&&In==="loading"||b.duration===1/0||b.type==="loading")return;let Ge;return _||k||F&&Cc?(()=>{if(cr.current<An.current){let wt=new Date().getTime()-An.current;en.current=en.current-wt}cr.current=new Date().getTime()})():en.current!==1/0&&(An.current=new Date().getTime(),Ge=setTimeout(()=>{var wt;(wt=b.onAutoClose)==null||wt.call(b,b),Xn()},en.current)),()=>clearTimeout(Ge)},[_,k,b,In,F,Cc,Xn]),q.useEffect(()=>{b.delete&&Xn()},[Xn,b.delete]);function hu(){var Ge,wt,Ot;return G!=null&&G.loading?q.createElement("div",{className:mr(V==null?void 0:V.loader,(Ge=b==null?void 0:b.classNames)==null?void 0:Ge.loader,"sonner-loader"),"data-visible":In==="loading"},G.loading):B?q.createElement("div",{className:mr(V==null?void 0:V.loader,(wt=b==null?void 0:b.classNames)==null?void 0:wt.loader,"sonner-loader"),"data-visible":In==="loading"},B):q.createElement(cae,{className:mr(V==null?void 0:V.loader,(Ot=b==null?void 0:b.classNames)==null?void 0:Ot.loader),visible:In==="loading"})}return q.createElement("li",{tabIndex:0,ref:Ct,className:mr(U,Qa,V==null?void 0:V.toast,(t=b==null?void 0:b.classNames)==null?void 0:t.toast,V==null?void 0:V.default,V==null?void 0:V[In],(a=b==null?void 0:b.classNames)==null?void 0:a[In]),"data-sonner-toast":"","data-rich-colors":(i=b.richColors)!=null?i:R,"data-styled":!(b.jsx||b.unstyled||x),"data-mounted":be,"data-promise":!!b.promise,"data-swiped":Re,"data-removed":ee,"data-visible":lr,"data-y-position":ak,"data-x-position":ik,"data-index":A,"data-front":Qt,"data-swiping":Se,"data-dismissible":ki,"data-type":In,"data-invert":uu,"data-swipe-out":Ye,"data-swipe-direction":ae,"data-expanded":!!(_||Y&&be),style:{"--index":A,"--toasts-before":A,"--z-index":C.length-A,"--offset":`${ee?$e:At.current}px`,"--initial-height":Y?"auto":`${Ht}px`,...z,...b.style},onDragEnd:()=>{pe(!1),ne(null),hn.current=null},onPointerDown:Ge=>{el||!ki||(ln.current=new Date,Gt(At.current),Ge.target.setPointerCapture(Ge.pointerId),Ge.target.tagName!=="BUTTON"&&(pe(!0),hn.current={x:Ge.clientX,y:Ge.clientY}))},onPointerUp:()=>{var Ge,wt,Ot,da;if(Ye||!ki)return;hn.current=null;let Dn=Number(((Ge=Ct.current)==null?void 0:Ge.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Jr=Number(((wt=Ct.current)==null?void 0:wt.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),eo=new Date().getTime()-((Ot=ln.current)==null?void 0:Ot.getTime()),Ma=K==="x"?Dn:Jr,dr=Math.abs(Ma)/eo;if(Math.abs(Ma)>=_ae||dr>.11){Gt(At.current),(da=b.onDismiss)==null||da.call(b,b),ge(K==="x"?Dn>0?"right":"left":Jr>0?"down":"up"),Xn(),ze(!0),mt(!1);return}pe(!1),ne(null)},onPointerMove:Ge=>{var wt,Ot,da,Dn;if(!hn.current||!ki||((wt=window.getSelection())==null?void 0:wt.toString().length)>0)return;let Jr=Ge.clientY-hn.current.y,eo=Ge.clientX-hn.current.x,Ma=(Ot=e.swipeDirections)!=null?Ot:Eae(P);!K&&(Math.abs(eo)>1||Math.abs(Jr)>1)&&ne(Math.abs(eo)>Math.abs(Jr)?"x":"y");let dr={x:0,y:0};K==="y"?(Ma.includes("top")||Ma.includes("bottom"))&&(Ma.includes("top")&&Jr<0||Ma.includes("bottom")&&Jr>0)&&(dr.y=Jr):K==="x"&&(Ma.includes("left")||Ma.includes("right"))&&(Ma.includes("left")&&eo<0||Ma.includes("right")&&eo>0)&&(dr.x=eo),(Math.abs(dr.x)>0||Math.abs(dr.y)>0)&&mt(!0),(da=Ct.current)==null||da.style.setProperty("--swipe-amount-x",`${dr.x}px`),(Dn=Ct.current)==null||Dn.style.setProperty("--swipe-amount-y",`${dr.y}px`)}},hm&&!b.jsx?q.createElement("button",{"aria-label":I,"data-disabled":el,"data-close-button":!0,onClick:el||!ki?()=>{}:()=>{var Ge;Xn(),(Ge=b.onDismiss)==null||Ge.call(b,b)},className:mr(V==null?void 0:V.closeButton,(r=b==null?void 0:b.classNames)==null?void 0:r.closeButton)},(o=G==null?void 0:G.close)!=null?o:mae):null,b.jsx||M.isValidElement(b.title)?b.jsx?b.jsx:typeof b.title=="function"?b.title():b.title:q.createElement(q.Fragment,null,In||b.icon||b.promise?q.createElement("div",{"data-icon":"",className:mr(V==null?void 0:V.icon,(l=b==null?void 0:b.classNames)==null?void 0:l.icon)},b.promise||b.type==="loading"&&!b.icon?b.icon||hu():null,b.type!=="loading"?b.icon||(G==null?void 0:G[In])||sae(In):null):null,q.createElement("div",{"data-content":"",className:mr(V==null?void 0:V.content,(d=b==null?void 0:b.classNames)==null?void 0:d.content)},q.createElement("div",{"data-title":"",className:mr(V==null?void 0:V.title,(u=b==null?void 0:b.classNames)==null?void 0:u.title)},typeof b.title=="function"?b.title():b.title),b.description?q.createElement("div",{"data-description":"",className:mr(X,du,V==null?void 0:V.description,(h=b==null?void 0:b.classNames)==null?void 0:h.description)},typeof b.description=="function"?b.description():b.description):null),M.isValidElement(b.cancel)?b.cancel:b.cancel&&Ev(b.cancel)?q.createElement("button",{"data-button":!0,"data-cancel":!0,style:b.cancelButtonStyle||H,onClick:Ge=>{var wt,Ot;Ev(b.cancel)&&ki&&((Ot=(wt=b.cancel).onClick)==null||Ot.call(wt,Ge),Xn())},className:mr(V==null?void 0:V.cancelButton,(m=b==null?void 0:b.classNames)==null?void 0:m.cancelButton)},b.cancel.label):null,M.isValidElement(b.action)?b.action:b.action&&Ev(b.action)?q.createElement("button",{"data-button":!0,"data-action":!0,style:b.actionButtonStyle||$,onClick:Ge=>{var wt,Ot;Ev(b.action)&&((Ot=(wt=b.action).onClick)==null||Ot.call(wt,Ge),!Ge.defaultPrevented&&Xn())},className:mr(V==null?void 0:V.actionButton,(f=b==null?void 0:b.classNames)==null?void 0:f.actionButton)},b.action.label):null))};function vO(){if(typeof window>"u"||typeof document>"u")return"ltr";let e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function Nae(e,t){let a={};return[e,t].forEach((i,r)=>{let o=r===1,l=o?"--mobile-offset":"--offset",d=o?Cae:Sae;function u(h){["top","right","bottom","left"].forEach(m=>{a[`${l}-${m}`]=typeof h=="number"?`${h}px`:h})}typeof i=="number"||typeof i=="string"?u(i):typeof i=="object"?["top","right","bottom","left"].forEach(h=>{i[h]===void 0?a[`${l}-${h}`]=d:a[`${l}-${h}`]=typeof i[h]=="number"?`${i[h]}px`:i[h]}):u(d)}),a}var Oae=M.forwardRef(function(e,t){let{invert:a,position:i="bottom-right",hotkey:r=["altKey","KeyT"],expand:o,closeButton:l,className:d,offset:u,mobileOffset:h,theme:m="light",richColors:f,duration:y,style:b,visibleToasts:x=jae,toastOptions:k,dir:v=vO(),gap:j=Tae,loadingIcon:T,icons:A,containerAriaLabel:C="Notifications",pauseWhenPageIsHidden:_}=e,[E,R]=q.useState([]),W=q.useMemo(()=>Array.from(new Set([i].concat(E.filter(F=>F.position).map(F=>F.position)))),[E,i]),[z,H]=q.useState([]),[$,U]=q.useState(!1),[X,D]=q.useState(!1),[P,O]=q.useState(m!=="system"?m:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dar
485k":"light"),B=q.useRef(null),Y=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),V=q.useRef(null),G=q.useRef(!1),I=q.useCallback(F=>{R(K=>{var ne;return(ne=K.find(ae=>ae.id===F.id))!=null&&ne.delete||Wa.dismiss(F.id),K.filter(({id:ae})=>ae!==F.id)})},[]);return q.useEffect(()=>Wa.subscribe(F=>{if(F.dismiss){R(K=>K.map(ne=>ne.id===F.id?{...ne,delete:!0}:ne));return}setTimeout(()=>{Hq.flushSync(()=>{R(K=>{let ne=K.findIndex(ae=>ae.id===F.id);return ne!==-1?[...K.slice(0,ne),{...K[ne],...F},...K.slice(ne+1)]:[F,...K]})})})}),[]),q.useEffect(()=>{if(m!=="system"){O(m);return}if(m==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?O("dark"):O("light")),typeof window>"u")return;let F=window.matchMedia("(prefers-color-scheme: dark)");try{F.addEventListener("change",({matches:K})=>{O(K?"dark":"light")})}catch{F.addListener(({matches:ne})=>{try{O(ne?"dark":"light")}catch(ae){console.error(ae)}})}},[m]),q.useEffect(()=>{E.length<=1&&U(!1)},[E]),q.useEffect(()=>{let F=K=>{var ne,ae;r.every(ge=>K[ge]||K.code===ge)&&(U(!0),(ne=B.current)==null||ne.focus()),K.code==="Escape"&&(document.activeElement===B.current||(ae=B.current)!=null&&ae.contains(document.activeElement))&&U(!1)};return document.addEventListener("keydown",F),()=>document.removeEventListener("keydown",F)},[r]),q.useEffect(()=>{if(B.current)return()=>{V.current&&(V.current.focus({preventScroll:!0}),V.current=null,G.current=!1)}},[B.current]),q.createElement("section",{ref:t,"aria-label":`${C} ${Y}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},W.map((F,K)=>{var ne;let[ae,ge]=F.split("-");return E.length?q.createElement("ol",{key:F,dir:v==="auto"?vO():v,tabIndex:-1,ref:B,className:d,"data-sonner-toaster":!0,"data-theme":P,"data-y-position":ae,"data-lifted":$&&E.length>1&&!o,"data-x-position":ge,style:{"--front-toast-height":`${((ne=z[0])==null?void 0:ne.height)||0}px`,"--width":`${Aae}px`,"--gap":`${j}px`,...b,...Nae(u,h)},onBlur:be=>{G.current&&!be.currentTarget.contains(be.relatedTarget)&&(G.current=!1,V.current&&(V.current.focus({preventScroll:!0}),V.current=null))},onFocus:be=>{be.target instanceof HTMLElement&&be.target.dataset.dismissible==="false"||G.current||(G.current=!0,V.current=be.relatedTarget)},onMouseEnter:()=>U(!0),onMouseMove:()=>U(!0),onMouseLeave:()=>{X||U(!1)},onDragEnd:()=>U(!1),onPointerDown:be=>{be.target instanceof HTMLElement&&be.target.dataset.dismissible==="false"||D(!0)},onPointerUp:()=>D(!1)},E.filter(be=>!be.position&&K===0||be.position===F).map((be,le)=>{var ee,ve;return q.createElement(Rae,{key:be.id,icons:A,index:le,toast:be,defaultRichColors:f,duration:(ee=k==null?void 0:k.duration)!=null?ee:y,className:k==null?void 0:k.className,descriptionClassName:k==null?void 0:k.descriptionClassName,invert:a,visibleToasts:x,closeButton:(ve=k==null?void 0:k.closeButton)!=null?ve:l,interacting:X,position:F,style:k==null?void 0:k.style,unstyled:k==null?void 0:k.unstyled,classNames:k==null?void 0:k.classNames,cancelButtonStyle:k==null?void 0:k.cancelButtonStyle,actionButtonStyle:k==null?void 0:k.actionButtonStyle,removeToast:I,toasts:E.filter(Se=>Se.position==be.position),heights:z.filter(Se=>Se.position==be.position),setHeights:H,expandByDefault:o,gap:j,loadingIcon:T,expanded:$,pauseWhenPageIsHidden:_,swipeDirections:e.swipeDirections})})):null}))});const Pae=({...e})=>{const{theme:t="system"}=oae();return n.jsx(Oae,{theme:t,className:"toaster group",toastOptions:{classNames:{toast:"group toast group-[.toaster]:bg-background group-[.toaster]:text-foreground group-[.toaster]:border-border group-[.toaster]:shadow-lg",description:"group-[.toast]:text-muted-foreground",actionButton:"group-[.toast]:bg-primary group-[.toast]:text-primary-foreground",cancelButton:"group-[.toast]:bg-muted group-[.toast]:text-muted-foreground"}},...e})},Iae=["top","right","bottom","left"],oc=Math.min,ci=Math.max,U0=Math.round,Rv=Math.floor,wo=e=>({x:e,y:e}
vendor: 5,013 bytes, line 485
485),Dae={left:"right",right:"left",bottom:"top",top:"bottom"};function f4(e,t,a){return ci(e,oc(t,a))}function Ps(e,t){return typeof e=="function"?e(t):e}function Is(e){return e.split("-")[0]}function Hp(e){return e.split("-")[1]}function cM(e){return e==="x"?"y":"x"}function dM(e){return e==="y"?"height":"width"}function go(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function uM(e){return cM(go(e))}function Wae(e,t,a){a===void 0&&(a=!1);const i=Hp(e),r=uM(e),o=dM(r);let l=r==="x"?i===(a?"end":"start")?"right":"left":i==="start"?"bottom":"top";return t.reference[o]>t.floating[o]&&(l=B0(l)),[l,B0(l)]}function zae(e){const t=B0(e);return[g4(e),t,g4(t)]}function g4(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const xO=["left","right"],wO=["right","left"],Lae=["top","bottom"],Uae=["bottom","top"];function Bae(e,t,a){switch(e){case"top":case"bottom":return a?t?wO:xO:t?xO:wO;case"left":case"right":return t?Lae:Uae;default:return[]}}function qae(e,t,a,i){const r=Hp(e);let o=Bae(Is(e),a==="start",i);return r&&(o=o.map(l=>l+"-"+r),t&&(o=o.concat(o.map(g4)))),o}function B0(e){const t=Is(e);return Dae[t]+e.slice(t.length)}function $ae(e){return{top:0,right:0,bottom:0,left:0,...e}}function X$(e){return typeof e!="number"?$ae(e):{top:e,right:e,bottom:e,left:e}}function q0(e){const{x:t,y:a,width:i,height:r}=e;return{width:i,height:r,top:a,left:t,right:t+i,bottom:a+r,x:t,y:a}}function kO(e,t,a){let{reference:i,floating:r}=e;const o=go(t),l=uM(t),d=dM(l),u=Is(t),h=o==="y",m=i.x+i.width/2-r.width/2,f=i.y+i.height/2-r.height/2,y=i[d]/2-r[d]/2;let b;switch(u){case"top":b={x:m,y:i.y-r.height};break;case"bottom":b={x:m,y:i.y+i.height};break;case"right":b={x:i.x+i.width,y:f};break;case"left":b={x:i.x-r.width,y:f};break;default:b={x:i.x,y:i.y}}switch(Hp(t)){case"start":b[l]-=y*(a&&h?-1:1);break;case"end":b[l]+=y*(a&&h?-1:1);break}return b}async function Fae(e,t){var a;t===void 0&&(t={});const{x:i,y:r,platform:o,rects:l,elements:d,strategy:u}=e,{boundary:h="clippingAncestors",rootBoundary:m="viewport",elementContext:f="floating",altBoundary:y=!1,padding:b=0}=Ps(t,e),x=X$(b),v=d[y?f==="floating"?"reference":"floating":f],j=q0(await o.getClippingRect({element:(a=await(o.isElement==null?void 0:o.isElement(v)))==null||a?v:v.contextElement||await(o.getDocumentElement==null?void 0:o.getDocumentElement(d.floating)),boundary:h,rootBoundary:m,strategy:u})),T=f==="floating"?{x:i,y:r,width:l.floating.width,height:l.floating.height}:l.reference,A=await(o.getOffsetParent==null?void 0:o.getOffsetParent(d.floating)),C=await(o.isElement==null?void 0:o.isElement(A))?await(o.getScale==null?void 0:o.getScale(A))||{x:1,y:1}:{x:1,y:1},_=q0(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:d,rect:T,offsetParent:A,strategy:u}):T);return{top:(j.top-_.top+x.top)/C.y,bottom:(_.bottom-j.bottom+x.bottom)/C.y,left:(j.left-_.left+x.left)/C.x,right:(_.right-j.right+x.right)/C.x}}const Gae=50,Hae=async(e,t,a)=>{const{placement:i="bottom",strategy:r="absolute",middleware:o=[],platform:l}=a,d=l.detectOverflow?l:{...l,detectOverflow:Fae},u=await(l.isRTL==null?void 0:l.isRTL(t));let h=await l.getElementRects({reference:e,floating:t,strategy:r}),{x:m,y:f}=kO(h,i,u),y=i,b=0;const x={};for(let k=0;k<o.length;k++){const v=o[k];if(!v)continue;const{name:j,fn:T}=v,{x:A,y:C,data:_,reset:E}=await T({x:m,y:f,initialPlacement:i,placement:y,strategy:r,middlewareData:x,rects:h,platform:d,elements:{reference:e,floating:t}});m=A??m,f=C??f,x[j]={...x[j],..._},E&&b<Gae&&(b++,typeof E=="object"&&(E.placement&&(y=E.placement),E.rects&&(h=E.rects===!0?await l.getElementRects({reference:e,floating:t,strategy:r}):E.rects),{x:m,y:f}=kO(h,y,u)),k=-1)}return{x:m,y:f,placement:y,strategy:r,middlewareData:x}},Yae=e=>({name:"arrow",options:e,async fn(t){const{x:a,y:i,placement:r,rects:o,platform:l,elements:d,middlewareData:u}=t,{element:h,padding:m=0}=Ps(e,t)||{};if(h==null)return{};const f=X$(m),y={x:a,y:i},b=uM(r),x=dM(b),k=await l.getDimensions(h),v=b==="y",j=v?"top":"left",T=v?"bottom":"right",A=v?"clientHeight":"clientWidth",C=o.reference[x]+o.reference[b]-y[b]-o.floating[x],_=y[b]-o.reference[b],E=await(l.getOffsetParent==null?void 0:l.getOffsetParent(h));let R=E?E[A]:0;(!R||!await(l.isElement==null?void 0:l.isElement(E)))&&(R=d.floating[A]||o.floating[x]);const W=C/2-_/2,z=R/2-k[x]/2-1,H=oc(f[j],z),$=oc(f[T],z),U=H,X=R-k[x]-$,D=R/2-k[x]/2+W,P=f4(U,D,X),O=!u.arrow&&Hp(r)!=null&&D!==P&&o.reference[x]/2-(D<U?H:$)-k[x]/2<0,B=O?D<U?D-U:D-X:0;return{[b]:y[b]+B,data:{[b]:P,centerOffset:D-P-B,...O&&{alignmentOffset:B}},reset:O}}}),Vae=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var a,i;const{placement:r,middlewareData:o,rects:l,initialPlacement:d,platform:u,elements:h}=t,{mainAxis:m=!0,crossAxis:f=!0,fallbackPlacements:y,fallbackStrategy:b="bestFit",fallbackAxisSideDirection:x="none",flipAlignment:k=!0,...v}=Ps(e,t);if((a=o.arrow)!=null&&a.alignmentOffset)return{};
vendor: 4,653 bytes, line 485
485const j=Is(r),T=go(d),A=Is(d)===d,C=await(u.isRTL==null?void 0:u.isRTL(h.floating)),_=y||(A||!k?[B0(d)]:zae(d)),E=x!=="none";!y&&E&&_.push(...qae(d,k,x,C));const R=[d,..._],W=await u.detectOverflow(t,v),z=[];let H=((i=o.flip)==null?void 0:i.overflows)||[];if(m&&z.push(W[j]),f){const D=Wae(r,l,C);z.push(W[D[0]],W[D[1]])}if(H=[...H,{placement:r,overflows:z}],!z.every(D=>D<=0)){var $,U;const D=((($=o.flip)==null?void 0:$.index)||0)+1,P=R[D];if(P&&(!(f==="alignment"?T!==go(P):!1)||H.every(Y=>go(Y.placement)===T?Y.overflows[0]>0:!0)))return{data:{index:D,overflows:H},reset:{placement:P}};let O=(U=H.filter(B=>B.overflows[0]<=0).sort((B,Y)=>B.overflows[1]-Y.overflows[1])[0])==null?void 0:U.placement;if(!O)switch(b){case"bestFit":{var X;const B=(X=H.filter(Y=>{if(E){const V=go(Y.placement);return V===T||V==="y"}return!0}).map(Y=>[Y.placement,Y.overflows.filter(V=>V>0).reduce((V,G)=>V+G,0)]).sort((Y,V)=>Y[1]-V[1])[0])==null?void 0:X[0];B&&(O=B);break}case"initialPlacement":O=d;break}if(r!==O)return{reset:{placement:O}}}return{}}}};function jO(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function SO(e){return Iae.some(t=>e[t]>=0)}const Kae=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:a,platform:i}=t,{strategy:r="referenceHidden",...o}=Ps(e,t);switch(r){case"referenceHidden":{const l=await i.detectOverflow(t,{...o,elementContext:"reference"}),d=jO(l,a.reference);return{data:{referenceHiddenOffsets:d,referenceHidden:SO(d)}}}case"escaped":{const l=await i.detectOverflow(t,{...o,altBoundary:!0}),d=jO(l,a.floating);return{data:{escapedOffsets:d,escaped:SO(d)}}}default:return{}}}}},Q$=new Set(["left","top"]);async function Xae(e,t){const{placement:a,platform:i,elements:r}=e,o=await(i.isRTL==null?void 0:i.isRTL(r.floating)),l=Is(a),d=Hp(a),u=go(a)==="y",h=Q$.has(l)?-1:1,m=o&&u?-1:1,f=Ps(t,e);let{mainAxis:y,crossAxis:b,alignmentAxis:x}=typeof f=="number"?{mainAxis:f,crossAxis:0,alignmentAxis:null}:{mainAxis:f.mainAxis||0,crossAxis:f.crossAxis||0,alignmentAxis:f.alignmentAxis};return d&&typeof x=="number"&&(b=d==="end"?x*-1:x),u?{x:b*m,y:y*h}:{x:y*h,y:b*m}}const Qae=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var a,i;const{x:r,y:o,placement:l,middlewareData:d}=t,u=await Xae(t,e);return l===((a=d.offset)==null?void 0:a.placement)&&(i=d.arrow)!=null&&i.alignmentOffset?{}:{x:r+u.x,y:o+u.y,data:{...u,placement:l}}}}},Zae=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:a,y:i,placement:r,platform:o}=t,{mainAxis:l=!0,crossAxis:d=!1,limiter:u={fn:j=>{let{x:T,y:A}=j;return{x:T,y:A}}},...h}=Ps(e,t),m={x:a,y:i},f=await o.detectOverflow(t,h),y=go(Is(r)),b=cM(y);let x=m[b],k=m[y];if(l){const j=b==="y"?"top":"left",T=b==="y"?"bottom":"right",A=x+f[j],C=x-f[T];x=f4(A,x,C)}if(d){const j=y==="y"?"top":"left",T=y==="y"?"bottom":"right",A=k+f[j],C=k-f[T];k=f4(A,k,C)}const v=u.fn({...t,[b]:x,[y]:k});return{...v,data:{x:v.x-a,y:v.y-i,enabled:{[b]:l,[y]:d}}}}}},Jae=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:a,y:i,placement:r,rects:o,middlewareData:l}=t,{offset:d=0,mainAxis:u=!0,crossAxis:h=!0}=Ps(e,t),m={x:a,y:i},f=go(r),y=cM(f);let b=m[y],x=m[f];const k=Ps(d,t),v=typeof k=="number"?{mainAxis:k,crossAxis:0}:{mainAxis:0,crossAxis:0,...k};if(u){const A=y==="y"?"height":"width",C=o.reference[y]-o.floating[A]+v.mainAxis,_=o.reference[y]+o.reference[A]-v.mainAxis;b<C?b=C:b>_&&(b=_)}if(h){var j,T;const A=y==="y"?"width":"height",C=Q$.has(Is(r)),_=o.reference[f]-o.floating[A]+(C&&((j=l.offset)==null?void 0:j[f])||0)+(C?0:v.crossAxis),E=o.reference[f]+o.reference[A]+(C?0:((T=l.offset)==null?void 0:T[f])||0)-(C?v.crossAxis:0);x<_?x=_:x>E&&(x=E)}return{[y]:b,[f]:x}}}},eie=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var a,i;const{placement:r,rects:o,platform:l,elements:d}=t,{apply:u=()=>{},...h}=Ps(e,t),m=await l.detectOverflow(t,h),f=Is(r),y=Hp(r),b=go(r)==="y",{width:x,height:k}=o.floating;let v,j;f==="top"||f==="bottom"?(v=f,j=y===(await(l.isRTL==null?void 0:l.isRTL(d.floating))?"start":"end")?"left":"right"):(j=f,v=y==="end"?"top":"bottom");const T=k-m.top-m.bottom,A=x-m.left-m.right,C=oc(k-m[v],T),_=oc(x-m[j],A),E=!t.middlewareData.shift;let R=C,W=_;if((a=t.middlewareData.shift)!=null&&a.enabled.x&&(W=A),(i=t.middlewareData.shift)!=null&&i.enabled.y&&(R=T),E&&!y){const H=ci(m.left,0),$=ci(m.right,0),U=ci(m.top,0),X=ci(m.bottom,0);b?W=x-2*(H!==0||$!==0?H+$:ci(m.left,m.right)):R=k-2*(U!==0||X!==0?U+X:ci(m.top,m.bottom))}await u({...t,availableWidth:W,availableHeight:R});const z=await l.getDimensions(d.floating);
vendor: 16,519 bytes, line 485
485return x!==z.width||k!==z.height?{reset:{rects:!0}}:{}}}};function qw(){return typeof window<"u"}function Yp(e){return Z$(e)?(e.nodeName||"").toLowerCase():"#document"}function gi(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Io(e){var t;return(t=(Z$(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function Z$(e){return qw()?e instanceof Node||e instanceof gi(e).Node:!1}function Br(e){return qw()?e instanceof Element||e instanceof gi(e).Element:!1}function Ys(e){return qw()?e instanceof HTMLElement||e instanceof gi(e).HTMLElement:!1}function CO(e){return!qw()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof gi(e).ShadowRoot}function wy(e){const{overflow:t,overflowX:a,overflowY:i,display:r}=qr(e);return/auto|scroll|overlay|hidden|clip/.test(t+i+a)&&r!=="inline"&&r!=="contents"}function tie(e){return/^(table|td|th)$/.test(Yp(e))}function $w(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const nie=/transform|translate|scale|rotate|perspective|filter/,aie=/paint|layout|strict|content/,$c=e=>!!e&&e!=="none";let Tj;function hM(e){const t=Br(e)?qr(e):e;return $c(t.transform)||$c(t.translate)||$c(t.scale)||$c(t.rotate)||$c(t.perspective)||!pM()&&($c(t.backdropFilter)||$c(t.filter))||nie.test(t.willChange||"")||aie.test(t.contain||"")}function iie(e){let t=sc(e);for(;Ys(t)&&!Gh(t);){if(hM(t))return t;if($w(t))return null;t=sc(t)}return null}function pM(){return Tj==null&&(Tj=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),Tj}function Gh(e){return/^(html|body|#document)$/.test(Yp(e))}function qr(e){return gi(e).getComputedStyle(e)}function Fw(e){return Br(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function sc(e){if(Yp(e)==="html")return e;const t=e.assignedSlot||e.parentNode||CO(e)&&e.host||Io(e);return CO(t)?t.host:t}function J$(e){const t=sc(e);return Gh(t)?e.ownerDocument?e.ownerDocument.body:e.body:Ys(t)&&wy(t)?t:J$(t)}function fg(e,t,a){var i;t===void 0&&(t=[]),a===void 0&&(a=!0);const r=J$(e),o=r===((i=e.ownerDocument)==null?void 0:i.body),l=gi(r);if(o){const d=y4(l);return t.concat(l,l.visualViewport||[],wy(r)?r:[],d&&a?fg(d):[])}else return t.concat(r,fg(r,[],a))}function y4(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function eF(e){const t=qr(e);let a=parseFloat(t.width)||0,i=parseFloat(t.height)||0;const r=Ys(e),o=r?e.offsetWidth:a,l=r?e.offsetHeight:i,d=U0(a)!==o||U0(i)!==l;return d&&(a=o,i=l),{width:a,height:i,$:d}}function mM(e){return Br(e)?e:e.contextElement}function Sh(e){const t=mM(e);if(!Ys(t))return wo(1);const a=t.getBoundingClientRect(),{width:i,height:r,$:o}=eF(t);let l=(o?U0(a.width):a.width)/i,d=(o?U0(a.height):a.height)/r;return(!l||!Number.isFinite(l))&&(l=1),(!d||!Number.isFinite(d))&&(d=1),{x:l,y:d}}const rie=wo(0);function tF(e){const t=gi(e);return!pM()||!t.visualViewport?rie:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function oie(e,t,a){return t===void 0&&(t=!1),!a||t&&a!==gi(e)?!1:t}function Md(e,t,a,i){t===void 0&&(t=!1),a===void 0&&(a=!1);const r=e.getBoundingClientRect(),o=mM(e);let l=wo(1);t&&(i?Br(i)&&(l=Sh(i)):l=Sh(e));const d=oie(o,a,i)?tF(o):wo(0);let u=(r.left+d.x)/l.x,h=(r.top+d.y)/l.y,m=r.width/l.x,f=r.height/l.y;if(o){const y=gi(o),b=i&&Br(i)?gi(i):i;let x=y,k=y4(x);for(;k&&i&&b!==x;){const v=Sh(k),j=k.getBoundingClientRect(),T=qr(k),A=j.left+(k.clientLeft+parseFloat(T.paddingLeft))*v.x,C=j.top+(k.clientTop+parseFloat(T.paddingTop))*v.y;u*=v.x,h*=v.y,m*=v.x,f*=v.y,u+=A,h+=C,x=gi(k),k=y4(x)}}return q0({width:m,height:f,x:u,y:h})}function Gw(e,t){const a=Fw(e).scrollLeft;return t?t.left+a:Md(Io(e)).left+a}function nF(e,t){const a=e.getBoundingClientRect(),i=a.left+t.scrollLeft-Gw(e,a),r=a.top+t.scrollTop;return{x:i,y:r}}function sie(e){let{elements:t,rect:a,offsetParent:i,strategy:r}=e;const o=r==="fixed",l=Io(i),d=t?$w(t.floating):!1;if(i===l||d&&o)return a;let u={scrollLeft:0,scrollTop:0},h=wo(1);const m=wo(0),f=Ys(i);if((f||!f&&!o)&&((Yp(i)!=="body"||wy(l))&&(u=Fw(i)),f)){const b=Md(i);h=Sh(i),m.x=b.x+i.clientLeft,m.y=b.y+i.clientTop}const y=l&&!f&&!o?nF(l,u):wo(0);return{width:a.width*h.x,height:a.height*h.y,x:a.x*h.x-u.scrollLeft*h.x+m.x+y.x,y:a.y*h.y-u.scrollTop*h.y+m.y+y.y}}function lie(e){return Array.from(e.getClientRects())}function cie(e){const t=Io(e),a=Fw(e),i=e.ownerDocument.body,r=ci(t.scrollWidth,t.clientWidth,i.scrollWidth,i.clientWidth),o=ci(t.scrollHeight,t.clientHeight,i.scrollHeight,i.clientHeight);let l=-a.scrollLeft+Gw(e);const d=-a.scrollTop;return qr(i).direction==="rtl"&&(l+=ci(t.clientWidth,i.clientWidth)-r),{width:r,height:o,x:l,y:d}}const AO=25;function die(e,t){const a=gi(e),i=Io(e),r=a.visualViewport;let o=i.clientWidth,l=i.clientHeight,d=0,u=0;if(r){o=r.width,l=r.height;const m=pM();(!m||m&&t==="fixed")&&(d=r.offsetLeft,u=r.offsetTop)}const h=Gw(i);if(h<=0){const m=i.ownerDocument,f=m.body,y=getComputedStyle(f),b=m.compatMode==="CSS1Compat"&&parseFloat(y.marginLeft)+parseFloat(y.marginRight)||0,x=Math.abs(i.clientWidth-f.clientWidth-b);x<=AO&&(o-=x)}else h<=AO&&(o+=h);return{width:o,height:l,x:d,y:u}}function uie(e,t){const a=Md(e,!0,t==="fixed"),i=a.top+e.clientTop,r=a.left+e.clientLeft,o=Ys(e)?Sh(e):wo(1),l=e.clientWidth*o.x,d=e.clientHeight*o.y,u=r*o.x,h=i*o.y;return{width:l,height:d,x:u,y:h}}function TO(e,t,a){let i;if(t==="viewport")i=die(e,a);else if(t==="document")i=cie(Io(e));else if(Br(t))i=uie(t,a);else{const r=tF(e);i={x:t.x-r.x,y:t.y-r.y,width:t.width,height:t.height}}return q0(i)}function aF(e,t){const a=sc(e);return a===t||!Br(a)||Gh(a)?!1:qr(a).position==="fixed"||aF(a,t)}function hie(e,t){const a=t.get(e);if(a)return a;let i=fg(e,[],!1).filter(d=>Br(d)&&Yp(d)!=="body"),r=null;const o=qr(e).position==="fixed";let l=o?sc(e):e;for(;Br(l)&&!Gh(l);){const d=qr(l),u=hM(l);!u&&d.position==="fixed"&&(r=null),(o?!u&&!r:!u&&d.position==="static"&&!!r&&(r.position==="absolute"||r.position==="fixed")||wy(l)&&!u&&aF(e,l))?i=i.filter(m=>m!==l):r=d,l=sc(l)}return t.set(e,i),i}function pie(e){let{element:t,boundary:a,rootBoundary:i,strategy:r}=e;const l=[...a==="clippingAncestors"?$w(t)?[]:hie(t,this._c):[].concat(a),i],d=TO(t,l[0],r);let u=d.top,h=d.right,m=d.bottom,f=d.left;for(let y=1;y<l.length;y++){const b=TO(t,l[y],r);u=ci(b.top,u),h=oc(b.right,h),m=oc(b.bottom,m),f=ci(b.left,f)}return{width:h-f,height:m-u,x:f,y:u}}function mie(e){const{width:t,height:a}=eF(e);return{width:t,height:a}}function fie(e,t,a){const i=Ys(t),r=Io(t),o=a==="fixed",l=Md(e,!0,o,t);let d={scrollLeft:0,scrollTop:0};const u=wo(0);function h(){u.x=Gw(r)}if(i||!i&&!o)if((Yp(t)!=="body"||wy(r))&&(d=Fw(t)),i){const b=Md(t,!0,o,t);u.x=b.x+t.clientLeft,u.y=b.y+t.clientTop}else r&&h();o&&!i&&r&&h();const m=r&&!i&&!o?nF(r,d):wo(0),f=l.left+d.scrollLeft-u.x-m.x,y=l.top+d.scrollTop-u.y-m.y;return{x:f,y,width:l.width,height:l.height}}function _j(e){return qr(e).position==="static"}function _O(e,t){if(!Ys(e)||qr(e).position==="fixed")return null;if(t)return t(e);let a=e.offsetParent;return Io(e)===a&&(a=a.ownerDocument.body),a}function iF(e,t){const a=gi(e);if($w(e))return a;if(!Ys(e)){let r=sc(e);for(;r&&!Gh(r);){if(Br(r)&&!_j(r))return r;r=sc(r)}return a}let i=_O(e,t);for(;i&&tie(i)&&_j(i);)i=_O(i,t);return i&&Gh(i)&&_j(i)&&!hM(i)?a:i||iie(e)||a}const gie=async function(e){const t=this.getOffsetParent||iF,a=this.getDimensions,i=await a(e.floating);return{reference:fie(e.reference,await t(e.floating),e.strategy),floating:{x:0,y:0,width:i.width,height:i.height}}};function yie(e){return qr(e).direction==="rtl"}const bie={convertOffsetParentRelativeRectToViewportRelativeRect:sie,getDocumentElement:Io,getClippingRect:pie,getOffsetParent:iF,getElementRects:gie,getClientRects:lie,getDimensions:mie,getScale:Sh,isElement:Br,isRTL:yie};function rF(e,t){return e.x===t.x&&e.y===t.y&&e.width===t.width&&e.height===t.height}function vie(e,t){let a=null,i;const r=Io(e);function o(){var d;clearTimeout(i),(d=a)==null||d.disconnect(),a=null}function l(d,u){d===void 0&&(d=!1),u===void 0&&(u=1),o();const h=e.getBoundingClientRect(),{left:m,top:f,width:y,height:b}=h;if(d||t(),!y||!b)return;const x=Rv(f),k=Rv(r.clientWidth-(m+y)),v=Rv(r.clientHeight-(f+b)),j=Rv(m),A={rootMargin:-x+"px "+-k+"px "+-v+"px "+-j+"px",threshold:ci(0,oc(1,u))||1};let C=!0;function _(E){const R=E[0].intersectionRatio;if(R!==u){if(!C)return l();R?l(!1,R):i=setTimeout(()=>{l(!1,1e-7)},1e3)}R===1&&!rF(h,e.getBoundingClientRect())&&l(),C=!1}try{a=new IntersectionObserver(_,{...A,root:r.ownerDocument})}catch{a=new IntersectionObserver(_,A)}a.observe(e)}return l(!0),o}function xie(e,t,a,i){i===void 0&&(i={});const{ancestorScroll:r=!0,ancestorResize:o=!0,elementResize:l=typeof ResizeObserver=="function",layoutShift:d=typeof IntersectionObserver=="function",animationFrame:u=!1}=i,h=mM(e),m=r||o?[...h?fg(h):[],...t?fg(t):[]]:[];m.forEach(j=>{r&&j.addEventListener("scroll",a,{passive:!0}),o&&j.addEventListener("resize",a)});const f=h&&d?vie(h,a):null;let y=-1,b=null;l&&(b=new ResizeObserver(j=>{let[T]=j;T&&T.target===h&&b&&t&&(b.unobserve(t),cancelAnimationFrame(y),y=requestAnimationFrame(()=>{var A;(A=b)==null||A.observe(t)})),a()}),h&&!u&&b.observe(h),t&&b.observe(t));let x,k=u?Md(e):null;u&&v();function v(){const j=Md(e);k&&!rF(k,j)&&a(),k=j,x=requestAnimationFrame(v)}return a(),()=>{var j;m.forEach(T=>{r&&T.removeEventListener("scroll",a),o&&T.removeEventListener("resize",a)}),f==null||f(),(j=b)==null||j.disconnect(),b=null,u&&cancelAnimationFrame(x)}}const wie=Qae,kie=Zae,jie=Vae,Sie=eie,Cie=Kae,MO=Yae,Aie=Jae,Tie=(e,t,a)=>{const i=new Map,r={platform:bie,...a},o={...r.platform,_c:i};return Hae(e,t,{...r,platform:o})};var _ie=typeof document<"u",Mie=function(){},x0=_ie?M.useLayoutEffect:Mie;function $0(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let a,i,r;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(a=e.length,a!==t.length)return!1;for(i=a;i--!==0;)if(!$0(e[i],t[i]))return!1;return!0}if(r=Object.keys(e),a=r.length,a!==Object.keys(t).length)return!1;for(i=a;i--!==0;)if(!{}.hasOwnProperty.call(t,r[i]))return!1;for(i=a;i--!==0;){const o=r[i];if(!(o==="_owner"&&e.$$typeof)&&!$0(e[o],t[o]))return!1}return!0}return e!==e&&t!==t}function oF(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function EO(e,t){const a=oF(e);return Math.round(t*a)/a}function Mj(e){const t=M.useRef(e);return x0(()=>{t.current=e}),t}function Eie(e){e===void 0&&(e={});const{placement:t="bottom",strategy:a="absolute",middleware:i=[],platform:r,elements:{reference:o,floating:l}={},transform:d=!0,whileElementsMounted:u,open:h}=e,[m,f]=M.useState({x:0,y:0,strategy:a,placement:t,middlewareData:{},isPositioned:!1}),[y,b]=M.useState(i);$0(y,i)||b(i);const[x,k]=M.useState(null),[v,j]=M.useState(null),T=M.useCallback(Y=>{Y!==E.current&&(E.current=Y,k(Y))},[]),A=M.useCallback(Y=>{Y!==R.current&&(R.current=Y,j(Y))},[]),C=o||x,_=l||v,E=M.useRef(null),R=M.useRef(null),W=M.useRef(m),z=u!=null,H=Mj(u),$=Mj(r),U=Mj(h),X=M.useCallback(()=>{if(!E.current||!R.current)return;const Y={placement:t,strategy:a,middleware:y};$.current&&(Y.platform=$.current),Tie(E.current,R.current,Y).then(V=>{const G={...V,isPositioned:U.current!==!1};D.current&&!$0(W.current,G)&&(W.current=G,Fp.flushSync(()=>{f(G)}))})},[y,t,a,$,U]);x0(()=>{h===!1&&W.current.isPositioned&&(W.current.isPositioned=!1,f(Y=>({...Y,isPositioned:!1})))},[h]);const D=M.useRef(!1);x0(()=>(D.current=!0,()=>{D.current=!1}),[]),x0(()=>{if(C&&(E.current=C),_&&(R.current=_),C&&_){if(H.current)return H.current(C,_,X);X()}},[C,_,X,H,z]);const P=M.useMemo(()=>({reference:E,floating:R,setReference:T,setFloating:A}),[T,A]),O=M.useMemo(()=>({reference:C,floating:_}),[C,_]),B=M.useMemo(()=>{const Y={position:a,left:0,top:0};if(!O.floating)return Y;const V=EO(O.floating,m.x),G=EO(O.floating,m.y);return d?{...Y,transform:"translate("+V+"px, "+G+"px)",...oF(O.floating)>=1.5&&{willChange:"transform"}}:{position:a,left:V,top:G}},[a,d,O.floating,m.x,m.y]);return M.useMemo(()=>({...m,update:X,refs:P,elements:O,floatingStyles:B}),[m,X,P,O,B])}const Rie=e=>{function t(a){return{}.hasOwnProperty.call(a,"current")}return{name:"arrow",options:e,fn(a){const{element:i,padding:r}=typeof e=="function"?e(a):e;return i&&t(i)?i.current!=null?MO({element:i.current,padding:r}).fn(a):{}:i?MO({element:i,padding:r}).fn(a):{}}}},Nie=(e,t)=>{const a=wie(e);return{name:a.name,fn:a.fn,options:[e,t]}},Oie=(e,t)=>{const a=kie(e);return{name:a.name,fn:a.fn,options:[e,t]}},Pie=(e,t)=>({fn:Aie(e).fn,options:[e,t]}),Iie=(e,t)=>{const a=jie(e);return{name:a.name,fn:a.fn,options:[e,t]}},Die=(e,t)=>{const a=Sie(e);return{name:a.name,fn:a.fn,options:[e,t]}},Wie=(e,t)=>{const a=Cie(e);return{name:a.name,fn:a.fn,options:[e,t]}},zie=(e,t)=>{const a=Rie(e);return{name:a.name,fn:a.fn,options:[e,t]}};var Lie="Arrow",sF=M.forwardRef((e,t)=>{const{children:a,width:i=10,height:r=5,...o}=e;return n.jsx(Ka.svg,{...o,ref:t,width:i,height:r,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?a:n.jsx("polygon",{points:"0,0 30,0 15,10"})})});sF.displayName=Lie;var Uie=sF;function Bie(e){const[t,a]=M.useState(void 0);return rc(()=>{if(e){a({width:e.offsetWidth,height:e.offsetHeight});const i=new ResizeObserver(r=>{if(!Array.isArray(r)||!r.length)return;const o=r[0];let l,d;if("borderBoxSize"in o){const u=o.borderBoxSize,h=Array.isArray(u)?u[0]:u;l=h.inlineSize,d=h.blockSize}else l=e.offsetWidth,d=e.offsetHeight;a({width:l,height:d})});return i.observe(e,{box:"border-box"}),()=>i.unobserve(e)}else a(void 0)},[e]),t}var lF="Popper",[cF,dF]=Dw(lF),[fIe,uF]=cF(lF),hF="PopperAnchor",pF=M.forwardRef((e,t)=>{const{__scopePopper:a,virtualRef:i,...r}=e,o=uF(hF,a),l=M.useRef(null),d=Ur(t,l),u=M.useRef(null);return M.useEffect(()=>{const h=u.current;u.current=(i==null?void 0:i.current)||l.current,h!==u.current&&o.onAnchorChange(u.current)}),i?null:n.jsx(Ka.div,{...r,ref:d})});pF.displayName=hF;var fM="PopperContent",[qie,$ie]=cF(fM),mF=M.forwardRef((e,t)=>{var be,le,ee,ve,Se,pe;const{__scopePopper:a,side:i="bottom",sideOffset:r=0,align:o="center",alignOffset:l=0,arrowPadding:d=0,avoidCollisions:u=!0,collisionBoundary:h=[],collisionPadding:m=0,sticky:f="partial",hideWhenDetached:y=!1,updatePositionStrategy:b="optimized",onPlaced:x,...k}=e,v=uF(fM,a),[j,T]=M.useState(null),A=Ur(t,Ye=>T(Ye)),[C,_]=M.useState(null),E=Bie(C),R=(E==null?void 0:E.width)??0,W=(E==null?void 0:E.height)??0,z=i+(o!=="center"?"-"+o:""),H=typeof m=="number"?m:{top:0,right:0,bottom:0,left:0,...m},$=Array.isArray(h)?h:[h],U=$.length>0,X={padding:H,boundary:$.filter(Gie),altBoundary:U},{refs:D,floatingStyles:P,placement:O,isPositioned:B,middlewareData:Y}=Eie({strategy:"fixed",placement:z,whileElementsMounted:(...Ye)=>xie(...Ye,{animationFrame:b==="always"}),elements:{reference:v.anchor},middleware:[Nie({mainAxis:r+W,alignmentAxis:l}),u&&Oie({mainAxis:!0,crossAxis:!1,limiter:f==="partial"?Pie():void 0,...X}),u&&Iie({...X}),Die({...X,apply:({elements:Ye,rects:ze,availableWidth:Re,availableHeight:mt})=>{const{width:$e,height:Gt}=ze.reference,Ht=Ye.floating.style;Ht.setProperty("--radix-popper-available-width",`${Re}px`),Ht.setProperty("--radix-popper-available-height",`${mt}px`),Ht.setProperty("--radix-popper-anchor-width",`${$e}px`),Ht.setProperty("--radix-popper-anchor-height",`${Gt}px`)}}),C&&zie({element:C,padding:d}),Hie({arrowWidth:R,arrowHeight:W}),y&&Wie({strategy:"referenceHidden",...X})]}),[V,G]=yF(O),I=ic(x);rc(()=>{B&&(I==null||I())},[B,I]);const F=(be=Y.arrow)==null?void 0:be.x,K=(le=Y.arrow)==null?void 0:le.y,ne=((ee=Y.arrow)==null?void 0:ee.centerOffset)!==0,[ae,ge]=M.useState();return rc(()=>{j&&ge(window.getComputedStyle(j).zIndex)},[j]),n.jsx("div",{ref:D.setFloating,"data-radix-popper-content-wrapper":"",style:{...P,transform:B?P.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:ae,"--radix-popper-transform-origin":[(ve=Y.transformOrigin)==null?void 0:ve.x,(Se=Y.transformOrigin)==null?void 0:Se.y].join(" "),...((pe=Y.hide)==null?void 0:pe.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:n.jsx(qie,{scope:a,placedSide:V,onArrowChange:_,arrowX:F,arrowY:K,shouldHideArrow:ne,children:n.jsx(Ka.div,{"data-side":V,"data-align":G,...k,ref:A,style:{...k.style,animation:B?void 0:"none"}})})})});mF.displayName=fM;var fF="PopperArrow",Fie={top:"bottom",right:"left",bottom:"top",left:"r
485ight"},gF=M.forwardRef(function(t,a){const{__scopePopper:i,...r}=t,o=$ie(fF,i),l=Fie[o.placedSide];return n.jsx("span",{ref:o.onArrowChange,style:{position:"absolute",left:o.arrowX,top:o.arrowY,[l]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[o.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[o.placedSide],visibility:o.shouldHideArrow?"hidden":void 0},children:n.jsx(Uie,{...r,ref:a,style:{...r.style,display:"block"}})})});gF.displayName=fF;function Gie(e){return e!==null}var Hie=e=>({name:"transformOrigin",options:e,fn(t){var v,j,T;const{placement:a,rects:i,middlewareData:r}=t,l=((v=r.arrow)==null?void 0:v.centerOffset)!==0,d=l?0:e.arrowWidth,u=l?0:e.arrowHeight,[h,m]=yF(a),f={start:"0%",center:"50%",end:"100%"}[m],y=(((j=r.arrow)==null?void 0:j.x)??0)+d/2,b=(((T=r.arrow)==null?void 0:T.y)??0)+u/2;let x="",k="";return h==="bottom"?(x=l?f:`${y}px`,k=`${-u}px`):h==="top"?(x=l?f:`${y}px`,k=`${i.floating.height+u}px`):h==="right"?(x=`${-u}px`,k=l?f:`${b}px`):h==="left"&&(x=`${i.floating.width+u}px`,k=l?f:`${b}px`),{data:{x,y:k}}}});function yF(e){const[t,a="center"]=e.split("-");return[t,a]}var Yie=pF,Vie=mF,Kie=gF,[Hw]=Dw("Tooltip",[dF]),gM=dF(),bF="TooltipProvider",Xie=700,RO="tooltip.open",[Qie,vF]=Hw(bF),xF=e=>{const{__scopeTooltip:t,delayDuration:a=Xie,skipDelayDuration:i=300,disableHoverableContent:r=!1,children:o}=e,l=M.useRef(!0),d=M.useRef(!1),u=M.useRef(0);return M.useEffect(()=>{const h=u.current;return()=>window.clearTimeout(h)},[]),n.jsx(Qie,{scope:t,isOpenDelayedRef:l,delayDuration:a,onOpen:M.useCallback(()=>{window.clearTimeout(u.current),l.current=!1},[]),onClose:M.useCallback(()=>{window.clearTimeout(u.current),u.current=window.setTimeout(()=>l.current=!0,i)},[i]),isPointerInTransitRef:d,onPointerInTransitChange:M.useCallback(h=>{d.current=h},[]),disableHoverableContent:r,children:o})};xF.displayName=bF;var wF="Tooltip",[gIe,Yw]=Hw(wF),b4="TooltipTrigger",Zie=M.forwardRef((e,t)=>{const{__scopeTooltip:a,...i}=e,r=Yw(b4,a),o=vF(b4,a),l=gM(a),d=M.useRef(null),u=Ur(t,d,r.onTriggerChange),h=M.useRef(!1),m=M.useRef(!1),f=M.useCallback(()=>h.current=!1,[]);return M.useEffect(()=>()=>document.removeEventListener("pointerup",f),[f]),n.jsx(Yie,{asChild:!0,...l,children:n.jsx(Ka.button,{"aria-describedby":r.open?r.contentId:void 0,"data-state":r.stateAttribute,...i,ref:u,onPointerMove:jn(e.onPointerMove,y=>{y.pointerType!=="touch"&&!m.current&&!o.isPointerInTransitRef.current&&(r.onTriggerEnter(),m.current=!0)}),onPointerLeave:jn(e.onPointerLeave,()=>{r.onTriggerLeave(),m.current=!1}),onPointerDown:jn(e.onPointerDown,()=>{r.open&&r.onClose(),h.current=!0,document.addEventListener("pointerup",f,{once:!0})}),onFocus:jn(e.onFocus,()=>{h.current||r.onOpen()}),onBlur:jn(e.onBlur,r.onClose),onClick:jn(e.onClick,r.onClose)})})});Zie.displayName=b4;var Jie="TooltipPortal",[yIe,ere]=Hw(Jie,{forceMount:void 0}),Hh="TooltipContent",kF=M.forwardRef((e,t)=>{const a=ere(Hh,e.__scopeTooltip),{forceMount:i=a.forceMount,side:r="top",...o}=e,l=Yw(Hh,e.__scopeTooltip);return n.jsx(tM,{present:i||l.open,children:l.disableHoverableContent?n.jsx(jF,{side:r,...o,ref:t}):n.jsx(tre,{side:r,...o,ref:t})})}),tre=M.forwardRef((e,t)=>{const a=Yw(Hh,e.__scopeTooltip),i=vF(Hh,e.__scopeTooltip),r=M.useRef(null),o=Ur(t,r),[l,d]=M.useState(null),{trigger:u,onClose:h}=a,m=r.current,{onPointerInTransitChange:f}=i,y=M.useCallback(()=>{d(null),f(!1)},[f]),b=M.useCallback((x,k)=>{const v=x.currentTarget,j={x:x.clientX,y:x.clientY},T=ore(j,v.getBoundingClientRect()),A=sre(j,T),C=lre(k.getBoundingClientRect()),_=dre([...A,...C]);d(_),f(!0)},[f]);return M.useEffect(()=>()=>y(),[y]),M.useEffect(()=>{if(u&&m){const x=v=>b(v,m),k=v=>b(v,u);return u.addEventListener("pointerleave",x),m.addEventListener("pointerleave",k),()=>{u.removeEventListener("pointerleave",x),m.removeEventListener("pointerleave",k)}}},[u,m,b,y]),M.useEffect(()=>{if(l){const x=k=>{const v=k.target,j={x:k.clientX,y:k.clientY},T=(u==null?void 0:u.contains(v))||(m==null?void 0:m.contains(v)),A=!cre(j,l);T?y():A&&(y(),h())};return document.addEventListener("pointermove",x),()=>document.removeEventListener("pointermove",x)}},[u,m,l,h,y]),n.jsx(jF,{...e,ref:o})}),[nre,are]=Hw(wF,{isInside:!1}),ire=See("TooltipContent"),jF=M.forwardRef((e,t)=>
485{const{__scopeTooltip:a,children:i,"aria-label":r,onEscapeKeyDown:o,onPointerDownOutside:l,...d}=e,u=Yw(Hh,a),h=gM(a),{onClose:m}=u;return M.useEffect(()=>(document.addEventListener(RO,m),()=>document.removeEventListener(RO,m)),[m]),M.useEffect(()=>{if(u.trigger){const f=y=>{const b=y.target;b!=null&&b.contains(u.trigger)&&m()};return window.addEventListener("scroll",f,{capture:!0}),()=>window.removeEventListener("scroll",f,{capture:!0})}},[u.trigger,m]),n.jsx(eM,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:o,onPointerDownOutside:l,onFocusOutside:f=>f.preventDefault(),onDismiss:m,children:n.jsxs(Vie,{"data-state":u.stateAttribute,...h,...d,ref:t,style:{...d.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[n.jsx(ire,{children:i}),n.jsx(nre,{scope:a,isInside:!0,children:n.jsx(Kee,{id:u.contentId,role:"tooltip",children:r||i})})]})})});kF.displayName=Hh;var SF="TooltipArrow",rre=M.forwardRef((e,t)=>{const{__scopeTooltip:a,...i}=e,r=gM(a);return are(SF,a).isInside?null:n.jsx(Kie,{...r,...i,ref:t})});rre.displayName=SF;function ore(e,t){const a=Math.abs(t.top-e.y),i=Math.abs(t.bottom-e.y),r=Math.abs(t.right-e.x),o=Math.abs(t.left-e.x);switch(Math.min(a,i,r,o)){case o:return"left";case r:return"right";case a:return"top";case i:return"bottom";default:throw new Error("unreachable")}}function sre(e,t,a=5){const i=[];switch(t){case"top":i.push({x:e.x-a,y:e.y+a},{x:e.x+a,y:e.y+a});break;case"bottom":i.push({x:e.x-a,y:e.y-a},{x:e.x+a,y:e.y-a});break;case"left":i.push({x:e.x+a,y:e.y-a},{x:e.x+a,y:e.y+a});break;case"right":i.push({x:e.x-a,y:e.y-a},{x:e.x-a,y:e.y+a});break}return i}function lre(e){const{top:t,right:a,bottom:i,left:r}=e;return[{x:r,y:t},{x:a,y:t},{x:a,y:i},{x:r,y:i}]}function cre(e,t){const{x:a,y:i}=e;let r=!1;for(let o=0,l=t.length-1;o<t.length;l=o++){const d=t[o],u=t[l],h=d.x,m=d.y,f=u.x,y=u.y;m>i!=y>i&&a<(f-h)*(i-m)/(y-m)+h&&(r=!r)}return r}function dre(e){const t=e.slice();return t.sort((a,i)=>a.x<i.x?-1:a.x>i.x?1:a.y<i.y?-1:a.y>i.y?1:0),ure(t)}function ure(e){if(e.length<=1)return e.slice();const t=[];for(let i=0;i<e.length;i++){const r=e[i];for(;t.length>=2;){const o=t[t.length-1],l=t[t.length-2];if((o.x-l.x)*(r.y-l.y)>=(o.y-l.y)*(r.x-l.x))t.pop();else break}t.push(r)}t.pop();const a=[];for(let i=e.length-1;i>=0;i--){const r=e[i];for(;a.length>=2;){const o=a[a.length-1],l=a[a.length-2];if((o.x-l.x)*(r.y-l.y)>=(o.y-l.y)*(r.x-l.x))a.pop();else break}a.push(r)}return a.pop(),t.length===1&&a.length===1&&t[0].x===a[0].x&&t[0].y===a[0].y?t:t.concat(a)}var hre=xF,CF=kF;const pre=hre,mre=M.forwardRef(({className:e,sideOffset:t=4,...a},i)=>n.jsx(CF,{ref:i,sideOffset:t,className:nu("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...a}));mre.displayName=CF.displayName;var Vw=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},md,zl,Dh,Dq,fre=(Dq=class extends Vw{constructor(){super();ct(this,md);ct(this,zl);ct(this,Dh);He(this,Dh,t=>{if(typeof window<"u"&&window.addEventListener){const a=()=>t();return window.addEventListener("visibilitychange",a,!1),()=>{window.removeEventListener("visibilitychange",a)}}})}onSubscribe(){ue(this,zl)||this.setEventListener(ue(this,Dh))}onUnsubscribe(){var t;this.hasListeners()||((t=ue(this,zl))==null||t.call(this),He(this,zl,void 0))}setEventListener(t){var a;He(this,Dh,t),(a=ue(this,zl))==null||a.call(this),He(this,zl,t(i=>{typeof i=="boolean"?this.setFocused(i):this.onFocus()}))}setFocused(t){ue(this,md)!==t&&(He(this,md,t),this.onFocus())}onFocus(){const t=this.isFocused();
485this.listeners.forEach(a=>{a(t)})}isFocused(){var t;return typeof ue(this,md)=="boolean"?ue(this,md):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},md=new WeakMap,zl=new WeakMap,Dh=new WeakMap,Dq),AF=new fre,gre={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},Ll,Z_,Wq,yre=(Wq=class{constructor(){ct(this,Ll,gre);ct(this,Z_,!1)}setTimeoutProvider(e){He(this,Ll,e)}setTimeout(e,t){return ue(this,Ll).setTimeout(e,t)}clearTimeout(e){ue(this,Ll).clearTimeout(e)}setInterval(e,t){return ue(this,Ll).setInterval(e,t)}clearInterval(e){ue(this,Ll).clearInterval(e)}},Ll=new WeakMap,Z_=new WeakMap,Wq),v4=new yre;function bre(e){setTimeout(e,0)}var vre=typeof window>"u"||"Deno"in globalThis;function gr(){}function xre(e,t){return typeof e=="function"?e(t):e}function wre(e){return typeof e=="number"&&e>=0&&e!==1/0}function kre(e,t){return Math.max(e+(t||0)-Date.now(),0)}function x4(e,t){return typeof e=="function"?e(t):e}function jre(e,t){return typeof e=="function"?e(t):e}function NO(e,t){const{type:a="all",exact:i,fetchStatus:r,predicate:o,queryKey:l,stale:d}=e;if(l){if(i){if(t.queryHash!==yM(l,t.options))return!1}else if(!yg(t.queryKey,l))return!1}if(a!=="all"){const u=t.isActive();if(a==="active"&&!u||a==="inactive"&&u)return!1}return!(typeof d=="boolean"&&t.isStale()!==d||r&&r!==t.state.fetchStatus||o&&!o(t))}function OO(e,t){const{exact:a,status:i,predicate:r,mutationKey:o}=e;if(o){if(!t.options.mutationKey)return!1;if(a){if(gg(t.options.mutationKey)!==gg(o))return!1}else if(!yg(t.options.mutationKey,o))return!1}return!(i&&t.state.status!==i||r&&!r(t))}function yM(e,t){return((t==null?void 0:t.queryKeyHashFn)||gg)(e)}function gg(e){return JSON.stringify(e,(t,a)=>w4(a)?Object.keys(a).sort().reduce((i,r)=>(i[r]=a[r],i),{}):a)}function yg(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(a=>yg(e[a],t[a])):!1}var Sre=Object.prototype.hasOwnProperty;function TF(e,t,a=0){if(e===t)return e;if(a>500)return t;const i=PO(e)&&PO(t);if(!i&&!(w4(e)&&w4(t)))return t;const o=(i?e:Object.keys(e)).length,l=i?t:Object.keys(t),d=l.length,u=i?new Array(d):{};let h=0;for(let m=0;m<d;m++){const f=i?m:l[m],y=e[f],b=t[f];if(y===b){u[f]=y,(i?m<o:Sre.call(e,f))&&h++;continue}if(y===null||b===null||typeof y!="object"||typeof b!="object"){u[f]=b;continue}const x=TF(y,b,a+1);u[f]=x,x===y&&h++}return o===d&&h===o?e:u}function PO(e){return Array.isArray(e)&&e.length===Object.keys(e).length}function w4(e){if(!IO(e))return!1;const t=e.constructor;if(t===void 0)return!0;const a=t.prototype;return!(!IO(a)||!a.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(e)!==Object.prototype)}function IO(e){return Object.prototype.toString.call(e)==="[object Object]"}function Cre(e){return new Promise(t=>{v4.setTimeout(t,e)})}function Are(e,t,a){return typeof a.structuralSharing=="function"?a.structuralSharing(e,t):a.structuralSharing!==!1?TF(e,t):t}function Tre(e,t,a=0){const i=[...e,t];return a&&i.length>a?i.slice(1):i}function _re(e,t,a=0){const i=[t,...e];return a&&i.length>a?i.slice(0,-1):i}var bM=Symbol();function _F(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===bM?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function Mre(e,t,a){let i=!1,r;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(r??(r=t()),i||(i=!0,r.aborted?a():r.addEventListener("abort",a,{once:!0})),r)}),e}var MF=(()=>{let e=()=>vre;return{isServer(){return e()},setIsServer(t){e=t}}})();function Ere(){let e,t;const a=new Promise((r,o)=>{e=r,t=o});a.status="pending",a.catch(()=>{});function i(r){Object.assign(a,r),delete a.resolve,delete a.reject}return a.resolve=r=>{i({status:"fulfilled",value:r}),e(r)},a.reject=r=>{i({status:"rejected",reason:r}),t(r)},a}var Rre=bre;function Nre(){let e=[],t=0,a=d=>{d()},i=d=>{d()},r=Rre;const o=d=>{t?e.push(d):r(()=>{a(d)})},l=()=>{const d=e;e=[],d.length&&r(()=>{i(()=>{d.forEach(u=>{a(u)})})})};return{batch:d=>{let u;t++;try{u=d()}finally{t--,t||l()}return u},batchCalls:d=>(...u)=>{o(()=>{d(...u)})},schedule:o,setNotifyFunction:d=>{a=d},setBatchNotifyFunction:d=>{i=d},setScheduler:d=>{r=d}}}var pa=Nre(),Wh,Ul,zh,zq,Ore=(zq=class extends Vw{constructor(){super();ct(this,Wh,!0);ct(this,Ul);ct(this,zh);He(this,zh,t=>{if(typeof window<"u"&&window.addEventListener){const a=()=>t(!0),i=()=>t(!1);return window.addEventListener("online",a,!1),window.addEventListener("offline",i,!1),()=>{window.removeEventListener("online",a),window.removeEventListener("offline",i)}}})}onSubscribe(){ue(this,Ul)||this.setEventListener(ue(this,zh))}onUnsubscribe(){var t;this.hasListeners()||((t=ue(this,Ul))==null||t.call(this),He(this,Ul,void 0))}setEventListener(t){var a;He(this,zh,t),(a=ue(this,Ul))==null||a.call(this),He(this,Ul,t(this.setOnline.bind(this)))}setOnline(t){ue(this,Wh)!==t&&(He(this,Wh,t),this.listeners.forEac
485h(i=>{i(t)}))}isOnline(){return ue(this,Wh)}},Wh=new WeakMap,Ul=new WeakMap,zh=new WeakMap,zq),F0=new Ore;function Pre(e){return Math.min(1e3*2**e,3e4)}function EF(e){return(e??"online")==="online"?F0.isOnline():!0}var k4=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function RF(e){let t=!1,a=0,i;const r=Ere(),o=()=>r.status!=="pending",l=k=>{var v;if(!o()){const j=new k4(k);y(j),(v=e.onCancel)==null||v.call(e,j)}},d=()=>{t=!0},u=()=>{t=!1},h=()=>AF.isFocused()&&(e.networkMode==="always"||F0.isOnline())&&e.canRun(),m=()=>EF(e.networkMode)&&e.canRun(),f=k=>{o()||(i==null||i(),r.resolve(k))},y=k=>{o()||(i==null||i(),r.reject(k))},b=()=>new Promise(k=>{var v;i=j=>{(o()||h())&&k(j)},(v=e.onPause)==null||v.call(e)}).then(()=>{var k;i=void 0,o()||(k=e.onContinue)==null||k.call(e)}),x=()=>{if(o())return;let k;const v=a===0?e.initialPromise:void 0;try{k=v??e.fn()}catch(j){k=Promise.reject(j)}Promise.resolve(k).then(f).catch(j=>{var E;if(o())return;const T=e.retry??(MF.isServer()?0:3),A=e.retryDelay??Pre,C=typeof A=="function"?A(a,j):A,_=T===!0||typeof T=="number"&&a<T||typeof T=="function"&&T(a,j);if(t||!_){y(j);return}a++,(E=e.onFail)==null||E.call(e,a,j),Cre(C).then(()=>h()?void 0:b()).then(()=>{t?y(j):x()})})};return{promise:r,status:()=>r.status,cancel:l,continue:()=>(i==null||i(),r),cancelRetry:d,continueRetry:u,canStart:m,start:()=>(m()?x():b().then(x),r)}}var fd,Lq,NF=(Lq=class{constructor(){ct(this,fd)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),wre(this.gcTime)&&He(this,fd,v4.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(MF.isServer()?1/0:300*1e3))}clearGcTimeout(){ue(this,fd)!==void 0&&(v4.clearTimeout(ue(this,fd)),He(this,fd,void 0))}},fd=new WeakMap,Lq);function Ire(e){return{onFetch:(t,a)=>{var m,f,y,b,x;const i=t.options,r=(y=(f=(m=t.fetchOptions)==null?void 0:m.meta)==null?void 0:f.fetchMore)==null?void 0:y.direction,o=((b=t.state.data)==null?void 0:b.pages)||[],l=((x=t.state.data)==null?void 0:x.pageParams)||[];let d={pages:[],pageParams:[]},u=0;const h=async()=>{let k=!1;const v=A=>{Mre(A,()=>t.signal,()=>k=!0)},j=_F(t.options,t.fetchOptions),T=async(A,C,_)=>{if(k)return Promise.reject(t.signal.reason);if(C==null&&A.pages.length)return Promise.resolve(A);const R=(()=>{const $={client:t.client,queryKey:t.queryKey,pageParam:C,direction:_?"backward":"forward",meta:t.options.meta};return v($),$})(),W=await j(R),{maxPages:z}=t.options,H=_?_re:Tre;return{pages:H(A.pages,W,z),pageParams:H(A.pageParams,C,z)}};if(r&&o.length){const A=r==="backward",C=A?Dre:DO,_={pages:o,pageParams:l},E=C(i,_);d=await T(_,E,A)}else{const A=e??o.length;do{const C=u===0?l[0]??i.initialPageParam:DO(i,d);if(u>0&&C==null)break;d=await T(d,C),u++}while(u<A)}return d};t.options.persister?t.fetchFn=()=>{var k,v;return(v=(k=t.options).persister)==null?void 0:v.call(k,h,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},a)}:t.fetchFn=h}}}function DO(e,{pages:t,pageParams:a}){const i=t.length-1;return t.length>0?e.getNextPageParam(t[i],t,a[i],a):void 0}function Dre(e,{pages:t,pageParams:a}){var i;return t.length>0?(i=e.getPreviousPageParam)==null?void 0:i.call(e,t[0],t,a[0],a):void 0}var Lh,gd,Uh,Li,yd,Mn,fy,bd,si,OF,us,Uq,Wre=(Uq=class extends NF{constructor(t){super();ct(this,si);ct(this,Lh);ct(this,gd);ct(this,Uh);ct(this,Li);ct(this,yd);ct(this,Mn);ct(this,fy);ct(this,bd);He(this,bd,!1),He(this,fy,t.defaultOptions),this.setOptions(t.options),this.observers=[],He(this,yd,t.client),He(this,Li,ue(this,yd).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,He(this,gd,zO(this.options)),this.state=t.state??ue(this,gd),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return ue(this,Lh)}get promise(){var t;return(t=ue(this,Mn))==null?void 0:t.promise}setOptions(t){if(this.options={...ue(this,fy),...t},t!=null&&t._type&&He(this,Lh,t._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const a=zO(this.options);a.data!==void 0&&(this.setState(WO(a.data,a.dataUpdatedAt)),He(this,gd,a))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&ue(this,Li).remove(this)}setData(t,a){const i=Are(this.state.data,t,this.options);return qn(this,si,us).call(this,{data:i,type:"success",dataUpdatedAt:a==null?void 0:a.updatedAt,manual:a==null?void 0:a.manual}),i}setState(t){qn(this,si,us).call(this,{type:"setState",state:t})}cancel(t){var i,r;const a=(i=ue(this,Mn))==null?void 0:i.promise;return(r=ue(this,Mn))==null||r.cancel(t),a?a.then(gr).catch(gr):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return ue(this,gd)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(t=>jre(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===bM||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdate
485Count>0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>x4(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!kre(this.state.dataUpdatedAt,t)}onFocus(){var a;const t=this.observers.find(i=>i.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(a=ue(this,Mn))==null||a.continue()}onOnline(){var a;const t=this.observers.find(i=>i.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(a=ue(this,Mn))==null||a.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),ue(this,Li).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(a=>a!==t),this.observers.length||(ue(this,Mn)&&(ue(this,bd)||qn(this,si,OF).call(this)?ue(this,Mn).cancel({revert:!0}):ue(this,Mn).cancelRetry()),this.scheduleGc()),ue(this,Li).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||qn(this,si,us).call(this,{type:"invalidate"})}async fetch(t,a){var h,m,f,y,b,x,k,v,j,T,A;if(this.state.fetchStatus!=="idle"&&((h=ue(this,Mn))==null?void 0:h.status())!=="rejected"){if(this.state.data!==void 0&&(a!=null&&a.cancelRefetch))this.cancel({silent:!0});else if(ue(this,Mn))return ue(this,Mn).continueRetry(),ue(this,Mn).promise}if(t&&this.setOptions(t),!this.options.queryFn){const C=this.observers.find(_=>_.options.queryFn);C&&this.setOptions(C.options)}const i=new AbortController,r=C=>{Object.defineProperty(C,"signal",{enumerable:!0,get:()=>(He(this,bd,!0),i.signal)})},o=()=>{const C=_F(this.options,a),E=(()=>{const R={client:ue(this,yd),queryKey:this.queryKey,meta:this.meta};return r(R),R})();return He(this,bd,!1),this.options.persister?this.options.persister(C,E,this):C(E)},d=(()=>{const C={fetchOptions:a,options:this.options,queryKey:this.queryKey,client:ue(this,yd),state:this.state,fetchFn:o};return r(C),C})(),u=ue(this,Lh)==="infinite"?Ire(this.options.pages):this.options.behavior;u==null||u.onFetch(d,this),He(this,Uh,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((m=d.fetchOptions)==null?void 0:m.meta))&&qn(this,si,us).call(this,{type:"fetch",meta:(f=d.fetchOptions)==null?void 0:f.meta}),He(this,Mn,RF({initialPromise:a==null?void 0:a.initialPromise,fn:d.fetchFn,onCancel:C=>{C instanceof k4&&C.revert&&this.setState({...ue(this,Uh),fetchStatus:"idle"}),i.abort()},onFail:(C,_)=>{qn(this,si,us).call(this,{type:"failed",failureCount:C,error:_})},onPause:()=>{qn(this,si,us).call(this,{type:"pause"})},onContinue:()=>{qn(this,si,us).call(this,{type:"continue"})},retry:d.options.retry,retryDelay:d.options.retryDelay,networkMode:d.options.networkMode,canRun:()=>!0}));try{const C=await ue(this,Mn).start();if(C===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(C),(b=(y=ue(this,Li).config).onSuccess)==null||b.call(y,C,this),(k=(x=ue(this,Li).config).onSettled)==null||k.call(x,C,this.state.error,this),C}catch(C){if(C instanceof k4){if(C.silent)return ue(this,Mn).promise;if(C.revert){if(this.state.data===void 0)throw C;return this.state.data}}throw qn(this,si,us).call(this,{type:"error",error:C}),(j=(v=ue(this,Li).config).onError)==null||j.call(v,C,this),(A=(T=ue(this,Li).config).onSettled)==null||A.call(T,this.state.data,C,this),C}finally{this.scheduleGc()}}},Lh=new WeakMap,gd=new WeakMap,Uh=new WeakMap,Li=new WeakMap,yd=new WeakMap,Mn=new WeakMap,fy=new WeakMap,bd=new WeakMap,si=new WeakSet,OF=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},us=function(t){const a=i=>{switch(t.type){case"failed":return{...i,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...i,fetchStatus:"paused"};case"continue":return{...i,fetchStatus:"fetching"};case"fetch":return{...i,...zre(i.data,this.options),fetchMeta:t.meta??null};case"success":const r={...i,...WO(t.data,t.dataUpdatedAt),dataUpdateCount:i.dataUpdateCount+1,...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return He(this,Uh,t.manual?r:void 0),r;case"error":const o=t.error;
485return{...i,error:o,errorUpdateCount:i.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:i.fetchFailureCount+1,fetchFailureReason:o,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...i,isInvalidated:!0};case"setState":return{...i,...t.state}}};this.state=a(this.state),pa.batch(()=>{this.observers.forEach(i=>{i.onQueryUpdate()}),ue(this,Li).notify({query:this,type:"updated",action:t})})},Uq);function zre(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:EF(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function WO(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:"success"}}function zO(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,a=t!==void 0,i=a?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:a?i??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:a?"success":"pending",fetchStatus:"idle"}}var gy,lo,Zn,vd,co,Rl,Bq,Lre=(Bq=class extends NF{constructor(t){super();ct(this,co);ct(this,gy);ct(this,lo);ct(this,Zn);ct(this,vd);He(this,gy,t.client),this.mutationId=t.mutationId,He(this,Zn,t.mutationCache),He(this,lo,[]),this.state=t.state||Ure(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){ue(this,lo).includes(t)||(ue(this,lo).push(t),this.clearGcTimeout(),ue(this,Zn).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){He(this,lo,ue(this,lo).filter(a=>a!==t)),this.scheduleGc(),ue(this,Zn).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){ue(this,lo).length||(this.state.status==="pending"?this.scheduleGc():ue(this,Zn).remove(this))}continue(){var t;return((t=ue(this,vd))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var l,d,u,h,m,f,y,b,x,k,v,j,T,A,C,_,E,R;const a=()=>{qn(this,co,Rl).call(this,{type:"continue"})},i={client:ue(this,gy),meta:this.options.meta,mutationKey:this.options.mutationKey};He(this,vd,RF({fn:()=>this.options.mutationFn?this.options.mutationFn(t,i):Promise.reject(new Error("No mutationFn found")),onFail:(W,z)=>{qn(this,co,Rl).call(this,{type:"failed",failureCount:W,error:z})},onPause:()=>{qn(this,co,Rl).call(this,{type:"pause"})},onContinue:a,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>ue(this,Zn).canRun(this)}));const r=this.state.status==="pending",o=!ue(this,vd).canStart();try{if(r)a();else{qn(this,co,Rl).call(this,{type:"pending",variables:t,isPaused:o}),ue(this,Zn).config.onMutate&&await ue(this,Zn).config.onMutate(t,this,i);const z=await((d=(l=this.options).onMutate)==null?void 0:d.call(l,t,i));z!==this.state.context&&qn(this,co,Rl).call(this,{type:"pending",context:z,variables:t,isPaused:o})}const W=await ue(this,vd).start();return await((h=(u=ue(this,Zn).config).onSuccess)==null?void 0:h.call(u,W,t,this.state.context,this,i)),await((f=(m=this.options).onSuccess)==null?void 0:f.call(m,W,t,this.state.context,i)),await((b=(y=ue(this,Zn).config).onSettled)==null?void 0:b.call(y,W,null,this.state.variables,this.state.context,this,i)),await((k=(x=this.options).onSettled)==null?void 0:k.call(x,W,null,t,this.state.context,i)),qn(this,co,Rl).call(this,{type:"success",data:W}),W}catch(W){try{await((j=(v=ue(this,Zn).config).onError)==null?void 0:j.call(v,W,t,this.state.context,this,i))}catch(z){Promise.reject(z)}try{await((A=(T=this.options).onError)==null?void 0:A.call(T,W,t,this.state.context,i))}catch(z){Promise.reject(z)}try{await((_=(C=ue(this,Zn).config).onSettled)==null?void 0:_.call(C,void 0,W,this.state.variables,this.state.context,this,i))}catch(z){Promise.reject(z)}try{await((R=(E=this.options).onSettled)==null?void 0:R.call(E,void 0,W,t,this.state.context,i))}catch(z){Promise.reject(z)}throw qn(this,co,Rl).call(this,{type:"error",error:W}),W}finally{ue(this,Zn).runNext(this)}}},gy=new WeakMap,lo=new WeakMap,Zn=new WeakMap,vd=new WeakMap,co=new WeakSet,Rl=function(t){const a=i=>{switch(t.type){case"failed":return{...i,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...i,isPaused:!0};case"continue":return{...i,isPaused:!1};
485case"pending":return{...i,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...i,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...i,data:void 0,error:t.error,failureCount:i.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=a(this.state),pa.batch(()=>{ue(this,lo).forEach(i=>{i.onMutationUpdate(t)}),ue(this,Zn).notify({mutation:this,type:"updated",action:t})})},Bq);function Ure(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var fs,yr,yy,qq,Bre=(qq=class extends Vw{constructor(t={}){super();ct(this,fs);ct(this,yr);ct(this,yy);this.config=t,He(this,fs,new Set),He(this,yr,new Map),He(this,yy,0)}build(t,a,i){const r=new Lre({client:t,mutationCache:this,mutationId:++Av(this,yy)._,options:t.defaultMutationOptions(a),state:i});return this.add(r),r}add(t){ue(this,fs).add(t);const a=Nv(t);if(typeof a=="string"){const i=ue(this,yr).get(a);i?i.push(t):ue(this,yr).set(a,[t])}this.notify({type:"added",mutation:t})}remove(t){if(ue(this,fs).delete(t)){const a=Nv(t);if(typeof a=="string"){const i=ue(this,yr).get(a);if(i)if(i.length>1){const r=i.indexOf(t);r!==-1&&i.splice(r,1)}else i[0]===t&&ue(this,yr).delete(a)}}this.notify({type:"removed",mutation:t})}canRun(t){const a=Nv(t);if(typeof a=="string"){const i=ue(this,yr).get(a),r=i==null?void 0:i.find(o=>o.state.status==="pending");return!r||r===t}else return!0}runNext(t){var i;const a=Nv(t);if(typeof a=="string"){const r=(i=ue(this,yr).get(a))==null?void 0:i.find(o=>o!==t&&o.state.isPaused);return(r==null?void 0:r.continue())??Promise.resolve()}else return Promise.resolve()}clear(){pa.batch(()=>{ue(this,fs).forEach(t=>{this.notify({type:"removed",mutation:t})}),ue(this,fs).clear(),ue(this,yr).clear()})}getAll(){return Array.from(ue(this,fs))}find(t){const a={exact:!0,...t};return this.getAll().find(i=>OO(a,i))}findAll(t={}){return this.getAll().filter(a=>OO(t,a))}notify(t){pa.batch(()=>{this.listeners.forEach(a=>{a(t)})})}resumePausedMutations(){const t=this.getAll().filter(a=>a.state.isPaused);return pa.batch(()=>Promise.all(t.map(a=>a.continue().catch(gr))))}},fs=new WeakMap,yr=new WeakMap,yy=new WeakMap,qq);function Nv(e){var t;return(t=e.options.scope)==null?void 0:t.id}var uo,$q,qre=($q=class extends Vw{constructor(t={}){super();ct(this,uo);this.config=t,He(this,uo,new Map)}build(t,a,i){const r=a.queryKey,o=a.queryHash??yM(r,a);let l=this.get(o);return l||(l=new Wre({client:t,queryKey:r,queryHash:o,options:t.defaultQueryOptions(a),state:i,defaultOptions:t.getQueryDefaults(r)}),this.add(l)),l}add(t){ue(this,uo).has(t.queryHash)||(ue(this,uo).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const a=ue(this,uo).get(t.queryHash);a&&(t.destroy(),a===t&&ue(this,uo).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){pa.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return ue(this,uo).get(t)}getAll(){return[...ue(this,uo).values()]}find(t){const a={exact:!0,...t};return this.getAll().find(i=>NO(a,i))}findAll(t={}){const a=this.getAll();return Object.keys(t).length>0?a.filter(i=>NO(t,i)):a}notify(t){pa.batch(()=>{this.listeners.forEach(a=>{a(t)})})}onFocus(){pa.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){pa.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},uo=new WeakMap,$q),an,Bl,ql,Bh,qh,$l,$h,Fh,Fq,$re=(Fq=class{constructor(e={}){ct(this,an);ct(this,Bl);ct(this,ql);ct(this,Bh);ct(this,qh);ct(this,$l);ct(this,$h);ct(this,Fh);He(this,an,e.queryCache||new qre),He(this,Bl,e.mutationCache||new Bre),He(this,ql,e.defaultOptions||{}),He(this,Bh,new Map),He(this,qh,new Map),He(this,$l,0)}mount(){Av(this,$l)._++,ue(this,$l)===1&&(He(this,$h,AF.subscribe(async e=>{e&&(await this.resumePausedMutations(),ue(this,an).onFocus())})),He(this,Fh,F0.subscribe(async e=>{e&&(await this.resumePausedMutations(),ue(this,an).onOnline())})))}unmount(){var e,t;Av(this,$l)._--,ue(this,$l)===0&&((e=ue(this,$h))==null||e.call(this),He(this,$h,void 0),(t=ue(this,Fh))==null||t.call(this),He(this,Fh,void 0))}isFetching(e){return ue(this,an).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return ue(this,Bl).findAll({...e,status:"pending"}).length}getQueryData(e){var a;const t=this.defaultQueryOptions({queryKey:e});return(a=ue(this,an).get(t.queryHash))==null?void 0:a.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),a=ue(this,an).build(this,t),i=a.state.data;return i===void 0?this.fetchQuery(e):(e.revalidateIfStale&&a.isStaleByTime(x4(t.staleTime,a))&&this.prefetchQuery(t),Promise.resolve(i))}getQueriesData(e){return ue(this,an).findAll(e).map(({queryKey:t,state:a})=>{const i=a.data;return[t,i]})}setQueryData(e,t,a){const i=this.defaultQueryOptions({queryKey:e}),r=ue(this,an).get(i.queryHash),o=r==null?void 0:r.state.data,l=xre(t,o);if(l!==void 0)return ue(this,an).build(this,i).setData(l,{...a,manual:!0})}
485setQueriesData(e,t,a){return pa.batch(()=>ue(this,an).findAll(e).map(({queryKey:i})=>[i,this.setQueryData(i,t,a)]))}getQueryState(e){var a;const t=this.defaultQueryOptions({queryKey:e});return(a=ue(this,an).get(t.queryHash))==null?void 0:a.state}removeQueries(e){const t=ue(this,an);pa.batch(()=>{t.findAll(e).forEach(a=>{t.remove(a)})})}resetQueries(e,t){const a=ue(this,an);return pa.batch(()=>(a.findAll(e).forEach(i=>{i.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const a={revert:!0,...t},i=pa.batch(()=>ue(this,an).findAll(e).map(r=>r.cancel(a)));return Promise.all(i).then(gr).catch(gr)}invalidateQueries(e,t={}){return pa.batch(()=>(ue(this,an).findAll(e).forEach(a=>{a.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const a={...t,cancelRefetch:t.cancelRefetch??!0},i=pa.batch(()=>ue(this,an).findAll(e).filter(r=>!r.isDisabled()&&!r.isStatic()).map(r=>{let o=r.fetch(void 0,a);return a.throwOnError||(o=o.catch(gr)),r.state.fetchStatus==="paused"?Promise.resolve():o}));return Promise.all(i).then(gr)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const a=ue(this,an).build(this,t);return a.isStaleByTime(x4(t.staleTime,a))?a.fetch(t):Promise.resolve(a.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(gr).catch(gr)}fetchInfiniteQuery(e){return e._type="infinite",this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(gr).catch(gr)}ensureInfiniteQueryData(e){return e._type="infinite",this.ensureQueryData(e)}resumePausedMutations(){return F0.isOnline()?ue(this,Bl).resumePausedMutations():Promise.resolve()}getQueryCache(){return ue(this,an)}getMutationCache(){return ue(this,Bl)}getDefaultOptions(){return ue(this,ql)}setDefaultOptions(e){He(this,ql,e)}setQueryDefaults(e,t){ue(this,Bh).set(gg(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...ue(this,Bh).values()],a={};return t.forEach(i=>{yg(e,i.queryKey)&&Object.assign(a,i.defaultOptions)}),a}setMutationDefaults(e,t){ue(this,qh).set(gg(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...ue(this,qh).values()],a={};return t.forEach(i=>{yg(e,i.mutationKey)&&Object.assign(a,i.defaultOptions)}),a}defaultQueryOptions(e){if(e._defaulted)return e;const t={...ue(this,ql).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=yM(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===bM&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...ue(this,ql).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){ue(this,an).clear(),ue(this,Bl).clear()}},an=new WeakMap,Bl=new WeakMap,ql=new WeakMap,Bh=new WeakMap,qh=new WeakMap,$l=new WeakMap,$h=new WeakMap,Fh=new WeakMap,Fq),Fre=M.createContext(void 0),Gre=({client:e,children:t})=>(M.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),n.jsx(Fre.Provider,{value:e,children:t}));/**
486 * react-router v8.3.0
487 *
488 * Copyright (c) Remix Software Inc.
489 *
490 * This source code is licensed under the MIT license found in the
491 * LICENSE.md file in the root directory of this source tree.
492 *
493 * @license MIT
494 */const vM=/^(?:[a-z][a-z0-9+.-]*:|[\\/]{2})/i,PF=/^[\\/]{2}/;function Hre(e,t){return t+e.replace(/\\/g,"/")}/**
495 * react-router v8.3.0
496 *
497 * Copyright (c) Remix Software Inc.
498 *
499 * This source code is licensed under the MIT license found in the
500 * LICENSE.md file in the root directory of this source tree.
501 *
502 * @license MIT
503 */const LO="popstate";function UO(e){return typeof e=="object"&&e!=null&&"pathname"in e&&"search"in e&&"hash"in e&&"state"in e&&"key"in e}function Yre(e={}){function t(i,r){var h;let o=(h=r.state)==null?void 0:h.masked,{pathname:l,search:d,hash:u}=o||i.location;return j4("",{pathname:l,search:d,hash:u},r.state&&r.state.usr||null,r.state&&r.state.key||"default",o?{pathname:i.location.pathname,search:i.location.search,hash:i.location.hash}:void 0)}function a(i,r){return typeof r=="string"?r:bg(r)}return Kre(t,a,null,e)}function Xt(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}function Do(e,t){if(!e){typeof console<"u"&&console.warn(t);try{throw new Error(t)}catch{}}}function Vre(){return Math.random().toString(36).substring(2,10)}function BO(e,t){return{usr:e.state,key:e.key,idx:t,masked:e.mask?{pathname:e.pathname,search:e.search,hash:e.hash}:void 0}}function j4(e,t,a=null,i,r){return{pathname:typeof e=="string"?e:e.pathname,search:"",hash:"",...typeof t=="string"?Vp(t):t,state:a,key:t&&t.key||i||Vre(),mask:r}}function bg({pathname:e="/",search:t="",hash:a=""}){return t&&t!=="?"&&(e+=t.charAt(0)==="?"?t:"?"+t),a&&a!=="#"&&(e+=a.charAt(0)==="#"?a:"#"+a),e}function Vp(e){let t={};if(e){let a=e.indexOf("#");a>=0&&(t.hash=e.substring(a),e=e.substring(0,a));let i=e.indexOf("?");i>=0&&(t.search=e.substring(i),e=e.substring(0,i)),e&&(t.pathname=e)}return t}function Kre(e,t,a,i={}){let{window:r=document.defaultView,v5Compat:o=!1}=i,l=r.history,d="POP",u=null,h=m();h==null&&(h=0,l.replaceState({...l.state,idx:h},""));function m(){return(l.state||{idx:null}).idx}function f(){d="POP";let v=m(),j=v==null?null:v-h;h=v,u&&u({action:d,location:k.location,delta:j})}function y(v,j){d="PUSH";
503let T=UO(v)?v:j4(k.location,v,j);h=m()+1;let A=BO(T,h),C=k.createHref(T.mask||T);try{l.pushState(A,"",C)}catch(_){if(_ instanceof DOMException&&_.name==="DataCloneError")throw _;r.location.assign(C)}o&&u&&u({action:d,location:k.location,delta:1})}function b(v,j){d="REPLACE";let T=UO(v)?v:j4(k.location,v,j);h=m();let A=BO(T,h),C=k.createHref(T.mask||T);l.replaceState(A,"",C),o&&u&&u({action:d,location:k.location,delta:0})}function x(v){return Xre(r,v)}let k={get action(){return d},get location(){return e(r,l)},listen(v){if(u)throw new Error("A history only accepts one active listener");return r.addEventListener(LO,f),u=v,()=>{r.removeEventListener(LO,f),u=null}},createHref(v){return t(r,v)},createURL:x,encodeLocation(v){let j=x(v);return{pathname:j.pathname,search:j.search,hash:j.hash}},push:y,replace:b,go(v){return l.go(v)}};return k}function Xre(e,t,a=!1){let i="http://localhost";e&&(i=e.location.origin!=="null"?e.location.origin:e.location.href),Xt(i,"No window.location.(origin|href) available to create URL");let r=typeof t=="string"?t:bg(t);return r=r.replace(/ $/,"%20"),!a&&PF.test(r)&&(r=i+r),new URL(r,i)}/**
504 * react-router v8.3.0
505 *
506 * Copyright (c) Remix Software Inc.
507 *
508 * This source code is licensed under the MIT license found in the
509 * LICENSE.md file in the root directory of this source tree.
510 *
511 * @license MIT
512 */function IF(e,t,a="/"){return Qre(e,t,a,!1)}function Qre(e,t,a,i,r){let o=lc((typeof t=="string"?Vp(t):t).pathname||"/",a);if(o==null)return null;let l=Zre(e),d=null,u=uoe(o);for(let h=0;d==null&&h<l.length;++h)d=doe(l[h],u,i);return d}function Zre(e){let t=DF(e);return Jre(t),t}function DF(e,t=[],a=[],i="",r=!1){let o=(l,d,u=r,h)=>{let m={relativePath:h===void 0?l.path||"":h,caseSensitive:l.caseSensitive===!0,childrenIndex:d,route:l};if(m.relativePath.startsWith("/")){if(!m.relativePath.startsWith(i)&&u)return;Xt(m.relativePath.startsWith(i),`Absolute route path "${m.relativePath}" nested under path "${i}" is not valid. An absolute child route path must start with the combined path of all its parent routes.`),m.relativePath=m.relativePath.slice(i.length)}let f=Rr([i,m.relativePath]),y=a.concat(m);l.children&&l.children.length>0&&(Xt(l.index!==!0,`Index routes must not have child routes. Please remove all child routes from route path "${f}".`),DF(l.children,t,y,f,u)),!(l.path==null&&!l.index)&&t.push({path:f,score:loe(f,l.index),routesMeta:y.map((b,x)=>{let[k,v]=LF(b.relativePath,b.caseSensitive,x===y.length-1);return{...b,matcher:k,compiledParams:v}})})};return e.forEach((l,d)=>{var u;if(l.path===""||!((u=l.path)!=null&&u.includes("?")))o(l,d);else for(let h of WF(l.path))o(l,d,!0,h)}),t}function WF(e){let t=e.split("/");if(t.length===0)return[];let[a,...i]=t,r=a.endsWith("?"),o=a.replace(/\?$/,"");if(i.length===0)return r?[o,""]:[o];let l=WF(i.join("/")),d=[];return d.push(...l.map(u=>u===""?o:[o,u].join("/"))),r&&d.push(...l),d.map(u=>e.startsWith("/")&&u===""?"/":u)}function Jre(e){e.sort((t,a)=>t.score!==a.score?a.score-t.score:coe(t.routesMeta.map(i=>i.childrenIndex),a.routesMeta.map(i=>i.childrenIndex)))}const eoe=/^:[\w-]+$/,toe=/^:[\w-]+/,noe=3.5,aoe=3,ioe=2,roe=1,ooe=10,soe=-2,qO=e=>e==="*";function loe(e,t){let a=e.split("/"),i=a.length;return a.some(qO)&&(i+=soe),t&&(i+=ioe),a.filter(r=>!qO(r)).reduce((r,o)=>r+(eoe.test(o)?aoe:toe.test(o)?noe:o===""?roe:ooe),i)}function coe(e,t){return e.length===t.length&&e.slice(0,-1).every((a,i)=>a===t[i])?e[e.length-1]-t[t.length-1]:0}function doe(e,t,a=!1){let{routesMeta:i}=e,r={},o="/",l=[];for(let d=0;d<i.length;++d){let u=i[d],h=d===i.length-1,m=o==="/"?t:t.slice(o.length)||"/",f={path:u.relativePath,caseSensitive:u.caseSensitive,end:h},y=u.matcher&&u.compiledParams?zF(f,m,u.matcher,u.compiledParams):G0(f,m),b=u.route;if(!y&&h&&a&&!i[i.length-1].route.index&&(y=G0({path:u.relativePath,caseSensitive:u.caseSensitive,end:!1},m)),!y)return null;
512Object.assign(r,y.params),l.push({params:r,pathname:Rr([o,y.pathname]),pathnameBase:moe(Rr([o,y.pathnameBase])),route:b}),y.pathnameBase!=="/"&&(o=Rr([o,y.pathnameBase]))}return l}function G0(e,t){typeof e=="string"&&(e={path:e,caseSensitive:!1,end:!0});let[a,i]=LF(e.path,e.caseSensitive,e.end);return zF(e,t,a,i)}function zF(e,t,a,i){let r=t.match(a);if(!r)return null;let o=r[0],l=o.replace(/(.)\/+$/,"$1"),d=r.slice(1);return{params:i.reduce((u,{paramName:h,isOptional:m},f)=>{if(h==="*"){let b=d[f]||"";l=o.slice(0,o.length-b.length).replace(/(.)\/+$/,"$1")}const y=d[f];return m&&!y?u[h]=void 0:u[h]=(y||"").replace(/%2F/g,"/"),u},{}),pathname:o,pathnameBase:l,pattern:e}}function LF(e,t=!1,a=!0){Do(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 i=[],r="^"+e.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(o,l,d,u,h)=>{if(i.push({paramName:l,isOptional:d!=null}),d){let m=h.charAt(u+o.length);return m&&m!=="/"?"/([^\\/]*)":"(?:/([^\\/]*))?"}return"/([^\\/]+)"}).replace(/\/([\w-]+)\?(?=\/|$|\()/g,"(?:/$1)?");return e.endsWith("*")?(i.push({paramName:"*"}),r+=e==="*"||e==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):a?r+="\\/*$":e!==""&&e!=="/"&&(r+="(?:(?=\\/|$))"),[new RegExp(r,t?void 0:"i"),i]}function uoe(e){try{return e.split("/").map(t=>decodeURIComponent(t).replace(/\//g,"%2F")).join("/")}catch(t){return Do(!1,`The URL path "${e}" could not be decoded because it is a malformed URL segment. This is probably due to a bad percent encoding (${t}).`),e}}function lc(e,t){if(t==="/")return e;if(!e.toLowerCase().startsWith(t.toLowerCase()))return null;let a=t.endsWith("/")?t.length-1:t.length,i=e.charAt(a);return i&&i!=="/"?null:e.slice(a)||"/"}function hoe(e,t="/"){let{pathname:a,search:i="",hash:r=""}=typeof e=="string"?Vp(e):e,o;return a?(a=UF(a),a.startsWith("/")?o=$O(a.substring(1),"/"):o=$O(a,t)):o=t,{pathname:o,search:foe(i),hash:goe(r)}}function $O(e,t){let a=BF(t).split("/");return e.split("/").forEach(i=>{i===".."?a.length>1&&a.pop():i!=="."&&a.push(i)}),a.length>1?a.join("/"):"/"}function Ej(e,t,a,i){return`Cannot include a '${e}' character in a manually specified \`to.${t}\` field [${JSON.stringify(i)}].  Please separate it out to the \`to.${a}\` field. Alternatively you may provide the full path as a string in <Link to="..."> and the router will parse it for you.`}function poe(e){return e.filter((t,a)=>a===0||t.route.path&&t.route.path.length>0)}function xM(e){let t=poe(e);return t.map((a,i)=>i===t.length-1?a.pathname:a.pathnameBase)}function Kw(e,t,a,i=!1){let r;typeof e=="string"?r=Vp(e):(r={...e},Xt(!r.pathname||!r.pathname.includes("?"),Ej("?","pathname","search",r)),Xt(!r.pathname||!r.pathname.includes("#"),Ej("#","pathname","hash",r)),Xt(!r.search||!r.search.includes("#"),Ej("#","search","hash",r)));let o=e===""||r.pathname==="",l=o?"/":r.pathname,d;if(l==null)d=a;else{let f=t.length-1;if(!i&&l.startsWith("..")){let y=l.split("/");for(;y[0]==="..";)y.shift(),f-=1;r.pathname=y.join("/")}d=f>=0?t[f]:"/"}let u=hoe(r,d),h=l&&l!=="/"&&l.endsWith("/"),m=(o||l===".")&&a.endsWith("/");return!u.pathname.endsWith("/")&&(h||m)&&(u.pathname+="/"),u}const UF=e=>e.replace(/[\\/]{2,}/g,"/"),Rr=e=>
512UF(e.join("/")),BF=e=>e.replace(/\/+$/,""),moe=e=>BF(e).replace(/^\/*/,"/"),foe=e=>!e||e==="?"?"":e.startsWith("?")?e:"?"+e,goe=e=>!e||e==="#"?"":e.startsWith("#")?e:"#"+e;var yoe=class{constructor(e,t,a,i=!1){ha(this,"status");ha(this,"statusText");ha(this,"data");ha(this,"error");ha(this,"internal");this.status=e,this.statusText=t||"",this.internal=i,a instanceof Error?(this.data=a.toString(),this.error=a):this.data=a}};function boe(e){return e!=null&&typeof e.status=="number"&&typeof e.statusText=="string"&&typeof e.internal=="boolean"&&"data"in e}function voe(e){return Rr(e.map(t=>t.route.path).filter(Boolean))||"/"}const qF=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";function $F(e,t){let a=e;if(typeof a!="string"||!vM.test(a))return{absoluteURL:void 0,isExternal:!1,to:a};let i=a,r=!1;if(qF)try{let o=new URL(window.location.href),l=PF.test(a)?new URL(Hre(a,o.protocol)):new URL(a),d=lc(l.pathname,t);l.origin===o.origin&&d!=null?a=d+l.search+l.hash:r=!0}catch{Do(!1,`<Link to="${a}"> contains an invalid URL which will probably break when clicked - please update to a valid URL path.`)}return{absoluteURL:i,isExternal:r,to:a}}/**
513 * react-router v8.3.0
514 *
515 * Copyright (c) Remix Software Inc.
516 *
517 * This source code is licensed under the MIT license found in the
518 * LICENSE.md file in the root directory of this source tree.
519 *
520 * @license MIT
521 */const FF=["POST","PUT","PATCH","DELETE"];new Set(FF);const xoe=["GET",...FF];new Set(xoe);const woe=["about:","blob:","chrome:","chrome-untrusted:","content:","data:","devtools:","file:","filesystem:","javascript:"];function koe(e){try{return woe.includes(new URL(e).protocol)}catch{return!1}}/**
522 * react-router v8.3.0
523 *
524 * Copyright (c) Remix Software Inc.
525 *
526 * This source code is licensed under the MIT license found in the
527 * LICENSE.md file in the root directory of this source tree.
528 *
529 * @license MIT
530 */const Kp=M.createContext(null);Kp.displayName="DataRouter";const Xw=M.createContext(null);Xw.displayName="DataRouterState";const GF=M.createContext(!1);function joe(){return M.useContext(GF)}const HF=M.createContext({isTransitioning:!1});HF.displayName="ViewTransition";const Soe=M.createContext(new Map);Soe.displayName="Fetchers";const Coe=M.createContext(null);Coe.displayName="Await";const rr=M.createContext(null);rr.displayName="Navigation";const ky=M.createContext(null);ky.displayName="Location";const Gr=M.createContext({outlet:null,matches:[],isDataRoute:!1});Gr.displayName="Route";const wM=M.createContext(null);wM.displayName="RouteError";/**
531 * react-router v8.3.0
532 *
533 * Copyright (c) Remix Software Inc.
534 *
535 * This source code is licensed under the MIT license found in the
536 * LICENSE.md file in the root directory of this source tree.
537 *
538 * @license MIT
539 */const YF="REACT_ROUTER_ERROR",Aoe="REDIRECT",Toe="ROUTE_ERROR_RESPONSE";function _oe(e){if(e.startsWith(`${YF}:${Aoe}:{`))try{let t=JSON.parse(e.slice(28));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.location=="string"&&typeof t.reloadDocument=="boolean"&&typeof t.replace=="boolean")return t}catch{}}function Moe(e){if(e.startsWith(`${YF}:${Toe}:{`))try{let t=JSON.parse(e.slice(40));if(typeof t=="object"&&t&&typeof t.status=="number"&&typeof t.statusText=="string")return new yoe(t.status,t.statusText,t.data)}catch{}}/**
540 * react-router v8.3.0
541 *
542 * Copyright (c) Remix Software Inc.
543 *
544 * This source code is licensed under the MIT license found in the
545 * LICENSE.md file in the root directory of this source tree.
546 *
547 * @license MIT
548 */function Eoe(e,{relative:t}={}){Xt(Xp(),"useHref() may be used only in the context of a <Router> component.");let{basename:a,navigator:i}=M.useContext(rr),{hash:r,pathname:o,search:l}=jy(e,{relative:t}),d=o;return a!=="/"&&(d=o==="/"?a:Rr([a,o])),i.createHref({pathname:d,search:l,hash:r})}function Xp(){return M.useContext(ky)!=null}function Kn(){return Xt(Xp(),"useLocation() may be used only in the context of a <Router> component."),M.useContext(ky).location}const VF="You should call navigate() in a React.useEffect(), not when your component is first rendered.";function gc(){let{isDataRoute:e}=M.useContext(Gr);return e?Foe():Roe()}function Roe(){Xt(Xp(),"useNavigate() may be used only in the context of a <Router> component.");let e=M.useContext(Kp),{basename:t,navigator:a}=M.useContext(rr),{matches:i}=M.useContext(Gr),{pathname:r}=Kn(),o=JSON.stringify(xM(i)),l=M.useRef(!1);return M.useLayoutEffect(()=>{l.current=!0}),M.useCallback((d,u={})=>
548{if(Do(l.current,VF),!l.current)return;if(typeof d=="number"){a.go(d);return}let h=Kw(d,JSON.parse(o),r,u.relative==="path");e==null&&t!=="/"&&(h.pathname=h.pathname==="/"?t:Rr([t,h.pathname])),(u.replace?a.replace:a.push)(h,u.state,u)},[t,a,o,r,e])}M.createContext(null);function Ta(){var t;let{matches:e}=M.useContext(Gr);return((t=e[e.length-1])==null?void 0:t.params)??{}}function jy(e,{relative:t}={}){let{matches:a}=M.useContext(Gr),{pathname:i}=Kn(),r=JSON.stringify(xM(a));return M.useMemo(()=>Kw(e,JSON.parse(r),i,t==="path"),[e,r,i,t])}function Noe(e,t){return KF(e,t)}function KF(e,t,a){var x;Xt(Xp(),"useRoutes() may be used only in the context of a <Router> component.");let{navigator:i}=M.useContext(rr),{matches:r}=M.useContext(Gr),o=r[r.length-1],l=o?o.params:{};o&&o.pathname;let d=o?o.pathnameBase:"/";o&&o.route;let u=Kn(),h;if(t){let k=typeof t=="string"?Vp(t):t;Xt(d==="/"||((x=k.pathname)==null?void 0:x.startsWith(d)),`When overriding the location using \`<Routes location>\` or \`useRoutes(routes, location)\`, the location pathname must begin with the portion of the URL pathname that was matched by all parent routes. The current pathname base is "${d}" but pathname "${k.pathname}" was given in the \`location\` prop.`),h=k}else h=u;let m=h.pathname||"/",f=m;if(d!=="/"){let k=d.replace(/^\//,"").split("/");f="/"+m.replace(/^\//,"").split("/").slice(k.length).join("/")}let y=a&&a.state.matches.length?a.state.matches.map(k=>Object.assign(k,{route:a.manifest[k.route.id]||k.route})):IF(e,{pathname:f}),b=zoe(y&&y.map(k=>Object.assign({},k,{params:Object.assign({},l,k.params),pathname:Rr([d,i.encodeLocation?i.encodeLocation(k.pathname.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:k.pathname]),pathnameBase:k.pathnameBase==="/"?d:Rr([d,i.encodeLocation?i.encodeLocation(k.pathnameBase.replace(/%/g,"%25").replace(/\?/g,"%3F").replace(/#/g,"%23")).pathname:k.pathnameBase])})),r,a);return t&&b?M.createElement(ky.Provider,{value:{location:{pathname:"/",search:"",hash:"",state:null,key:"default",mask:void 0,...h},navigationType:"POP"}},b):b}function Ooe(){let e=$oe(),t=boe(e)?`${e.status} ${e.statusText}`:e instanceof Error?e.message:JSON.stringify(e),a=e instanceof Error?e.stack:null;return M.createElement(M.Fragment,null,M.createElement("h2",null,"Unexpected Application Error!"),M.createElement("h3",{style:{fontStyle:"italic"}},t),a?M.createElement("pre",{style:{padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"}},a):null,null)}const Poe=M.createElement(Ooe,null);var o4,Ioe=(o4=class extends M.Component{constructor(e){super(e),this.state={location:e.location,revalidation:e.revalidation,error:e.error}}static getDerivedStateFromError(e){return{error:e}}static getDerivedStateFromProps(e,t){return t.location!==e.location||t.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:t.error,location:t.location,revalidation:e.revalidation||t.revalidation}}componentDidCatch(e,t){this.props.onError?this.props.onError(e,t):console.error("React Router caught the following error during render",e)}render(){let e=this.state.error;if(this.context&&typeof e=="object"&&e&&"digest"in e&&typeof e.digest=="string"){const a=Moe(e.digest);a&&(e=a)}let t=e!==void 0?M.createElement(Gr.Provider,{value:this.props.routeContext},M.createElement(wM.Provider,{value:e,children:this.props.component})):this.props.children;return this.context?M.createElement(Doe,{error:e},t):t}},ha(o4,"contextType",GF),o4);const Rj=new WeakMap;function Doe({children:e,error:t}){let{basename:a}=M.useContext(rr);if(typeof t=="object"&&t&&"digest"in t&&typeof t.digest=="string"){let i=_oe(t.digest);if(i){let r=Rj.get(t);if(r)throw r;let o=$F(i.location,a),l=o.absoluteURL||o.to;if(koe(l))throw new Error("Invalid redirect location");if(qF&&!Rj.get(t))if(o.isExternal||i.reloadDocument)window.location.href=l;else{const d=Promise.resolve().then(()=>window.__reactRouterDataRouter.navigate(o.to,{replace:i.replace}));throw Rj.set(t,d),d}return M.createElement("meta",{httpEquiv:"refresh",content:`0;url=${l}`})}}return e}function Woe({routeContext:e,match:t,children:a}){let i=M.useContext(Kp);return i&&i.static&&i.staticContext&&(t.route.errorElement||t.route.ErrorBoundary)&&(i.staticContext._deepestRenderedBoundaryId=t.route.id),M.createElement(Gr.Provider,{value:e},a)}function zoe(e,t=[],a){let i=a==null?void 0:a.state;if(e==null){if(!i)return null;if(i.errors)e=i.matches;else if(t.length===0&&!i.initialized&&i.matches.length>0)e=i.matches;else return null}let r=e,o=i==null?void 0:i.errors;if(o!=null){let m=r.findIndex(f=>f.route.id&&(o==null?void 0:o[f.route.id])!==void 0);Xt(m>=0,`Could not find a matching route for errors on route IDs: ${Object.keys(o).join(",")}`),r=r.slice(0,Math.min(r.length,m+1))}let l=!1,d=-1;if(a&&i){l=i.renderFallback;for(let m=0;m<r.length;m++){let f=r[m];if((f.route.HydrateFallback||f.route.hydrateFallbackElement)&&(d=m),f.route.id){let{loaderData:y,errors:b}
548=i,x=f.route.loader&&!y.hasOwnProperty(f.route.id)&&(!b||b[f.route.id]===void 0);if(f.route.lazy||x){a.isStatic&&(l=!0),d>=0?r=r.slice(0,d+1):r=[r[0]];break}}}}let u=a==null?void 0:a.onError,h=i&&u?(m,f)=>{var y,b;u(m,{location:i.location,params:((b=(y=i.matches)==null?void 0:y[0])==null?void 0:b.params)??{},pattern:voe(i.matches),errorInfo:f})}:void 0;return r.reduceRight((m,f,y)=>{let b,x=!1,k=null,v=null;i&&(b=o&&f.route.id?o[f.route.id]:void 0,k=f.route.errorElement||Poe,l&&(d<0&&y===0?(Goe("route-fallback",!1,"No `HydrateFallback` element provided to render during initial hydration"),x=!0,v=null):d===y&&(x=!0,v=f.route.hydrateFallbackElement||null)));let j=t.concat(r.slice(0,y+1)),T=()=>{let A;return b?A=k:x?A=v:f.route.Component?A=M.createElement(f.route.Component,null):f.route.element?A=f.route.element:A=m,M.createElement(Woe,{match:f,routeContext:{outlet:m,matches:j,isDataRoute:i!=null},children:A})};return i&&(f.route.ErrorBoundary||f.route.errorElement||y===0)?M.createElement(Ioe,{location:i.location,revalidation:i.revalidation,component:k,error:b,children:T(),routeContext:{outlet:null,matches:j,isDataRoute:!0},onError:h}):T()},null)}function kM(e){return`${e} must be used within a data router.  See https://reactrouter.com/en/main/routers/picking-a-router.`}function Loe(e){let t=M.useContext(Kp);return Xt(t,kM(e)),t}function Uoe(e){let t=M.useContext(Xw);return Xt(t,kM(e)),t}function Boe(e){let t=M.useContext(Gr);return Xt(t,kM(e)),t}function jM(e){let t=Boe(e),a=t.matches[t.matches.length-1];return Xt(a.route.id,`${e} can only be used on routes that contain a unique "id"`),a.route.id}function qoe(){return jM("useRouteId")}function $oe(){var i;let e=M.useContext(wM),t=Uoe("useRouteError"),a=jM("useRouteError");return e!==void 0?e:(i=t.errors)==null?void 0:i[a]}function Foe(){let{router:e}=Loe("useNavigate"),t=jM("useNavigate"),a=M.useRef(!1);return M.useLayoutEffect(()=>{a.current=!0}),M.useCallback(async(i,r={})=>{Do(a.current,VF),a.current&&(typeof i=="number"?await e.navigate(i):await e.navigate(i,{fromRouteId:t,...r}))},[e,t])}const FO={};function Goe(e,t,a){FO[e]||(FO[e]=!0,Do(!1,a))}/**
549 * react-router v8.3.0
550 *
551 * Copyright (c) Remix Software Inc.
552 *
553 * This source code is licensed under the MIT license found in the
554 * LICENSE.md file in the root directory of this source tree.
555 *
556 * @license MIT
557 */M.memo(Hoe);function Hoe({routes:e,manifest:t,future:a,state:i,isStatic:r,onError:o}){return KF(e,void 0,{manifest:t,state:i,isStatic:r,onError:o})}function yt({to:e,replace:t,state:a,relative:i}){Xt(Xp(),"<Navigate> may be used only in the context of a <Router> component.");let{static:r}=M.useContext(rr);Do(!r,"<Navigate> must not be used on the initial render in a <StaticRouter>. This is a no-op, but you should modify your code so the <Navigate> is only ever rendered in response to some user interaction or state change.");let{matches:o}=M.useContext(Gr),{pathname:l}=Kn(),d=gc(),u=Kw(e,xM(o),l,i==="path"),h=JSON.stringify(u);return M.useEffect(()=>{d(JSON.parse(h),{replace:t,state:a,relative:i})},[d,h,i,t,a]),null}function we(e){Xt(!1,"A <Route> is only ever to be used as the child of <Routes> element, never rendered directly. Please wrap your <Route> in a <Routes>.")}function Yoe({basename:e="/",children:t=null,location:a,navigationType:i="POP",navigator:r,static:o=!1,useTransitions:l}){Xt(!Xp(),"You cannot render a <Router> inside another <Router>. You should never have more than one in your app.");let d=e.replace(/^\/*/,"/"),u=M.useMemo(()=>({basename:d,navigator:r,static:o,useTransitions:l,future:{}}),[d,r,o,l]);typeof a=="string"&&(a=Vp(a));let{pathname:h="/",search:m="",hash:f="",state:y=null,key:b="default",mask:x}=a,k=M.useMemo(()=>{let v=lc(h,d);return v==null?null:{location:{pathname:v,search:m,hash:f,state:y,key:b,mask:x},navigationType:i}},[d,h,m,f,y,b,i,x]);return Do(k!=null,`<Router basename="${d}"> is not able to match the URL "${h}${m}${f}" because it does not start with the basename, so the <Router> won't render anything.`),k==null?null:M.createElement(rr.Provider,{value:u},M.createElement(ky.Provider,{children:t,value:k}))}function Voe({children:e,location:t}){return Noe(S4(e),t)}function S4(e,t=[]){let a=[];
557return M.Children.forEach(e,(i,r)=>{if(!M.isValidElement(i))return;let o=[...t,r];if(i.type===M.Fragment){a.push.apply(a,S4(i.props.children,o));return}Xt(i.type===we,`[${typeof i.type=="string"?i.type:i.type.name}] is not a <Route> component. All component children of <Routes> must be a <Route> or <React.Fragment>`);let l=i.props;Xt(!l.index||!l.children,"An index route cannot have child routes.");let d={id:l.id||o.join("-"),caseSensitive:l.caseSensitive,element:l.element,Component:l.Component,index:l.index,path:l.path,middleware:l.middleware,loader:l.loader,action:l.action,hydrateFallbackElement:l.hydrateFallbackElement,HydrateFallback:l.HydrateFallback,errorElement:l.errorElement,ErrorBoundary:l.ErrorBoundary,shouldRevalidate:l.shouldRevalidate,handle:l.handle,lazy:l.lazy};l.children&&(d.children=S4(l.children,o)),a.push(d)}),a}/**
558 * react-router v8.3.0
559 *
560 * Copyright (c) Remix Software Inc.
561 *
562 * This source code is licensed under the MIT license found in the
563 * LICENSE.md file in the root directory of this source tree.
564 *
565 * @license MIT
566 */const w0="application/x-www-form-urlencoded";function Qw(e){return typeof HTMLElement<"u"&&e instanceof HTMLElement}function Koe(e){return Qw(e)&&e.tagName.toLowerCase()==="button"}function Xoe(e){return Qw(e)&&e.tagName.toLowerCase()==="form"}function Qoe(e){return Qw(e)&&e.tagName.toLowerCase()==="input"}function Zoe(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}function Joe(e,t){return e.button===0&&(!t||t==="_self")&&!Zoe(e)}function C4(e=""){return new URLSearchParams(typeof e=="string"||Array.isArray(e)||e instanceof URLSearchParams?e:Object.keys(e).reduce((t,a)=>{let i=e[a];return t.concat(Array.isArray(i)?i.map(r=>[a,r]):[[a,i]])},[]))}function ese(e,t){let a=C4(e);return t&&t.forEach((i,r)=>{a.has(r)||t.getAll(r).forEach(o=>{a.append(r,o)})}),a}let Ov=null;function tse(){if(Ov===null)try{new FormData(document.createElement("form"),0),Ov=!1}catch{Ov=!0}return Ov}const nse=new Set(["application/x-www-form-urlencoded","multipart/form-data","text/plain"]);function Nj(e){return e!=null&&!nse.has(e)?(Do(!1,`"${e}" is not a valid \`encType\` for \`<Form>\`/\`<fetcher.Form>\` and will default to "${w0}"`),null):e}function ase(e,t){let a,i,r,o,l;if(Xoe(e)){let d=e.getAttribute("action");i=d?lc(d,t):null,a=e.getAttribute("method")||"get",r=Nj(e.getAttribute("enctype"))||w0,o=new FormData(e)}else if(Koe(e)||Qoe(e)&&(e.type==="submit"||e.type==="image")){let d=e.form;if(d==null)throw new Error('Cannot submit a <button> or <input type="submit"> without a <form>');let u=e.getAttribute("formaction")||d.getAttribute("action");if(i=u?lc(u,t):null,a=e.getAttribute("formmethod")||d.getAttribute("method")||"get",r=Nj(e.getAttribute("formenctype"))||Nj(d.getAttribute("enctype"))||w0,o=new FormData(d,e),!tse()){let{name:h,type:m,value:f}=e;if(m==="image"){let y=h?`${h}.`:"";o.append(`${y}x`,"0"),o.append(`${y}y`,"0")}else h&&o.append(h,f)}}else{if(Qw(e))throw new Error('Cannot submit element that is not <form>, <button>, or <input type="submit|image">');a="get",i=null,r=w0,l=e}return o&&r==="text/plain"&&(l=o,o=void 0),{action:i,method:a.toLowerCase(),encType:r,formData:o,body:l}}/**
567 * react-router v8.3.0
568 *
569 * Copyright (c) Remix Software Inc.
570 *
571 * This source code is licensed under the MIT license found in the
572 * LICENSE.md file in the root directory of this source tree.
573 *
574 * @license MIT
575 */function SM(e,t){if(e===!1||e===null||typeof e>"u")throw new Error(t)}/**
576 * react-router v8.3.0
577 *
578 * Copyright (c) Remix Software Inc.
579 *
580 * This source code is licensed under the MIT license found in the
581 * LICENSE.md file in the root directory of this source tree.
582 *
583 * @license MIT
584 */function XF(e,t){let a=typeof e=="string"?new URL(e,typeof window>"u"?"server://singlefetch/":window.location.origin):e;return a.pathname.endsWith("/")?a.pathname=`${a.pathname}_.${t}`:a.pathname=`${a.pathname}.${t}`,a}/**
585 * react-router v8.3.0
586 *
587 * Copyright (c) Remix Software Inc.
588 *
589 * This source code is licensed under the MIT license found in the
590 * LICENSE.md file in the root directory of this source tree.
591 *
592 * @license MIT
593 */async function ise(e,t){if(e.id in t)return t[e.id];try{let a=await import(e.module);return t[e.id]=a,a}catch(a){return console.error(`Error loading route module \`${e.module}\`, reloading page...`),console.error(a),window.__reactRouterContext&&window.__reactRouterContext.
593isSpaMode,window.location.reload(),new Promise(()=>{})}}/**
594 * react-router v8.3.0
595 *
596 * Copyright (c) Remix Software Inc.
597 *
598 * This source code is licensed under the MIT license found in the
599 * LICENSE.md file in the root directory of this source tree.
600 *
601 * @license MIT
602 */function rse(e){return e==null?!1:e.href==null?e.rel==="preload"&&typeof e.imageSrcSet=="string"&&typeof e.imageSizes=="string":typeof e.rel=="string"&&typeof e.href=="string"}async function ose(e,t,a){return dse((await Promise.all(e.map(async i=>{let r=t.routes[i.route.id];if(r){let o=await ise(r,a);return o.links?o.links():[]}return[]}))).flat(1).filter(rse).filter(i=>i.rel==="stylesheet"||i.rel==="preload").map(i=>i.rel==="stylesheet"?{...i,rel:"prefetch",as:"style"}:{...i,rel:"prefetch"}))}function GO(e,t,a,i,r,o){let l=(u,h)=>a[h]?u.route.id!==a[h].route.id:!0,d=(u,h)=>{var m;return a[h].pathname!==u.pathname||((m=a[h].route.path)==null?void 0:m.endsWith("*"))&&a[h].params["*"]!==u.params["*"]};return o==="assets"?t.filter((u,h)=>l(u,h)||d(u,h)):o==="data"?t.filter((u,h)=>{var f;let m=i.routes[u.route.id];if(!m||!m.hasLoader)return!1;if(l(u,h)||d(u,h))return!0;if(u.route.shouldRevalidate){let y=u.route.shouldRevalidate({currentUrl:new URL(r.pathname+r.search+r.hash,window.origin),currentParams:((f=a[0])==null?void 0:f.params)||{},nextUrl:new URL(e,window.origin),nextParams:u.params,defaultShouldRevalidate:!0});if(typeof y=="boolean")return y}return!0}):[]}function sse(e,t,{includeHydrateFallback:a}={}){return lse(e.map(i=>{let r=t.routes[i.route.id];if(!r)return[];let o=[r.module];return r.clientActionModule&&(o=o.concat(r.clientActionModule)),r.clientLoaderModule&&(o=o.concat(r.clientLoaderModule)),a&&r.hydrateFallbackModule&&(o=o.concat(r.hydrateFallbackModule)),r.imports&&(o=o.concat(r.imports)),o}).flat(1))}function lse(e){return[...new Set(e)]}function cse(e){let t={},a=Object.keys(e).sort();for(let i of a)t[i]=e[i];return t}function dse(e,t){let a=new Set;return new Set(t),e.reduce((i,r)=>{let o=JSON.stringify(cse(r));return a.has(o)||(a.add(o),i.push({key:o,link:r})),i},[])}/**
603 * react-router v8.3.0
604 *
605 * Copyright (c) Remix Software Inc.
606 *
607 * This source code is licensed under the MIT license found in the
608 * LICENSE.md file in the root directory of this source tree.
609 *
610 * @license MIT
611 */function use(){let e=M.useContext(Kp);return SM(e,"You must render this element inside a <DataRouterContext.Provider> element"),e}function hse(){let e=M.useContext(Xw);return SM(e,"You must render this element inside a <DataRouterStateContext.Provider> element"),e}const CM=M.createContext(void 0);CM.displayName="FrameworkContext";function AM(){let e=M.useContext(CM);return SM(e,"You must render this element inside a <HydratedRouter> element"),e}function pse(e,t){let a=M.useContext(CM),[i,r]=M.useState(!1),[o,l]=M.useState(!1),{onFocus:d,onBlur:u,onMouseEnter:h,onMouseLeave:m,onTouchStart:f}=t,y=M.useRef(null);M.useEffect(()=>{if(e==="render"&&l(!0),e==="viewport"){let k=j=>{j.forEach(T=>{l(T.isIntersecting)})},v=new IntersectionObserver(k,{threshold:.5});return y.current&&v.observe(y.current),()=>{v.disconnect()}}},[e]),M.useEffect(()=>{if(i){let k=setTimeout(()=>{l(!0)},100);return()=>{clearTimeout(k)}}},[i]);let b=()=>{r(!0)},x=()=>{r(!1),l(!1)};return a?e!=="intent"?[o,y,{}]:[o,y,{onFocus:sf(d,b),onBlur:sf(u,x),onMouseEnter:sf(h,b),onMouseLeave:sf(m,x),onTouchStart:sf(f,b)}]:[!1,y,{}]}function sf(e,t){return a=>{e&&e(a),a.defaultPrevented||t(a)}}function mse({page:e,...t}){let a=joe(),{nonce:i}=AM(),{router:r}=use(),o=M.useMemo(()=>IF(r.routes,e,r.basename),[r.routes,e,r.basename]);return o?(t.nonce==null&&i&&(t={...t,nonce:i}),a?M.createElement(gse,{page:e,matches:o,...t}):M.createElement(yse,{page:e,matches:o,...t})):null}function fse(e){let{manifest:t,routeModules:a}=AM(),[i,r]=M.useState([]);return M.useEffect(()=>{let o=!1;return ose(e,t,a).then(l=>{o||r(l)}),()=>{o=!0}},[e,t,a]),i}function gse({page:e,matches:t,...a}){let i=Kn(),r=M.useMemo(()=>{if(e===i.pathname+i.search+i.hash)return[];let o=XF(e,"rsc"),l=!1,d=[];for(let u of t)typeof u.route.shouldRevalidate=="function"?l=!0:d.push(u.route.id);return l&&d.length>0&&o.searchParams.set("_routes",d.join(",")),[o.pathname+o.search]},[e,i,t]);return M.createElement(M.Fragment,null,r.map(o=>M.createElement("link",{key:o,rel:"prefetch",as:"fetch",href:o,...a}
vendor: 4,286 bytes, lines 611-620
611)))}function yse({page:e,matches:t,...a}){let i=Kn(),{manifest:r,routeModules:o}=AM(),{loaderData:l,matches:d}=hse(),u=M.useMemo(()=>GO(e,t,d,r,i,"data"),[e,t,d,r,i]),h=M.useMemo(()=>GO(e,t,d,r,i,"assets"),[e,t,d,r,i]),m=M.useMemo(()=>{if(e===i.pathname+i.search+i.hash)return[];let b=new Set,x=!1;if(t.forEach(v=>{var T;let j=r.routes[v.route.id];!j||!j.hasLoader||(!u.some(A=>A.route.id===v.route.id)&&v.route.id in l&&((T=o[v.route.id])!=null&&T.shouldRevalidate)||j.hasClientLoader?x=!0:b.add(v.route.id))}),b.size===0)return[];let k=XF(e,"data");return x&&b.size>0&&k.searchParams.set("_routes",t.filter(v=>b.has(v.route.id)).map(v=>v.route.id).join(",")),[k.pathname+k.search]},[l,i,r,u,t,e,o]),f=M.useMemo(()=>sse(h,r),[h,r]),y=fse(h);return M.createElement(M.Fragment,null,m.map(b=>M.createElement("link",{key:b,rel:"prefetch",as:"fetch",href:b,...a})),f.map(b=>M.createElement("link",{key:b,rel:"modulepreload",href:b,...a})),y.map(({key:b,link:x})=>M.createElement("link",{key:b,nonce:a.nonce,...x,crossOrigin:x.crossOrigin??a.crossOrigin})))}function bse(...e){return t=>{e.forEach(a=>{typeof a=="function"?a(t):a!=null&&(a.current=t)})}}/**
612 * react-router v8.3.0
613 *
614 * Copyright (c) Remix Software Inc.
615 *
616 * This source code is licensed under the MIT license found in the
617 * LICENSE.md file in the root directory of this source tree.
618 *
619 * @license MIT
620 */const vse=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u";try{vse&&(window.__reactRouterVersion="8.3.0")}catch{}function xse({basename:e,children:t,useTransitions:a,window:i}){let r=M.useRef(null);r.current==null&&(r.current=Yre({window:i,v5Compat:!0}));let o=r.current,[l,d]=M.useState({action:o.action,location:o.location}),u=M.useCallback(h=>{a===!1?d(h):M.startTransition(()=>d(h))},[a]);return M.useLayoutEffect(()=>o.listen(u),[o,u]),M.createElement(Yoe,{basename:e,children:t,location:l.location,navigationType:l.action,navigator:o,useTransitions:a})}const J=M.forwardRef(function({onClick:t,discover:a="render",prefetch:i="none",relative:r,reloadDocument:o,replace:l,mask:d,state:u,target:h,to:m,preventScrollReset:f,viewTransition:y,defaultShouldRevalidate:b,...x},k){let{basename:v,navigator:j,useTransitions:T}=M.useContext(rr),A=typeof m=="string"&&vM.test(m),C=$F(m,v);m=C.to;let _=Eoe(m,{relative:r}),E=Kn(),R=null;if(d){let P=Kw(d,[],E.mask?E.mask.pathname:"/",!0);v!=="/"&&(P.pathname=P.pathname==="/"?v:Rr([v,P.pathname])),R=j.createHref(P)}let[W,z,H]=pse(i,x),$=jse(m,{replace:l,mask:d,state:u,target:h,preventScrollReset:f,relative:r,viewTransition:y,defaultShouldRevalidate:b,useTransitions:T});function U(P){t&&t(P),P.defaultPrevented||$(P)}let X=!(C.isExternal||o),D=M.createElement("a",{...x,...H,href:(X?R:void 0)||C.absoluteURL||_,onClick:X?U:t,ref:bse(k,z),target:h,"data-discover":!A&&a==="render"?"true":void 0});return W&&!A?M.createElement(M.Fragment,null,D,M.createElement(mse,{page:_})):D});J.displayName="Link";const QF=M.forwardRef(function({"aria-current":t="page",caseSensitive:a=!1,className:i="",end:r=!1,style:o,to:l,viewTransition:d,children:u,...h},m){let f=jy(l,{relative:h.relative}),y=Kn(),b=M.useContext(Xw),{navigator:x,basename:k}=M.useContext(rr),v=b!=null&&_se(f)&&d===!0,j=x.encodeLocation?x.encodeLocation(f).pathname:f.pathname,T=y.pathname,A=b&&b.navigation&&b.navigation.location?b.navigation.location.pathname:null;a||(T=T.toLowerCase(),A=A?A.toLowerCase():null,j=j.toLowerCase()),A&&k&&(A=lc(A,k)||A);const C=j!=="/"&&j.endsWith("/")?j.length-1:j.length;let _=T===j||!r&&T.startsWith(j)&&T.charAt(C)==="/",E=A!=null&&(A===j||!r&&A.startsWith(j)&&A.charAt(C)==="/"),R={isActive:_,isPending:E,isTransitioning:v},W=_?t:void 0,z;typeof i=="function"?z=i(R):z=[i,_?"active":null,E?"pending":null,v?"transitioning":null].filter(Boolean).join(" ");let H=typeof o=="function"?o(R):o;return M.createElement(J,{...h,"aria-current":W,className:z,ref:m,style:H,to:l,viewTransition:d},typeof u=="function"?u(R):u)});QF.displayName="NavLink";const wse=M.forwardRef(({discover:e="render",fetcherKey:t,navigate:a,reloadDocument:i,replace:r,state:o,method:l="get",action:d,onSubmit:u,relative:h,preventScrollReset:m,viewTransition:f,defaultShouldRevalidate:y,...b},x)=>{let{useTransitions:k}=M.useContext(rr),v=Ase(),j=Tse(d,{relative:h}
620),T=l.toLowerCase()==="get"?"get":"post",A=typeof d=="string"&&vM.test(d),C=_=>{if(u&&u(_),_.defaultPrevented)return;_.preventDefault();let E=_.nativeEvent.submitter,R=(E==null?void 0:E.getAttribute("formmethod"))||l,W=()=>v(E||_.currentTarget,{fetcherKey:t,method:R,navigate:a,replace:r,state:o,relative:h,preventScrollReset:m,viewTransition:f,defaultShouldRevalidate:y});k&&a!==!1?M.startTransition(()=>W()):W()};return M.createElement("form",{ref:x,method:T,action:j,onSubmit:i?u:C,...b,"data-discover":!A&&e==="render"?"true":void 0})});wse.displayName="Form";function kse(e){return`${e} must be used within a data router.  See https://reactrouter.com/en/main/routers/picking-a-router.`}function ZF(e){let t=M.useContext(Kp);return Xt(t,kse(e)),t}function jse(e,{target:t,replace:a,mask:i,state:r,preventScrollReset:o,relative:l,viewTransition:d,defaultShouldRevalidate:u,useTransitions:h}={}){let m=gc(),f=Kn(),y=jy(e,{relative:l});return M.useCallback(b=>{if(Joe(b,t)){b.preventDefault();let x=a!==void 0?a:bg(f)===bg(y),k=()=>m(e,{replace:x,mask:i,state:r,preventScrollReset:o,relative:l,viewTransition:d,defaultShouldRevalidate:u});h?M.startTransition(()=>k()):k()}},[f,m,y,a,i,r,t,e,o,l,d,u,h])}function JF(e){Do(typeof URLSearchParams<"u","You cannot use the `useSearchParams` hook in a browser that does not support the URLSearchParams API. If you need to support Internet Explorer 11, we recommend you load a polyfill such as https://github.com/ungap/url-search-params.");let t=M.useRef(C4(e)),a=M.useRef(!1),i=Kn(),r=M.useMemo(()=>ese(i.search,a.current?null:t.current),[i.search]),o=gc();return[r,M.useCallback((l,d)=>{const u=C4(typeof l=="function"?l(new URLSearchParams(r)):l);a.current=!0,o("?"+u,d)},[o,r])]}let Sse=0,Cse=()=>`__${String(++Sse)}__`;function Ase(){let{router:e}=ZF("useSubmit"),{basename:t}=M.useContext(rr),a=qoe(),i=e.fetch,r=e.navigate;return M.useCallback(async(o,l={})=>{let{action:d,method:u,encType:h,formData:m,body:f}=ase(o,t);l.navigate===!1?await i(l.fetcherKey||Cse(),a,l.action||d,{defaultShouldRevalidate:l.defaultShouldRevalidate,preventScrollReset:l.preventScrollReset,formData:m,body:f,formMethod:l.method||u,formEncType:l.encType||h,flushSync:l.flushSync}):await r(l.action||d,{defaultShouldRevalidate:l.defaultShouldRevalidate,preventScrollReset:l.preventScrollReset,formData:m,body:f,formMethod:l.method||u,formEncType:l.encType||h,replace:l.replace,state:l.state,fromRouteId:a,flushSync:l.flushSync,viewTransition:l.viewTransition})},[i,r,t,a])}function Tse(e,{relative:t}={}){let{basename:a}=M.useContext(rr),i=M.useContext(Gr);Xt(i,"useFormAction must be used inside a RouteContext");let[r]=i.matches.slice(-1),o={...jy(e||".",{relative:t})},l=Kn();if(e==null){o.search=l.search;let d=new URLSearchParams(o.search),u=d.getAll("index");if(u.some(h=>h==="")){d.delete("index"),u.filter(m=>m).forEach(m=>d.append("index",m));let h=d.toString();o.search=h?`?${h}`:""}}return(!e||e===".")&&r.route.index&&(o.search=o.search?o.search.replace(/^\?/,"?index&"):"?index"),a!=="/"&&(o.pathname=o.pathname==="/"?a:Rr([a,o.pathname])),bg(o)}function _se(e,{relative:t}={}){let a=M.useContext(HF);Xt(a!=null,"`useViewTransitionState` must be used within `react-router/dom`'s `RouterProvider`.  Did you accidentally import `RouterProvider` from `react-router`?");let{basename:i}=ZF("useViewTransitionState"),r=jy(e,{relative:t});if(!a.isTransitioning)return!1;let o=lc(a.currentLocation.pathname,i)||a.currentLocation.pathname,l=lc(a.nextLocation.pathname,i)||a.nextLocation.pathname;return G0(r.pathname,l)!=null||G0(r.pathname,o)!=null}var Oj,HO;function Mse(){if(HO)return Oj;HO=1;var e=typeof Element<"u",t=typeof Map=="function",a=typeof Set=="function",i=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function r(o,l){if(o===l)return!0;if(o&&l&&typeof o=="object"&&typeof l=="object"){if(o.constructor!==l.constructor)return!1;var d,u,h;if(Array.isArray(o)){if(d=o.length,d!=l.length)return!1;for(u=d;u--!==0;)if(!r(o[u],l[u]))return!1;return!0}var m;if(t&&o instanceof Map&&l instanceof Map){if(o.size!==l.size)return!1;for(m=o.entries();!(u=m.next()).done;)if(!l.has(u.value[0]))return!1;
620for(m=o.entries();!(u=m.next()).done;)if(!r(u.value[1],l.get(u.value[0])))return!1;return!0}if(a&&o instanceof Set&&l instanceof Set){if(o.size!==l.size)return!1;for(m=o.entries();!(u=m.next()).done;)if(!l.has(u.value[0]))return!1;return!0}if(i&&ArrayBuffer.isView(o)&&ArrayBuffer.isView(l)){if(d=o.length,d!=l.length)return!1;for(u=d;u--!==0;)if(o[u]!==l[u])return!1;return!0}if(o.constructor===RegExp)return o.source===l.source&&o.flags===l.flags;if(o.valueOf!==Object.prototype.valueOf&&typeof o.valueOf=="function"&&typeof l.valueOf=="function")return o.valueOf()===l.valueOf();if(o.toString!==Object.prototype.toString&&typeof o.toString=="function"&&typeof l.toString=="function")return o.toString()===l.toString();if(h=Object.keys(o),d=h.length,d!==Object.keys(l).length)return!1;for(u=d;u--!==0;)if(!Object.prototype.hasOwnProperty.call(l,h[u]))return!1;if(e&&o instanceof Element)return!1;for(u=d;u--!==0;)if(!((h[u]==="_owner"||h[u]==="__v"||h[u]==="__o")&&o.$$typeof)&&!r(o[h[u]],l[h[u]]))return!1;return!0}return o!==o&&l!==l}return Oj=function(l,d){try{return r(l,d)}catch(u){if((u.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw u}},Oj}var Ese=Mse();const Rse=vt(Ese);var Pj,YO;function Nse(){if(YO)return Pj;YO=1;var e=function(t,a,i,r,o,l,d,u){if(!t){var h;if(a===void 0)h=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var m=[i,r,o,l,d,u],f=0;h=new Error(a.replace(/%s/g,function(){return m[f++]})),h.name="Invariant Violation"}throw h.framesToPop=1,h}};return Pj=e,Pj}var Ose=Nse();const VO=vt(Ose);var Ij,KO;function Pse(){return KO||(KO=1,Ij=function(t,a,i,r){var o=i?i.call(r,t,a):void 0;if(o!==void 0)return!!o;if(t===a)return!0;if(typeof t!="object"||!t||typeof a!="object"||!a)return!1;var l=Object.keys(t),d=Object.keys(a);if(l.length!==d.length)return!1;for(var u=Object.prototype.hasOwnProperty.bind(a),h=0;h<l.length;h++){var m=l[h];if(!u(m))return!1;var f=t[m],y=a[m];if(o=i?i.call(r,f,y,m):void 0,o===!1||o===void 0&&f!==y)return!1}return!0}),Ij}var Ise=Pse();const Dse=vt(Ise);var eG=(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))(eG||{}),Dj={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"]}},XO=Object.values(eG),TM={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},Wse=Object.entries(TM).reduce((e,[t,a])=>(e[a]=t,e),{}),jr="data-rh",Ch={DEFAULT_TITLE:"defaultTitle",DEFER:"defer",ENCODE_SPECIAL_CHARACTERS:"encodeSpecialCharacters",ON_CHANGE_CLIENT_STATE:"onChangeClientState",TITLE_TEMPLATE:"titleTemplate",PRIORITIZE_SEO_TAGS:"prioritizeSeoTags"},Ah=(e,t)=>{for(let a=e.length-1;a>=0;a-=1){const i=e[a];if(Object.prototype.hasOwnProperty.call(i,t))return i[t]}return null},zse=e=>{let t=Ah(e,"title");const a=Ah(e,Ch.TITLE_TEMPLATE);if(Array.isArray(t)&&(t=t.join("")),a&&t)return a.replace(/%s/g,()=>t);const i=Ah(e,Ch.DEFAULT_TITLE);return t||i||void 0},Lse=e=>Ah(e,Ch.ON_CHANGE_CLIENT_STATE)||(()=>{}),Wj=(e,t)=>t.filter(a=>typeof a[e]<"u").map(a=>a[e]).reduce((a,i)=>({...a,...i}),{}),Use=(e,t)=>t.filter(a=>typeof a.base<"u").map(a=>a.base).reverse().reduce((a,i)=>{if(!a.length){const r=Object.keys(i);for(let o=0;o<r.length;o+=1){const d=r[o].toLowerCase();if(e.indexOf(d)!==-1&&i[d])return a.concat(i)}}return a},[]),Bse=e=>console&&typeof console.warn=="function"&&console.warn(e),lf=(e,t,a)=>{const i={};return a.filter(r=>Array.isArray(r[e])?!0:(typeof r[e]<"u"&&Bse(`Helmet: ${e} should be of type "Array". Instead found type "${typeof r[e]}"`),!1)).map(r=>r[e]).reverse().reduce((r,o)=>{const l={};o.filter(u=>{let h;const m=Object.keys(u);for(let y=0;y<m.length;y+=1){const b=m[y],x=b.toLowerCase();
620t.indexOf(x)!==-1&&!(h==="rel"&&u[h].toLowerCase()==="canonical")&&!(x==="rel"&&u[x].toLowerCase()==="stylesheet")&&(h=x),t.indexOf(b)!==-1&&(b==="innerHTML"||b==="cssText"||b==="itemprop")&&(h=b)}if(!h||!u[h])return!1;const f=u[h].toLowerCase();return i[h]||(i[h]={}),l[h]||(l[h]={}),i[h][f]?!1:(l[h][f]=!0,!0)}).reverse().forEach(u=>r.push(u));const d=Object.keys(l);for(let u=0;u<d.length;u+=1){const h=d[u],m={...i[h],...l[h]};i[h]=m}return r},[]).reverse()},qse=(e,t)=>{if(Array.isArray(e)&&e.length){for(let a=0;a<e.length;a+=1)if(e[a][t])return!0}return!1},$se=e=>({baseTag:Use(["href"],e),bodyAttributes:Wj("bodyAttributes",e),defer:Ah(e,Ch.DEFER),encode:Ah(e,Ch.ENCODE_SPECIAL_CHARACTERS),htmlAttributes:Wj("htmlAttributes",e),linkTags:lf("link",["rel","href"],e),metaTags:lf("meta",["name","charset","http-equiv","property","itemprop"],e),noscriptTags:lf("noscript",["innerHTML"],e),onChangeClientState:Lse(e),scriptTags:lf("script",["src","innerHTML"],e),styleTags:lf("style",["cssText"],e),title:zse(e),titleAttributes:Wj("titleAttributes",e),prioritizeSeoTags:qse(e,Ch.PRIORITIZE_SEO_TAGS)}),tG=e=>Array.isArray(e)?e.join(""):e,Fse=(e,t)=>{const a=Object.keys(e);for(let i=0;i<a.length;i+=1)if(t[a[i]]&&t[a[i]].includes(e[a[i]]))return!0;return!1},zj=(e,t)=>Array.isArray(e)?e.reduce((a,i)=>(Fse(i,t)?a.priority.push(i):a.default.push(i),a),{priority:[],default:[]}):{default:e,priority:[]},QO=(e,t)=>({...e,[t]:void 0}),Gse=["noscript","script","style"],A4=(e,t=!0)=>t===!1?String(e):String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;"),nG=e=>Object.keys(e).reduce((t,a)=>{const i=typeof e[a]<"u"?`${a}="${e[a]}"`:`${a}`;return t?`${t} ${i}`:i},""),Hse=(e,t,a,i)=>{const r=nG(a),o=tG(t);return r?`<${e} ${jr}="true" ${r}>${A4(o,i)}</${e}>`:`<${e} ${jr}="true">${A4(o,i)}</${e}>`},Yse=(e,t,a=!0)=>t.reduce((i,r)=>{const o=r,l=Object.keys(o).filter(h=>!(h==="innerHTML"||h==="cssText")).reduce((h,m)=>{const f=typeof o[m]>"u"?m:`${m}="${A4(o[m],a)}"`;return h?`${h} ${f}`:f},""),d=o.innerHTML||o.cssText||"",u=Gse.indexOf(e)===-1;return`${i}<${e} ${jr}="true" ${l}${u?"/>":`>${d}</${e}>`}`},""),aG=(e,t={})=>Object.keys(e).reduce((a,i)=>{const r=TM[i];return a[r||i]=e[i],a},t),Vse=(e,t,a)=>{const i={key:t,[jr]:!0},r=aG(a,i);return[q.createElement("title",r,t)]},k0=(e,t)=>t.map((a,i)=>{const r={key:i,[jr]:!0};return Object.keys(a).forEach(o=>{const d=TM[o]||o;if(d==="innerHTML"||d==="cssText"){const u=a.innerHTML||a.cssText;r.dangerouslySetInnerHTML={__html:u}}else r[d]=a[o]}),q.createElement(e,r)}),zi=(e,t,a=!0)=>{switch(e){case"title":return{toComponent:()=>Vse(e,t.title,t.titleAttributes),toString:()=>Hse(e,t.title,t.titleAttributes,a)};case"bodyAttributes":case"htmlAttributes":return{toComponent:()=>aG(t),toString:()=>nG(t)};default:return{toComponent:()=>k0(e,t),toString:()=>Yse(e,t,a)}}},Kse=({metaTags:e,linkTags:t,scriptTags:a,encode:i})=>{const r=zj(e,Dj.meta),o=zj(t,Dj.link),l=zj(a,Dj.script);return{priorityMethods:{toComponent:()=>[...k0("meta",r.priority),...k0("link",o.priority),...k0("script",l.priority)],toString:()=>`${zi("meta",r.priority,i)} ${zi("link",o.priority,i)} ${zi("script",l.priority,i)}`},metaTags:r.default,linkTags:o.default,scriptTags:l.default}},Xse=e=>{const{baseTag:t,bodyAttributes:a,encode:i=!0,htmlAttributes:r,noscriptTags:o,styleTags:l,title:d="",titleAttributes:u,prioritizeSeoTags:h}=e;let{linkTags:m,metaTags:f,scriptTags:y}=e,b={toComponent:()=>{},toString:()=>""};return h&&({priorityMethods:b,linkTags:m,metaTags:f,scriptTags:y}=Kse(e)),{priority:b,base:zi("base",t,i),bodyAttributes:zi("bodyAttributes",a,i),htmlAttributes:zi("htmlAttributes",r,i),link:zi("link",m,i),meta:zi("meta",f,i),noscript:zi("noscript",o,i),script:zi("script",y,i),style:zi("style",l,i),title:zi("title",{title:d,titleAttributes:u},i)}},T4=Xse,Pv=[],iG=!!(typeof window<"u"&&window.document&&window.document.createElement),_4=class{constructor(e,t){ha(this,"instances",[]);ha(this,"canUseDOM",iG);ha(this,"context");ha(this,"value",{setHelmet:e=>{this.context.helmet=e},helmetInstances:{get:()=>this.canUseDOM?Pv:this.instances,add:e=>{(this.canUseDOM?Pv:this.instances).push(e)},remove:e=>{const t=(this.canUseDOM?Pv:this.instances).indexOf(e);(this.canUseDOM?Pv:this.instances).splice(t,1)}}});this.context=e,this.canUseDOM=t||!1,t||(e.helmet=T4({baseTag:[],bodyAttributes:{},htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))}},Qse={},rG=q.createContext(Qse),xd,oG=(xd=class extends M.Component{constructor(a){
620super(a);ha(this,"helmetData");this.helmetData=new _4(this.props.context||{},xd.canUseDOM)}render(){return q.createElement(rG.Provider,{value:this.helmetData.value},this.props.children)}},ha(xd,"canUseDOM",iG),xd),Qu=(e,t)=>{const a=document.head||document.querySelector("head"),i=a.querySelectorAll(`${e}[${jr}]`),r=[].slice.call(i),o=[];let l;return t&&t.length&&t.forEach(d=>{const u=document.createElement(e);for(const h in d)if(Object.prototype.hasOwnProperty.call(d,h))if(h==="innerHTML")u.innerHTML=d.innerHTML;else if(h==="cssText")u.styleSheet?u.styleSheet.cssText=d.cssText:u.appendChild(document.createTextNode(d.cssText));else{const m=h,f=typeof d[m]>"u"?"":d[m];u.setAttribute(h,f)}u.setAttribute(jr,"true"),r.some((h,m)=>(l=m,u.isEqualNode(h)))?r.splice(l,1):o.push(u)}),r.forEach(d=>{var u;return(u=d.parentNode)==null?void 0:u.removeChild(d)}),o.forEach(d=>a.appendChild(d)),{oldTags:r,newTags:o}},M4=(e,t)=>{const a=document.getElementsByTagName(e)[0];if(!a)return;const i=a.getAttribute(jr),r=i?i.split(","):[],o=[...r],l=Object.keys(t);for(const d of l){const u=t[d]||"";a.getAttribute(d)!==u&&a.setAttribute(d,u),r.indexOf(d)===-1&&r.push(d);const h=o.indexOf(d);h!==-1&&o.splice(h,1)}for(let d=o.length-1;d>=0;d-=1)a.removeAttribute(o[d]);r.length===o.length?a.removeAttribute(jr):a.getAttribute(jr)!==l.join(",")&&a.setAttribute(jr,l.join(","))},Zse=(e,t)=>{typeof e<"u"&&document.title!==e&&(document.title=tG(e)),M4("title",t)},ZO=(e,t)=>{const{baseTag:a,bodyAttributes:i,htmlAttributes:r,linkTags:o,metaTags:l,noscriptTags:d,onChangeClientState:u,scriptTags:h,styleTags:m,title:f,titleAttributes:y}=e;M4("body",i),M4("html",r),Zse(f,y);const b={baseTag:Qu("base",a),linkTags:Qu("link",o),metaTags:Qu("meta",l),noscriptTags:Qu("noscript",d),scriptTags:Qu("script",h),styleTags:Qu("style",m)},x={},k={};Object.keys(b).forEach(v=>{const{newTags:j,oldTags:T}=b[v];j.length&&(x[v]=j),T.length&&(k[v]=b[v].oldTags)}),t&&t(),u(e,x,k)},cf=null,Jse=e=>{cf&&cancelAnimationFrame(cf),e.defer?cf=requestAnimationFrame(()=>{ZO(e,()=>{cf=null})}):(ZO(e),cf=null)},ele=Jse,JO=class extends M.Component{constructor(){super(...arguments);ha(this,"rendered",!1)}shouldComponentUpdate(t){return!Dse(t,this.props)}componentDidUpdate(){this.emitChange()}componentWillUnmount(){const{helmetInstances:t}=this.props.context;t.remove(this),this.emitChange()}emitChange(){const{helmetInstances:t,setHelmet:a}=this.props.context;let i=null;const r=$se(t.get().map(o=>{const l={...o.props};return delete l.context,l}));oG.canUseDOM?ele(r):T4&&(i=T4(r)),a(i)}init(){if(this.rendered)return;this.rendered=!0;const{helmetInstances:t}=this.props.context;t.add(this),this.emitChange()}render(){return this.init(),null}},s4,tle=(s4=class extends M.Component{shouldComponentUpdate(e){return!Rse(QO(this.props,"helmetData"),QO(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,a,i){return{...t,[e.type]:[...t[e.type]||[],{...a,...this.mapNestedChildrenToProps(e,i)}]}}mapObjectTypeChildren(e,t,a,i){switch(e.type){case"title":return{...t,[e.type]:i,titleAttributes:{...a}};case"body":return{...t,bodyAttributes:{...a}};case"html":return{...t,htmlAttributes:{...a}};default:return{...t,[e.type]:{...a}}}}mapArrayTypeChildrenToProps(e,t){let a={...t};return Object.keys(e).forEach(i=>{a={...a,[i]:e[i]}}),a}warnOnInvalidChildren(e,t){return VO(XO.some(a=>e.type===a),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 ${XO.join(", ")} are allowed. Helmet does not support rendering <${e.type}> elements. Refer to our API for more information.`),VO(!t||typeof t=="string"||Array.isArray(t)&&!t.some(a=>typeof a!="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 a={};
620return q.Children.forEach(e,i=>{if(!i||!i.props)return;const{children:r,...o}=i.props,l=Object.keys(o).reduce((u,h)=>(u[Wse[h]||h]=o[h],u),{});let{type:d}=i;switch(typeof d=="symbol"?d=d.toString():this.warnOnInvalidChildren(i,r),d){case"Symbol(react.fragment)":t=this.mapChildrenToProps(r,t);break;case"link":case"meta":case"noscript":case"script":case"style":a=this.flattenArrayTypeChildren(i,a,l,r);break;default:t=this.mapObjectTypeChildren(i,t,l,r);break}}),this.mapArrayTypeChildrenToProps(a,t)}render(){const{children:e,...t}=this.props;let a={...t},{helmetData:i}=t;if(e&&(a=this.mapChildrenToProps(e,a)),i&&!(i instanceof _4)){const r=i;i=new _4(r.context,!0),delete a.helmetData}return i?q.createElement(JO,{...a,context:i.value}):q.createElement(rG.Consumer,null,r=>q.createElement(JO,{...a,context:r}))}},ha(s4,"defaultProps",{defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1}),s4);function nle(){const e=Kn();M.useEffect(()=>{window.dataLayer=window.dataLayer||[],window.dataLayer.push({event:"page_view",page_path:e.pathname+e.search+e.hash,page_title:document.title})},[e])}const eP="/resources/miniapp-examples";function xa(e){return e?`${eP}/${e}`:eP}function sG(e){return e?`/og/app-examples/${e}.png`:"/og/app-examples.png"}const Ed=[{slug:"send-time-optimizer",title:"Send Time Optimizer",category:"Sales",description:"Interactive heatmap that finds the day-and-hour windows where outbound sales emails earn the most replies, with audience segmentation, 95% significance testing, a volume-vs-response quadrant, and a what-if reply-lift calculator.",thumbnail:"/resources/miniapp-examples/send-time-optimizer/thumbnail.svg",width:1280,height:820,scrollable:!0,tags:["Heatmap","Email","Significance","Segments","What-if"]},{slug:"aeo-influence",title:"AEO Influence Analysis",category:"Attribution",description:"Measures how AI engines (ChatGPT, Perplexity, Gemini, Claude) influence pipeline by fusing citation traffic, call mentions, and CRM notes. Shows win-rate lift, share of voice vs competitors, per-platform sentiment, search themes, and a filterable table of AI-influenced deals with the evidence behind each detection.",thumbnail:"/resources/miniapp-examples/aeo-influence/thumbnail.svg",width:1400,height:820,scrollable:!0,tags:["AEO","Share of Voice","Win-Rate Lift","LLMs","Sentiment"]},{slug:"channel-analysis",title:"Channel Analysis",category:"Attribution",description:"Breaks down which marketing and sales channels influenced closed-won deals across the full buyer journey (awareness, activation, close). Includes a deal-by-channel matrix with touchpoint evidence, per-channel deep dives, a multi-touch attribution comparison, founder-led influence, and prioritized recommendations.",thumbnail:"/resources/miniapp-examples/channel-analysis/thumbnail.svg",width:1240,height:820,tags:["Channels","Buyer Journey","Closed-Won","Attribution","Matrix"],scrollable:!0},{slug:"customer-quotes",title:"Customer Quotes",category:"Marketing",description:"A website-ready voice-of-customer wall that surfaces quotes from call transcripts, alongside the full roster of customers and design partners. Search across quotes and accounts, filter by company, and see each account's logo-use rights so you always know who you can feature publicly.",thumbnail:"/resources/miniapp-examples/customer-quotes/thumbnail.svg",width:1200,height:820,scrollable:!0,tags:["Voice of Customer","Quotes","Logo Rights","Search","Testimonials"]},{slug:"campaign-follow-up",title:"Campaign Follow-Up Tracker",category:"Sales",description:"After someone engages with a campaign, how fast does sales follow up — and who's still waiting? A sidebar-organized tracker with a summary of fastest/slowest reps and best/worst campaigns, a per-campaign roster with follow-up status, a 'needs follow-up' routing list grouped by owner, and speed-to-follow-up leaderboards by campaign, rep, and month.",thumbnail:"/resources/miniapp-examples/campaign-follow-up/thumbnail.svg",width:1280,height:820,scrollable:!0,tags:["Campaigns","Speed-to-Lead","Leaderboards","Roster","Sales Ops"]}
620,{slug:"podcast-effect",title:"The Podcast Effect",category:"Attribution",description:"Quantifies how a founder's appearances on a leading security-operations podcast move pipeline, as both a lead source that brings buyers in and a proof point that helps reps close. Tabbed analysis with win-rate lift vs. the company baseline, revenue by quarter, a filterable deal table, a voice-of-customer wall of buyer quotes, an interactive timeline, and a recommended-plays advice tab.",thumbnail:"/resources/miniapp-examples/podcast-effect/thumbnail.svg",width:1180,height:820,scrollable:!0,tags:["Podcast","Influence","Win-Rate Lift","Voice of Customer","Attribution"]},{slug:"sales-play-identifier",title:"Sales Play Identifier",category:"Sales",description:"Scores every account against a sales playbook so reps can see which accounts fit each play, when to run it, and why each one qualifies. Filter, sort, and drill into any account for its fit signals, sales motion, persona coverage, buying triggers, differentiation versus the incumbent, and a ready-to-run action plan with discovery questions, talking points, and objection handling.",thumbnail:"/resources/miniapp-examples/sales-play-identifier/thumbnail.svg",width:1440,height:2100,tags:["Sales Plays","Account Scoring","Fit Signals","Targeting","Playbook"]},{slug:"intent-signals",title:"Intent Signals",category:"Sales",description:"Surfaces accounts showing buying signals with no open opportunity, ranked by intent, with per-account proto-opportunity dossiers, signal timelines, and recommended actions.",thumbnail:"/resources/miniapp-examples/intent-signals/thumbnail.svg",width:1400,height:860,scrollable:!0,tags:["Intent","Proto-opportunities","Pipeline","Signals"]},{slug:"prospect-awareness",title:"Prospect Awareness Analysis",category:"Sales",description:"Classifies how much each prospect already knows about AlmaProtect before an SDR call, across 2902 sampled cold and warm calls. Includes an overall awareness donut, a reachable-only breakdown, quarter-over-quarter stacked trends, an 8-level notable-quotes wall, and a searchable, sortable call-detail table with CSV export.",thumbnail:"/resources/miniapp-examples/prospect-awareness/thumbnail.svg",width:1200,height:820,scrollable:!0,tags:["Awareness","SDR Calls","Taxonomy","Quotes","Pipeline"]},{slug:"paid-media-impact",title:"Paid Media Impact",category:"Marketing",description:"How paid search and paid social turn spend into sourced and influenced pipeline. Combines paid-search performance (campaigns, keywords, landing pages) with paid-media attribution (by platform, net-new vs install base, spend-to-pipeline lag, conversion velocity, and multi-touch journeys) — plus ROAS, cost-per-opp, and strategic recommendations.",thumbnail:"/resources/miniapp-examples/paid-media-impact/thumbnail.svg",width:1280,height:820,scrollable:!0,tags:["Paid Search","Paid Social","ROAS","Attribution","Pipeline"]},{slug:"rep-scorecard",title:"Rep Scorecard",category:"Sales",description:"A lean sales rep scorecard that tracks high-signal engagement and opportunity-influence metrics for AlmaProtect's security sales team, rolled up by division and rep with quarter-over-quarter comparison on every KPI, a by-division chart, and a sortable rep leaderboard.",thumbnail:"/resources/miniapp-examples/rep-scorecard/thumbnail.svg",width:1280,height:820,scrollable:!0,tags:["Scorecard","Rep Performance","QoQ","Leaderboard","Sales Ops"]},{slug:"product-launch",title:"Product Launch: What's Working",category:"Sales",description:"A win/loss deep-research dashboard that analyzes closed deals and open pipeline to surface what's driving a product launch — engagement benchmarks, journey archetypes, loss patterns, messaging signals, and pipeline risk.",thumbnail:"/resources/miniapp-examples/product-launch/thumbnail.svg",width:1280,height:900,scrollable:!0,tags:["Win-Loss","Deal Intelligence","Pipeline","Revenue","Deep Research"]},{slug:"deal-runbook",title:"Deal Runbook",category:"Sales",description:"Compares a live opportunity against the patterns in won and lost deals: it picks the closest comparable cohort, anchors a win probability, and contrasts the deal against the winning profile (size band, stage pace, the loss-death window, ICP fit) before raising risk flags and producing a prioritized next-best-play runbook. A second tab scores closed-lost deals for winnability and ranks a revival queue with recommended re-open plays and CSV export.",thumbnail:"/resources/miniapp-examples/deal-runbook/thumbnail.svg",width:1080,height:900,scrollable:!0,tags:["Win Patterns","Cohort Matching","Risk Flags","Runbook","Deal Revival"]},{slug:"product-pitch-tracker",title:"Product Pitch Tracker",category:"Sales",description:"Tracks which accounts have been pitched AlmaProtect's flagship product across a six-stage adoption funnel, with health filters, a sortable account table, and expandable per-account evidence — win wires, formal opportunities, conversations, and marketing influence — plus status charts and CSV export.",thumbnail:"/resources/miniapp-examples/product-pitch-tracker/thumbnail.svg",width:1280,height:900,scrollable:!0,tags:["Pitch Funnel","Account Tracking","Win Wire","Adoption","Sales Ops"]},{slug:"integrated-campaign-performance",title:"Integrated Campaign Performance",category:"Marketing",description:"An integrated marketing dashboard that follows every program, channel, and campaign from members through MELs, MQLs, influenced opportunities, Stage 2, pipeline, and closed-won — with a normalize-by-age slider, per-program detail, a side-by-side compare view, and CSV export.",thumbnail:"/resources/miniapp-examples/integrated-campaign-performance/thumbnail.svg",width:1280,height:900,scrollable:!0,tags:["Campaigns","Channels","MQLs","Pipeline","Attribution"]},{slug:"account-coverage-explorer",title:"Account Coverage Explorer",category:"Sales",description:"Explores AlmaProtect product-module coverage across the customer base: which core modules (Endpoint, SIEM, Cloud, Identity, Threat Detection) are contracted ver
620sus actively engaged at each account, with coverage and engagement scoring, renewal-cycle flags, stakeholder rosters, account plans, and a portfolio coverage chart that spotlights whitespace.",thumbnail:"/resources/miniapp-examples/account-coverage-explorer/thumbnail.svg",width:1280,height:900,scrollable:!0,tags:["Account Coverage","Whitespace","Cross-sell","Renewals","Portfolio"]},{slug:"keep-optimize-stop",title:"Keep / Optimize / Stop",category:"Marketing",description:'Grades every email-marketing campaign category as Scale Up / Keep / Optimize / Stop using post-engagement attribution and — the deciding signal — whether a touch actually moved a deal to its next stage. Surfaces the "pipeline illusion," contrasts correlation vs causation, ranks top and underperforming campaigns, and ships an 8-play optimization playbook.',thumbnail:"/resources/miniapp-examples/keep-optimize-stop/thumbnail.svg",width:1400,height:900,scrollable:!0,tags:["Campaign ROI","Keep/Optimize/Stop","Attribution","Deal Progression","Email"]},{slug:"funnel-conversion",title:"Funnel Conversion Analyzer",category:"Sales",description:"A mid-funnel conversion dashboard that uses a resolved-or-past funnel (an opportunity counts toward a stage only once it has closed or advanced beyond it) so conversion isn't inflated by still-active pipeline. Flags the worst-converting transition as the bottleneck, charts time-in-stage and monthly stage entries, and auto-generates key takeaways, with record-type and time-window filters.",thumbnail:"/resources/miniapp-examples/funnel-conversion/thumbnail.svg",width:1100,height:900,scrollable:!0,tags:["Funnel","Conversion","Time-in-Stage","Bottleneck","Pipeline"]},{slug:"pipeline-forecast",title:"Pipeline Forecast",category:"Sales",description:"Scores every open opportunity against the winning profile distilled from closed-won deals, anchoring a win likelihood and weighted forecast. Tiers deals by confidence, charts the weighted pipeline and timeline, breaks down the scoring factors behind each forecast, and surfaces per-deal risk flags and recommended plays.",thumbnail:"/resources/miniapp-examples/pipeline-forecast/thumbnail.svg",width:1280,height:900,scrollable:!0,tags:["Forecast","Pipeline","Win Likelihood","Deal Scoring","Playbook"]},{slug:"expansion-readiness",title:"Expansion Readiness",category:"Sales",description:"Scores existing customers on their likelihood to expand so the team can prioritize cross-sell and upsell. Combines a 0-100 readiness score across seven weighted factors (land-deal profile, firmographics, buying-group depth, post-land engagement, expansion signals, whitespace fit, and risk) with per-account detail: score breakdown, recommended plays, estimated value, key evidence, top risk, and a full narrative — plus sort, filter, and CSV export.",thumbnail:"/resources/miniapp-examples/expansion-readiness/thumbnail.svg",width:1280,height:820,scrollable:!0,tags:["Expansion","Cross-sell","Account Scoring","Whitespace","Playbook"]},{slug:"web-attribution",title:"Web Channel Attribution",category:"Attribution",description:"Follows every inbound contact and opportunity from the web channel that first found them (Organic Search, Google Ads, Reddit Ads, LinkedIn Ads, Referral / Partner, Direct, Email, Webinar / Events) through the channel that last touched them before pipeline. A People tab profiles the inbound audience by first- and last-touch channel; an Opportunities tab ties channels to pipeline and closed-won ARR — with first/last-touch doughnuts, a stacked pipeline-by-month chart, sortable type-aware filterable tables, and per-record and per-channel drill-downs.",thumbnail:"/resources/miniapp-examples/web-attribution/thumbnail.svg",width:1240,height:900,scrollable:!0,tags:["Web Channels","First/Last Touch","Attribution","Pipeline","Paid vs Organic"]},{slug:"open-deals-forecast",title:"Open Deals Forecast",category:"Sales",description:"Scores every open deal against the winning profile distilled from closed-won deals, anchoring a win likelihood and weighted forecast across the pipeline. A Deal Scorecard tiers deals by confidence and breaks down the scoring factors (stage, integrator/champion, procurement path, relationship, budget) behind each forecast; a Close Timeline projects when deals land; Pipeline Analytics charts weighted value, and a Scoring Methodology tab documents the model, with per-deal risk flags and recommended plays.",thumbnail:"/resources/miniapp-examples/open-deals-forecast/thumbn
620ail.svg",width:1280,height:900,scrollable:!0,tags:["Forecast","Pipeline","Win Likelihood","Deal Scoring","Playbook"]},{slug:"lost-deals-analysis",title:"Lost Deals Analysis",category:"Sales",description:"Analyzes every closed-lost deal against the winning playbook to explain why pipeline slips away. Breaks down loss reasons and dollars lost, maps the playbook gaps that separated losses from wins, profiles the biggest lost deals, and turns the pattern into concrete recommendations, with filters across region, product, and loss reason.",thumbnail:"/resources/miniapp-examples/lost-deals-analysis/thumbnail.svg",width:1280,height:900,scrollable:!0,tags:["Closed-Lost","Loss Reasons","Playbook Gaps","Win/Loss","Pipeline"]},{slug:"messaging-themes",title:"Messaging Themes Explorer",category:"Marketing",description:"Mines sales-call language to surface the messaging themes that show up in won versus lost deals. Contrasts the words that win against the ones that stall, tracks competitor mentions across conversations, and offers an exportable quote bank so marketing can ground positioning in how buyers actually talk.",thumbnail:"/resources/miniapp-examples/messaging-themes/thumbnail.svg",width:1200,height:900,scrollable:!0,tags:["Messaging","Win/Loss Language","Competitors","Quote Bank","Positioning"]},{slug:"enterprise-abm-tracker",title:"Enterprise ABM Campaign Tracker",category:"Marketing",description:"An account-based marketing command center that tracks target accounts through the full ABM funnel — Targeted, Outreach, DM Engaged, Meeting Held, and Opportunity — and fuses live buying signals (intent surges, hiring, leadership changes, competitor displacement) with per-account engagement rollups. Each account opens into a dossier of key contacts, touchpoint history, and campaign membership, alongside a recommended-plays feed that turns signals into the next best action.",thumbnail:"/resources/miniapp-examples/enterprise-abm-tracker/thumbnail.svg",width:1280,height:900,scrollable:!0,tags:["ABM","Account Signals","Engagement","Campaigns","Recommended Plays"]},{slug:"sales-activity-trends",title:"Sales Activity Trends",category:"Sales",description:"Tracks outbound sales activity across the AlmaProtect team — calls, emails, and meetings — to show how volume, channel mix, and momentum move over time. Rolls up by rep and role, charts weekly trends and new-opportunity creation, and surfaces a day-and-hour heatmap of the windows where reps are most active, with filters and CSV export.",thumbnail:"/resources/miniapp-examples/sales-activity-trends/thumbnail.svg",width:1280,height:900,scrollable:!0,tags:["Sales Activity","Outbound","Heatmap","Rep Rollups","Trends"]},{slug:"inbound-leads-explorer",title:"Inbound Leads & Re-Engagement Explorer",category:"Sales",description:"Explores every inbound lead by status, source, and ICP fit so reps know which to work first — and which to revive. Flags a re-engagement queue of strong- and possible-fit leads that stalled with too few follow-ups, charts status and follow-up gaps, and ships a sortable, filterable table with lead profiles and CSV export.",thumbnail:"/resources/miniapp-examples/inbound-leads-explorer/thumbnail.svg",width:1280,height:900,scrollable:!0,tags:["Inbound Leads","Re-Engagement","ICP Fit","Follow-ups","Pipeline"]},{slug:"prospect-question-themes",title:"Prospect Question Themes",category:"Marketing",description:"Mines the questions prospects ask on sales calls and clusters them into themes — pricing, camera integration, access control, deployment, AI detection, and more — then turns each theme into a recommended content idea ranked by demand. Shows question and account counts per theme, a demand bar chart, and expandable verbatim questions behind every recommendation.",thumbnail:"/resources/miniapp-examples/prospect-question-themes/thumbnail.svg",width:1200,height:900,scrollable:!0,tags:["Question Themes","Content Ideas","Voice of Customer","Demand","Marketing"]},{slug:"buying-group-explorer",title:"Buying Group & Touchpoints Explorer",category:"Sales",description:"Explores how buying-group size, sales touchpoints, MQL status, and deal size relate to win rate across the AlmaProtect book of business. Charts win rate by group size and contact count, MQL lift by deal size and year, and a 'why deals win' breakdown across cycle length, amount, touchpoints, and group depth — with years, motion, and status filters that recompute instantly.",thumbnail:"/resources/miniapp-examples/buying-group-explorer/thumbnail.svg",width:1280,height:900,scrollable:!0,tags:["Buying Groups","Touchpoints","Win Rate","MQL","Deal Size"]},{slug:"marketing-roi",title:"Marketing ROI Dashboard",category:"Marketing",description:"A board-level view of marketing-influenced pipeline and return on spend across the AlmaProtect book. Tracks total and influenced pipeline, won revenue, and the pipeline-to-s
620pend ratio, with a created-vs-assisted split, net-new vs expansion, pipeline by channel and by vertical, quarterly trend, and a campaigns-by-influence table — all recomputing instantly against an adjustable attribution window and fiscal period.",thumbnail:"/resources/miniapp-examples/marketing-roi/thumbnail.svg",width:1200,height:900,scrollable:!0,tags:["Marketing ROI","Influenced Pipeline","Attribution","Campaigns","Pipe:Spend"]},{slug:"business-value-services",title:"Business Value Services",category:"Sales",description:"A BVS workbench that builds a CFO-ready case from Salesforce, calls, emails, notes, and a dated usage snapshot.",thumbnail:"/resources/miniapp-examples/business-value-services/thumbnail.svg",width:1240,height:900,scrollable:!0,tags:["BVS","Business Case","ROI","Discovery","Usage"]},{slug:"pipeline-source-attribution",title:"Pipeline Source Attribution",category:"Attribution",description:"Reconstructs where AlmaProtect pipeline actually comes from by source channel, using first-touch evidence on a de-duplicated parent-account rollup. Reconciles sourced vs influenced pipeline, shows win rate by source, partner and advisor overlays, and a de-duplication audit that flags possible duplicate buying motions — with status filters and an adjustable date range that drives every tab.",thumbnail:"/resources/miniapp-examples/pipeline-source-attribution/thumbnail.svg",width:1200,height:900,scrollable:!0,tags:["Source Attribution","Sourced vs Influenced","Win Rate","De-duplication","Pipeline"]}];function _M(e){return Ed.find(t=>t.slug===e)}const au=({className:e=""})=>n.jsxs("svg",{width:"auto",height:"100%",viewBox:"0 0 137 33",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:e,children:[n.jsx("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M25.7915 0.972245C24.7039 0.344302 23.3131 0.716952 22.6851 1.8046C22.5816 1.98395 22.5055 2.17161 22.4551 2.36267L11.9827 2.36267C11.866 1.73057 11.4836 1.15158 10.8833 0.804989C9.7957 0.177037 8.40491 0.549714 7.77695 1.63735C7.21607 2.60882 7.45355 3.82193 8.28567 4.51751L3.05376 13.5794C2.03532 13.2066 0.865899 13.6076 0.305023 14.5791C-0.322898 15.6667 0.0497385 17.0575 1.13738 17.6855C1.73018 18.0277 2.41302 18.0726 3.01332 17.8667L8.27855 26.9863C8.10216 27.1436 7.94738 27.3312 7.82276 27.547C7.1948 28.6347 7.56746 30.0255 8.65511 30.6534C9.74277 31.2814 11.1335 30.9087 11.7615 29.8211C11.8848 29.6075 11.9694 29.3824 12.0178 29.1536L22.4284 29.1536C22.5678 29.7414 22.9394 30.2729 23.5039 30.5988C24.5915 31.2267 25.9823 30.854 26.6103 29.7664C27.1396 28.8496 26.958 27.7172 26.2364 27.0081L31.5065 17.8799C32.4814 18.1503 33.5528 17.7415 34.0822 16.8247C34.7101 15.737 34.3375 14.3462 33.2498 13.7183C32.6778 13.388 32.022 13.3347 31.4373 13.5164L26.2614 4.55143C26.3993 4.41356 26.5217 4.25559 26.6239 4.07864C27.2519 2.99098 26.8792 1.6002 25.7915 0.972245ZM23.2068 26.864C22.9973 27.0342 22.8145 27.2447 22.6715 27.4924C22.5157 27.7622 22.4217 28.0507 22.3847 28.3415L12.0402 28.3415C12.008 28.1308 11.9465 27.9252 11.8572 27.7313L18.7754 22.7135C18.914 22.8527 19.0729 22.9763 19.2512 23.0792C19.8438 23.4214 20.5263 23.4664 21.1264 23.2607L23.2068 26.864ZM8.84561 16.1643C8.96608 16.7896 9.34693 17.3612 9.94168 17.7045C10.1162 17.8053 10.2985 17.88 10.4842 17.9304L9.59909 26.4182C9.38414 26.4367 9.17288 26.4856 8.97197 26.5631L3.72227 17.4702C3.92607 17.3021 4.10389 17.0954 4.24377 16.8531C4.37088 16.633 4.45702 16.4004 4.50451 16.1642L8.84561 16.1643ZM18.2472 20.3426C18.044 20.9074 18.0783 21.5176 18.315 22.0442L11.3909 27.0662C11.2556 26.9328 11.1014 26.8141 10.9292 26.7147C10.7612 26.6177 10.5861 26.5446 10.4076 26.4943L11.2937 17.9992C11.8727 17.9437 12.4234 17.6674 12.8138 17.2056L18.2472 20.3426ZM10.4795 13.5415C9.92165 13.6938 9.42132 14.0578 9.10932 14.5981C8.97056 14.8385 8.88077 15.0937 8.83665 15.3521L4.51914 15.3521C4.43458 14.8325 4.17108 14.3456 3.75495 13.9896L8.99146 4.91968C9.1886 4.9893 9.39107 5.03019 9.59355 5.04366L10.4795 13.5415ZM30.3098 17.0742C30.4395 17.243 30.5946 17.3954 30.7735 17.5254L25.5629 26.5505C25.0296 26.3133 24.4436 26.2977 23.919 26.4731L21.8356 22.8646C22.0396 22.6963 22.2176 22.4894 22.3576 22.2469C22.6716 21.703 22.7355 21.0833 22.5849 20.5212L30.3098 17.0742ZM19.9302 18.8826C19.4421 18.9832 18.9887 19.2428 18.6534 19.6393L13.2199 16.5022C13.397 16.0096 13.3937 15.4826 13.233 15.0066L18.4992 11.966C18.6701 12.1779 18.882 12.3627 19.1319 12.507C19.386 12.6537 19.6566 12.7455 19.9301 12.7867L19.9302 18.8826Z
620M18.2755 9.44367C17.9597 10.0185 17.9186 10.6728 18.1105 11.2528L12.8401 14.2957C12.6706 14.0883 12.4614 13.9076 12.2157 13.7658C11.9219 13.5961 11.6059 13.4996 11.2888 13.4704L10.4002 4.95222C10.7448 4.84884 11.0654 4.66419 11.3306 4.40649L18.2755 9.44367ZM29.9029 15.1499C29.8051 15.5513 29.8206 15.9662 29.9378 16.3509L22.2382 19.7866C22.0552 19.5304 21.8157 19.3082 21.5253 19.1405C21.2759 18.9965 21.0106 18.9054 20.7423 18.8632L20.7423 12.7618C21.3348 12.6355 21.8749 12.2743 22.2123 11.7184L29.9029 15.1499ZM30.7164 13.8922C30.5331 14.0347 30.3694 14.2074 30.2331 14.4081L22.5041 10.9593C22.6534 10.168 22.371 9.34038 21.7456 8.80775L23.8948 5.08523C24.4582 5.28563 25.066 5.25045 25.5906 5.01404L30.7164 13.8922ZM22.3926 3.17483C22.4524 3.74959 22.7296 4.29502 23.19 4.68162L21.0437 8.3992C20.2664 8.11656 19.402 8.28433 18.7875 8.81178L11.8027 3.74548C11.8903 3.56049 11.9508 3.36863 11.9855 3.17477L22.3926 3.17483Z",fill:"currentColor"}),n.jsx("path",{d:"M53.6301 26.8347C51.8838 26.8347 50.3812 26.5199 49.1222 25.8905C47.8836 25.2407 46.9292 24.3269 46.2591 23.1492C45.6093 21.9512 45.2844 20.5399 45.2844 18.9155V5.08733H49.305V19.0373C49.305 20.3369 49.6705 21.3623 50.4015 22.1136C51.1528 22.8649 52.229 23.2406 53.6301 23.2406C55.0311 23.2406 56.0972 22.8649 56.8282 22.1136C57.5795 21.3623 57.9552 20.3369 57.9552 19.0373V5.08733H61.9757V18.9155C61.9757 20.5399 61.6406 21.9512 60.9705 23.1492C60.3208 24.3269 59.3664 25.2407 58.1075 25.8905C56.8688 26.5199 55.3763 26.8347 53.6301 26.8347Z",fill:"currentColor"}),n.jsx("path",{d:"M64.774 32.5V11.3009H68.5509V13.1284H69.0992C69.4443 12.5395 69.9824 12.0217 70.7135 11.575C71.4445 11.108 72.4902 10.8744 73.8507 10.8744C75.069 10.8744 76.196 11.179 77.2316 11.7882C78.2672 12.3771 79.0997 13.2502 79.7292 14.4076C80.3586 15.565 80.6734 16.9661 80.6734 18.6109V19.0982C80.6734 20.743 80.3586 22.1441 79.7292 23.3015C79.0997 24.4589 78.2672 25.3422 77.2316 25.9514C76.196 26.5402 75.069 26.8347 73.8507 26.8347C72.9369 26.8347 72.1653 26.723 71.5358 26.4996C70.9267 26.2966 70.4292 26.0326 70.0434 25.7077C69.6779 25.3625 69.3834 25.0173 69.1601 24.6721H68.6118V32.5H64.774ZM72.6932 23.4842C73.8913 23.4842 74.8761 23.1086 75.6477 22.3573C76.4396 21.5857 76.8356 20.4689 76.8356 19.0069V18.7023C76.8356 17.2403 76.4396 16.1336 75.6477 15.3823C74.8558 14.6107 73.871 14.2249 72.6932 14.2249C71.5155 14.2249 70.5307 14.6107 69.7388 15.3823C68.9469 16.1336 68.5509 17.2403 68.5509 18.7023V19.0069C68.5509 20.4689 68.9469 21.5857 69.7388 22.3573C70.5307 23.1086 71.5155 23.4842 72.6932 23.4842Z",fill:"currentColor"}),n.jsx("path",{d:"M89.2534 26.8347C87.2837 26.8347 85.6694 26.4083 84.4105 25.5554C83.1515 24.7026 82.3901 23.4842 82.1261 21.9004L85.6593 20.9867C85.8014 21.6974 86.0349 22.2558 86.3598 22.6619C86.705 23.068 87.1213 23.3624 87.6086 23.5452C88.1163 23.7076 88.6645 23.7888 89.2534 23.7888C90.1468 23.7888 90.8068 23.6365 91.2332 23.332C91.6596 23.0071 91.8728 22.6111 91.8728 22.1441C91.8728 21.677 91.6697 21.3217 91.2636 21.078C90.8575 20.8141 90.2077 20.6008 89.3143 20.4384L88.4615 20.2861C87.4056 20.0831 86.441 19.8089 85.5679 19.4637C84.6948 19.0982 83.9942 18.6007 83.4663 17.9713C82.9383 17.3418 82.6743 16.5296 82.6743 15.5346C82.6743 14.032 83.2226 12.8847 84.3191 12.0928C85.4156 11.2806 86.8573 10.8744 88.6442 10.8744C90.3296 10.8744 91.7307 11.2501 92.8475 12.0014C93.9643 12.7527 94.6953 13.7375 95.0405 14.9559L91.4768 16.0524C91.3144 15.2808 90.9794 14.7325 90.4717 14.4076C89.9844 14.0827 89.3752 13.9203 88.6442 13.9203C87.9132 13.9203 87.3548 14.0523 86.969 14.3162C86.5832 14.5599 86.3903 14.9051 86.3903 15.3518C86.3903 15.8392 86.5933 16.2047 86.9995 16.4483C87.4056 16.6717 87.9538 16.8443 88.6442 16.9661L89.497 17.1184C90.6342 17.3215 91.6596 17.5956 92.5734 17.9408C93.5074 18.2657 94.2384 18.7429 94.7664 19.3724C95.3146 19.9815 95.5887 20.8141 95.5887 21.8699C95.5887 23.4538 95.01 24.6823 93.8526 25.5554C92.7155 26.4083 91.1824 26.8347 89.2534 26.8347Z",fill:"currentColor"}),n.jsx("path",{d:"M97.7334 26.4083V11.3009H101.571V26.4083H97.7334ZM99.6523 9.53427C98.9619 9.53427 98.3731 9.31091 97.8857 8.86418C97.4187 8.41746 97.1852 7.8286 97.1852 7.09759C97.1852 6.36659 97.4187 5.77773 97.8857 5.331C98.3731 4.88428 98.9619 4.66091 99.6523 4.66091C100.363 4.66091 100.952 4.88428 101.419 5.331C101.886 5.77773 102.119 6.36659 102.119 7.09759C102.119 7.8286 101.886 8.41746 101.419 8.86418C100.952 9.31091 100.363 9.53427 99.6523 9.53427Z",fill:"currentColor"}),n.jsx("path",{d:"M110.697 26.8347C109.499 26.8347 108.372 26.5402 107.316 25.9514C106.281 25.3422 105.448 24.4589 104.819 23.3015C104.189 22.1441 103.875 20.743 103.875 19.0982V18.6109C103.875 16.9661 104.189 15.565 104.819 14.4076C105.448 13.2502 106.281 12.3771 107.316 11.7882C108.352 11.179 109.479 10.8744 110.697 10.8744C111.611 10.8744 112.373 10.9861 112.982 11.2095C113.611 11.4125 114.119 11.6765 114.505 12.0014C114.89 12.3263 115.185 12.6715 115.388 13.037H115.936V5.08733H119.774V26.4083H115.997V24.5808H115.449C115.104 25.1493 114.566 25.6671 113.835 26.1341C113.124 26.6012 112.078 26.8347 110.
620697 26.8347ZM111.855 23.4842C113.032 23.4842 114.017 23.1086 114.809 22.3573C115.601 21.5857 115.997 20.4689 115.997 19.0069V18.7023C115.997 17.2403 115.601 16.1336 114.809 15.3823C114.038 14.6107 113.053 14.2249 111.855 14.2249C110.677 14.2249 109.692 14.6107 108.9 15.3823C108.108 16.1336 107.712 17.2403 107.712 18.7023V19.0069C107.712 20.4689 108.108 21.5857 108.9 22.3573C109.692 23.1086 110.677 23.4842 111.855 23.4842Z",fill:"currentColor"}),n.jsx("path",{d:"M129.694 26.8347C128.192 26.8347 126.861 26.5199 125.704 25.8905C124.567 25.2407 123.674 24.3371 123.024 23.1797C122.394 22.0019 122.08 20.6212 122.08 19.0373V18.6718C122.08 17.088 122.394 15.7173 123.024 14.5599C123.653 13.3822 124.537 12.4786 125.674 11.8491C126.811 11.1993 128.131 10.8744 129.633 10.8744C131.116 10.8744 132.405 11.2095 133.501 11.8796C134.598 12.5294 135.451 13.4431 136.06 14.6208C136.669 15.7783 136.974 17.1286 136.974 18.6718V19.9815H125.978C126.019 21.0171 126.405 21.8598 127.136 22.5096C127.867 23.1594 128.76 23.4842 129.816 23.4842C130.892 23.4842 131.684 23.2507 132.192 22.7837C132.699 22.3167 133.085 21.7989 133.349 21.2303L136.486 22.8751C136.202 23.403 135.786 23.9817 135.238 24.6112C134.71 25.2204 133.999 25.7483 133.105 26.1951C132.212 26.6215 131.075 26.8347 129.694 26.8347ZM126.009 17.1184H133.075C132.994 16.2453 132.638 15.5447 132.009 15.0168C131.4 14.4888 130.598 14.2249 129.603 14.2249C128.567 14.2249 127.745 14.4888 127.136 15.0168C126.526 15.5447 126.151 16.2453 126.009 17.1184Z",fill:"currentColor"})]}),H0="45345429",ale="na1",ile="https://js.hsforms.net/forms/embed/v2.js",MM={demo:{formId:"ab113b93-817b-4498-83f3-9af6625acd63",campaignId:"701WQ00000a54O3YAI"},contact:{formId:"5c892e54-01dc-431a-954c-08db783b96a5",campaignId:"701WQ00000f6hfNYAQ"},"aie-artwork":{formId:"3892448b-2481-47dc-8d92-13ff78860be9"},tshirt:{formId:"8b2ca7cc-b396-4581-a46d-d1bd9a0fe92a"}},rle="e6f4ffe0-47d6-4412-980c-2c34dc154e11";function Lj(){var e,t;return typeof window<"u"&&!!((t=(e=window.hbspt)==null?void 0:e.forms)!=null&&t.create)}function ole(){if(typeof document>"u")return"";const e=document.cookie.match(/(?:^|;\s*)hubspotutk=([^;]+)/);return e?decodeURIComponent(e[1]):""}let df=null;function lG(){if(typeof window>"u")return Promise.resolve();if(df)return df;let e=null;const t=new Promise((a,i)=>{if(Lj()){a();return}const r=()=>{e!==null&&(clearInterval(e),e=null)},o=()=>{r(),a()},l=m=>{r(),df===t&&(df=null),i(m)},d=()=>{Lj()?o():l(new Error("HubSpot forms script loaded without hbspt"))},u=document.querySelector('script[src*="hsforms.net/forms/embed"]');if(u){u.addEventListener("load",d,{once:!0}),u.addEventListener("error",()=>l(new Error("Failed to load HubSpot forms script")),{once:!0});let m=0;e=setInterval(()=>{if(Lj()){o();return}m+=50,m>5e3&&l(new Error("HubSpot forms script timeout"))},50);return}const h=document.createElement("script");h.src=ile,h.charset="utf-8",h.async=!0,h.onload=d,h.onerror=()=>{h.remove(),l(new Error("Failed to load HubSpot forms script"))},document.head.appendChild(h)});return df=t,t}function cG(){if(typeof window>"u")return;const e=()=>{lG().catch(()=>{})},t=window.requestIdleCallback;typeof t=="function"?t(e,{timeout:2e3}):setTimeout(e,500)}let sle=0;function Zw({type:e="demo",className:t,style:a,onSubmitted:i,capturePostSubmit:r}){const o=M.useRef(`hs-form-${++sle}`).current,[l,d]=M.useState(!1),[u,h]=M.useState(()=>
620"form"),[m,f]=M.useState(""),y=r??e==="demo",b=M.useRef(i);b.current=i,M.useEffect(()=>{d(!1);let v=!1,j=null;const T=MM[e];return lG().then(()=>{var C,_;if(v)return;const A=document.getElementById(o);A&&(A.innerHTML="",(_=(C=window.hbspt)==null?void 0:C.forms)==null||_.create({target:`#${o}`,portalId:H0,formId:T.formId,region:ale,...T.campaignId?{sfdcCampaignId:T.campaignId}:{},onFormSubmitted:()=>{var E;v||(y?h("followup"):(E=b.current)==null||E.call(b))},onFormReady:()=>{j&&(clearTimeout(j),j=null),v||d(!0)}}),j=setTimeout(()=>{v||d(!0)},8e3))}).catch(()=>{v||d(!0)}),()=>{v=!0,j&&clearTimeout(j)}},[e,o,y]);const x=`upside-hsform${l||u!=="form"?"":" is-loading"}${t?` ${t}`:""}`,k=v=>{var T;const j=v.trim();if(j){const A=ole();fetch(`https://api.hsforms.com/submissions/v3/integration/submit/${H0}/${rle}`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({fields:[{objectTypeId:"0-1",name:"how_did_you_hear_about_us",value:j}],context:{...A?{hutk:A}:{},pageUri:typeof window<"u"?window.location.href:"",pageName:typeof document<"u"?document.title:""}}),keepalive:!0}).catch(()=>{})}(T=b.current)==null||T.call(b),h("done")};return u==="followup"?n.jsx("div",{className:x,style:a,children:n.jsxs("div",{className:"hsform-followup",children:[n.jsx("p",{className:"hsform-followup-title",children:"One last thing: how did you hear about us?"}),n.jsx("textarea",{className:"hsform-followup-input",rows:3,value:m,onChange:v=>f(v.target.value),placeholder:"A colleague, a podcast, LinkedIn, an event…","aria-label":"How did you hear about us?"}),n.jsxs("div",{className:"hsform-followup-actions",children:[n.jsx("button",{type:"button",className:"hsform-followup-submit",onClick:()=>k(m),children:"Submit"}),n.jsx("button",{type:"button",className:"hsform-followup-skip",onClick:()=>k(""),children:"Skip"})]})]})}):u==="done"?n.jsx("div",{className:x,style:a,children:n.jsx("div",{className:"hsform-followup",children:n.jsx("p",{className:"hsform-followup-title",children:"Thanks, you're all set."})})}):n.jsxs("div",{className:x,style:a,children:[!l&&n.jsxs("div",{className:"hsform-loading",role:"status","aria-live":"polite",children:[n.jsx("div",{className:"hsform-spinner","aria-hidden":"true"}),n.jsx("span",{className:"hsform-loading-label",children:"Loading form…"})]}),n.jsx("div",{id:o,style:{visibility:l?"visible":"hidden"}})]})}const Wt="/request-demo";function lle(){const[e,t]=M.useState(null);M.useEffect(()=>(cG(),()=>{}),[]);const a=M.useCallback(()=>t(null),[]);return M.useEffect(()=>{if(!e)return;const i=r=>{r.key==="Escape"&&a()};return document.addEventListener("keydown",i),document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",i),document.body.style.overflow=""}},[e,a]),e?n.jsx("div",{className:"demo-modal-overlay",onClick:a,children:n.jsxs("div",{className:"demo-modal-content",onClick:i=>i.stopPropagation(),style:{animation:"modalSlideIn 300ms ease"},children:[n.jsx("button",{className:"demo-modal-close",onClick:a,"aria-label":"Close",children:"×"}),n.jsx(Zw,{type:e},e)]})}):null}const EM=[{key:"grow",eyebrow:"Act",heading:"Your AI, your data, your tools",subhead:"Connect the AI tools you already use to clean, unified GTM data, then build and publish what your team needs.",hoverShadow:"0 4px 12px rgba(90, 145, 115, 0.45)"},{key:"measure",eyebrow:"Measure",heading:"Measurement & attribution",subhead:'Forensic answers to "what actually drove pipeline?"',hoverShadow:"0 4px 12px rgba(122, 150, 184, 0.45)"},{key:"channels",eyebrow:"Run",heading:"Marketing channel performance",subhead:"Tie every channel (paid, events, social, content, email) to revenue.",hoverShadow:"0 4px 12px rgba(169, 140, 74, 0.4)"}],dG=[{slug:"ask-your-gtm-data",title:"Ask Your GTM Data",tagline:"Ask anything about your GTM data in the AI tool you already use.",description:"Connect Claude, ChatGPT, Gemini, Cursor, or another supported AI tool to one clean, unified source of GTM truth. Natural-language questions, evidence-backed answers, no BI backlog.",iconName:"Bot",accentColorKey:"purple-soft",category:"grow"},{slug:"gtm-apps",title:"GTM Apps",tagline:"Build interactive dashboards. Publish them to exactly the right people.",description:"Build customizable, interactive miniapps on live GTM data, then publish with enterprise permissioning: org-wide, admins only, or specific people. No shadow IT, no BI backlog.",iconName:"AppWindow",accentColorKey:"green-soft",category:"grow"},{slug:"account-management",title:"Account Management",tagline:"Know the next play for every account.",description:"Win-back kits, account dossiers, and next-best-play re
620commendations built from every call, email, and meeting on the account. Coverage for the whole book, not a hero account a week.",iconName:"Crosshair",accentColorKey:"blue-soft",category:"grow"},{slug:"aeo-measurement",title:"AEO (AI Engine Optimization) Measurement",tagline:"Measure how AI engines drive your pipeline.",description:"Detect and quantify the revenue impact of AI-driven buyer discovery. Upside is the only platform that combines LLM citation traffic, AI tool mentions in call recordings, and self-reported AI research into a single attribution view.",iconName:"Sparkles",accentColorKey:"green-light",category:"measure"},{slug:"revenue-attribution",title:"Revenue Attribution",tagline:"Attribution modeled the way your business works.",description:"Revenue attribution on one clean foundation: out-of-the-box multi-touch with Pipedash, influence reports, or any custom model you build on unified data. Works with the messy, incomplete data you actually have.",iconName:"Network",accentColorKey:"blue-soft",category:"measure"},{slug:"event-field-marketing",title:"Event & Field Marketing Efficiency",tagline:"Prove event ROI your CRM can't see.",description:"AI-detected event attendance, in-cycle influence, format comparison, and post-event activation metrics. The data events tools and CRMs structurally can't produce.",iconName:"MapPin",accentColorKey:"cream",category:"measure"},{slug:"campaign-intelligence",title:"Campaign Intelligence",tagline:"Know which campaigns actually work.",description:"Roll every channel up into the integrated campaign it belongs to, score each program on pipeline instead of opens, and get clear keep/optimize/stop verdicts grounded in two years of evidence, even when campaign membership is messy.",iconName:"Megaphone",accentColorKey:"blue-soft",category:"channels"},{slug:"content-creation-performance",title:"Content Creation & Performance",tagline:"Create content that actually moves deals.",description:"Find website-ready proof in your own customer calls, see which content actually influences pipeline, and decide what to write next from what's already worked, instead of guessing.",iconName:"FileText",accentColorKey:"purple-soft",category:"channels"},{slug:"product-marketing",title:"Product Marketing",tagline:"Know what messaging actually lands.",description:"Hear across every sales call to see which talk tracks move deals, which objections and competitors keep coming up, and which posts and events historically perform, so positioning rests on evidence, not opinion.",iconName:"MessageSquare",accentColorKey:"green-light",category:"channels"},{slug:"win-loss-intelligence",title:"Win-Loss Intelligence",tagline:"Know why you really win and lose.",description:"Reconstruct the real reason every deal closed from the calls and emails themselves, see the patterns across every loss, learn who you keep losing to and what flips it, then route each finding to the team that can act on it.",iconName:"Crosshair",accentColorKey:"cream",category:"measure"},{slug:"pipeline-forecasting",title:"Pipeline Forecasting",tagline:"Call the number you can actually defend.",description:"Forecast from what's really happening inside every open deal (the calls, emails, and meetings), not the stage a rep last updated. See which deals are truly on track, which are slipping, and why, so the number you commit holds up.",iconName:"Gauge",accentColorKey:"blue-soft",category:"measure"},{slug:"pipeline-generation",title:"Pipeline Generation",tagline:"Point demand at the accounts already in-market.",description:"Surface the buying signals hiding in your calls, inbound, and product usage, so you build pipeline against accounts showing real intent instead of spraying the whole list. Know who's in-market, what they care about, and where to focus next.",iconName:"Radio",accentColorKey:"green-light",category:"grow"},{slug:"deal-execution",title:"Deal Execution & Coaching",tagline:"Give every rep the next best move on every deal.",description:"Turn every open deal into a runbook: what's been said, who's engaged, what's stalling, and the next step that moves it forward. Coach the whole team on evidence from real conversations, not a manager's memory of the last one-on-one.",iconName:"Route",accentColorKey:"green-soft",category:"grow"},{slug:"account-based-marketing",title:"ABM Measurement",tagline:"Prove your ABM program on pipeline, not clicks.",description:"Measure your ABM program on what actually moved: how far each target account progressed, which plays moved it, and the pipeline it created. Coordinate marketing and sales on one account view, and put budget behind the accounts that respond.",iconName:"Target",accentColorKey:"cream",category:"channels"},{slug:"paid-media",title:"Paid Media & Demand Efficiency",tagline:"Spend on the paid media that creates pipeline.",description:"Tie paid spend to the deals it actually influenced (including the touchpoints your pixels and platforms miss), so you can cut the campaigns that only look good in-platform and reinvest in the ones that create real pipeline.",iconName:"BarChart3",accentColorKey:"purple-soft",category:"channels"},{slug:"expansion-revenue",title:"Expansion Revenue",tagline:"Grow the accounts you already won.",description:"Score every existing customer on how ready they are to expand, so cross-sell and upsell go to the accounts that will actually say yes. Combine land-deal profile, buying-group depth, engagement, and whitespace into one readiness view, with the plays and evidence to act on each account.",iconName:"LineChart",accentColorKey:"cream",category:"grow",hideFromNav:!0},{slug:"pipeline-conversion",title:"Funnel & Conversion Health",tagline:"See exactly where deals stall.",description:"Find the stage where your pipeline actually breaks, measured on deals that resolved or advanced instead of numbers inflated by still-open opportunities. See time-in-stage, the worst-converting transition, and where to focus, so you fix the bottleneck instead of guessing at it.",iconName:"Filter",accentColorKey:"purple-soft",category:"measure",hideFromNav:!0},{slug:"speed-to-lead",title:"Speed-to-Lead",tagline:"Reach every lead before the moment passes.",description:"See how fast sales follows up after someone engages, who's still waiting, and which reps and campaigns are fastest and slowest. Route the leads that need a touch, hold the whole team to a follow-up standard, and stop losing warm interest to a slow response.",iconName:"Zap",accentColorKey:"blue-soft",category:"grow",hideFromNav:!0},{slug:"customer-advocacy",title:"Customer Advocacy",tagline:"Turn customer voices into marketing proof.",description:"Pull website-ready quotes straight from your own customer calls, know exactly who you're cleared to feature, and build a living voice-of-customer wall. Find the proof your marketing needs without waiting on a case-study cycle or chasing down permissions.",iconName:"Handshake",accentColorKey:"green-soft",category:"channels",hideFromNav:!0},{slug:"launch-intelligence",title:"Product Launch Intelligence",tagline:"Know what's working the moment you lau
620nch.",description:"Read a launch from the deals themselves: which messaging lands, which journeys convert, where pipeline is at risk, and what's driving wins and losses. See what's working while you can still act on it, instead of waiting for a quarterly retro.",iconName:"Send",accentColorKey:"purple-soft",category:"grow",hideFromNav:!0}],RM=e=>dG.find(t=>t.slug===e),NM=()=>dG.filter(e=>!e.hidden),uG=[{slug:"marketers",navLabel:"For Marketers",tagline:"See what marketing actually drove.",iconName:"Megaphone",accentColorKey:"cream",hero:{eyebrow:"Upside for",headline:"See what your marketing actually drove",subhead:"Campaigns, events, content, AEO, and paid all get scored on pipeline, not opens. Upside reads the calls, emails, and touchpoints your CRM never logged, so every program gets a contribution number you can take into the budget conversation, even with the messy, incomplete data you already have."},roles:[{title:"Paid Marketing",description:"Full-funnel reporting that ties spend to pipeline, not opens, with custom channels rolled into the campaign they belong to.",useCaseSlug:"campaign-intelligence"},{title:"PR & Social",description:"Campaign and social performance measured on pipeline contribution, including the touchpoints your CRM never logged.",useCaseSlug:"revenue-attribution"},{title:"Field Marketing",description:"Event and dinner impact tied to pipeline even when campaign membership is incomplete.",useCaseSlug:"event-field-marketing"},{title:"Content Marketing",description:"Content ranked by influence on pipeline, not traffic, with website-ready proof pulled from your own customer calls.",useCaseSlug:"content-creation-performance"},{title:"SEO",description:"See when buyers find you through AI engines like ChatGPT and Perplexity, and connect that discovery to pipeline.",useCaseSlug:"aeo-measurement"},{title:"ABM & Sales Enablement",description:"Account dossiers, next-best plays, and the buying-group personas you are missing on the accounts you want to land.",useCaseSlug:"account-management"},{title:"Customer Marketing",description:"Spot at-risk accounts before renewal, find your real advocates, and surface expansion openings across the book.",useCaseSlug:"account-management"},{title:"Lifecycle Marketing",description:"Nurture track and email performance scored on pipeline, with clear keep, optimize, or stop calls.",useCaseSlug:"campaign-intelligence"}],relatedUseCaseSlugs:["revenue-attribution","campaign-intelligence","content-creation-performance","aeo-measurement","event-field-marketing","product-marketing"],outcomes:[{headline:"Prove what worked, not what last-touch says",body:"See the real multi-touch story across every channel, including the calls, emails, and referrals your CRM never captured."},{headline:"Take a defensible number into budget season",body:"Every channel, campaign, and event gets a pipeline contribution figure you can audit, from sourced to influenced."},{headline:"Plan the next quarter from evidence",body:"Use real customer language from calls, real referral paths, and real AI-discovery signal to decide what to run next."}]},{slug:"revops",navLabel:"For RevOps & GTM Ops",tagline:"Unified GTM data, no ETL project.",iconName:"Database",accentColorKey:"blue-soft",hero:{eyebrow:"Upside for",headline:"Clean, unified GTM data without the ETL project",subhead:"Upside unifies Salesforce, Marketo, Gong, email, calendar, and call transcripts into one clean foundation your whole org can query, build mini-apps on, and trust in every cross-functional review. It works with the messy, incomplete data you already have."},roles:[{title:"RevOps / GTM Eng",description:"Unify sources, automate reporting, and stand up interactive mini-apps on live data instead of one-off exports.",useCaseSlug:"gtm-apps"},{title:"Marketing Ops",description:"Campaign attribution, self-serve reporting, and benchmarks on one model everyone shares.",useCaseSlug:"revenue-attribution"},{title:"Analytics and Insights",description:"Clean, unified data for influence and multi-touch analysis, plus any custom attribution model you build.",useCaseSlug:"ask-your-gtm-data"}],relatedUseCaseSlugs:["ask-your-gtm-data","gtm-apps","revenue-attribution","campaign-intelligence","account-management"],outcomes:[{headline:"Stop being the reporting bottleneck",body:"Marketers, AEs, and execs get evidence-backed answers directly, so you ship strategy instead of one-
620off queries."},{headline:"Work with the data you have",body:"Upside reads calls, emails, and notes that traditional attribution tools cannot, so there is no hygiene project before you start."},{headline:"Build in days, not quarters",body:"Connect Claude, Cursor, or any MCP client through the Upside MCP and ship analyses and mini-apps without writing pipelines from scratch."}]},{slug:"sales-cs",navLabel:"For Sales & CS",tagline:"The next play on every account.",iconName:"Handshake",accentColorKey:"green-light",hero:{eyebrow:"Upside for",headline:"Everything on the account, before every call",subhead:"Account dossiers, buying-group gaps, next-best plays, and churn-risk flags built from the calls, emails, and meetings your CRM never logged. Coverage for the whole book, not a hero account a week."},roles:[{title:"Account Executives",description:"Account dossiers, next-best plays, and win-back kits for every account you own.",useCaseSlug:"account-management"},{title:"SDRs / BDRs",description:"Account briefs, the buying-group personas you are missing, and a clear next step to open the account.",useCaseSlug:"account-management"},{title:"Customer Success",description:"Churn-risk flags, health signals from real conversations, and expansion openings on the accounts that matter.",useCaseSlug:"account-management"},{title:"Advocacy Programs",description:"Referral paths, advocate impact measured on pipeline, and community ROI you can actually ask for.",useCaseSlug:"ask-your-gtm-data"}],relatedUseCaseSlugs:["account-management","ask-your-gtm-data","win-loss-intelligence","revenue-attribution","gtm-apps"],outcomes:[{headline:"Walk in prepared, every time",body:"Open an account and see every call, email, referral, and champion move in one timeline."},{headline:"Catch champion job changes automatically",body:"When a champion changes companies, Upside surfaces it with the full relationship history so you re-engage first."},{headline:"See churn risk before usage does",body:"Sentiment shifts, recurring themes, and engagement drops flagged on the accounts that matter, so CSMs work the right ones."}]},{slug:"executives",navLabel:"For Executives",tagline:"Board-ready GTM truth.",iconName:"LineChart",accentColorKey:"purple-soft",hero:{eyebrow:"Upside for",headline:"Board-ready truth about your GTM motion",subhead:"Pipeline health, deal risk, attribution, forecast accuracy, and win-loss patterns, all grounded in the same model your team runs on. No week-long deck prep, no zero-sum attribution debates."},roles:[{title:"CMO",description:"Campaign ROI, budget justification, and board decks backed by real pipeline contribution.",useCaseSlug:"revenue-attribution"},{title:"CRO",description:"Pipeline health, deal risk, and the real reasons deals close, reconstructed from the calls and emails themselves.",useCaseSlug:"win-loss-intelligence"},{title:"CEO",description:"Full GTM visibility and answers to strategic questions, on demand, in plain language.",useCaseSlug:"ask-your-gtm-data"}],relatedUseCaseSlugs:["ask-your-gtm-data","revenue-attribution","win-loss-intelligence","account-management","campaign-intelligence","aeo-measurement"],outcomes:[{headline:"Replace weeks of prep with answers on demand",body:"Board decks, pipeline reviews, and year-in-review reports stay ready whenever you need them."},{headline:"End the 'marketing says, sales says' debate",body:"When everyone works from one reconstructed source of truth, zero-sum attribution fights go away and planning gets strategic."},{headline:"Invest where it actually moves revenue",body:"Capital allocation grounded in real multi-touch data, with every channel's true contribution in view."}]},{slug:"gtm-engineers",navLabel:"For GTM Engineers",tagline:"Build agents on real GTM data.",iconName:"Workflow",accentColorKey:"green-soft",hero:{eyebrow:"Upside for",headline:"The data layer GTM engineers build on",subhead:"Upside unifies Salesforce, Marketo, Gong, email, and calendar into one clean foundation, and the Upside MCP is how the agents, mini-apps, and workflows you ship read from it. Bring your own playbook. The data is already healed."},roles:[{title:"Outbound GTME",description:"Owns pipeline, meetings, and speed-to-lead. Builds outbound and sales-enablement mini-apps on Upside's account, conversation, and buying-group data.",useCaseSlug:"account-management"},{title:"Marketing Engineer",description:"Sits in marketing. Ships agents and workflows for demand, lifecycle, AEO, content, and brand visibility in LLMs, using the conversation and channel data Upside already unifies.",useCaseSlug:"aeo-measurement"},{title:"Revenue Architect / RevOps Systems",description:"RevOps absorbing GTME traits. Builds enrichment, attribution, and forecasting workflows on the unified data layer instead of a brittle ETL stack.",useCaseSlug:"gtm-apps"},{title:"AI Enablement Engineer",description:"Owns the agent platform itself: guardrails, permissions, MCP integrations, and context engineering. The Upside MCP is the GTM data source agents read from.",useCaseSlug:"ask-your-gtm-data"}
620,{title:"Growth Engineer",description:"Software engineer inside GTM. Ships production code around activation, experimentation, and conversion infrastructure on Upside's milestone and engagement data.",useCaseSlug:"gtm-apps"},{title:"Founding GTME",description:"First commercial hire at an AI-native startup. Stands up the full GTM motion, outbound, lifecycle, and first revenue agents, with Upside as the measurement layer underneath.",useCaseSlug:"revenue-attribution"},{title:"Fractional / Consulting",description:"Embedded operator or boutique consultancy. Drops into GTM teams, stands up the clean data foundation via Upside, builds the agents and mini-apps, then hands off something the team can run.",useCaseSlug:"gtm-apps"},{title:"Executive / CoE Lead",description:"Senior commercial systems leader. Owns the GTM AI Center of Excellence: strategy, governance, and the agent platform standards every team builds against.",useCaseSlug:"ask-your-gtm-data"}],relatedUseCaseSlugs:["ask-your-gtm-data","gtm-apps","account-management","revenue-attribution","aeo-measurement"],outcomes:[{headline:"Skip the data-engineering project",body:"Identity resolution, buying-group detection, email-chain reconstruction, and custom channels are done. The clean foundation your agents and mini-apps depend on is already healed, no ETL sprint required."},{headline:"Ship mini-apps and agents in days, not quarters",body:"The Upside MCP exposes the unified GTM data layer to Claude, Cursor, or any MCP client. Marketers build their own analyses; engineers ship production agents fast, on data they did not have to clean first."},{headline:"Stay close to the data your work depends on",body:"Every output, dossier, win-back kit, agent run, and board recap traces back to specific touchpoints, calls, and emails. Auditable end to end, the way builders need it."}]}],cle=e=>uG.find(t=>t.slug===e),OM=()=>uG.filter(e=>!e.hidden),dle={Sparkles:L0,Network:N$,MapPin:Yte,Users:W$,Target:D$,Send:ane,Crosshair:A$,Radio:P$,Layers:Fte,HeartPulse:$te,Presentation:Zte,FileText:T$,Mail:xy,Megaphone:R$,Database:Lw,Handshake:qte,LineChart:oM,Workflow:z$,Bot:rM,AppWindow:w$,Plug:O$,LayoutDashboard:M$,BookOpen:wte,Library:E$,Microscope:Kte,BarChart3:Tte,PieChart:_te,Filter:zte,Search:nne,Boxes:jte,Table:cne,Columns3:Ote,Calculator:Ate,Sigma:sne,Share2:rne,Link2:Gte,Download:Ite,Upload:mne,Cable:Cte,Clock:Rte,Timer:pne,Zap:bne,Brain:Ste,MessageSquare:Vte,Phone:Bw,Calendar:S$,UserPlus:fne,Building2:k$,ShieldCheck:I$,Lock:Uw,Eye:sM,FileCheck:Wte,ClipboardList:Ete,ListChecks:Hte,GitBranch:Ute,GitMerge:Bte,Repeat:ene,RefreshCw:Jte,Gauge:Lte,Activity:bte,Route:tne,Globe:_$,Webhook:gne,Code:Nte,Terminal:hne,Wrench:yne,Settings:ine,CheckCircle2:Mte,Tag:dne,Tags:une,Blocks:xte},ca=e=>e?dle[e]??null:null,uf=`I'm evaluating Upside (https://upside.tech) for my go-to-market team and want an honest, concrete picture before I book a demo.
621
622Can you explain what Upside actually does, who it's for, and what I'd get out of it day to day? I'm especially interested in how it fits with the tools we already use (our CRM, email, and call recordings) and how it works with AI tools and agents.
623
624Please base your answer on their website — start at https://upside.tech and look at https://upside.tech/platform, https://upside.tech/case-studies, and https://upside.tech/blog — and cite the pages you draw from.`,hG=[{name:"ChatGPT",icon:"/images/llm-chatgpt.jpg",href:"https://chatgpt.com/?q=",prompt:uf},{name:"Claude",icon:"/images/llm-claude.webp",href:"https://claude.ai/new?q=",prompt:uf},{name:"Perplexity",icon:"/images/llm-perplexity.webp",href:"https://www.perplexity.ai/search/new?q=",prompt:uf},{name:"Grok",icon:"/images/llm-grok.webp",href:"https://x.com/i/grok?text=",prompt:uf},{name:"Google AI",icon:"/images/llm-gemini.webp",href:"https://www.google.com/search?udm=50&q=",prompt:uf}],pG=e=>`${e.href}${encodeURIComponent(e.prompt)}`;function Rd(e,t){e.metaKey||e.ctrlKey||e.shiftKey||t()}const E4=[{label:"Documentation",tagline:"Product docs and API reference.",href:"https://docs.upside.tech",iconName:"BookOpen",external:!0},{label:"Miniapp Examples",tagline:"Real GTM apps built on Upside.",href:"/resources/miniapp-examples",iconName:"AppWindow"}
624,{label:"Blog",tagline:"Attribution, AI, GTM intelligence.",href:"/blog",iconName:"FileText"},{label:"Webinars",tagline:"Live + on-demand Upside sessions.",href:"/webinars",iconName:"Presentation"},{label:"Events",tagline:"Show & Tell, dinners, meetups.",href:"/events",iconName:"MapPin"},{label:"Skills",tagline:"Internal skills we share.",href:"/resources/skills",iconName:"Library"},{label:"How To Attract A Dragon",tagline:"A story about shining light on full journeys.",href:"/resources/how-to-attract-a-dragon",iconName:"BookOpen"},{label:"GTM Engineer Community",tagline:"Roles, jobs, and practitioners.",href:"/gtme",iconName:"Users"},{label:"Future of Marketing",tagline:"Industry essays and predictions.",href:"https://fom.xyz",iconName:"Sparkles",external:!0}],ule=EM.map(e=>({key:e.key,eyebrow:e.eyebrow,heading:e.heading,pillars:NM().filter(t=>t.category===e.key&&!t.hideFromNav).map(t=>({label:t.title,tagline:t.tagline,href:`/use-cases/${t.slug}`,iconName:t.iconName}))})).filter(e=>e.pillars.length>0),hle=OM().map(e=>({label:e.navLabel,tagline:e.tagline??"",href:`/for/${e.slug}`,iconName:e.iconName})),ple=({onClose:e,anchorRef:t,onMouseEnter:a,onMouseLeave:i})=>{var m;const r=((m=t.current)==null?void 0:m.getBoundingClientRect().bottom)??64,o=ule.flatMap(f=>f.pillars),l=Math.floor(o.length/2),d=[o.slice(0,l),o.slice(l)],u=(f,y,b,x)=>{const k=ca(y);return n.jsxs(J,{to:f,onClick:v=>Rd(v,e),style:{display:"grid",gridTemplateColumns:"36px minmax(0, 1fr)",alignItems:"flex-start",gap:"10px",padding:"8px 10px",borderRadius:"8px",color:"#1b1f1c",textDecoration:"none",transition:"background 0.15s",minWidth:0},onMouseEnter:v=>v.currentTarget.style.background="rgba(22, 31, 28, 0.05)",onMouseLeave:v=>v.currentTarget.style.background="transparent",children:[n.jsx("span",{style:{width:"32px",height:"32px",borderRadius:"8px",background:"#f1f3f1",display:"inline-flex",alignItems:"center",justifyContent:"center",color:"#2d6a4f",flexShrink:0,marginTop:"2px"},children:k?n.jsx(k,{size:16,strokeWidth:1.8}):null}),n.jsxs("span",{style:{display:"flex",flexDirection:"column",minWidth:0,overflow:"hidden"},children:[n.jsx("span",{style:{fontSize:"14px",fontWeight:700,fontFamily:"'Geist', sans-serif",lineHeight:1.3,color:"#1b1f1c",whiteSpace:"normal"},children:b}),n.jsx("span",{style:{fontSize:"13px",fontWeight:400,color:"#5f6563",lineHeight:1.4,marginTop:"1px",whiteSpace:"normal"},children:x})]})]},f)},h=f=>n.jsx("p",{style:{margin:"0 10px 8px 10px",fontSize:"12px",fontWeight:700,letterSpacing:"0.08em",textTransform:"uppercase",color:"#2d6a4f"},children:f});return n.jsxs("div",{style:{position:"fixed",top:r,left:"50%",transform:"translateX(-50%)",zIndex:100,width:"min(960px, calc(100vw - 32px))",background:"#fff",borderRadius:"16px",boxShadow:"0 18px 48px rgba(16, 24, 20, 0.16)",border:"1px solid #edf1ee",padding:"22px"},onMouseEnter:a,onMouseLeave:i,children:[n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"216px 1fr",gap:"22px",alignItems:"stretch"},children:[n.jsxs("div",{style:{display:"flex",flexDirection:"column",minWidth:0,borderRight:"1px solid #edf1ee",paddingRight:"18px"},children:[h("Roles"),hle.map(f=>u(f.href,f.iconName,f.label,f.tagline))]}),n.jsxs("div",{style:{minWidth:0},children:[h("Use cases"),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(2, minmax(0, 1fr))",columnGap:"16px"},children:d.map((f,y)=>{var b;return n.jsx("div",{style:{display:"flex",flexDirection:"column",minWidth:0},children:f.map(x=>u(x.href,x.iconName,x.label,x.tagline))},((b=f[0])==null?void 0:b.href)??String(y))})})]})]}),n.jsx("div",{style:{marginTop:"14px",paddingTop:"12px",borderTop:"1px solid #eef1ee",textAlign:"right"},children:n.jsx(J,{to:"/use-cases",onClick:f=>Rd(f,e),style:{display:"inline-flex",alignItems:"center",gap:"4px",padding:"6px 10px",fontSize:"14px",fontWeight:600,color:"#2d6a4f",textDecoration:"none",fontFamily:"'Geist', sans-serif"},children:"All use cases →"})})]})},mle=({onClose:e})=>n.jsx("div",{style:{position:"absolute",top:"100%",left:"50%",transform:"translateX(-50%)",marginTop:"0px",zIndex:100,width:"320px",background:"#fff",borderRadius:"12px",boxShadow:"0 12px 36px rgba(0,0,0,0.14)",padding:"16px 12px"},children:n.jsx("div",{style:{display:"flex",flexDirection:"column",minWidth:0},children:E4.map(t=>{const a=ca(t.iconName),i={display:"grid",gridTemplateColumns:"36px minmax(0, 1fr)",alignItems:"flex-start",ga
624p:"10px",padding:"8px 10px",borderRadius:"8px",color:"#1b1f1c",textDecoration:"none",transition:"background 0.15s",minWidth:0},r=n.jsx("span",{style:{width:"32px",height:"32px",borderRadius:"8px",background:"#f1f3f1",display:"inline-flex",alignItems:"center",justifyContent:"center",color:"#2d6a4f",flexShrink:0,marginTop:"2px"},children:a?n.jsx(a,{size:16,strokeWidth:1.8}):null}),o=n.jsxs("span",{style:{display:"flex",flexDirection:"column",minWidth:0,overflow:"hidden"},children:[n.jsx("span",{style:{fontSize:"14px",fontWeight:700,fontFamily:"'Geist', sans-serif",lineHeight:1.3,color:"#1b1f1c",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:t.label}),n.jsx("span",{style:{fontSize:"13px",fontWeight:400,color:"#5f6563",lineHeight:1.4,marginTop:"1px",whiteSpace:"normal"},children:t.tagline})]});return t.external?n.jsxs("a",{href:t.href,target:"_blank",rel:"noopener noreferrer",onClick:l=>Rd(l,e),style:i,onMouseEnter:l=>l.currentTarget.style.background="#f5f5f5",onMouseLeave:l=>l.currentTarget.style.background="transparent",children:[r,o]},t.href):n.jsxs(J,{to:t.href,onClick:l=>Rd(l,e),style:i,onMouseEnter:l=>l.currentTarget.style.background="#f5f5f5",onMouseLeave:l=>l.currentTarget.style.background="transparent",children:[r,o]},t.href)})})}),fle=({onClose:e})=>n.jsxs("div",{style:{position:"absolute",top:"100%",left:"50%",transform:"translateX(-50%)",marginTop:"0px",zIndex:100,width:"248px",background:"#fff",borderRadius:"12px",boxShadow:"0 12px 36px rgba(0,0,0,0.14)",padding:"16px 12px"},children:[n.jsx("p",{style:{margin:"0 10px 6px 10px",fontSize:"10px",fontWeight:700,letterSpacing:"0.1em",textTransform:"uppercase",color:"#5f6563"},children:"AI summary of Upside"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",minWidth:0},children:hG.map(t=>n.jsxs("a",{href:pG(t),target:"_blank",rel:"noopener noreferrer",onClick:a=>Rd(a,e),"aria-label":`${t.name} summary of Upside`,style:{display:"grid",gridTemplateColumns:"24px minmax(0, 1fr)",alignItems:"center",gap:"10px",padding:"8px 10px",borderRadius:"8px",color:"#1b1f1c",textDecoration:"none",transition:"background 0.15s",minWidth:0},onMouseEnter:a=>a.currentTarget.style.background="#f5f5f5",onMouseLeave:a=>a.currentTarget.style.background="transparent",children:[n.jsx("img",{src:t.icon,loading:"lazy",alt:"",style:{width:"20px",height:"20px",borderRadius:"5px",objectFit:"cover"}}),n.jsx("span",{style:{fontSize:"14px",fontWeight:600},children:t.name})]},t.name))})]}),R4=[{label:"Data Foundation",tagline:"One clean, connected record of every account and deal.",href:"/platform/data-foundation",iconName:"Database"},{label:"Dashboard",tagline:"Explorers and report cards that answer leadership's questions, no SQL.",href:"/platform/dashboard",iconName:"LineChart"},{label:"Deep Research",tagline:"Analyst-quality answers across a whole cohort at once.",href:"/platform/deep-research",iconName:"Crosshair"},{label:"Pipedash",tagline:"AI-powered multi-touch attribution that survives the drill-in.",href:"/platform/pipedash",iconName:"Network"},{label:"MCP",tagline:"Your GTM data inside the AI tools you already use.",href:"/platform/mcp",iconName:"Workflow"},{label:"Miniapps",tagline:"Turn an insight into a live app the team can use.",href:"/platform/miniapps",iconName:"AppWindow"},{label:"Radiant",tagline:"Coaches every agent with your definitions and institutional knowledge.",href:"/platform/radiant",iconName:"Sparkles"},{label:"Upside Agent",tagline:"All the power of Claude, sandboxed to your GTM data.",href:"/platform/upside-agent",iconName:"Bot"},{label:"Insight Engineering",tagline:"GTM engineering on tap: analysts build your surface.",href:"/platform/insight-engineering",iconName:"Handshake"}],gle=({onClose:e})=>{const t=r=>{const o=ca(r.iconName);return n.jsxs("a",{href:r.href,onClick:l=>Rd(l,e),style:{display:"grid",gridTemplateColumns:"36px minmax(0, 1fr)",alignItems:"flex-start",gap:"10px",padding:"8px 10px",borderRadius:"8px",color:"#1b1f1c",textDecoration:"none",transition:"background 0.15s",minWidth:0},onMouseEnter:l=>l.currentTarget.style.background="rgba(22, 31, 28, 0.05)",onMouseLeave:l=>l.currentTarget.style.background="transparent",children:[n.jsx("span",{style:{width:"32px",height:"32px",borderRadius:"8px",background:"#f1f3f1",display:"inline-flex",alignItems:"center",justifyContent:"center",color:"#2d6a4f",flexShrink:0,marginTop:"2px"},children:o?n.jsx(o,{size:16,strokeWidth:1.8}):null}),n.jsxs("span",{style:{display:"flex",flexDirection:"column",minWidth:0,overflow:"hidden"},children:[n.jsx("span",{style:{fontSize:"14px",fontWeight:700,fontFamily:"'Geist', sans-serif",lineHeight:1.3,color:"#1b1f1c",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis"},children:r.label}),n.jsx("span",{style:{fontSize:"13px",fontWeight:400,color:"#5f6563",lineHeight:1.4,marginTop:"1px",whiteSpace:"normal"},children:r.tagline})]})]},r.href)},a=R4.slice(0,5),i=R4.slice(5);return n.jsxs("div",{style:{position:"absolute",top:"100%",left:"50%",transform:"translateX(-50%)",marginTop:"0px",zIndex:100,width:"680px",background:"#fff",borderRadius:"12px",boxShadow:"0 12px 36px rgba(0,0,0,0.14)",padding:"20px 18px 14px"},children:[n.jsxs("a",{href:"/platform",onClick:r=>Rd(r,e),style:{display:"flex",alignItems:"center",gap:"6px",padding:"0 2px 11px",marginBottom:"12px",borderBottom:"1px solid #eaeeea",color:"#2d6a4f",textDecoration:"none",fontFamily:"'Geist', sans-serif",fontWeight:700,fontSize:"14px"},onMouseEnter:r=>r.currentTarget.style.color="#1f5238",onMouseLeave:r=>r.currentTarget.style.color="#2d6a4f",children:["Platform Overview ",n.jsx("span",{"aria-hidden":"true",style:{color:"#509a79"},children:"→"})]}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 1fr) minmax(0, 1fr)",gap:"12px"},children:[n.jsx("div",{style:{display:"flex",flexDirection:"column",minWidth:0},children:a.map(t)}),n.jsx("div",{style:{display:"flex",flexDirection:"column",minWidth:0},children:i.map(t)})]})]})},yle=({variant:e="dark",wrapperClassName:t=""})=>{const[a,i]=M.useState(!1),[r,o]=M.useState(!1),[l,d]=M.useState(!1),[u,h]=M.useState(!1),[m,f]=M.use
624State(!1),[y,b]=M.useState(!1),[x,k]=M.useState(!1),[v,j]=M.useState(!1),T=M.useRef(null),A=M.useRef(null),C=M.useRef(null),_=M.useRef(null),E=Kn(),R=gc(),W=e==="dark",z=M.useRef(null),H=()=>{z.current!==null&&(window.clearTimeout(z.current),z.current=null)},$=G=>{H(),h(G==="platform"),d(G==="solutions"),o(G==="resources"),f(G==="ai")},U=()=>{H(),z.current=window.setTimeout(()=>{h(!1),d(!1),o(!1),f(!1),z.current=null},180)};M.useEffect(()=>()=>H(),[]);const X=[{label:"Customers",href:"/customers"},{label:"Pricing",href:"/pricing"}],D=G=>G.startsWith("/#")?!1:E.pathname===G,P=E4.some(G=>E.pathname.startsWith(G.href)),O=E.pathname.startsWith("/for/")||E.pathname.startsWith("/use-cases"),B=E.pathname.startsWith("/platform");M.useEffect(()=>{const G=I=>{T.current&&!T.current.contains(I.target)&&o(!1),A.current&&!A.current.contains(I.target)&&d(!1),C.current&&!C.current.contains(I.target)&&h(!1),_.current&&!_.current.contains(I.target)&&f(!1)};return document.addEventListener("mousedown",G),()=>document.removeEventListener("mousedown",G)},[]),M.useEffect(()=>{if(!u&&!l&&!r&&!m)return;const G=()=>{h(!1),d(!1),o(!1),f(!1)};return window.addEventListener("scroll",G,{passive:!0}),()=>window.removeEventListener("scroll",G)},[u,l,r,m]);const Y=M.useCallback(G=>{const I=document.getElementById(G);I&&(I.scrollIntoView({behavior:"smooth"}),window.history.pushState(null,"",`${window.location.pathname}#${G}`))},[]);M.useCallback((G,I)=>{const F=I.indexOf("#");if(F===-1)return;const K=I.substring(0,F)||"/",ne=I.substring(F+1);G.preventDefault(),E.pathname===K?Y(ne):(R(K),setTimeout(()=>{Y(ne)},100))},[E.pathname,R,Y]);const V=G=>n.jsx("svg",{width:"10",height:"6",viewBox:"0 0 10 6",fill:"none",xmlns:"http://www.w3.org/2000/svg",style:{transition:"transform 0.2s",transform:G?"rotate(180deg)":"rotate(0deg)"},children:n.jsx("path",{d:"M1 1L5 5L9 1",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})});return n.jsx("div",{className:`global-navigation__wrapper ${W?"cc-on-dark":""} ${t}`.trim(),children:n.jsx("div",{className:"header-component",children:n.jsxs("header",{className:"header",children:[n.jsx("div",{className:"nav w-nav","data-collapse":"medium",role:"banner",children:n.jsxs("div",{className:"nav__container",children:[n.jsxs("div",{className:"nav__logo-menu-btn-wrapper",children:[n.jsx("a",{href:"/",className:"nav__brand w-nav-brand",children:n.jsx("div",{className:"nav__logo w-embed",children:n.jsx(au,{})})}),n.jsx("button",{className:"menu-button w-nav-button",onClick:()=>i(!a),"aria-label":"Toggle menu",children:n.jsx("div",{className:"nav__menu-icon w-embed",children:n.jsx("svg",{width:"auto",height:"100%",viewBox:"0 0 22 18",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:n.jsx("path",{d:"M1.33301 9H19.9997M1.33301 2H19.9997M1.33301 16H19.9997",stroke:"currentColor",strokeWidth:"2.25",strokeLinecap:"round",strokeLinejoin:"round"})})})})]}),n.jsxs("nav",{className:"nav__menu w-nav-menu",role:"navigation",style:{columnGap:"var(--_layout---spacing--s)",whiteSpace:"nowrap"},children:[n.jsxs("div",{ref:C,onMouseEnter:()=>$("platform"),onMouseLeave:U,style:{position:"relative",display:"inline-flex"},children:[n.jsxs("button",{className:`nav__link body-xs w-nav-link ${B?"w--current":""}`,onClick:()=>{H(),h(!u)},style:{background:"none",border:"none",cursor:"pointer",display:"inline-flex",alignItems:"center",gap:"4px"},children:["Platform",V(u)]}),u&&n.jsx(gle,{onClose:()=>h(!1)})]}),n.jsxs("div",{ref:A,onMouseEnter:()=>$("solutions"),onMouseLeave:U,style:{position:"relative",display:"inline-flex"},children:[n.jsxs("button",{className:`nav__link body-xs w-nav-link ${O?"w--current":""}`,onClick:()=>{H(),d(!l)},style:{background:"none",border:"none",cursor:"pointer",display:"inline-flex",alignItems:"center",gap:"4px"},children:["Solutions",V(l)]}),l&&n.jsx(ple,{onClose:()=>d(!1),anchorRef:A,onMouseEnter:()=>$("solutions"),onMouseLeave:U})]}),X.map(G=>n.jsx(J,{to:G.href,className:`nav__link body-xs w-nav-link ${D(G.href)?"w--current":""}`,children:G.label},G.href)),n.jsxs("div",{ref:T,onMouseEnter:()=>$("resources"),onMouseLeave:U,style:{position:"relative",display:"inline-flex"},children:[n.jsxs("button",{className:`nav__link body-xs w-nav-link ${P?"w--current":""}`,onClick:()=>{H(),o(!r)},style:{background:"none",border:"none",cursor:"pointer",display:"inline-flex",alignItems:"center",gap:"4px"},children:["Resources",V(r)]}),r&&n.jsx(mle,{onClose:()=>o(!1)})]}),n.jsxs("div",{ref:_,onMouseEnter:()=>$("ai"),onMouseLeave:U,style:{position:"relative",display:"inline-flex"},children:[n.jsx("button",{type:"button",className:"nav__link body-xs w-nav-link",onClick:()=>{H(),f(!m)},"aria-label":"Get an AI summary of Upside","aria-haspopup":"true","aria-expanded":m,style:{background:"none",border:"none",cursor:"pointer",display:"inline-flex",alignItems:"center",padding:"0 2px"},children:(()=>{const G=ca("Bot");return G?n.jsx(G,{size:18,strokeWidth:1.8,"aria-hidden":"true"}):null})()}),m&&n.jsx(fle,{onClose:()=>f(!1)})]}),n.jsx("div",{className:"mobile-nav-buttons__wrapper",children:n.jsxs("div",{className:"nav__buttons cc-mobile",children:[n.jsx("a",{href:"https://app.upside.tech",className:"nav-text-link body-xs",children:"Sign In"}
624),n.jsx(J,{to:Wt,className:"cta w-button nav-demo-cta",children:n.jsx("span",{className:"nav-demo-label",children:"Request Demo"})})]})})]}),n.jsxs("div",{className:"nav__buttons",style:{flexShrink:0,whiteSpace:"nowrap",marginLeft:"auto"},children:[n.jsx("a",{href:"https://app.upside.tech",className:"nav-text-link body-xs",children:"Sign In"}),n.jsx(J,{to:Wt,className:"cta w-button nav-demo-cta",children:n.jsx("span",{className:"nav-demo-label",children:"Request Demo"})})]})]})}),a&&n.jsx("div",{className:"w-nav-overlay",style:{display:"block",position:"fixed",inset:0,height:"100svh",zIndex:9999,overflow:"visible"},onClick:()=>i(!1),children:n.jsxs("nav",{className:"nav__menu",style:{width:"100%",display:"flex",flexDirection:"column",alignItems:"flex-start",padding:"6rem 3.5rem 3.5rem 3.5rem",background:"rgb(80, 154, 121)",height:"100svh",position:"relative",overflowY:"auto"},onClick:G=>G.stopPropagation(),children:[n.jsx("button",{onClick:()=>i(!1),"aria-label":"Close menu",style:{position:"absolute",top:"2rem",right:"2rem",background:"none",border:"none",color:"#fff",fontSize:"2rem",cursor:"pointer",lineHeight:1,padding:"0.5rem"},children:"✕"}),n.jsxs("button",{className:"nav__link body-xs w-nav-link",style:{color:"#FFFFFF99",display:"flex",alignItems:"center",width:"100%",background:"none",border:"none",cursor:"pointer",gap:"6px"},onClick:()=>k(!x),children:["Platform",V(x)]}),x&&n.jsxs("div",{style:{paddingLeft:"1.5rem",width:"100%"},children:[n.jsx("a",{href:"/platform",className:"nav__link body-xs w-nav-link",style:{color:"#FFFFFF",display:"flex",alignItems:"flex-start",width:"100%",fontWeight:600,marginTop:"0.5rem"},onClick:()=>i(!1),children:"Platform Overview"}),R4.map(G=>n.jsx("a",{href:G.href,className:"nav__link body-xs w-nav-link",style:{color:"#FFFFFF99",display:"flex",alignItems:"flex-start",width:"100%"},onClick:()=>i(!1),children:G.label},G.href))]}),n.jsxs("button",{className:"nav__link body-xs w-nav-link",style:{color:"#FFFFFF99",display:"flex",alignItems:"center",width:"100%",background:"none",border:"none",cursor:"pointer",gap:"6px"},onClick:()=>j(!v),children:["Solutions",V(v)]}),v&&n.jsxs("div",{style:{paddingLeft:"1.5rem",width:"100%"},children:[n.jsx("p",{style:{color:"#FFFFFFCC",fontSize:"0.7rem",fontWeight:700,letterSpacing:"0.08em",textTransform:"uppercase",margin:"0.75rem 0 0.25rem"},children:"Roles"}),OM().map(G=>n.jsx(J,{to:`/for/${G.slug}`,className:"nav__link body-xs w-nav-link",style:{color:"#FFFFFF99",display:"flex",alignItems:"flex-start",width:"100%"},onClick:()=>i(!1),children:G.navLabel},G.slug)),n.jsx("p",{style:{color:"#FFFFFFCC",fontSize:"0.7rem",fontWeight:700,letterSpacing:"0.08em",textTransform:"uppercase",margin:"0.75rem 0 0.25rem"},children:"Use Cases"}),n.jsx(J,{to:"/use-cases",className:"nav__link body-xs w-nav-link",style:{color:"#FFFFFF",display:"flex",alignItems:"flex-start",width:"100%",fontWeight:600},onClick:()=>i(!1),children:"All Use Cases"})]}),X.map(G=>n.jsx(J,{to:G.href,className:"nav__link body-xs w-nav-link",style:{color:"#FFFFFF99",display:"flex",alignItems:"flex-start",width:"100%"},onClick:()=>i(!1),children:G.label},G.href)),n.jsxs("button",{className:"nav__link body-xs w-nav-link",style:{color:"#FFFFFF99",display:"flex",alignItems:"center",width:"100%",background:"none",border:"none",cursor:"pointer",gap:"6px"},onClick:()=>b(!y),children:["Resources",V(y)]}),y&&n.jsx("div",{style:{paddingLeft:"1.5rem",width:"100%"},children:E4.map(G=>G.external?n.jsx("a",{href:G.href,target:"_blank",rel:"noopener noreferrer",className:"nav__link body-xs w-nav-link",style:{color:"#FFFFFF99",display:"flex",alignItems:"flex-start",width:"100%"},onClick:()=>i(!1),children:G.label},G.href):n.jsx(J,{to:G.href,className:"nav__link body-xs w-nav-link",style:{color:"#FFFFFF99",display:"flex",alignItems:"flex-start",width:"100%"},onClick:()=>i(!1),children:G.label},G.href))}),n.jsx("div",{className:"mobile-nav-buttons__wrapper",style:{flexGrow:1},children:n.jsxs("div",{className:"nav__buttons cc-mobile",children:[n.jsx("a",{href:"https://app.upside.tech",className:"nav-text-link body-xs",children:"Sign In"}
624),n.jsx(J,{to:Wt,className:"cta w-button nav-demo-cta",children:n.jsx("span",{className:"nav-demo-label",children:"Request Demo"})})]})})]})})]})})})},ble=()=>{const e=Kn(),t=gc(),a=M.useCallback(i=>{const r=document.getElementById(i);r&&(r.scrollIntoView({behavior:"smooth"}),window.history.pushState(null,"",`${window.location.pathname}#${i}`))},[]);return M.useCallback((i,r)=>{const o=r.indexOf("#");if(o===-1)return;const l=r.substring(0,o)||"/",d=r.substring(o+1);i.preventDefault(),e.pathname===l?a(d):(t(l),setTimeout(()=>{a(d)},100))},[e.pathname,t,a]),n.jsx("footer",{className:"footer",children:n.jsx("div",{className:"footer__container",children:n.jsxs("div",{className:"footer__wrapper",children:[n.jsxs("div",{className:"footer__top",children:[n.jsxs("div",{className:"footer__company",children:[n.jsx(J,{to:"/",className:"w-inline-block",children:n.jsx("img",{src:"/images/upside-logo.svg",loading:"lazy",alt:"",className:"footer__logo"})}),n.jsx("p",{className:"body-m",children:"The data layer for the age of agentic GTM."}),n.jsxs("div",{className:"footer__llm",children:[n.jsx("p",{className:"body-s footer__llm-label",children:"Get an AI summary of Upside"}),n.jsx("div",{className:"footer__llm-icons",children:hG.map(i=>n.jsx("a",{href:pG(i),target:"_blank",rel:"noopener noreferrer",className:"footer__llm-link","aria-label":`${i.name} summary of Upside`,title:`Ask ${i.name}`,children:n.jsx("img",{src:i.icon,loading:"lazy",alt:i.name})},i.name))})]})]}),n.jsxs("nav",{className:"footer__nav",children:[n.jsxs("div",{className:"footer__nav-column",children:[n.jsx("div",{className:"footer__nav-column-header",children:n.jsx("p",{className:"body-m",children:"Platform"})}),n.jsxs("div",{className:"footer__nav-links",children:[n.jsx(J,{to:"/platform",className:"footer__nav-link body-s",children:"Platform overview"}),n.jsx(J,{to:"/platform/data-foundation",className:"footer__nav-link body-s",children:"Data Foundation"}),n.jsx(J,{to:"/platform/dashboard",className:"footer__nav-link body-s",children:"Dashboard"}),n.jsx(J,{to:"/platform/deep-research",className:"footer__nav-link body-s",children:"Deep Research"}),n.jsx(J,{to:"/platform/pipedash",className:"footer__nav-link body-s",children:"Pipedash"}),n.jsx(J,{to:"/platform/mcp",className:"footer__nav-link body-s",children:"MCP"}),n.jsx(J,{to:"/platform/miniapps",className:"footer__nav-link body-s",children:"Miniapps"}),n.jsx(J,{to:"/platform/radiant",className:"footer__nav-link body-s",children:"Radiant"}),n.jsx(J,{to:"/platform/upside-agent",className:"footer__nav-link body-s",children:"Upside Agent"}),n.jsx(J,{to:"/platform/insight-engineering",className:"footer__nav-link body-s",children:"Insight Engineering"})]})]}),n.jsxs("div",{className:"footer__nav-column",children:[n.jsx("div",{className:"footer__nav-column-header",children:n.jsx("p",{className:"body-m",children:"Use Cases"})}),n.jsxs("div",{className:"footer__nav-links",children:[n.jsx(J,{to:"/use-cases",className:"footer__nav-link body-s",children:"All use cases"}),n.jsx(J,{to:"/use-cases/revenue-attribution",className:"footer__nav-link body-s",children:"Revenue attribution"}),n.jsx(J,{to:"/use-cases/aeo-measurement",className:"footer__nav-link body-s",children:"AEO measurement"}),n.jsx(J,{to:"/use-cases/event-field-marketing",className:"footer__nav-link body-s",children:"Event & field marketing"}),n.jsx(J,{to:"/use-cases/account-management",className:"footer__nav-link body-s",children:"Account management"}),n.jsx(J,{to:"/use-cases/ask-your-gtm-data",className:"footer__nav-link body-s",children:"Ask your GTM data"}),n.jsx(J,{to:"/use-cases/gtm-apps",className:"footer__nav-link body-s",children:"GTM apps"})]})]}),n.jsxs("div",{className:"footer__nav-column",children:[n.jsx("div",{className:"footer__nav-column-header",children:n.jsx("p",{className:"body-m",children:"Resources"})}),n.jsxs("div",{className:"footer__nav-links",children:[n.jsx(J,{to:"/webinars",className:"footer__nav-link body-s",children:"Webinars"}),n.jsx(J,{to:"/blog",className:"footer__nav-link body-s",children:"Blog"}),n.jsx(J,{to:"/events",className:"footer__nav-link body-s",children:"Events"}),n.jsx(J,{to:"/gtme",className:"footer__nav-link body-s",children:"GTM Engineer Community"}),n.jsx("a",{href:"https://docs.upside.tech/",target:"_blank",rel:"noopener noreferrer",className:"footer__nav-link body-s",children:"Documentation"}),n.jsx(J,{to:"/resources/miniapp-examples",className:"footer__nav-link body-s",children:"Miniapp Examples"}),n.jsx(J,{to:"/resources/skills",className:"footer__nav-link body-s",children:"Skills"}),n.jsx(J,{to:"/resources/how-to-attract-a-dragon",className:"footer__nav-link body-s",children:"How To Attract A Dragon"}),n.jsx(J,{to:"/customers",className:"footer__nav-link body-s",children:"Customers"}),n.jsx(J,{to:"/glossary",className:"footer__nav-link body-s",children:"GTM Glossary"}),n.jsx(J,{to:"/pricing",className:"footer__nav-link body-s",children:"Pricing"})]})]}),n.jsxs("div",{className:"footer__nav-column",children:[n.jsx("div",{className:"footer__nav-column-header",children:n.jsx("p",{className:"body-m",children:"Company"})}),n.jsxs("div",{className:"footer__nav-links",children:[n.jsx(J,{to:"/about",className:"footer__nav-link body-s",children:"About Us"}),n.jsx(J,{to:"/security",className:"footer__nav-link body-s",children:"Security"}),n.jsx("a",{href:"https://jobs.ashbyhq.com/upside-tech",target:"_blank",rel:"noopener noreferrer",className:"footer__nav-link body-s",children:"Careers"}),n.jsx("a",{href:"https://trust.upside.tech",target:"_blank",rel:"noopener noreferrer",className:"footer__nav-link body-s",children:"Trust Center"}),n.jsx("a",{href:"https://status.upside.tech",target:"_blank",rel:"noopener noreferrer",className:"footer__nav-link body-s",children:"Status"}),n.jsx(J,{to:"/legal/terms-of-service",className:"footer__nav-link body-s",children:"Terms of Service"}),n.jsx(J,{to:"/legal/privacy-policy",className:"footer__nav-link body-s",children:"Privacy Policy"}),n.jsx(J,{to:"/legal/cookie-policy",className:"footer__nav-link body-s",children:"Cookie Policy"})]})]})]})]}),n.jsxs("div",{className:"footer__bottom",children:[n.jsxs("div",{className:"footer__social-links",children:[n.jsx("a",{href:"https://www.linkedin.com/company/upsidelabs/",target:"_blank",rel:"noopener noreferrer",className:"footer__social-link w-inline-block",children:n.jsx("img",{src:"/images/linkedin.svg",loading:"lazy",alt:"LinkedIn"})}),n.jsx("a",{href:"https://www.instagram.com/unfilteredupside/",target:"_blank",rel:"noopener noreferrer",className:"footer__social-link w-inline-block",children:n.jsx("img",{src:"/images/instagram.svg",loading:"lazy",alt:"Instagram"})}),n.jsx("a",{href:"https://www.youtube.com/@upsidelabs",target:"_blank",rel:"noopener noreferrer",className:"footer__social-link w-inline-block",children:n.jsx("img",{src:"/images/youtube.svg",loading:"lazy",alt:"YouTube"})}),n.jsx("a",{href:"https://x.com/upsidegtm",target:"_blank",rel:"noopener noreferrer",className:"footer__social-link w-inline-block",children:n.jsx("img",{src:"/images/x.svg",loading:"lazy",alt:"X"})}),n.jsx("a",{href:"https://aigtm.engineer/",target:"_blank",rel:"noopener noreferrer",className:"footer__social-link w-inline-block",children:n.jsx("img",{src:"/images/substack.svg",loading:"lazy",alt:"Substack"})})]}),n.jsx("a",{href:"https://www.g2.com/products/upside-upside/reviews",target:"_blank",rel:"noopener noreferrer",className:"footer__nav-link body-s self-end",children:"Read our reviews on G2"}),n.jsxs("div",{className:"footer__details",children:[n.jsx("p",{className:"body-s",children:"© 2026 Dragonsight Labs, Inc."}),n.jsx("p",{className:"body-s",children:"Made with ♥ in San Francisco."})]}),n.jsx("div",{className:"w-embed",children:n.jsx("a",{id:"preferenceCenterLink_ketch",href:"#privacy-center",onClick:i=>{i.preventDefault();let r=0;const o=()=>{var l;if(!(r>20))try{(l=window.ketch)==null||l.call(window,"showExperience",{experienceType:"preference"})}catch{r++,setTimeout(o,500)}};o()},children:"Your privacy choices"})})]})]})})})},Qe=({children:e,navVariant:t="dark",hideNavbar:a=!1,navWrapperClassName:i})=>n.jsxs(n.Fragment,{children:[!a&&n.jsx(yle,{variant:t,wrapperClassName:i}),e,n.jsx(ble,{})]}),tP="https://upside.tech",vle="/og/og-home.png",nP={title:"Upside – Revenue Attribution & Intelligence Platform",description:"Upside unifies, structures and enhances all your go-to-market data so you can know what happened, what worked and at what cost for every deal, campaign, or initiative."};function mG(e){return xle(e||vle)}function xle(e){return/^https?:\/\//i.test(e)?e:e.startsWith("//")?`https:${e}`:e.startsWith("/")?`${tP}${e}`:`${tP}/${e}`}function Oi(e,t,a,i){let r=document.head.querySelector(`${e}[${t}="${a}"]`);r||(r=document.createElement(e),r.setAttribute(t,a),document.head.appendChild(r));for(const[o,l]of Object.entries(i))r.setAttribute(o,l)}function Je({title:e,description:t,ogImage:a,canonicalUrl:i,jsonLd:r,noIndex:o}){const l=e?`${e} | Upside`:nP.title,d=t||nP.description,u=mG(a);return M.useEffect(()=>{document.title=l,Oi("meta","name","description",{content:d}),Oi("meta","property","og:title",{content:l}),Oi("meta","property","og:description",{content:d}),Oi("meta","property","og:image",{content:u}),Oi("meta","property","og:type",{content:"website"}),Oi("meta","name","twitter:card",{content:"summary_large_image"}),Oi("meta","name","twitter:title",{content:l}),Oi("meta","name","twitter:description",{content:d}),Oi("meta","name","twitter:image",{content:u}),o&&(Oi("meta","name","robots",{content:"noindex, nofollow"}),Oi("meta","name","googlebot",{content:"noindex, nofollow"})),i&&!o&&Oi("link","rel","canonical",{href:i})},[l,d,u,i,o]),n.jsxs(tle,{children:[n.jsx("title",{children:l}),n.jsx("meta",{name:"description",content:d}),o&&n.jsx("meta",{name:"robots",content:"noindex, nofollow"}),o&&n.jsx("meta",{name:"googlebot",content:"noindex, nofollow"}),n.jsx("meta",{property:"og:title",content:l}),n.jsx("meta",{property:"og:description",content:d}),n.jsx("meta",{property:"og:image",content:u}
624),n.jsx("meta",{property:"og:image:width",content:"1200"}),n.jsx("meta",{property:"og:image:height",content:"630"}),n.jsx("meta",{property:"og:type",content:"website"}),n.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),n.jsx("meta",{name:"twitter:title",content:l}),n.jsx("meta",{name:"twitter:description",content:d}),n.jsx("meta",{name:"twitter:image",content:u}),i&&!o&&n.jsx("link",{rel:"canonical",href:i}),r&&n.jsx("script",{type:"application/ld+json",children:JSON.stringify(r)})]})}const wle={"/platform/data-foundation":"Database","/platform/dashboard":"Layers","/platform/deep-research":"Microscope","/platform/pipedash":"LineChart","/platform/mcp":"Network","/platform/miniapps":"AppWindow","/platform/radiant":"Sparkles","/platform/upside-agent":"Bot","/platform/insight-engineering":"Handshake"},se={green:"#2d6a4f",greenSoft:"#509A79",text:"#1b1f1c",muted:"#4f5654",border:"#e6ebe7",bgSoft:"#fafafa",greenLight:"#e8f4ed",cream:"#f6efdd"},PM=`
625.pf-card { position: relative; border: 1px solid var(--pf-card-border, ${se.border}); background: #fff; }
626.pf-card--nav { transition: border-color .18s ease, box-shadow .18s ease, transform .18s ease; }
627.pf-card--nav:hover { border-color: rgba(80,154,121,0.55); box-shadow: 0 6px 20px rgba(12,30,32,0.08); transform: translateY(-2px); }
628.pf-card__hit::after { content: ""; position: absolute; inset: 0; }
629.pf-card__link { position: relative; z-index: 1; }
630/* Focus ring lands on the card, not on the invisible stretched overlay. */
631.pf-card:has(.pf-card__hit:focus-visible), .pf-card.pf-card__hit:focus-visible { outline: 2px solid #509A79; outline-offset: 3px; }
632.pf-card__hit:focus-visible { outline: none; }
633.pf-card__arrow { display: inline-block; transition: transform .18s ease; }
634/* These two custom properties are the ONE definition of the animated
635   underline's weight and color, on every surface that draws one. Both are
636   deliberately not overridable per surface: a card on the homepage and a card
637   on /platform/mcp draw the same line or the design has drifted.
638
639   The color is pinned rather than inherited. It used to be currentColor, which
640   sounds like the tidy choice but meant the line took whatever green each
641   surface happened to set on its label — measured across the site that was
642   #2d6a4f on 11 routes and #509A79 on 6, which reads as two different-looking
643   underlines even though both measured 1.5px. Every CardCta sits inside
644   .pf-card (always white), so one pinned green is safe on all of them; if a
645   card is ever put on a dark ground, give it a light line explicitly rather
646   than reintroducing inheritance here. */
647.pf-card__ul { position: relative; --pf-ul-thickness: 2px; --pf-ul-color: #509A79; }
648/* The underline is REVEALED by clipping, never scaled. Animating scaleX on a
649   hairline makes the browser rasterize it as a composited layer and stretch
650   that raster, so the line renders thick and soft for the duration of the
651   sweep and then snaps thin when the layer is dropped. clip-path leaves the
652   element at its true size throughout, so the thickness is constant.
653   WHY 2px AND NOT 1.5px
654   The line's vertical position is the sum of everything stacked above it —
655   heroes, clamp() headings, SVG visuals — so it is fractional, and the
656   fraction differs per page. The same panel measured docY 4905.414 on
657   /use-cases/pipeline-conversion and 4860.109 on /use-cases/customer-advocacy.
658   A fractional position means the line straddles the device-pixel grid, and
659   HOW it straddles decides how heavy it looks. No thickness escapes that; a
660   thicker line just loses proportionally less of its solid core:
661
662     1.5px = 3 device px @2x -> 3 solid rows aligned, 2 at half-phase
663     2px   = 4 device px @2x -> 4 solid rows aligned, 3 at half-phase
664
665   2px never bottoms out into looking thin, because its worst case is still
666   thicker than 1.5px's best case. Keep it a whole pixel — a fractional
667   height re-introduces straddling in the height as well as the position. */
668.pf-card__ul::after {
669  content: ""; position: absolute; left: 0; right: 0; bottom: -2px;
670  height: var(--pf-ul-thickness);
671  background: var(--pf-ul-color);
672  clip-path: inset(0 100% 0 0);
673  transition: clip-path .22s ease;
674}
675.pf-card__hit:hover .pf-card__ul::after, .pf-card__hit:focus-visible .pf-card__ul::after,
676.pf-card__link:hover .pf-card__ul::after, .pf-card__link:focus-visible .pf-card__ul::after { clip-path: inset(0 0 0 0); }
677.pf-card__hit:hover .pf-card__arrow, .pf-card__hit:focus-visible .pf-card__arrow,
678.pf-card__link:hover .pf-card__arrow, .pf-card__link:focus-visible .pf-card__arrow { transform: translateX(3px); }
679@media (prefers-reduced-motion: reduce) {
680  /* Keep every state cue, drop the travel: the underline still marks the
681     target and the border still responds, they just don't animate. */
682  .pf-card--nav, .pf-card__arrow, .pf-card__ul::after { transition: none; }
683  .pf-card--nav:hover { transform: none; }
684  .pf-card__hit:hover .pf-card__arrow, .pf-card__hit:focus-visible .pf-card__arrow,
685  .pf-card__link:hover .pf-card__arrow, .pf-card__link:focus-visible .pf-card__arrow { transform: none; }
686}
687`;function Ds({label:e}){return n.jsxs(n.Fragment,{children:[n.jsx("span",{className:"pf-card__ul",children:e})," ",n.jsx("span",{className:"pf-card__arrow","aria-hidden":"true",children:"→"})]})}const fG=`
688${PM}
689.pf-grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(1.5rem, 4vw, 3.5rem); align-items: center; }
690.pf-grid.flip .pf-grid-copy { order: 2; } .pf-grid.flip .pf-grid-art { order: 1; }
691/* hero-wide gives the visual column extra room (for wide data-table visuals). */
692.pf-grid.hero-wide { grid-template-columns: minmax(0, 0.85fr) minmax(0, 1.15fr); }
693/* .pf-art is defined globally in interim-type.css (neutral dot-grid surface). */
694@media (max-width: 880px) {
695  .pf-grid { grid-template-columns: 1fr; }
696  .pf-grid.hero-wide { grid-template-columns: 1fr; }
697  .pf-grid.flip .pf-grid-copy { order: 1; } .pf-grid.flip .pf-grid-art { order: 2; }
698}
699.pf-pill-row { display: flex; flex-wrap: wrap; gap: 0.5rem 0.6rem; margin-top: 1.1rem; }
700.pf-pill { font-family: Geist, sans-serif; font-size: 0.9rem; font-weight: 500; color: #2f3633; border: 1px solid #d6ddd8; border-radius: 999px; padding: 0.4rem 0.85rem; background: #fff; white-space: nowrap; }
701.pf-hero-secondary { transition: border-color .15s ease, background .15s ease; }
702.pf-hero-secondary:hover { border-color: #b9c5be; background: #f7f9f8; }
703/* The "delta" payoff lines were wireframe directives mistakenly encoded as page
704   elements (Alex's call) — removed site-wide. */
705.pf-callout { display: none; }
706.pf-blurbs { display: flex; flex-direction: column; gap: 0.85rem; margin-top: 1.1rem; }
707/* Green badge eyebrow — the canonical section/stage kicker (matches homepage .plat-badge). */
708.pf-badge, .pf-stage-label { display: inline-flex; align-items: center; font-family: Geist, sans-serif; font-weight: 600; font-size: 0.75rem; letter-spacing: 0.06em; text-transform: uppercase; color: #509A79; background: rgba(80,154,121,0.10); border-radius: 999px; padding: 0.42rem 0.78rem; margin-bottom: 1.1rem; }
709/* Icon lead-in blurbs (Figma stage pattern): small ink icon + bold heading line, muted body below. */
710.pf-iblurbs { display: flex; flex-direction: column; gap: 1.4rem; margin-top: 1.6rem; }
711.pf-iblurb-head { display: flex; align-items: center; gap: 0.55rem; margin: 0; }
712/* Green final-CTA band (mirrors the homepage .hcta 1:1, scoped to platform pages). */
713.pf-fcta { max-width: 1440px; margin: 0 auto; box-sizing: border-box; display: flex; flex-direction: column; align-items: center; gap: 40px; padding: 96px 72px; background: #fafafa; border-top: 1px solid #e6ebe7; border-bottom: 1px solid #e6ebe7; }
714.pf-fcta-avatar { width: 96px; height: 96px; border-radius: 24px; display: flex; align-items: center; justify-content: center; background: rgba(255,255,255,0.95); box-shadow: 0 0 0 1px rgba(0,0,0,0.075), 0 2px 2px rgba(0,0,0,0.04); }
715.pf-fcta-avatar img { display: block; }
716.pf-fcta-copy { display: flex; flex-direction: column; align-items: center; gap: 20px; }
717.pf-fcta-heading { margin: 0; max-width: 600px; text-align: center; color: #1b1f1c; font-size: 48px; line-height: 55.2px; font-weight: 500; letter-spacing: -1.92px; }
718.pf-fcta-sub { margin: 0; max-width: 640px; text-align: center; color: #4f5654; font-size: 20px; line-height: 30px; font-weight: 400; }
719.pf-fcta-actions { display: flex; gap: 20px; justify-content: center; flex-wrap: wrap; align-items: center; }
720.pf-fcta-btn { display: inline-flex; align-items: center; gap: 8px; border-radius: 999px; padding: 14px 20px; font-size: 16px; line-height: 20.8px; font-weight: 500; text-decoration: none; transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease; }
721.pf-fcta-btn--primary { background: #509a79; color: #fff; }
722.pf-fcta-btn--primary:hover { background: #427f64; }
723.pf-fcta-btn--secondary { background: #fff; color: #1b1f1c; border: 1.5px solid #d6ddd8; }
724.pf-fcta-btn--secondary:hover { background: #f2f5f3; }
725.pf-fcta-arrow { font-size: 15px; line-height: 1; }
726@media (max-width: 860px) {
727  .pf-fcta { padding: 56px 24px; gap: 32px; }
728  .pf-fcta-heading { font-size: 32px; line-height: 38px; letter-spacing: -1px; }
729  .pf-fcta-sub { font-size: 17px;
729 line-height: 26px; }
730}
731/* Visual captions were wireframe annotations (illustrative / sample / "Hooli demo
732   org" / "marker sketch") — agency directives, not page copy. Hidden site-wide. */
733.pf-cap { display: none; }
734/* Two-column FAQ (Figma): intro/header on the left, accordion on the right. */
735.pf-faq-split { display: grid; grid-template-columns: minmax(0, 0.92fr) minmax(0, 1.32fr); gap: clamp(2rem, 5vw, 4.5rem); align-items: start; }
736.pf-faq-split .pf-faq-list { margin-top: 0; }
737@media (max-width: 880px) { .pf-faq-split { grid-template-columns: 1fr; gap: 1.75rem; } }
738.pf-faq { border: 1px solid #e6ebe7; border-radius: 12px; background: #fff; transition: border-color .15s ease, box-shadow .15s ease; }
739.pf-faq:hover { border-color: #cdd8d1; }
740.pf-faq[open] { border-color: #cdd8d1; box-shadow: 0 4px 16px rgba(27,31,28,0.05); }
741.pf-faq > summary { display: flex; align-items: center; justify-content: space-between; gap: 1.25rem; cursor: pointer; list-style: none; padding: 1.15rem 1.35rem; }
742.pf-faq > summary::-webkit-details-marker { display: none; }
743.pf-faq-chev { flex-shrink: 0; color: #509A79; transition: transform .2s ease; }
744.pf-faq[open] .pf-faq-chev { transform: rotate(180deg); }
745.pf-faq-a { padding: 0 1.35rem 1.2rem; }
746/* Smoothly expand/collapse native <details> instead of jumping. interpolate-size
747   lets block-size animate to/from auto; allow-discrete fades content-visibility.
748   Browsers without ::details-content just toggle instantly (graceful). */
749:root { interpolate-size: allow-keywords; }
750.pf-faq::details-content {
751  block-size: 0;
752  overflow: clip;
753  opacity: 0;
754  transition: block-size .3s ease, opacity .2s ease, content-visibility .3s allow-discrete;
755}
756.pf-faq[open]::details-content { block-size: auto; opacity: 1; }
757
758/* Subdivided blurb lattice (Vercel-style): one bordered box split by hairlines,
759   not a scatter of separate cards. The inner grid is shifted -1px so each cell's
760   top/left borders form the internal dividers while the outer frame is the
761   container border (clipped by overflow:hidden) — tolerates partial last rows. */
762.pf-blurbgrid { margin-top: 1.5rem; border: 1px solid #e6ebe7; border-radius: 16px; overflow: hidden; background: #fff; }
763.pf-blurbgrid-inner { display: grid; grid-template-columns: repeat(var(--pf-bg-cols, 2), minmax(0, 1fr)); margin: -1px 0 0 -1px; }
764.pf-blurb { border-top: 1px solid #e6ebe7; border-left: 1px solid #e6ebe7; padding: 1.45rem 1.6rem; min-width: 0; }
765@media (max-width: 700px) {
766  .pf-blurbgrid-inner { grid-template-columns: 1fr; }
767  .pf-blurb-filler { display: none; }
768}
769/* Customer case-study cards (CaseCards). Logos ship in mixed colors (some are
770   white wordmarks built for dark backgrounds), so normalize them all to a
771   uniform dark ink that reaches full strength on hover.
772   Hover lift/shadow/arrow now come from the shared .pf-card model above; only
773   the resting shadow and the logo treatment are specific to these cards. The
774   resting shadow lives here, not inline, so the hover shadow can override it. */
775.cs-card { box-shadow: 0 1px 2px rgba(27,31,28,0.04); }
776.cs-logo { filter: brightness(0); opacity: .68; transition: opacity .2s ease; }
777.cs-card:hover .cs-logo { opacity: 1; }
778@media (prefers-reduced-motion: reduce) { .cs-logo { transition: none; } }
779/* Six-item card grids lay out 2x3 (not 4 + a sparse second row), collapsing
780   responsively. Applied by CardRow/SpineCards when there are exactly 6 cards. */
781.pf-cards-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
782@media (max-width: 900px) { .pf-cards-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
783@media (max-width: 560px) { .pf-cards-3 { grid-template-columns: 1fr; } }
784/* "Boxed" layout (Vercel/Attio): content sits in a centered column with hairline
785   side rails + bottom divider on a uniform canvas. */
786.pf-boxed { position: relative; background: #fff; border-left: 1px solid #e6ebe7; border-right: 1px solid #e6ebe7; border-bottom: 1px solid #e6ebe7; }
787`;function Wo({seo:e,children:t,navVariant:a="light"}){return n.jsxs(Qe,{navVariant:a,children:[n.jsx(Je,{title:e.title,description:e.description,canonicalUrl:e.canonical,ogImage:e.ogImage}),n.jsx("style",{children:fG}),t]})}function Ce({children:e,alt:t=!1,center:a=!1,artBg:i,id:r}){return n.jsx("section",{id:r,style:{background:se.bgSoft,...i?{"--pf-art
787-bg":i}:{}},children:n.jsx("div",{className:"pf-boxed",style:{maxWidth:"1440px",margin:"0 auto",padding:"clamp(3rem, 6vw, 4.75rem) clamp(1.25rem, 5vw, 4.5rem)",textAlign:a?"center":"left",background:t?se.bgSoft:"#fff"},children:e})})}function De({children:e,style:t}){return n.jsx("h2",{className:"it-title",style:{color:se.text,margin:"0 0 0.85rem 0",...t},children:e})}function We({children:e,style:t}){return n.jsx("p",{className:"it-lead",style:{color:se.muted,margin:0,maxWidth:"70ch",...t},children:e})}function gs({head:e,eyebrow:t,sub:a,visual:i,flip:r=!1,alt:o=!1,artBg:l,artFit:d=!1,children:u}){return n.jsxs(Ce,{alt:o,artBg:l,children:[n.jsxs("div",{className:`pf-grid${r?" flip":""}`,children:[n.jsxs("div",{className:"pf-grid-copy",style:{minWidth:0},children:[t&&n.jsx(Ie,{children:t}),n.jsx(De,{style:t?{margin:"0.9rem 0 0.85rem"}:void 0,children:e}),a&&n.jsx(We,{style:{marginTop:"0.9rem"},children:a})]}),n.jsx("div",{className:"pf-grid-art",style:{display:"flex",justifyContent:"center",minWidth:0},children:n.jsx("div",{className:`pf-art${d?" pf-art-fit":""}`,children:i})})]}),u]})}const aP={display:"inline-flex",alignItems:"center",gap:"0.4rem",color:se.green,fontWeight:600,textDecoration:"none",background:"none",border:"none",padding:0,margin:0,cursor:"pointer",font:"inherit",fontSize:"1.0625rem",lineHeight:1.2};function IM(e){return e.replace(/[\s→↓↗↘↙➜»]+$/u,"")}function Yh({label:e,href:t,onClick:a,onDark:i=!1}){const r=IM(e),o=i?{...aP,color:"#fff"}:aP,l=n.jsx("span",{"aria-hidden":"true",style:{fontWeight:700},children:"→"});if(a&&!t)return n.jsxs("button",{type:"button",style:o,onClick:a,children:[r," ",l]});const d=u=>{if(t&&t.startsWith("#")){const h=document.getElementById(t.slice(1));h&&(u.preventDefault(),h.scrollIntoView({behavior:"smooth"}),window.history.pushState(null,"",t))}};return n.jsxs("a",{href:t,style:o,onClick:d,children:[r," ",l]})}function Vs({eyebrow:e,headline:t,sub:a,secondary:i,extraCta:r,visual:o,wideVisual:l,breadcrumbRoot:d={label:"Platform",href:"/platform"}}){return n.jsx("section",{style:{marginTop:"-65px",padding:"clamp(8.5rem, 9vw, 9rem) clamp(1.25rem, 5vw, 4.5rem) clamp(3rem, 6vw, 5rem)",background:"#fff",borderBottom:`1px solid ${se.border}`},children:n.jsx("div",{style:{maxWidth:"1440px",margin:"0 auto"},children:n.jsxs("div",{className:`pf-grid${l?" hero-wide":""}`,children:[n.jsxs("div",{className:"pf-grid-copy",style:{minWidth:0},children:[n.jsxs("nav",{"aria-label":"Breadcrumb",style:{display:"flex",alignItems:"center",gap:"0.5rem",marginBottom:"1.15rem",fontFamily:"Geist, sans-serif",fontSize:"0.9rem",fontWeight:500},children:[n.jsx(J,{to:d.href,style:{color:se.muted,textDecoration:"none"},children:d.label}),n.jsx("span",{"aria-hidden":"true",style:{color:"#c1c9c4"},children:"/"}),n.jsx("span",{style:{color:se.muted},children:e})]}),n.jsx("h1",{className:"it-display",style:{color:se.text,margin:"0 0 1.1rem 0"},children:t}),n.jsx("p",{className:"it-lead",style:{color:se.muted,margin:"0 0 1.75rem 0",maxWidth:"60ch"},children:a}),n.jsxs("div",{style:{display:"flex",gap:"1rem",flexWrap:"wrap",alignItems:"center"},children:[n.jsx(J,{to:Wt,className:"cta cc-large w-button",children:"Request demo"}),i&&n.jsx(gG,{label:i.label,href:i.href}),r]})]}),n.jsx("div",{className:"pf-grid-art",style:{display:"flex",justifyContent:"center",minWidth:0},children:n.jsx("div",{className:"pf-art",children:o})})]})})})}function yc({src:e,alt:t}){return n.jsx("img",{src:e,alt:t,loading:"eager",style:{width:"100%",height:"auto",display:"block",borderRadius:"16px"}})}function gG({label:e,href:t}){const a=IM(e),i=r=>{if(t.startsWith("#")){const o=document.getElementById(t.slice(1));o&&(r.preventDefault(),o.scrollIntoView({behavior:"smooth"}),window.history.pushState(null,"",t))}};return n.jsxs("a",{href:t,onClick:i,className:"pf-hero-secondary",style:{display:"inline-flex",alignItems:"center",gap:"0.5rem",background:"#fff",color:se.text,border:"1.5px solid #d6ddd8",borderRadius:"999px",padding:"0.75rem 1.15rem",fontFamily:"Geist, sans-serif",fontSize:"1rem",fontWeight:500,textDecoration:"none",lineHeight:1.3},children:[a,n.jsx("span",{"aria-hidden":"true",style:{fontSize:"0.9rem"},children:"→"})]})}function kle({items:e}){return e.some(a=>a.icon)?n.jsx("div",{className:"pf-iblurbs",children:e.map((a,i)=>{const r=a.icon?ca(a.icon):null;return n.jsxs("div",{children:[n.jsxs("p",{className:"it-body pf-iblurb-head",style:{color:se.text},children:[r&&n.jsx(r,{size:20,strokeWidth:1.9,"aria-hidden":"true",style:{color:se.text,flexShrink:0}}),n.jsx("span",{className:"it-leadin",children:a.lead})]}),n.jsx("p",{className:"it-body",style:{color:se.muted,margin:"0.35rem 0 0 0"},children:a.rest})]},i)})}):n.jsx("div",{className:"pf-blurbs",children:e.map((a,i)=>n.jsxs("p",{className:"it-body",style:{color:se.text,margin:0},children:[n.jsx("span",{className:"it-leadin",children:a.lead})," ",n.jsx("span",{style:{color:se.muted},children:a.rest})]},i))})}function Ie({children:e}){return n.jsx("span",{className:"pf-badge",children:e})}function jle({pills:e}){return n.jsx("div",{className:"pf-pill-row",children:e.map(t=>n.jsx("span",{className:"pf-pill",children:t},t))})}function Sle({children:e}){return n.jsx("div",{className:"pf-callout",children:e})}function If({label:e,heading:t,lead:a,blurbs:i,pills:r,callout:o,visual:l,caption:d,flip:u=!1,alt:h=!1,artBg:m,id:f}){return n.jsx(Ce,{alt:h,artBg:m,id:f,children:n.jsxs("div",{className:`pf-grid${u?" flip":""}`,children:[n.jsxs("div",{className:"pf-grid-copy",style:{minWidth:0},children:[n.jsx("span",{className:"pf-stage-label",children:e}),n.jsx("h2",{className:"it-title-sm",style:{color:se.text,margin:"0 0 0.6rem 0"},children:t}),n.jsx("p",{className:"it-lead",style:{color:se.muted,margin:0,maxWidth:"52ch"},children:a}),n.jsx(kle,{items:i}),r&&n.jsx(jle,{pills:r}),o&&n.jsx(Sle,{children:o})]}),n.jsxs("div",{className:"pf-grid-art",style:{display:"flex",flexDirection:"column",minWidth:0},children:[n.jsx("div",{className:"pf-art",children:l}),d&&n.jsx("div",{className:"pf-cap",children:d})]})]})})}function Ws({cards:e}){const t=e.some(i=>i.visual),a=e.length===6;return n.jsx("div",{className:a?"pf-cards-3":void 0,style:{display:"grid",...a?{}:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},gap:"1rem",marginTop:"1.75rem",alignItems:"stretch"},children:e.map((i,r)=>{const o={display:"flex",flexDirection:"column",borderRadius:"16px",padding:"1.35rem 1.5rem"},l=n.jsxs(n.Fragment,{children:[i.logo&&n.jsx("img",{src:i.logo.src,alt:i.logo.alt,className:"cs-logo",style:{height:i.logo.height??28,width:"auto",maxWidth:"200px",display:"block",marginBottom:"0.9rem"}}),i.num&&n.jsx("div",{className:"it-label",style:{color:se.greenSoft,marginBottom:"0.5rem"},children:i.num}),n.jsx("div",{className:"it-card-title",style:{color:se.text,margin:"0 0 0.5rem 0"},children:i.title}),n.jsx("p",{className:"it-body-sm",style:{color:se.muted,margin:0},children:i.body}),t&&n.jsx("div",{style:{marginTop:"auto",paddingTop:"1.2rem"},children:i.visual})]});return i.href?n.jsxs(J,{to:i.href,className:"pf-card pf-card--nav pf-card__hit",style:{...o,textDecoration:"none"},children:[l,n.jsx("span",{style:{marginTop:"auto",paddingTop:"1.1rem",color:se.greenSoft,fontWeight:600,fontSize:"0.9rem"},children:n.jsx(Ds,{label:"Explore"})})]},r):n.jsx("div",{className:"pf-card",style:o,children:l},r)})})}function N4({label:e="COMING"}){return n.jsx("span",{style:{marginLeft:"0.5rem",fontFamily:"Geist, sans-serif",fontWeight:700,fontSize:"0.62rem",letterSpacing:"0.04em",color:"#a1560b",background:"#FEF3C7",borderRadius:"999px",padding:"0.1rem 0.5rem",verticalAlign:"middle"},children:e})}function Rn({items:e}){const t=e.length,a=t<=2?t:t%3===0?3:t%2===0?2:3,i=(a-t%a)%a;return n.jsx("div",{className:"pf-blurbgrid",children:n.jsxs("div",{className:"pf-blurbgrid-inner",style:{"--pf-bg-cols":a},children:[e.map((r,o)=>{const l=r.icon?ca(r.icon):null;return n.jsxs("div",{className:"pf-blurb",children:[l&&n.jsx(l,{size:20,strokeWidth:1.9,"aria-hidden":"true",style:{color:se.greenSoft,display:"block",marginBottom:"0.7rem"}}),n.jsxs("p",{className:"it-body",style:{color:se.text,margin:0},children:[n.jsx("span",{className:"it-leadin",children:r.lead}),r.coming&&n.jsx(N4,{})," ",n.jsx("span",{style:{color:se.muted},children:r.rest})]})]},o)}),Array.from({length:i}).map((r,o)=>n.jsx("div",{className:"pf-blurb pf-blurb-filler","aria-hidden":"true"},`filler-${o}`))]})})}function aa({visual:e,caption:t,artBg:a}
787){return n.jsxs("div",{style:{marginTop:"2rem",...a?{"--pf-art-bg":a}:{}},children:[n.jsx("div",{className:"pf-art",style:{maxWidth:"640px",margin:"0 auto"},children:e}),t&&n.jsx("div",{className:"pf-cap",style:{maxWidth:"640px",margin:"0.85rem auto 0",textAlign:"center"},children:t})]})}function Jw({headers:e,rows:t}){return n.jsxs("div",{style:{marginTop:"1.75rem",border:`1px solid ${se.border}`,borderRadius:"16px",overflow:"hidden",background:"#fff",boxShadow:"0 4px 16px rgba(27,31,28,0.05)"},children:[n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr"},children:[n.jsx("div",{className:"it-card-title",style:{color:se.text,padding:"1rem 1.25rem",background:"#fff",borderBottom:`1px solid ${se.border}`,borderRight:`1px solid ${se.border}`},children:e[0]}),n.jsx("div",{className:"it-card-title",style:{color:se.green,padding:"1rem 1.25rem",background:se.greenLight,borderBottom:`1px solid ${se.border}`},children:e[1]})]}),t.map(([a,i],r)=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr"},children:[n.jsxs("div",{className:"it-body-sm",style:{display:"flex",gap:"0.5rem",color:se.muted,padding:"0.9rem 1.25rem",borderBottom:r===t.length-1?"none":`1px solid ${se.border}`,borderRight:`1px solid ${se.border}`},children:[n.jsx("span",{style:{color:"#a33",fontWeight:700,flexShrink:0},children:"✕"}),n.jsx("span",{children:a})]}),n.jsxs("div",{className:"it-body-sm",style:{display:"flex",gap:"0.5rem",color:se.text,padding:"0.9rem 1.25rem",borderBottom:r===t.length-1?"none":`1px solid ${se.border}`},children:[n.jsx("span",{style:{color:se.green,fontWeight:700,flexShrink:0},children:"✓"}),n.jsx("span",{children:i})]})]},r))]})}function Cle({children:e,style:t}){return n.jsx("div",{style:{marginTop:"1.5rem",background:se.bgSoft,border:`1px solid ${se.border}`,borderRadius:"16px",padding:"1.35rem 1.5rem",...t},children:e})}const zs={graphite:{src:"/images/graphite_logo_upside_customer.svg",alt:"Graphite is an Upside Customer",height:26},cresta:{src:"/images/cresta_logo_upside_customer.svg",alt:"Cresta is an Upside Customer",height:26},assembled:{src:"/images/assembled_logo_upside_customer.svg",alt:"Assembled is an Upside Customer",height:26},syndio:{src:"/images/syndio_logo_upside_customer.svg",alt:"Syndio is an Upside Customer",height:28},dscout:{src:"/images/dscout_logo_upside_customer.svg",alt:"dscout is an Upside Customer",height:27},comply:{src:"/images/comply-logo.png",alt:"Comply",height:52},servicetitan:{src:"/images/servicetitan_logo_upside_customer.png",alt:"ServiceTitan is an Upside Customer",height:34}};function yG({children:e,logo:t}){return n.jsxs("div",{style:{marginTop:"1.75rem",maxWidth:"640px",border:`1px solid ${se.border}`,borderRadius:"12px",padding:"1.35rem 1.5rem",background:"#fff"},children:[t&&n.jsx("img",{src:t.src,alt:t.alt,className:"cs-logo",style:{height:t.height??24,width:"auto",maxWidth:"180px",display:"block",marginBottom:"0.95rem"}}),e]})}function Ks({cards:e}){const t=e.length===6;return n.jsx("div",{className:t?"pf-cards-3":void 0,style:{display:"grid",...t?{}:{gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))"},gap:"1rem",marginTop:"1.75rem"},children:e.map(a=>n.jsxs("div",{className:"pf-card pf-card--nav",style:{borderRadius:"16px",padding:"19px 21px"},children:[n.jsx("span",{className:"it-label",style:{display:"block",color:se.greenSoft},children:a.dir}),n.jsx("div",{className:"it-card-title",style:{color:se.text,margin:"6px 0 7px 0"},children:a.title}),n.jsx("p",{className:"it-body-sm",style:{color:se.muted,margin:"0 0 12px 0"},children:a.body}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"6px 12px"},children:a.links.map((i,r)=>{const o=ca(wle[i.href]);return n.jsxs(J,{to:i.href,className:`it-body-sm ${r===0?"pf-card__hit":"pf-card__link"}`,style:{display:"inline-flex",alignItems:"center",gap:"0.35rem",color:se.green,fontWeight:600,textDecoration:"none"},children:[o&&n.jsx(o,{size:15,strokeWidth:1.9}),n.jsx(Ds,{label:i.label})]},i.href)})})]},a.title))})}function Ale({items:e,defaultOpenFirst:t=!1,fullWidth:a=!1}){return n.jsx("div",{className:"pf-faq-list",style:{display:"flex",flexDirection:"column",gap:"0.75rem",marginTop:"1.75rem",maxWidth:a?"none":"60rem"},children:e.map((i,r)=>n.jsxs("details",{className:"pf-faq",open:t&&r===0,children:[n.jsxs("summary",{children:[n.jsx("span",{className:"it-body",style:{color:se.text,fontWeight:500},children:i.q}),n.jsx("svg",{className:"pf-faq-chev",width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2.2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:n.jsx("path",{d:"M6 9l6 6 6-6"})})]}),n.jsx("p",{className:"it-body pf-faq-a",style:{color:se.muted,margin:0},children:i.a})]},i.q))})}function zo({badge:e,heading:t,sub:a,items:i}){return n.jsxs("div",{className:"pf-faq-split",children:[n.jsxs("div",{children:[e&&n.jsx(Ie,{children:e}),n.jsx(De,{style:{margin:"0 0 0.85rem 0"},children:t}),a&&n.jsx(We,{children:a})]}),n.jsx(Ale,{items:i,defaultOpenFirst:!0,fullWidth:!0})]})}function Nd({logo:e,quote:t,cite:a,link:i}){return n.jsxs("div",{style:{maxWidth:"820px",margin:"0 auto",textAlign:"center"},children:[e&&n.jsx("img",{src:e.src,alt:e.alt,className:"cs-logo",style:{height:e.height??30,width:"auto",maxWidth:"210px",display:"block",margin:"0 auto 1.75rem"}}),n.jsxs("blockquote",{className:"it-quote",style:{color:se.text,margin:"0 auto 1.4rem",maxWidth:"720px",padding:0,border:"none",fontSize:"clamp(1.35rem, 2.4vw, 1.7rem)",lineHeight:1.35,fontWeight:500},children:["“",t,"”"]}),n.jsx("div",{className:"it-quote-cite",style:{color:se.muted},children:a}),i&&n.jsx("div",{style:{marginTop:"1.4rem"},children:n.jsxs("a",{href:i.href,style:{color:se.green,fontWeight:600,textDecoration:"none"},children:[i.label," →"]})})]})}function Tle({items:e}){return n.jsx("div",{style:{border:`1px solid ${se.border}`,borderRadius:"16px",background:"#fff",overflow:"hidden"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"flex",gap:"0.85rem",padding:"1.3rem 1.6rem",borderTop:a===0?"none":`1px solid ${se.border}`},children:[n.jsx("span",{style:{color:se.greenSoft,fontWeight:700,lineHeight:1.6},"aria-hidden":"true",children:"›"}),n.jsxs("p",{className:"it-body",style:{margin:0,color:se.text},children:[n.jsx("span",{className:"it-leadin",children:t.lead})," ",n.jsx("span",{style:{color:se.muted},children:t.rest})]})]},a))})}function Xs({heading:e,sub:t,secondary:a,extraCta:i}){return n.jsxs("section",{className:"pf-fcta",children:[n.jsx("div",{className:"pf-fcta-avatar",children:n.jsx("img",{src:"/images/upside-icon-green.svg",alt:"","aria-hidden":"true",width:54,height:45})}),n.jsxs("div",{className:"pf-fcta-copy",children:[n.jsx("h2",{className:"pf-fcta-heading",children:e}),n.jsx("p",{className:"pf-fcta-sub",children:t})]}),n.jsxs("div",{className:"pf-fcta-actions",children:[n.jsx(J,{to:Wt,className:"pf-fcta-btn pf-fcta-btn--primary",children:"Request demo"}),a?n.jsxs("a",{href:a.href,className:"pf-fcta-btn pf-fcta-btn--secondary",children:[IM(a.label),n.jsx("span",{className:"pf-fcta-arrow","aria-hidden":"true",children:"→"})]}):n.jsxs(J,{to:"/platform",className:"pf-fcta-btn pf-fcta-btn--secondary",children:["Explore the platform",n.jsx("span",{className:"pf-fcta-arrow","aria-hidden":"true",children:"→"})]}),i]})]})}function _le({cards:e}){return n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(240px, 1fr))",gap:"1rem",marginTop:"1.75rem"},children:e.map(t=>n.jsxs("div",{style:{border:`1px solid ${se.border}`,borderRadius:"16px",padding:"1.35rem 1.5rem",background:"#fff"},children:[n.jsxs("span",{className:"it-label",style:{color:se.greenSoft},children:[t.num," · ",t.label]}),n.jsx("div",{className:"it-card-title",style:{color:se.text,margin:"0.45rem 0 0.5rem 0"},children:t.heading}),n.jsx("p",{className:"it-body-sm",style:{color:se.muted,margin:0},children:t.body})]},t.heading))})}function Mle({cards:e}){const t="ui-monospace, 'SF Mono', Menlo, Consolas, monospace",a=i=>typeof i=="string"?i.replace(/\.\s*$/,""):i;return n.jsx("div",{style:{marginTop:"1.75rem",border:`1px solid ${se.border}`,borderRadius:"16px",overflow:"hidden",background:"#fff"},children:e.map((i,r)=>n.jsxs("div",{className:"pf-tool-row",style:{display:"grid",gridTemplateColumns:"minmax(220px, 0.95fr) 1.55fr",gap:"0.4rem 2rem",padding:"1.15rem 1.5rem",borderTop:r===0?"none":`1px solid ${se.border}`,alignItems:"start"},children:[n.jsxs("div",{style:{minWidth:0},children:[n.jsx("div",{style:{fontFamily:t,fontWeight:700,fontSize:"0.9rem",color:se.green,wordBreak:"break-word",marginBottom:"0.35rem"},children:a(i.toolName)}),n.jsxs("div",{className:"it-card-title",style:{color:se.text,fontSize:"1.0625rem",display:"flex",alignItems:"center",gap:"0.5rem",flexWrap:"wrap"},children:[i.heading,i.comingSoon&&n.jsx("span",{className:"it-label",style:{background:"#FEF3C7",color:"#a1560b",borderRadius:"999px",padding:"0.15rem 0.6rem"},children:"Coming soon"})]})]}),n.jsx("p",{className:"it-body-sm",style:{color:se.muted,margin:0},children:i.body})]},r))})}function e1({cards:e}){const t="ui-monospace, 'SF Mono', Menlo, Consolas, monospace";return n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(340px, 1fr))",gap:"1.5rem",marginTop:"1.75rem",alignItems:"stretch"},children:e.map(a=>n.jsxs("article",{className:"pf-card pf-card--nav cs-card",style:{display:"flex",flexDirection:"column",borderRadius:"20px",padding:"1.85rem 1.9rem"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.9rem",flexWrap:"wrap",marginBottom:"1.05rem"},children:[a.logo&&n.jsx("img",{src:a.logo.src,alt:a.logo.alt,className:"cs-logo",style:{height:a.logo.height??42,width:"auto",maxWidth:"260px",display:"block"}}),a.label&&n.jsx("span",{className:"it-label",style:{color:se.greenSoft,lineHeight:1.3},children:a.label})]}),n.jsx("h3",{className:"it-card-title",style:{color:se.text,margin:"0 0 0.7rem 0",fontSize:"1.4rem",lineHeight:1.2},children:a.heading}),n.jsx("p",{className:"it-body-sm",style:{color:se.muted,margin:0,lineHeight:1.55},children:a.body}),a.chips&&a.chips.length>0&&n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.5rem",marginTop:"1.1rem"},children:a.chips.map(i=>n.jsx("span",{style:{fontFamily:t,fontSize:"0.8rem",fontWeight:600,color:se.green,background:"#eef5f1",border:"1px solid #d3e4db",borderRadius:"8px",padding:"0.32rem 0.62rem"},children:i},i))}),a.quote&&n.jsxs("figure",{style:{position:"relative",background:se.bgSoft,border:`1px solid ${se.border}`,borderRadius:"14px",padding:"1.2rem 1.35rem 1.25rem",margin:"1.3rem 0 0 0"},children:[n.jsx("span",{"aria-hidden":"true",style:{position:"absolute",top:"-0.7rem",left:"0.85rem",fontFamily:"Georgia, 'Times New Roman', serif",fontSize:"3rem",lineHeight:1,color:se.greenSoft,opacity:.32},children:"“"}),n.jsx("blockquote",{className:"it-quote",style:{position:"relative",color:se.text,margin:0,padding:0,border:"none",fontSize:"1.05rem",lineHeight:1.5,fontWeight:500},children:a.quote}),a.who&&n.jsx("figcaption",{className:"it-quote-cite",style:{color:se.muted,marginTop:"0.85rem",fontSize:"0.92rem"},children:a.who})]}),n.jsx(J,{to:a.link.href,className:"pf-card__hit cs-cta",style:{marginTop:"auto",paddingTop:"1.3rem",display:"inline-flex",alignItems:"center",gap:"0.4rem",color:se.green,fontWeight:600,textDecoration:"none",fontSize:"0.98rem"},children:n.jsx(Ds,{label:a.link.label})})]},a.heading))})}function iP({label:e,src:t,title:a,onDark:i=!1}){const[r,o]=M.useState(!1);return M.useEffect(()=>{if(!r)return;const l=u=>{u.key==="Escape"&&o(!1)};document.addEventListener("keydown",l);const d=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",l),document.body.style.overflow=d}},[r]),n.jsxs(n.Fragment,{children:[n.jsx(Yh,{label:e,onClick:()=>o(!0),onDark:i}),r&&n.jsx("div",{role:"dialog","aria-modal":"true","aria-label":a,onClick:()=>o(!1),style:{position:"fixed",inset:0,zIndex:1e3,background:"rgba(27,31,28,0.55)",display:"flex",alignItems:"center",justifyContent:"center",padding:"clamp(0.75rem, 3vw, 2.5rem)"},children:n.jsxs("div",{onClick:l=>l.stopPropagation(),style:{background:"#fff",borderRadius:"14px",width:"min(1200px, 100%)",height:"min(840px, 92vh)",display:"flex",flexDirection:"column",overflow:"hidden",boxShadow:"0 24px 64px rgba(27,31,28,0.3)"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.75rem",padding:"0.75rem 1.1rem",borderBottom:`1px solid ${se.border}`,flexShrink:0},children:[n.jsx("span",{className:"it-card-title",style:{color:se.text,fontSize:"0.95rem"},children:a}),n.jsx("button",{type:"button",onClick:()=>o(!1),"aria-label":"Close",style:{border:"none",background:"#f1f3f1",borderRadius:"999px",width:32,height:32,fontSize:"1.25rem",lineHeight:1,cursor:"pointer",color:se.muted,flexShrink:0},children:"×"})]}),n.jsx("iframe",{src:t,title:a,style:{border:"none",width:"100%",flex:1},loading:"lazy"})]})})]})}const Ele=11e-5,Rle=80,Uj=200,rP=.3,Nle=1.3;function Ole({color:e="255,255,255",lineAlpha:t=.16,nodeAlpha:a=.5}){const i=M.useRef(null);return M.useEffect(()=>{const r=i.current;if(!r)return;const o=r.getContext("2d");if(!o)return;const l=Math.max(1,window.devicePixelRatio||1);let d=0,u=0;const h=[];let m=0;const f=typeof window.matchMedia=="function"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches,y=()=>({x:Math.random()*d,y:Math.random()*u,vx:(Math.random()-.5)*rP,vy:(Math.random()-.5)*rP}),b=()=>Math.max(Rle,Math.round(d*u*Ele)),x=()=>{const C=r.getBoundingClientRect();d=C.width,u=C.height,r.width=Math.round(d*l),r.height=Math.round(u*l),o.setTransform(l,0,0,l,0,0);const _=b();for(;h.length<_;)h.push(y());h.length=_},k=()=>{o.clearRect(0,0,d,u),o.lineWidth=.6;for(let C=0;C<h.length;C++){const _=h[C];for(let E=C+1;E<h.length;E++){const R=h[E],W=_.x-R.x,z=_.y-R.y,H=W*W+z*z;if(H<Uj*Uj){const U=(1-Math.sqrt(H)/Uj)*t;o.strokeStyle=`rgba(${e},${U})`,o.beginPath(),o.moveTo(_.x,_.y),o.lineTo(R.x,R.y),o.stroke()}}}o.fillStyle=`rgba(${e},${a})`;for(const C of h)o.beginPath(),o.arc(C.x,C.y,Nle,0,Math.PI*2),o.fill()},v=()=>{for(const C of h)C.x+=C.vx,C.y+=C.vy,C.x<-20?C.x=d+20:C.x>d+20&&(C.x=-20),C.y<-20?C.y=u+20:C.y>
787u+20&&(C.y=-20);k(),m=requestAnimationFrame(v)},j=()=>{m||(m=requestAnimationFrame(v))},T=()=>{m&&cancelAnimationFrame(m),m=0},A=()=>{document.hidden?T():f||j()};return x(),f?k():j(),window.addEventListener("resize",x),document.addEventListener("visibilitychange",A),()=>{T(),window.removeEventListener("resize",x),document.removeEventListener("visibilitychange",A)}},[e,t,a]),n.jsx("canvas",{ref:i,"aria-hidden":"true",style:{position:"absolute",inset:0,width:"100%",height:"100%",pointerEvents:"none",zIndex:1,display:"block"}})}const Bj=768;function Qp(){const[e,t]=M.useState(void 0);return M.useEffect(()=>{const a=window.matchMedia(`(max-width: ${Bj-1}px)`),i=()=>{t(window.innerWidth<Bj)};return a.addEventListener("change",i),t(window.innerWidth<Bj),()=>a.removeEventListener("change",i)},[]),!!e}const DM={"cresta-messy-reality":{id:"cresta-messy-reality",quote:"Real life is messy. Enterprise cycles are messy. Upside accurately reflects that messy reality, which I think is rare and was impossible before.",name:"Stephen Daniels",title:"VP, GTM & Strategic Operations",company:"Cresta",image:"/images/stephen-daniels.jpg",caseStudy:"/case-studies/cresta-from-attribution-to-ai-deep-research",accent:"green-light"},"assembled-buyer-journey":{id:"assembled-buyer-journey",quote:"I've been in marketing for 10+ years, and I've never been able to get a clear picture of the buyer journey. But with Upside, we are able to see a complete milestone analysis with data pulled from Gong we wouldn't ever be able to see in Salesforce.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",image:"/images/lindsey-marymont.png",caseStudy:"/case-studies/assembled-from-attribution-guesswork-to-pipeline-surge",accent:"green-light"},"comply-pinball":{id:"comply-pinball",quote:"A sales rep will say, 'the deal came in this way.' We go in and say, 'actually, they pinballed their way through.' No two journeys are exactly the same. It's like a snowflake.",name:"Wendy Werve",title:"CMO",company:"Comply",image:"/images/wendy-werve.webp",caseStudy:"/case-studies/comply-from-unfiltered-salesforce-data-to-marketing-intelligence",accent:"blue-soft"},"comply-ahead-of-curve":{id:"comply-ahead-of-curve",quote:"You don't even know how far ahead of the curve we are in marketing with what we're doing using Upside.",name:"Wendy Werve",title:"CMO",company:"Comply",image:"/images/wendy-werve.webp",caseStudy:"/case-studies/comply-from-unfiltered-salesforce-data-to-marketing-intelligence",accent:"blue-soft"},"graphite-events-flywheel":{id:"graphite-events-flywheel",quote:"We stopped doing events because we didn't have data saying they were impactful. With Upside, we can see events are actually a massive flywheel for our business.",name:"Ethan Smith",title:"CEO & Founder",company:"Graphite",image:"/images/ethan-smith.jpeg",caseStudy:"/case-studies/graphite-uncovering-real-channels-behind-inbound-growth",accent:"purple-soft"},"comply-data-trail":{id:"comply-data-trail",quote:"I haven't seen a single case where I followed the data trail and found something wrong. I've stopped checking.",name:"Carl Gunlefinger",title:"Senior Marketing Operations Manager",company:"Comply",image:"/images/carl-gunlefinger.png",caseStudy:"/case-studies/comply-from-unfiltered-salesforce-data-to-marketing-intelligence",accent:"green-light"},"assembled-imperfect-data":{id:"assembled-imperfect-data",quote:"The fact that Upside could work with imperfect data was the selling point. We knew our data wasn't clean.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",image:"/images/lindsey-marymont.png",caseStudy:"/case-studies/assembled-from-attribution-guesswork-to-pipeline-surge",accent:"blue-soft"},"syndio-revenue-reporting":{id:"syndio-revenue-reporting",quote:"This is exactly what has always been missing from revenue reporting.",name:"Rebecca Scully",title:"VP of Marketing",company:"Syndio",image:"/images/rebecca-scully.jpg",caseStudy:"/case-studies/syndio-driving-strategic-gtm-decisions-with-upside",accent:"green-light"}
787,"syndio-self-serve":{id:"syndio-self-serve",quote:"Self-serve campaign performance numbers without MOPS tickets.",name:"Amy Wellersdick",title:"Director of Marketing Ops",company:"Syndio",image:"/images/amy-wellersdick-testimonial.jpg",caseStudy:"/case-studies/syndio-driving-strategic-gtm-decisions-with-upside",accent:"blue-soft"},"dscout-hours-to-clicks":{id:"dscout-hours-to-clicks",quote:"What used to take 2-3 hours I can now do in a few clicks, and it's made me a smarter operations person than I've ever been in my career.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",image:"/images/charlie-flanagan.jpg",caseStudy:"/case-studies/dscout-driving-confident-growth-with-upside",accent:"blue-soft"},"dscout-onboarding-speed":{id:"dscout-onboarding-speed",quote:"One thing that stood out to me was how quickly we were able to get started. It took us 5 months and 100s of hours of our MOPS person's time to stand up another measurement provider at a previous company.",name:"Kate Johnson",title:"CMO",company:"Dscout",image:"/images/kate-johnson.jpeg",caseStudy:"/case-studies/dscout-driving-confident-growth-with-upside",accent:"purple-soft"},"comply-ai-use-case":{id:"comply-ai-use-case",quote:"Honestly, the first time I found a huge use case for AI for me. A tool that has the data organized, and I can query it thinking the way I think.",name:"Carl Gunlefinger",title:"Senior Marketing Operations Manager",company:"Comply",image:"/images/carl-gunlefinger.png",caseStudy:"/case-studies/comply-from-unfiltered-salesforce-data-to-marketing-intelligence",accent:"blue-soft"},"dscout-faith-in-insight":{id:"dscout-faith-in-insight",quote:"Our GTM leaders have faith in the accuracy and cleanliness of our data. Now they expect a level of insight.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",image:"/images/charlie-flanagan.jpg",caseStudy:"/case-studies/dscout-driving-confident-growth-with-upside",accent:"purple-soft"},"assembled-executive-use":{id:"assembled-executive-use",quote:"The executive team uses Upside every week. We look at pipeline week-over-week, find the major opportunities on everyone's radar, run them through Upside, and figure out how they came to us and what's happening with them.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",image:"/images/lindsey-marymont.png",caseStudy:"/case-studies/assembled-from-attribution-guesswork-to-pipeline-surge",accent:"green-light"},"comply-candy-shop":{id:"comply-candy-shop",quote:"We are like kids in a candy shop digging into accounts and opportunities.",name:"Wendy Werve",title:"Chief Market Officer",company:"Comply",image:"/images/wendy-werve.webp",caseStudy:"/case-studies/comply-from-unfiltered-salesforce-data-to-marketing-intelligence",accent:"purple-soft"}};function bG(e){return DM[e]}function Ple(e){return`${e} is an Upside Customer`}const oa=[{name:"Graphite",src:"/images/graphite_logo_upside_customer.svg",height:18},{name:"Cresta",src:"/images/cresta_logo_upside_customer.svg",height:22},{name:"Syndio",src:"/images/syndio_logo_upside_customer.svg",height:26},{name:"Dscout",src:"/images/dscout_logo_upside_customer.svg",height:22},{name:"Assembled",src:"/images/assembled_logo_upside_customer.svg",height:24},{name:"Comply",src:"/images/comply-logo.png",height:44},{name:"2X Marketing",src:"/images/2x-marketing.svg",height:18},{name:"ServiceTitan",src:"/images/servicetitan_logo_upside_customer.png",height:22},{name:"Wonderschool",src:"/images/wonderschool_logo_upside_customer.png",height:26},{name:"Bandwidth",src:"/images/bandwidth_logo_upside_customer.svg",height:26},{name:"Cogna",src:"/images/cogna_logo_upside_customer.svg",height:24},{name:"Exa",src:"/images/exa_logo_upside_customer.svg",height:22},{name:"Springbrook",src:"/images/springbrook_logo_upside_customer.png",height:32}],Ile=6e3,Dle=320,vG=650,Wle=`flex ${vG}ms cubic-bezier(0.22, 1, 0.36, 1)`,zle="opacity 320ms ease-out 120ms",O4=9,xG=1,wG="/images/upside-logo.svg",Lle="linear-gradient(135deg, #eef5f1 0%, #ffffff 70%)",kG="linear-gradient(135deg, #dcebe3 0%, #ecf5f0 45%, #ffffff 100%)",Th="#1b1f1c",jG="#5f6563",Ule="rgba(80,154,121,0.10)",SG="rgba(80,154,121,0.32)";function CG(e){if(e.quoteId)return DM[e.quoteId]}function WM(e){const t=e.slug.split("-")[0].toLowerCase(),a=oa.find(l=>
787l.name.toLowerCase()===t);if(t==="comply")return{src:e.companyLogo,isWordmark:!1,height:41,verticalCrop:-10};const r=(a==null?void 0:a.height)??22,o=Math.min(30,Math.max(17,r));return a&&a.src.endsWith(".svg")?{src:a.src,isWordmark:!0,height:o,verticalCrop:0}:{src:e.companyLogo,isWordmark:!1,height:o,verticalCrop:0}}function Ble(){const[e,t]=M.useState(!1);return M.useEffect(()=>{const a=window.matchMedia("(prefers-reduced-motion: reduce)");t(a.matches);const i=()=>t(a.matches);return a.addEventListener("change",i),()=>a.removeEventListener("change",i)},[]),e}const oP="case-study-accordion-styles",qle=`
788  @keyframes csa-fade-in {
789    from { opacity: 0; transform: translateY(6px); }
790    to { opacity: 1; transform: translateY(0); }
791  }
792  .csa-panel { -webkit-tap-highlight-color: transparent; }
793  .csa-panel:focus-visible {
794    outline: 2px solid #509a79;
795    outline-offset: -2px;
796  }
797  .csa-quote { border: 0; padding: 0; }
798  .csa-link {
799    color: var(--_brand-colors---signal-green--100, #509a79);
800    text-decoration: underline;
801    text-underline-offset: 3px;
802    font-weight: 500;
803    transition: opacity 150ms ease;
804  }
805  .csa-link:hover { opacity: 0.75; }
806`;function AG(){M.useEffect(()=>{if(document.getElementById(oP))return;const e=document.createElement("style");e.id=oP,e.textContent=qle,document.head.appendChild(e)},[])}const sP=8,$le=({items:e})=>{AG();const t=Qp(),a=Ble(),[i,r]=M.useState(0),[o,l]=M.useState(!1),[d,u]=M.useState(!1),[h,m]=M.useState(800),f=M.useRef(null),y=M.useRef(null);M.useLayoutEffect(()=>{const k=y.current;if(!k)return;const v=()=>{const T=k.clientWidth,A=sP*(e.length-1),C=O4+xG*(e.length-1),_=Math.max(0,Math.floor((T-A)*O4/C));m(_)};v();const j=new ResizeObserver(v);return j.observe(k),()=>j.disconnect()},[e.length]);const b=M.useCallback(()=>{f.current&&clearInterval(f.current),f.current=setInterval(()=>{r(k=>(k+1)%e.length)},Ile)},[e.length]);if(M.useEffect(()=>{if(o||a||d){f.current&&clearInterval(f.current);return}return b(),()=>{f.current&&clearInterval(f.current)}},[o,a,d,b,i]),t)return n.jsx(Hle,{items:e});const x=e[i];return n.jsxs("div",{children:[n.jsx("div",{ref:y,onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),onFocus:()=>l(!0),onBlur:k=>{k.currentTarget.contains(k.relatedTarget)||l(!1)},style:{display:"flex",gap:sP,width:"100%",aspectRatio:"2 / 1",maxHeight:500,minHeight:340},children:e.map((k,v)=>n.jsx(Fle,{cs:k,active:v===i,activeWidth:h,reduceMotion:a,onActivate:()=>{r(v),u(!0)},onHover:()=>r(v)},k.slug))}),n.jsx(Gle,{cs:x},x.slug)]})},Fle=({cs:e,active:t,activeWidth:a,reduceMotion:i,onActivate:r,onHover:o})=>{const l=gc(),d=M.useRef(null),[u,h]=M.useState(t),m=M.useRef(t),f=CG(e),{src:y,isWordmark:b,height:x,verticalCrop:k}=WM(e),v=!!e.activeBgImage,j=()=>{d.current&&(clearTimeout(d.current),d.current=null)};M.useEffect(()=>()=>j(),[]),M.useEffect(()=>{if(t===m.current)return;if(m.current=t,!t){h(!1);return}if(i){h(!0);return}h(!1);const _=setTimeout(()=>h(!0),vG);return()=>clearTimeout(_)},[t,i]);const T=()=>{t||(j(),d.current=setTimeout(()=>{o(),d.current=null},Dle))},A=()=>{j()},C=()=>{if(j(),t&&u){l(`/case-studies/${e.slug}`);return}r()};return n.jsxs("button",{type:"button",className:"csa-panel","aria-expanded":t,"aria-label":`Case study: ${e.title}`,onClick:C,onMouseEnter:T,onMouseLeave:A,style:{flex:t?O4:xG,minWidth:0,position:"relative",overflow:"hidden",borderRadius:20,cursor:"pointer",background:t?kG:Lle,border:`1px solid ${t?SG:Ule}`,boxShadow:t?"0 14px 36px rgba(80,154,121,0.14), 0 2px 6px rgba(80,154,121,0.06)":"0 1px 2px rgba(27,31,28,0.03)",transition:i?"none":`${Wle}, border-color 300ms ease, box-shadow 300ms ease`,appearance:"none",font:"inherit",color:"inherit",textAlign:"left",padding:0},children:[v&&e.activeBgImage&&n.jsxs("div",{"aria-hidden":!t,style:{position:"absolute",inset:0,pointerEvents:"none",overflow:"hidden"},children:[e.collapsedBgSize&&n.jsx("div",{style:{position:"absolute",inset:0,backgroundImage:`url("${e.activeBgImage}")`,backgroundSize:"cover",backgroundRepeat:"no-repeat",backgroundPosition:e.collapsedBgPosition??e.activeBgPosition??"center",filter:"blur(16px) brightness(0.6) saturate(0.85)",transform:"scale(1.1)",opacity:t?0:1,transition:i?"none":"opacity 320ms ease"}}),n.jsx("div",{style:{position:"absolute",inset:0,backgroundImage:`url("${e.activeBgImage}")`,backgroundSize:t?"cover":e.collapsedBgSize??"cover",backgroundRepeat:"no-repeat",backgroundPosition:t?e.activeBgPosition??"center":e.collapsedBgPosition??e.activeBgPosition??"center",filter:t?"none":"brightness(0.68) saturate(0.75)",transition:i?"none":"background-position 500ms ease, filter 320ms ease"}}),n.jsx("div",{style:{position:"absolute",inset:0,background:"linear-gradient(180deg, rgba(0,0,0,0) 30%, rgba(0,0,0,0.20) 55%, rgba(0,0,0,0.68) 100%)"}}),n.jsx("div",{style:{position:"absolute",inset:0,boxShadow:"inset 0 0 90px 24px rgba(15,25,20,0.45)",opacity:t?1:0,transition:i?"none":"opacity 320ms ease"}}),n.jsx("div",{style:{position:"absolute",inset:0,background:"rgba(8,18,13,0.18)",opacity:t?0:1,transition:i?"none":"opacity 320ms ease"}})]}),n.jsxs("div",{"aria-hidden":!t,style:{position:"absolute",top:0,bottom:0,left:0,width:a,padding:"clamp(1.25rem, 2vw, 1.75rem)",display:"flex",flexDirection:"column",justifyContent:"space-between",color:v?"#ffffff"
806:Th,opacity:t?1:0,transition:i?"none":zle,pointerEvents:t?"auto":"none",boxSizing:"border-box"},children:[n.jsx("div",{style:{display:"flex",alignItems:"center"},children:n.jsx("img",{src:wG,alt:"Upside",style:{height:20,width:"auto",objectFit:"contain",filter:v?"brightness(0) invert(1)":"brightness(0)",opacity:v?.95:.55,position:"relative"}})}),n.jsxs("div",{style:{display:"flex",alignItems:"flex-end",justifyContent:"space-between",gap:"1.5rem"},children:[f?n.jsxs("blockquote",{className:"csa-quote",style:{flex:"1 1 auto",minWidth:0,maxWidth:"58%",margin:0,fontSize:"0.9375rem",fontWeight:600,lineHeight:1.32,letterSpacing:"-0.005em",color:v?"#ffffff":Th,textShadow:v?"0 1px 6px rgba(0,0,0,0.45)":void 0,position:"relative"},children:["“",f.quote,"”"]}):n.jsx("div",{style:{flex:1}}),n.jsxs("div",{style:{flex:"0 0 auto",display:"flex",alignItems:"flex-end",gap:"0.875rem",marginBottom:"2.5rem"},children:[!v&&n.jsx("img",{src:e.featuredImage,alt:e.featuredName,loading:"lazy",style:{width:68,height:68,borderRadius:14,objectFit:"cover",objectPosition:"center top",border:"1px solid rgba(27,31,28,0.08)",boxShadow:"0 4px 14px rgba(27,31,28,0.08)",flex:"0 0 auto",backgroundColor:"#f0f0f0"}}),n.jsx("div",{style:{textAlign:"left",display:"flex",flexDirection:"column",gap:"0.625rem",position:"relative"},children:n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontWeight:600,fontSize:"0.8125rem",lineHeight:1.25,color:v?"#ffffff":Th,textShadow:v?"0 1px 6px rgba(0,0,0,0.45)":void 0},children:e.featuredName}),n.jsx("p",{style:{margin:0,fontSize:"0.75rem",lineHeight:1.25,color:v?"rgba(255,255,255,0.82)":jG,textShadow:v?"0 1px 6px rgba(0,0,0,0.45)":void 0},children:e.featuredTitle})]})})]})]})]}),n.jsx("img",{src:y,alt:"","aria-hidden":!0,style:{position:"absolute",right:"clamp(1.25rem, 2vw, 1.75rem)",bottom:"clamp(1.25rem, 2vw, 1.75rem)",height:x,width:"auto",maxWidth:"none",objectFit:"contain",transformOrigin:"right bottom",transform:t?"rotate(0deg)":`translateX(-${20+(x-22)*.42}px) rotate(90deg)`,transition:i?"none":"transform 600ms cubic-bezier(0.22, 1, 0.36, 1)",filter:"brightness(0) invert(1)",opacity:.95,pointerEvents:"none",zIndex:2}})]})},Gle=({cs:e})=>{const{src:t,isWordmark:a,height:i,verticalCrop:r}=WM(e);return n.jsxs("div",{style:{marginTop:"1.75rem",animation:"csa-fade-in 280ms ease-out"},children:[e.description&&n.jsx("p",{className:"body-l",style:{marginBottom:"0.875rem",lineHeight:1.55,maxWidth:760},children:e.description}),n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"1rem"},children:[n.jsx(J,{to:`/case-studies/${e.slug}`,className:"csa-link",children:"Read case study →"}),n.jsx("img",{src:t,alt:"","aria-hidden":!0,style:{height:i,width:"auto",maxWidth:"none",objectFit:"contain",opacity:.7,marginTop:r,marginBottom:r,...a?{filter:"brightness(0)"}:{filter:"grayscale(1)",mixBlendMode:"multiply"}}})]})]})},Hle=({items:e})=>(AG(),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"2rem"},children:e.map(t=>{const a=CG(t),{src:i,isWordmark:r,height:o,verticalCrop:l}=WM(t);return n.jsxs("article",{children:[n.jsx(J,{to:`/case-studies/${t.slug}`,style:{display:"block",textDecoration:"none",color:Th},"aria-label":`Read case study: ${t.title}`,children:n.jsxs("div",{style:{position:"relative",width:"100%",borderRadius:18,overflow:"hidden",background:kG,border:`1px solid ${SG}`,boxShadow:"0 8px 22px rgba(80,154,121,0.10)",padding:"1.5rem",display:"flex",flexDirection:"column",gap:"1.75rem"},children:[n.jsx("img",{src:wG,alt:"Upside",style:{height:18,width:"auto",objectFit:"contain",filter:"brightness(0)",opacity:.55}}),n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"1rem"},children:[a&&n.jsxs("blockquote",{className:"csa-quote",style:{margin:0,fontSize:"1.0625rem",fontWeight:600,lineHeight:1.32,color:Th},children:["“",a.quote,"”"]}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[n.jsx("img",{src:t.featuredImage,alt:t.featuredName,loading:"lazy",style:{width:54,height:54,borderRadius:12,objectFit:"cover",objectPosition:"center top",border:"1px solid rgba(27,31,28,0.08)",flex:"0 0 auto",backgroundColor:"#f0f0f0"}}),n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontWeight:600,fontSize:"0.9375rem",color:Th},children:t.featuredName}),n.jsx("p",{style:{margin:0,fontSize:"0.8125rem",color:jG},children:t.featuredTitle})]}),n.jsx("img",{src:i,alt:"",style:{height:o,width:"auto",maxWidth:"none",objectFit:"contain",opacity:.95,marginTop:l,marginBottom:l,...r?{filter:"brightness(0)"}:{filter:"grayscale(1)",mixBlendMode:"multiply"}}})]})]})]})]})}),n.jsxs("div",{style:{marginTop:"1rem"},children:[t.description&&n.jsx("p",{className:"body-m",style:{marginBottom:"0.5rem",lineHeight:1.55},children:t.description}),n.jsx(J,{to:`/case-studies/${t.slug}`,className:"csa-link",children:"Read case study →"})]})]},t.slug)})})),Y0=[{slug:"cresta-from-attribution-to-ai-deep-research",title:"Cresta: How AI Deep Research Powers Every Quarterly Business Review",theme:"Deep Research",description:"How Cresta turned messy enterprise deal cycles, persona-level churn anal
806ysis, and AE messaging adherence into the engine of every Quarterly Business Review with Upside.",ogImage:"https://upside.tech/images/og-case-study-cresta.jpg",companyLogo:"/images/cresta-black.svg",featuredImage:"/images/stephen-daniels.jpg",featuredName:"Stephen Daniels",featuredTitle:"VP, GTM & Strategic Operations",youtubeEmbedId:"f0RcekpM-oE",videoTitle:"It's like a therapist, a data consultant, a friend — How Cresta uses Upside",videoPresenter:{name:"Stephen Daniels",title:"VP, GTM & Strategic Operations",image:"/images/stephen-daniels-video.png",quoteId:"cresta-messy-reality"},videoSnippets:[{timestamp:37,label:"Originally an attribution tool. Now the engine of every QBR."},{timestamp:82,label:"“I can make a million pivot tables — but why is that happening?”"},{timestamp:122,label:"“An SDR called. They hung up. They went to a conference, stopped by the booth.”"},{timestamp:144,label:"Every deal scored for messaging adherence: validate, coach, or rewrite"},{timestamp:188,label:"“Watching Gong call after Gong call — a massive improvement for my mental health.”"},{timestamp:247,label:"Champions universally loved Cresta. The gap was with economic buyers."},{timestamp:304,label:"“Like working with a therapist, a data consultant, a friend.”"}],quoteId:"cresta-messy-reality",isNew:!0,heroMetric:{value:"Weeks → 1 day",label:"Manual transcript review collapsed into deep research"},wide:!0,wideQuote:{text:"Real life is messy. Enterprise cycles are messy. Upside accurately reflects that messy reality, which I think is rare and was impossible before.",author:"Stephen Daniels",authorTitle:"VP, GTM & Strategic Operations"},activeBgImage:"/images/cresta-team.png",activeBgPosition:"center 42%",collapsedBgPosition:"16% 38%"},{slug:"comply-from-unfiltered-salesforce-data-to-marketing-intelligence",title:"Comply: How a Marketing Team Replaced Attribution Guesswork with Data They Could Finally Trust",theme:"Self-Serve Attribution",description:"How Comply replaced guesswork with trusted, self-serve attribution across 18 users, 27.5M+ touchpoints, and custom AI miniapps built on the Upside MCP.",ogImage:"https://upside.tech/images/og-case-study-comply.jpg",companyLogo:"/images/comply-logo.png",youtubeEmbedId:"fVWZ5UPIU9o",videoTitle:"Your Sales Team Is Getting the Story Wrong — Here's What the Data Actually Shows",videoPresenter:{name:"Wendy Werve",title:"CMO",image:"/images/wendy-werve.png",quoteId:"comply-pinball"},videoSnippets:[{timestamp:0,label:"When sales reps get the story wrong"},{timestamp:25,label:"One deal: 77 days, 132 touchpoints no one could see"},{timestamp:55,label:"They pinballed their way through — no two journeys are the same"},{timestamp:75,label:"Really solid for moving things forward with data you can trust"}],featuredImage:"/images/wendy-werve-avatar.jpg",featuredName:"Wendy Werve",featuredTitle:"CMO",quoteId:"comply-ahead-of-curve",heroMetric:{value:"27.5M+",label:"Touchpoints unified"},activeBgImage:"/images/wendy-werve.png",activeBgPosition:"center 30%",collapsedBgPosition:"52% 50%"},{slug:"syndio-driving-strategic-gtm-decisions-with-upside",title:"Syndio: Driving Strategic GTM Decisions with Upside",theme:"Strategic Restructure",description:"How Syndio eliminated data bottlenecks and restructured their GTM strategy with Upside.",ogImage:"https://upside.tech/images/og-case-study-syndio.jpg",companyLogo:"/images/logo-syndio.png",featuredImage:"/images/amy-wellersdick-testimonial.jpg",featuredName:"Amy Wellersdick",featuredTitle:"Director of Marketing Ops",quoteId:"syndio-self-serve",heroMetric:{value:"1 function",label:"Strategically restructured"},activeBgImage:"/images/amy-wellersdick.jpg",activeBgPosition:"center 34%",collapsedBgPosition:"44% 38%"},{slug:"graphite-uncovering-real-channels-behind-inbound-growth",title:"Graphite: Uncovering the Real Channels Behind 100% Inbound Growth",theme:"Events Flywheel",description:"How full-journey attribution revealed $10M+ in hidden referral revenue and restarted Graphite's event program.",ogImage:"https://upside.tech/images/og-case-study-graphite.jpg",companyLogo:"/images/graphite_logo_upside_customer.svg",featuredImage:"/images/ethan-smith.jpg",featuredName:"Ethan Smith",featuredTitle:"CEO & Founder",youtubeEmbedId:"BFVDJGqmemw",videoTitle:"How Graphite gets to $15M of inbound-only revenue",videoSnippets:[{timestamp:42,label:"Why Graphite calls itself a research-driven growth agency"},{timestamp:254,label:"The content + research strategy: evaluate the claim, don't just chase it"},{timestamp:401,label:"Over half of deals come from referrals — here's how"},{timestamp:770,label:"“We stopped doing events because we didn't have data saying they were impactful.”"},{timestamp:1085,label:"The LinkedIn strategy: one substantial post a month, not daily fluff"},{timestamp:1214,label:"Where traditional attribution misses Graphite's real channels"}
806,{timestamp:1336,label:"Closed-won deals recovered after a champion's job change"}],quoteId:"graphite-events-flywheel",heroMetric:{value:"$10M+",label:"Hidden referral revenue uncovered"},wide:!0,wideQuote:{text:"We stopped doing events because we didn’t have data saying they were impactful. With Upside, we can see events are actually a massive flywheel for our business.",author:"Ethan Smith",authorTitle:"CEO & Founder"},activeBgImage:"/images/ethan-smith.png",activeBgPosition:"center 26%",collapsedBgPosition:"45% 30%"},{slug:"assembled-from-attribution-guesswork-to-pipeline-surge",title:"Assembled: From Attribution Guesswork to a 35% Pipeline Surge",theme:"AEO Discovery",description:"How Assembled uncovered 30k+ hidden contacts and discovered a new AEO growth channel with Upside.",ogImage:"https://upside.tech/images/og-case-study-assembled.jpg",companyLogo:"/images/assembled-logo-black.png",featuredImage:"/images/lindsey-marymont.png",featuredName:"Lindsey Marymont",featuredTitle:"Head of Demand Generation",quoteId:"assembled-imperfect-data",heroMetric:{value:"35%",label:"Pipeline lift"},wide:!0,wideQuote:{text:"As AI-driven discovery started to pick up, Upside helped us see it on the back end — being able to actually track that was really exciting.",author:"Lindsey Marymont",authorTitle:"Head of Demand Generation"},activeBgImage:"/images/lindsey-marymont.jpg",activeBgPosition:"center 32%",collapsedBgPosition:"45% 36%"},{slug:"dscout-driving-confident-growth-with-upside",title:"Dscout: Driving Confident Growth with Upside",theme:"Onboarding Speed",description:"How Dscout transformed attribution from guesswork to strategic advantage with unified GTM insights.",ogImage:"https://upside.tech/images/og-case-study-dscout.jpg",companyLogo:"/images/logo-dscout.svg",featuredImage:"/images/kate-johnson.jpeg",featuredName:"Kate Johnson",featuredTitle:"CMO",youtubeEmbedId:"njRUsION3D0",videoTitle:"The marketing moment that won the deal",videoPresenter:{name:"Kate Johnson",title:"CMO",image:"/images/kate-johnson.jpeg",quoteId:"dscout-onboarding-speed"},videoSnippets:[{timestamp:0,label:"How marketing supports sales at Dscout"},{timestamp:15,label:"“Things like a deck seem so minor until you actually look at the data.”"},{timestamp:26,label:"The event moment that convinced a customer to switch from a competitor"}],quoteId:"dscout-hours-to-clicks",heroMetric:{value:"100s of hrs saved",label:"On platform onboarding and reporting"},activeBgImage:"/images/kate-johnson.jpg",activeBgPosition:"center 40%",collapsedBgPosition:"54% 50%"}],Yle=()=>{const e=Y0.filter(t=>!t.hidden);return n.jsxs("section",{id:"case-studies-showcase",className:"section",style:{rowGap:"var(--_layout---spacing--m)"},children:[n.jsx("div",{className:"section-header-slot",children:n.jsxs("div",{className:"section-header",children:[n.jsxs("div",{className:"section-header__content",children:[n.jsx("div",{className:"badge",children:"Case Studies"}),n.jsx("div",{className:"section-header__heading-wrapper",children:n.jsx("h2",{className:"heading-l",children:"How teams are winning with Upside."})})]}),n.jsx("div",{className:"section-header__paragraph-wrapper",children:n.jsx("p",{className:"body-m",children:"Real outcomes from GTM teams that turned messy data into compounding pipeline."})})]})}),n.jsx("div",{className:"cs-wrap",style:{width:"min(1296px, 92vw)",margin:"0 auto"},children:n.jsx($le,{items:e})}),n.jsxs("div",{className:"cs-actions",children:[n.jsx(J,{to:Wt,className:"cs-action cs-action--primary",children:"Request demo"}),n.jsxs(J,{to:"/customers",className:"cs-action cs-action--ghost",children:["See all case studies",n.jsx("span",{className:"cs-action__arrow","aria-hidden":"true",children:"→"})]})]}),n.jsx("style",{children:`
807        .cs-actions {
808          display: flex;
809          justify-content: center;
810          align-items: center;
811          gap: 16px;
812          flex-wrap: wrap;
813        }
814        .cs-action {
815          display: inline-flex;
816          align-items: center;
817          gap: 10px;
818          border-radius: 999px;
819          padding: 14px 22px;
820          font-size: 16px;
821          line-height: 21px;
822          font-weight: 500;
823          text-decoration: none;
824          transition: background 0.15s ease, border-color 0.15s ease, color 0.15s ease;
825        }
826        .cs-action--primary {
827          background: #509a79;
828          color: #fff;
829        }
830        .cs-action--primary:hover { background: #1f5238; }
831        .cs-action--ghost {
832          background: #fff;
833          color: #0c1e20;
834          border: 1px solid rgba(12, 30, 32, 0.15);
835        }
836        .cs-action--ghost:hover { border-color: rgba(12, 30, 32, 0.35); }
837        .cs-action__arrow { font-size: 16px; line-height: 1; }
838      `})]})},Vle=["Philip","Jason","Maya","Andre","Sasha","Daniel","Priya","Tomás","Naomi","Lena","Hiro","Joaquín","Ada","Owen","Bea","Ines","Felix","Nora","Imani","Ravi","Mei","Kavya","Eitan","Solène","Bram","Rashida","Kofi","Vesna","Karim","Pia","Marek","Yuki","Sven","Mira","Theo","Sofia","Lior","Anh","Nasir","Esme","Hassan","Renée","Júlia","Tobias","Aïsha","Wren","Cosmo","Idris","Linnea","Pablo","Saoirse","Mateo","Wren","Heath","Asha","Béla","Romi","Eli","Coco","Anders","Mireille","Quinn","Hugo","Sloane","Reza","Salma","Tariq","Vera","Jules","Dario","Marisol","Henrik","Mei-Ling","Petra","Devon","Yann","Stine","Kade","Liyana","Ozzy","Cyril","Maeve","Tomi","Léa","Aniket","Bhumi","Soren","Kit","Audra","Rune","Florent","Sana","Maxie","Tarek","Inga","Niko","Mads","Cleo","Anya","Selma"],Kle=["Wallage","Poulin","Okafor","Levin","Khoury","Reyes","Aoki","Bennani","Devlin","Han","Garza","Mortensen","Marek","Bhatt","Quintero","Saito","Achterberg","Mensah","Schroder","Yusuf","Vidal","Holm","Sá","Carreras","Önder","Bauer","Iqbal","Vlasov","Tan","Doyle","Berg","Costa","Pham","Lindqvist","Bianchi","Rao","Bouchard","Adeyemi","Persson","Soto","Vermeer","Magomedov","Krause","Heinonen","Esposito","Park","Wahlberg","Nakamura","Eriksen","Pereira","Suzuki","Faraj","Ehrlich","Volk","Singh","Knoll","Andersson","Hassan","Whittaker","Krieger","O'Hara","Nyström","Bautista","Greve","Halevi","Trujillo","Voigt","Lemos","Khan","Rasmussen","Holst","Mendes","Aboubakr","Hartwig","Iversen","Falk","Bose","Olesen","Roth","Larsen","Ito","Saari","Naidoo","Friedman","Andrade","Kovac","Heineken","Lund","Carrillo","Buch"],Xle=["Linear","Notion","Ramp","Rippling","Mercury","Vercel","Webflow","Hex","Watershed","Mux","Anrok","Posthog","Sourcegraph","Persona","Hightouch","Census","Modern Treasury","Bland","Clay","Brex","Pavilion","Drift","Gong","Outreach","Common Room","Klaviyo","Attentive","Pry","Mosaic","Default","Splash","Liveramp","Snowflake","6sense","Demandbase","Salesloft","Apollo","ZoomInfo","Lattice","Catalyst"],Qle=["VP Marketing","Head of RevOps","Director, Demand Gen","CMO","Marketing Ops Lead","Founder","CRO","Head of Growth","ABM Lead","Field Marketing","CFO","FP&A Lead","VP Sales","Marketing Analyst","Director, Lifecycle","RevOps Manager","GTM Strategist","Head of Performance","Growth Engineer","Sr. Demand Gen Manager"],ro="https://www.linkedin.com/posts/cariludietric
838h_attribution-sucks-the-darn-sales-rep-wont-activity-7422327955277783040-DUEs",ss="https://www.linkedin.com/posts/dahmadi_activity-7477773014265196544",lP="https://www.linkedin.com/posts/madalina_activity-7477772390165323776",Iv="https://www.linkedin.com/posts/alexdbauer_activity-7477771580954267648",cP={x:[],g2:[{text:"Upside provides one of the clearest 360-degree views of our marketing activities and their impact.",name:"Carl Gunlefinger",role:"Senior Marketing Operations Manager",company:"Comply",image:"/images/mentions/g2/carl-g.jpg"},{text:"The MCP lets me drill into the data — or zoom back out — in almost any way I can imagine.",name:"Carl Gunlefinger",role:"Senior Marketing Operations Manager",company:"Comply",image:"/images/mentions/g2/carl-g.jpg"},{text:"It finally gives me the ability to build the kinds of views I've wanted for years but never had the infrastructure to create.",name:"Carl Gunlefinger",role:"Senior Marketing Operations Manager",company:"Comply",image:"/images/mentions/g2/carl-g.jpg"},{text:"Upside has become an integral part of our team's workflow.",name:"Carl Gunlefinger",role:"Senior Marketing Operations Manager",company:"Comply",image:"/images/mentions/g2/carl-g.jpg"},{text:"The missing number that changed how we think about paid media: influenced pipeline.",name:"Cameron Tomczak",role:"Marketing Campaign Specialist",company:"Dscout",image:"/images/mentions/g2/cameron-t.jpg"},{text:"Upside gave us that missing number: influenced pipeline — actual opportunities where paid media showed up in the buying journey.",name:"Cameron Tomczak",role:"Marketing Campaign Specialist",company:"Dscout",image:"/images/mentions/g2/cameron-t.jpg"},{text:"We can now walk into a leadership meeting and show influenced pipeline broken down by account, campaign, and month.",name:"Cameron Tomczak",role:"Marketing Campaign Specialist",company:"Dscout",image:"/images/mentions/g2/cameron-t.jpg"},{text:"Reliable, accurate, 3-layers deep marketing attribution.",name:"Caitlin Maloney",role:"Chief Growth Officer",company:"Graphite",image:"/images/mentions/g2/caitlin-m.jpg"},{text:"Finally understanding the true ROI of our marketing campaigns across channels.",name:"Caitlin Maloney",role:"Chief Growth Officer",company:"Graphite",image:"/images/mentions/g2/caitlin-m.jpg"},{text:"Purpose-built for our GTM layer.",name:"Stephen Daniels",role:"VP, GTM & Strategic Operations",company:"Cresta",image:"/images/mentions/g2/stephen-d.webp"},{text:"The team handled everything — spun up an instance in just a day.",name:"Stephen Daniels",role:"VP, GTM & Strategic Operations",company:"Cresta",image:"/images/mentions/g2/stephen-d.webp"},{text:"Consultative, intelligent, and extremely accurate. Valuable for our company strategy.",name:"Stephen Daniels",role:"VP, GTM & Strategic Operations",company:"Cresta",image:"/images/mentions/g2/stephen-d.webp"},{text:"I use Upside to fill in messy data gaps and understand business trends.",name:"Stephen Daniels",role:"VP, GTM & Strategic Operations",company:"Cresta",image:"/images/mentions/g2/stephen-d.webp"},{text:"It helps with attribution — showing what generates leads.",name:"Stephen Daniels",role:"VP, GTM & Strategic Operations",company:"Cresta",image:"/images/mentions/g2/stephen-d.webp"},{text:"Fast setup, detailed attribution, flexible to slice data as needed.",name:"Kate Johnson",role:"CMO",company:"Dscout",image:"/images/mentions/g2/kate-j.jpg"},{text:"Other platforms have you spend months assigning rules, scores, and weights.",name:"Kate Johnson",role:"CMO",company:"Dscout",image:"/images/mentions/g2/kate-j.jpg"},{text:"Upside just ingested the data really quickly.",name:"Kate Johnson",role:"CMO",company:"Dscout",image:"/images/mentions/g2/kate-j.jpg"},{text:"Whenever there's something we wish the platform had, we tell Upside and they build it within a couple days.",name:"Kate Johnson",role:"CMO",company:"Dscout",image:"/images/mentions/g2/kate-j.jpg"},{text:"Connects to HubSpot, Salesforce, Gong, and Outreach.",name:"Kate Johnson",role:"CMO",company:"Dscout",image:"/images/mentions/g2/kate-j.jpg"},{text:"Complete picture all in one place of what marketing and sales are doing to create and close pipeline.",name:"Kate Johnson",role:"CMO",company:"Dscout",image:"/images/mentions/g2/kate-j.jpg"},{text:"Upside's integrations bring all of our data into one place.",name:"Mariah Olive",role:"Performance Marketing Manager",company:"Comply",image:"/images/mentions/g2/mariah-o.jpg"},{text:"A unique, customizable view across our entire stack.",name:"Mariah Olive",role:"Performance Marketing Manager",company:"Comply",image:"/images/mentions/g2/mariah-o.jpg"},{text:"The MCP, paired with Claude to create miniapps around specific tactics, is a game changer for reporting.",name:"Mariah Olive",role:"Performance Marketing Manager",company:"Comply",image:"/images/mentions/g2/mariah-o.jpg"},{text:"The app performs well at surfacing specific campaigns and showing exactly how members are engaging.",name:"Mariah Olive",role:"Performance Marketing Manager",company:"Comply",image:"/images/mentions/g2/mariah-o.jpg"},{text:"AI insights help diagnose what has gone wrong — or right — across the campaigns we're running.",name:"Mariah Olive",role:"Performance Marketing Manager",company:"Comply",image:"/images/mentions/g2/mariah-o.jpg"},{text:"The team is always willing to dig in and add to their own product roadmap.",name:"Mariah Olive",role:"Performance Marketing Manager",company:"Comply",image:"/images/mentions/g2/mariah-o.jpg"},{text:"Understanding the full funnel of our leads, from initial touchpoint all the way to closed won or lost.",name:"Nicolas Yahni",role:"Senior Customer Success Manager",company:"Graphite",image:"/images/mentions/g2/nicolas-y.webp"},{text:"The MCP feature has helped my team find insights to themes we didn't even have in our scope.",name:"Nicolas Yahni",role:"Senior Customer Success Manager",company:"Graphite",image:"/images/mentions/g2/nicolas-y.webp"},{text:"It helps us see where we need to double down and what's working best.",name:"Nicolas Yahni",role:"Senior Customer Success Manager",company:"Graphite",image:"/images/mentions/g2/nicolas-y.webp"},{text:"The Upside team was great to work with through every step of setup.",name:"Nicolas Yahni",role:"Senior Customer Success Manager",company:"Graphite",image:"/images/mentions/g2/nicolas-y.webp"},{text:"Upside's flexibility — and its ability to stitch the buyer journey together accurately.",name:"Sam Zolnor",role:"Sr. Digital Marketing Manager",company:"Adaptive Planning",image:"/images/mentions/g2/sam-z.png"},{text:"A true view into a multi-touch experience — and the gaps in our processes.",name:"Sam Zolnor",role:"Sr. Digital Marketing Manager",company:"Adaptive Planning",image:"/images/mentions/g2/sam-z.png"},{text:"AI features that helped add richer insights to our buyer journey.",name:"Sam Zolnor",role:"Sr. Digital Marketing Manager",company:"Adaptive Planning",image:"/images/mentions/g2/sam-z.png"},{text:"The tool was great and the team was a pleasure to work with.",name:"Sam Zolnor",role:"Sr. Digital Marketing Manager",company:"Adaptive Planning",image:"/images/mentions/g2/sam-z.png"},{text:"The support the Upside team offers when we have queries on data points has been crucial.",name:"Mariah Olive",role:"Performance Marketing Manager",company:"Comply",image:"/images/mentions/g2/mariah-o.jpg"},{text:"The team digs in to diagnose and solve any issue we surface.",name:"Mariah Olive",role:"Performance Marketing Manager",company:"Comply",image:"/images/mentions/g2/mariah-o.jpg"},{text:"Upside makes the un-attributable attributable.",name:"Darshan Advani",role:"Sr. Enterprise Growth Marketing",company:"Exa",image:"/images/mentions/g2/darshan-a.jpg"},{text:"It connects everything from call intelligence to our campaigns and marketing channels in one place, so we can query information with ease.",name:"Darshan Advani",role:"Sr. Enterprise Growth Marketing",company:"Exa",image:"/images/mentions/g2/darshan-a.jpg"},{text:"You can connect LinkedIn ad engagements directly to closed-won pipeline — or even connect billboard mentions in calls to the campaign you deployed.",name:"Darshan Advani",role:"Sr. Enterprise Growth Marketing",company:"Exa",image:"/images/mentions/g2/darshan-a.jpg"},{text:"Every time I meet with the Upside team, something really creative comes out of it.",n
838ame:"Darshan Advani",role:"Sr. Enterprise Growth Marketing",company:"Exa",image:"/images/mentions/g2/darshan-a.jpg"},{text:"It really makes me feel like the opportunity for complete attribution can exist.",name:"Darshan Advani",role:"Sr. Enterprise Growth Marketing",company:"Exa",image:"/images/mentions/g2/darshan-a.jpg"},{text:"Effortless multi-touch attribution across all our tools.",name:"Cassandra Stumer",role:"Product Marketing",company:"Assembled"},{text:"Easiest way to build a dashboard (miniapp) ever.",name:"Cassandra Stumer",role:"Product Marketing",company:"Assembled"},{text:"Their team and customer support are phenomenal — they always go above and beyond.",name:"Cassandra Stumer",role:"Product Marketing",company:"Assembled"},{text:"Easily spinning up custom reports with natural language makes showing the value of marketing easy.",name:"Cassandra Stumer",role:"Product Marketing",company:"Assembled"},{text:"We were fully integrated with all our data populated in just two to three days — compared to a previous competitor that took over a year to set up.",name:"Lisa Cole",role:"Chief Marketing & AI Officer",company:"2X",image:"/images/mentions/case/lisa-cole.jpg"},"Anything we've had notes for has been ticketed and quickly updated in the platform.","Updates land in a way that aligns to the best experience of all their customers.","Unique insights I haven't been able to get from any other tool.","Goes beyond multi-touch attribution — it uncovers what actually influenced the outcome.","Some of the best teachers and minds in this space. We learn from them every time we meet.","A trusted data source with immediate, easily filterable results.","Their product expands and improves at a rapid pace.","Upside lets us easily build custom apps on top of their data and get answers in real time.","Visibility into massive data — without hiring another human to solve big data problems.","Helps me get a much better idea of what our enterprise deal motion looks like.","We use Claude to access GTM data integrated with Salesforce, Hubspot, and Gong.","We can quickly and accurately pull attribution reporting for our programs, campaigns, and channels.","Helps uncover what actually influenced an outcome — whether they were referred or had been a user at a previous company.","We're able to build miniapps with LLMs that benefit our sales teams and leaders.","Using Upside through Claude makes it so much easier to get answers conversationally — without spinning up a data request every time."],linkedin:[{text:"We have been diving in and geeking out with Upside!",name:"Kaycee McAdams",role:"Sr. Director",company:"Bandwidth",image:"/images/mentions/linkedin/kaycee-mcadams.jpg",href:"https://www.linkedin.com/feed/update/urn:li:activity:7481412709360525312/"},{text:"Upside dashboards have created such valuable, unbiased, and actionable conversations among our GTM teams.",name:"Kaycee McAdams",role:"Sr. Director",company:"Bandwidth",image:"/images/mentions/linkedin/kaycee-mcadams.jpg",href:"https://www.linkedin.com/feed/update/urn:li:activity:7481412709360525312/"},{text:"Love what the team at Upside is doing with the AI data layer — the need for a semantic / context layer is rising fast.",name:"Andy Mowat",role:"GTM Operator & Advisor",company:"4x Unicorn Exec",image:"/images/mentions/linkedin/andy-mowat.jpg",href:"https://www.linkedin.com/feed/update/urn:li:activity:7481412709360525312/"},{text:"Huge fan of Upside — great products and even better people.",name:"Chris Perpignani",role:"Enterprise Growth & Sales Development",company:"Exa",image:"/images/mentions/linkedin/chris-perpignani.jpg",href:"https://www.linkedin.com/feed/update/urn:li:activity:7481412709360525312/"},{text:"This was something I've never seen before.",name:"Lindsey Marymont",role:"Head of Demand Generation",company:"Assembled",image:"/images/mentions/linkedin/lindsey-marymont.jpg"},{text:"Excited to be working with the team.",name:"Lindsey Marymont",role:"Head of Demand Generation",company:"Assembled",image:"/images/mentions/linkedin/lindsey-marymont.jpg"},{text:"The value we've seen already is huge. Can't wait for more.",name:"Lindsey Marymont",role:"Head of Demand Generation",company:"Assembled",image:"/images/mentions/linkedin/lindsey-marymont.jpg"},{text:"Give Mada and Dan at Upside a follow if you don't already.",name:"Kate Johnson",role:"CMO",company:"Dscout",image:"/images/mentions/linkedin/kate-johnson.jpg"},{text:"They are actually doing the transformative stuff.",name:"Kate Johnson",role:"CMO",company:"Dscout",image:"/images/mentions/linkedin/kate-johnson.jpg"},{text:"We were fortunate to start working with Upside as a design partner early on. Blown away at what they've built.",name:"Wendy Werve",role:"Chief Market Officer",company:"Comply",image:"/images/mentions/linkedin/wendy-werve.png"},{text:"Their team has been the BEST partners. The platform just keeps getting better — definitely game changing for us.",name:"Wendy Werve",role:"Chief Market Officer",company:"Comply",image:"/images/mentions/linkedin/wendy-werve.png"},{text:"Love Upside for visibility into the prospect/customer lifecycle.",name:"Sam Zolnor",role:"Sr. Digital Marketing Manager",company:"Workday",image:"/images/mentions/linkedin/sam-zolnor.png"},{text:"It pulls all of your data across platforms — including your CRM — and turns it into actionable information.",name:"Sam Zolnor",role:"Sr. Digital Marketing Manager",company:"Workday",image:"/images/mentions/linkedin/sam-zolnor.png"},{text:"Their AI-powered deep research tool helped me surface so much to my broader team — beyond just what marketing programs were working.",name:"Sam Zolnor",role:"Sr. Digital Marketing Manager",company:"Workday",image:"/images/mentions/linkedin/sam-zolnor.png"},{text:"The whole Upside team couldn't be nicer. Such supportive partners and wonderful to work with.",name:"Sam Zolnor",role:"Sr. Digital Marketing Manager",company:"Workday",image:"/images/mentions/linkedin/sam-zolnor.png"}
838,{text:"Upside is pretty impressive.",name:"Kacie Jenkins",role:"Marketing Leader",company:"Former SVP Marketing",image:"/images/mentions/linkedin/kacie-jenkins.jpg"},{text:"It can take over a huge chunk of the time most marketing leaders spend digging through the CRM doing dot-connecting detective work.",name:"Kacie Jenkins",role:"Marketing Leader",company:"Former SVP Marketing",image:"/images/mentions/linkedin/kacie-jenkins.jpg"},{text:"You'd love the way Mada and Alex think.",name:"Kacie Jenkins",role:"Marketing Leader",company:"Former SVP Marketing",image:"/images/mentions/linkedin/kacie-jenkins.jpg"},{text:"This is incredible.",name:"Jason Schleweis",role:"Senior Director, Marketing Technology & Automation",company:"Commvault",image:"/images/mentions/linkedin/jason-s.png"},{text:"This is probably the most impressive product demo I've ever seen.",name:"Jason Schleweis",role:"Senior Director, Marketing Technology & Automation",company:"Commvault",image:"/images/mentions/linkedin/jason-s.png"},{text:"That stat about AI discovery leading to higher win rates is huge.",name:"James Nolle",role:"GTM Leader",company:"",image:"/images/mentions/linkedin/james-nolle.jpg"},{text:"Lots of talk about GTMEs these days — but these folks are doing it best.",name:"Camille Ricketts",role:"Storyteller, Marketer, Investor",company:"",image:"/images/mentions/linkedin/camille-ricketts.jpg",href:"https://www.linkedin.com/posts/madalina_activity-7468461846069624832"},{text:"They're quickly becoming the data layer for GTME.",name:"Camille Ricketts",role:"Storyteller, Marketer, Investor",company:"",image:"/images/mentions/linkedin/camille-ricketts.jpg",href:"https://www.linkedin.com/posts/madalina_activity-7468461846069624832"},{text:"Jaw dropping micro-site — some of the best marketing, in service to the ecosystem, I've seen this year.",name:"Camille Ricketts",role:"Storyteller, Marketer, Investor",company:"",image:"/images/mentions/linkedin/camille-ricketts.jpg",href:"https://www.linkedin.com/posts/madalina_activity-7468461846069624832"},{text:"Having the best time with the Upside MCP in Claude.",name:"Balqis Osman",role:"Head of Marketing Operations, Corporate Marketing",company:"2X",image:"/images/mentions/linkedin/balqis-osman.jpg",href:"https://www.linkedin.com/posts/dahmadi_activity-7474983285874642945"},{text:"The Upside team is the best!",name:"Tina Staroselsky",role:"Vice President, Revenue Marketing",company:"Ironclad",image:"/images/mentions/linkedin/tina-staroselsky.jpg",href:ro},{text:"I'm a BIG fan of Mada Seghete and Alex Bauer and what they're building at Upside!",name:"Brandon Redlinger",role:"Fractional VP Marketing",company:"",image:"/images/mentions/linkedin/brandon-redlinger.jpg",href:ro},{text:"Big fan of the team over at Upside!!",name:"Drew Smith",role:"Founder",company:"Attributa",image:"/images/mentions/linkedin/drew-smith.jpg",href:ro},{text:"Mada and the Upside team are amazing!",name:"Felicia Curcuru",role:"Co-founder & CEO",company:"Binti",image:"/images/mentions/linkedin/felicia-curcuru.jpg",href:ro},{text:"I love Mada and her team!!",name:"Tracy Lawrence",role:"Founder Coach",company:"",image:"/images/mentions/linkedin/tracy-lawrence.jpg",href:ro},{text:"Very excited about what Upside is building.",name:"Peter Bregman",role:"Vice President, Marketing & Sales Development",company:"Uber Freight",image:"/images/mentions/linkedin/peter-bregman.jpg",href:ro},{text:"Love this — such a clear explanation of something complex I've been trying to articulate for a while.",name:"Lauren Alt Kishpaugh",role:"Interim VP, Revenue Marketing",company:"Pendo",image:"/images/mentions/linkedin/lauren-alt-kishpaugh.jpg",href:ro},{text:"Love the problem space and Upside's approach.",name:"Andre Vanier",role:"Head of Orchestration Strategy",company:"Zapier",image:"/images/mentions/linkedin/andre-vanier.jpg",href:ro},{text:"AI has turned the attribution game Upside down — pun unintended — and Upside is a pioneer that rocks!",name:"Nalini Mohan",role:"Founding Marketer",company:"",image:"/images/mentions/linkedin/nalini-mohan.jpg",href:ro},{text:"Incredible.",name:"Dave Fontenot",role:"HF0 Residency",company:"",image:"/images/mentions/linkedin/dave-fontenot.jpg",href:ro},{text:"Get a demo of this product ASAP. It will blow your mind.",name:"Wendy Werve",role:"Chief Market Officer",company:"Comply",image:"/images/mentions/linkedin/wendy-werve.png",href:ss},{text:"We started with a goal of better attribution, but Upside went well beyond — the granularity and visibility into our prospect and customer journeys is incredible.",name:"Wendy Werve",role:"Chief Market Officer",company:"Comply",image:"/images/mentions/linkedin/wendy-werve.png",href:ss},{text:"Upside is nothing short of amazing! It powers incredible insights and views into our data in minutes that previously would have taken weeks or months to build.",name:"Carl Gunlefinger",role:"Senior Marketing Operations Manager",company:"Comply",image:"/images/mentions/g2/carl-g.jpg",href:ss},{text:"I've loved getting the keys to the proverbial Upside car.",name:"Zach Kunkel",role:"Product Marketing Leader",company:"Bandwidth",image:"/images/mentions/linkedin/zach-kunkel.jpg",href:ss},{text:"We used to start every question by asking how much we could really trust the data. Not the case with Upside anymore.",name:"Zach Kunkel",role:"Product Marketing Leader",company:"Bandwidth",image:"/images/mentions/linkedin/zach-kunkel.jpg",href:ss},{text:"Our team are big fans of Upside — it's been pivotal in unlocking our data for us.",name:"Balqis Osman",role:"Head of Marketing Operations, Corporate Marketing",company:"2X",image:"/images/mentions/linkedin/balqis-osman.jpg",href:ss},{text:"We got value from Upside so quickly.",name:"Kate Johnson",role:"CMO",company:"Dscout",image:"/images/mentions/linkedin/kate-johnson.jpg",href:lP},{text:"Dan and the Upside team are building something genuinely revolutionary for attribution.",name:"Darshan Advani",role:"Sr. Enterprise Growth Marketing",company:"Exa",image:"/images/mentions/linkedin/darshan-advani.jpg",href:ss},{text:"They're doing legendary work at Upside. Definitely check them out.",name:"Darshan Advani",role:"Sr. Enterprise Growth Marketing",company:"Exa",image:"/images/mentions/linkedin/darshan-advani.jpg",href:ss},{text:"The Upside team figured out the hard piece — before AI can drive GTM workflows, the data underneath has to be usable.",name:"Chris H.",role:"Revenue Technology",company:"Cresta",image:"/images/mentions/linkedin/chris-h.jpg",href:ss},{text:"Fan of Upside and the rise of growth engineers.",name:"Rish Gupta",role:"Co-founder & CEO",company:"Spot AI",image:"/images/mentions/linkedin/rish-gupta.jpg",href:lP},{text:"What you're building is amazing and unlike anything else in the market. I've not been this excited about a GTM product or team in a very long time.",name:"Wendy Werve",role:"Chief Market Officer",company:"Springbrook Software",image:"/images/mentions/linkedin/wendy-werve.png",href:Iv},{text:"This is absolutely what the market and every CMO needs.",name:"Wendy Werve",role:"Chief Market Officer",company:"Springbrook Software",image:"/images/mentions/linkedin/wendy-werve.png",href:Iv},{text:"You need a clean data layer to make agents useful at scale. I feel like every team out there needs Upside.",name:"Brandon Redlinger",role:"Fractional VP of Marketing",company:"B2B SaaS + AI",image:"/images/mentions/linkedin/brandon-redlinger.jpg",href:Iv},{text:'Everyone is saying "clean up your data" to prepare for AI, but the details on how are pretty thin. Finally, a scalable solution for AI-enablement!',name:"Adam Landis",role:"Founder & CEO",company:"Advertising & Marketing",image:"/images/mentions/linkedin/adam-landis.jpg",href:Iv}],case:[{text:"This is more data than we've ever been able to put together and visualize so quickly. This is amazing that Upside can do this.",name:"Lisa Cole",role:"Chief Marketing & AI Officer",company:"2X",image:"/images/mentions/case/lisa-cole.jpg"},{text:"Setup has been super easy — a fantastic experience. Right out the gate, it was completely painless.",name:"Balqis Osman",role:"Head of Marketing Operations, Corporate Marketing",company:"2X",image:"/images/mentions/case/balqis-osman.jpg"},{text:"Upside stitched all these data points together — and when I saw that, it created an epiphany for me. I finally understood what was possible.",name:"Matt Grebow",role:"Director of Enterprise Marketing",company:"ServiceTitan",image:"/images/mentions/case/matt-grebow.png",href:"https://www.youtube.com/watch?v=uz8KsgeFi1k&t=501s"}
838,{text:"The automated version of the board slides I used to build by hand, finally telling a complete story.",name:"Carilu Dietrich",role:"Former CMO",company:"Atlassian",image:"/images/mentions/case/carilu-dietrich.jpg",href:"https://www.carilu.com/p/how-ai-is-changing-marketing-attribution"},{text:"Real life is messy. Enterprise cycles are messy.",name:"Stephen Daniels",role:"VP, GTM & Strategic Operations",company:"Cresta",image:"/images/mentions/case/stephen-daniels.jpg"},{text:"Upside accurately reflects that messy reality. Rare, and impossible before.",name:"Stephen Daniels",role:"VP, GTM & Strategic Operations",company:"Cresta",image:"/images/mentions/case/stephen-daniels.jpg"},{text:"Most attribution tools force you to choose between a model and the truth. Upside lets you have both.",name:"Stephen Daniels",role:"VP, GTM & Strategic Operations",company:"Cresta",image:"/images/mentions/case/stephen-daniels.jpg"},{text:"I've been in marketing for 10+ years, and I've never been able to get a clear picture of the buyer journey.",name:"Lindsey Marymont",role:"Head of Demand Generation",company:"Assembled",image:"/images/mentions/case/lindsey-marymont.png"},{text:"With Upside, we see a complete milestone analysis with data pulled from Gong we'd never see in Salesforce.",name:"Lindsey Marymont",role:"Head of Demand Generation",company:"Assembled",image:"/images/mentions/case/lindsey-marymont.png"},{text:"The fact that Upside could work with imperfect data was the selling point. We knew our data wasn't clean.",name:"Lindsey Marymont",role:"Head of Demand Generation",company:"Assembled",image:"/images/mentions/case/lindsey-marymont.png"},{text:"The executive team uses Upside every week.",name:"Lindsey Marymont",role:"Head of Demand Generation",company:"Assembled",image:"/images/mentions/case/lindsey-marymont.png"},{text:"We run major opportunities through Upside to figure out how they came to us and what's happening with them.",name:"Lindsey Marymont",role:"Head of Demand Generation",company:"Assembled",image:"/images/mentions/case/lindsey-marymont.png"},{text:"Pipeline went from a debate over methodology to a conversation about what to do next.",name:"Lindsey Marymont",role:"Head of Demand Generation",company:"Assembled",image:"/images/mentions/case/lindsey-marymont.png"},{text:"A sales rep will say, 'the deal came in this way.' We go in and say, 'actually, they pinballed their way through.'",name:"Wendy Werve",role:"CMO",company:"Comply",image:"/images/mentions/case/wendy-werve.png"},{text:"No two journeys are exactly the same. It's like a snowflake.",name:"Wendy Werve",role:"CMO",company:"Comply",image:"/images/mentions/case/wendy-werve.png"},{text:"We are like kids in a candy shop digging into accounts and opportunities.",name:"Wendy Werve",role:"Chief Market Officer",company:"Comply",image:"/images/mentions/case/wendy-werve.png"},{text:"I haven't seen a single case where I followed the data trail and found something wrong. I've stopped checking.",name:"Carl Gunlefinger",role:"Sr. Marketing Operations Manager",company:"Comply",image:"/images/mentions/case/carl-gunlefinger.png"},{text:"Honestly, the first time I found a huge use case for AI for me.",name:"Carl Gunlefinger",role:"Sr. Marketing Operations Manager",company:"Comply",image:"/images/mentions/case/carl-gunlefinger.png"},{text:"A tool that has the data organized, and I can query it thinking the way I think.",name:"Carl Gunlefinger",role:"Sr. Marketing Operations Manager",company:"Comply",image:"/images/mentions/case/carl-gunlefinger.png"},{text:"We stopped doing events because we didn't have data saying they were impactful.",name:"Ethan Smith",role:"CEO & Founder",company:"Graphite",image:"/images/mentions/case/ethan-smith.png"},{text:"With Upside, we can see events are actually a massive flywheel for our business.",name:"Ethan Smith",role:"CEO & Founder",company:"Graphite",image:"/images/mentions/case/ethan-smith.png"},{text:"We had no idea how many people were referring deals to us. Upside showed us the full picture.",name:"Ethan Smith",role:"CEO & Founder",company:"Graphite",image:"/images/mentions/case/ethan-smith.png"},{text:"This is exactly what has always been missing from revenue reporting.",name:"Rebecca Scully",role:"VP of Marketing",company:"Syndio",image:"/images/mentions/case/rebecca-scully.jpg"}
838,{text:"Self-serve campaign performance numbers without MOPS tickets.",name:"Amy Wellersdick",role:"Senior Director of Marketing Strategy & Growth",company:"Syndio",image:"/images/mentions/case/amy-wellersdick.jpg"},{text:"We have a strong partner to help us make data-driven decisions.",name:"Amy Wellersdick",role:"Senior Director of Marketing Strategy & Growth",company:"Syndio",image:"/images/mentions/case/amy-wellersdick.jpg"},{text:"Upside is doing it in innovative ways we haven't seen other startups do yet.",name:"Amy Wellersdick",role:"Senior Director of Marketing Strategy & Growth",company:"Syndio",image:"/images/mentions/case/amy-wellersdick.jpg"},{text:"It helped us validate that what we thought was true was actually true.",name:"Amy Wellersdick",role:"Senior Director of Marketing Strategy & Growth",company:"Syndio",image:"/images/mentions/case/amy-wellersdick.jpg"},{text:"The biggest shift: once we launched, the team was way more self-sufficient with data.",name:"Amy Wellersdick",role:"Senior Director of Marketing Strategy & Growth",company:"Syndio",image:"/images/mentions/case/amy-wellersdick.jpg"},{text:"Marketers and RevOps leaders log in on their own now — without waiting for a special analysis deck.",name:"Amy Wellersdick",role:"Senior Director of Marketing Strategy & Growth",company:"Syndio",image:"/images/mentions/case/amy-wellersdick.jpg"},{text:"What used to take 2-3 hours I can now do in a few clicks.",name:"Charlie Flanagan",role:"Head of Marketing Operations",company:"Dscout",image:"/images/mentions/case/charlie-flanagan.jpg"},{text:"It's made me a smarter operations person than I've ever been in my career.",name:"Charlie Flanagan",role:"Head of Marketing Operations",company:"Dscout",image:"/images/mentions/case/charlie-flanagan.jpg"},{text:"Our GTM leaders have faith in the accuracy and cleanliness of our data. Now they expect a level of insight.",name:"Charlie Flanagan",role:"Head of Marketing Operations",company:"Dscout",image:"/images/mentions/case/charlie-flanagan.jpg"},{text:"We had detailed campaign data in Salesforce, but turning that data into a story was incredibly manual.",name:"Charlie Flanagan",role:"Head of Marketing Operations",company:"Dscout",image:"/images/mentions/case/charlie-flanagan.jpg"},{text:"We faced a classic B2B puzzle — months of spreadsheet wrangling to answer one ROI question.",name:"Charlie Flanagan",role:"Head of Marketing Operations",company:"Dscout",image:"/images/mentions/case/charlie-flanagan.jpg"},{text:"5 months and 100s of hours of our MOPS person's time to stand up another measurement provider at a previous company.",name:"Kate Johnson",role:"CMO",company:"Dscout",image:"/images/mentions/case/kate-johnson.jpg"},{text:"Upside was live in a day.",name:"Kate Johnson",role:"CMO",company:"Dscout",image:"/images/mentions/case/kate-johnson.jpg"},{text:"This product makes me weep — the fact that you all understand the nuances of sales and marketing working together. The evidence along with the overall story… I have no words.",name:"Jessica Bolgiano",role:"Growth Marketing Leader",company:"Springbrook",image:"/images/mentions/case/jessica-bolgiano.jpg",href:"https://www.linkedin.com/in/jessicanow"}]};function Zle(e){return function(){let t=e+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}function Dv(e,t){return t[Math.floor(e()*t.length)]}function dP(e,t,a){const i=[()=>t.toLowerCase(),()=>`${t.toLowerCase()}${a.toLowerCase()}`,()=>`${t[0].toLowerCase()}${a.toLowerCase()}`,()=>`${t.toLowerCase()}_${a.toLowerCase()}`,()=>`${t.toLowerCase()}${Math.floor(e()*90)+10}`,()=>`${a.toLowerCase()}${t[0].toLowerCase()}`];return i[Math.floor(e()*i.length)]().replace(/[^\w]/g,"").slice(0,18)}function Jle(e){const t=e();return t<.36?"linkedin":t<.7?"g2":"case"}const ece="https://www.g2.com/products/upside-upside/reviews",uP={Cresta:"/case-studies/cresta-from-attribution-to-ai-deep-research",Assembled:"/case-studies/assembled-from-attribution-guesswork-to-pipeline-surge",Comply:"/case-studies/comply-from-unfiltered-salesforce-data-to-marketing-intelligence",Graphite:"/case-studies/graphite-uncovering-real-channels-behind-inbound-growth",Syndio:"/case-studies/syndio-driving-strategic-gtm-decisions-with-upside",Dscout:"/case-studies/dscout-driving-confident-growth-with-upside"};function tce(e=170,t=.82,a=7){const i=Zle(a),r=[],o=new Set,l=h=>{for(let m=h.length-1;m>0;m--){const f=Math.floor(i()*(m+1));[h[m],h[f]]=[h[f],h[m]]}return h},d={},u={};for(const h of Object.keys(cP))d[h]=l([...cP[h]]),u[h]=0;for(let h=0;h<e;h++){const m=Dv(i,Vle),f=Dv(i,Kle);let y=dP(i,m,f),b=0;for(;o.has(y)&&b<6;)y=dP(i,m,f)+(b+1),b++;o.add(y);let x=Dv(i,Xle),k=Dv(i,Qle);const v=Jle(i),j=d[v]||[],C=(v==="case"?!0:i()<t)&&u[v]<j.length?j[u[v]++]:null;let _=null,E=null,R=null,W=null;
838C&&(typeof C=="string"?_=C:(_=C.text,E=C.image||null,R=C.name||null,C.role!==void 0&&(k=C.role),C.company!==void 0&&(x=C.company),C.href&&(W=C.href))),_&&!W&&(v==="case"&&uP[x]?W=uP[x]:v==="g2"&&(W=ece));const z=Math.floor(i()*6),H=Math.floor(i()*5),$=i()*16-8,U=Math.floor(i()*90)+1,X=U<1?"today":U<7?`${U}d`:U<30?`${Math.floor(U/7)}w`:`${Math.floor(U/30)}mo`;r.push({id:`p${h}`,name:`${m} ${f}`,first:m,last:f,handle:`@${y}`,platform:v,role:k,company:x,text:_,time:X,tone:z,variant:H,hue:$,image:E,attributedName:R,href:W})}return r}const nce=tce(170,.82,7),hP=[["#1E3539","#509A79","#A4C9B7","#8DBBA2"],["#316851","#B4D2C1","#EEF5F1","#509A79"],["#509A79","#D8E8DF","#FFFFFF","#316851"],["#0C1E20","#3F8265","#8DBBA2","#509A79"],["#869DA2","#15292C","#3F8265","#1E3539"],["#B5C4C7","#1E3539","#509A79","#316851"]];function pP({seed:e=0,tone:t=0,variant:a=0,hue:i=0,dim:r=!1,decorative:o=!1,logo:l}){const d=hP[t%hP.length],[u,h,m,f]=d;if(l==="g2")return n.jsxs("svg",{viewBox:"0 0 24 24",preserveAspectRatio:"xMidYMid slice",style:{filter:r?"saturate(0.6) brightness(0.97)":"none",transition:"filter 200ms cubic-bezier(0.2,0,0,1)"},children:[n.jsx("rect",{x:"0",y:"0",width:"24",height:"24",rx:"4.5",fill:"#316851"}),n.jsx("path",{d:"M12.122 5.143c.45 0 .9.044 1.342.132l-1.342 2.806C9.962 8.08 8.203 9.84 8.203 12s1.76 3.92 3.92 3.92c.937 0 1.844-.338 2.553-.951l1.483 2.572A6.856 6.856 0 0 1 5.266 12a6.856 6.856 0 0 1 6.856-6.856Zm3.498.49h.026q.639 0 1.101.34q.465.345.466.946c0 .639-.36 1.03-1.035 1.376l-.377.191c-.403.204-.602.385-.657.706h2.05v.85h-3.101v-.144q-.001-.788.314-1.306q.315-.517 1.102-.917l.242-.117c.427-.216.538-.401.538-.625c0-.266-.228-.458-.6-.458c-.44 0-.773.228-1.004.694l-.592-.595q.196-.417.619-.675a1.7 1.7 0 0 1 .908-.266m-2.094 5.388h3.394l1.697 2.937l-1.697 2.94l-1.697-2.94H11.83z",fill:"#EEF5F1"}),n.jsx("rect",{x:"0.25",y:"0.25",width:"23.5",height:"23.5",rx:"4.25",fill:"none",stroke:"rgba(255,255,255,0.06)"})]});if(o)return n.jsxs("svg",{viewBox:"0 0 48 48",preserveAspectRatio:"xMidYMid slice",children:[n.jsx("defs",{children:n.jsxs("linearGradient",{id:`avg${e}`,x1:"0",y1:"0",x2:"0",y2:"1",children:[n.jsx("stop",{offset:"0%",stopColor:u,stopOpacity:"1"}),n.jsx("stop",{offset:"100%",stopColor:h,stopOpacity:"0.45"})]})}),n.jsx("rect",{x:"9",y:"9",width:"30",height:"30",rx:"6",fill:u}),n.jsx("rect",{x:"9",y:"9",width:"30",height:"30",rx:"6",fill:`url(#avg${e})`,opacity:"0.5"}),n.jsx("rect",{x:"9.5",y:"9.5",width:"29",height:"29",rx:"5.5",fill:"none",stroke:"rgba(255,255,255,0.04)"})]});const y=e*13%7-3,b=e*7%5-2,x=[n.jsxs("g",{children:[n.jsx("circle",{cx:24+y,cy:22+b,r:"9",fill:h}),n.jsx("path",{d:`M${8+y} 48 Q24 ${34+b} ${40+y} 48 Z`,fill:h})]},"v0"),n.jsxs("g",{children:[n.jsx("circle",{cx:24+y,cy:22+b,r:"9.5",fill:h}),n.jsx("path",{d:`M${14.5+y} ${20+b} Q24 ${10+b} ${33.5+y} ${20+b} L${33+y} ${17+b} Q24 ${8+b} ${15+y} ${17+b} Z`,fill:f}),n.jsx("path",{d:`M${7+y} 48 Q24 ${33+b} ${41+y} 48 Z`,fill:h})]},"v1"),n.jsxs("g",{children:[n.jsx("circle",{cx:24+y,cy:22+b,r:"9.5",fill:h}),n.jsx("circle",{cx:18+y,cy:16+b,r:"4.6",fill:f}),n.jsx("circle",{cx:24+y,cy:14+b,r:"5",fill:f}),n.jsx("circle",{cx:30+y,cy:16+b,r:"4.6",fill:f}),n.jsx("path",{d:`M${8+y} 48 Q24 ${33+b} ${40+y} 48 Z`,fill:h})]},"v2"),n.jsxs("g",{children:[n.jsx("circle",{cx:24+y,cy:22+b,r:"9.5",fill:h}),n.jsx("path",{d:`M${14.5+y} ${18+b} Q${18+y} ${10+b} ${28+y} ${12+b} Q${34+y} ${15+b} ${33+y} ${20+b} L${27+y} ${18+b} Q${22+y} ${17+b} ${17+y} ${22+b} Z`,fill:f}),n.jsx("path",{d:`M${9+y} 48 Q24 ${34+b} ${39+y} 48 Z`,fill:h})]},"v3"),n.jsxs("g",{children:[n.jsx("circle",{cx:24+y,cy:23+b,r:"9",fill:h}),n.jsx("path",{d:`M${13+y} ${27+b} Q${13+y} ${13+b} ${24+y} ${11+b} Q${35+y} ${13+b} ${35+y} ${27+b} L${33+y} ${24+b} Q${33+y} ${15+b} ${24+y} ${14+b} Q${15+y} ${15+b} ${15+y} ${24+b} Z`,fill:f}),n.jsx("path",{d:`M${8+y} 48 Q24 ${34+b} ${40+y} 48 Z`,fill:h})]},"v4")],k=n.jsx("circle",{cx:20+y,cy:19+b,r:"1.3",fill:m,opacity:"0.7"});return n.jsxs("svg",{viewBox:"0 0 48 48",preserveAspectRatio:"xMidYMid slice",style:{filter:r?"saturate(0.45) brightness(0.95)":"none",transition:"filter 200ms cubic-bezier(0.2,0,0,1)"},children:[n.jsxs("defs",{children:[n.jsx("clipPath",{id:`avc${e}`,children:n.jsx("rect",{x:"0",y:"0",width:"48",height:"48",rx:"9",ry:"9"})}),n.jsx("filter",{id:`avh${e}`,children:n.jsx("feColorMatrix",{type:"hueRotate",values:String(i)})})]}),n.jsxs("g",{clipPath:`url(#avc${e})`,filter:`url(#avh${e})`,children:[n.jsx("rect",{x:"0",y:"0",width:"48",height:"48",fill:u}),x[a%x.length],k,n.jsx("rect",{x:"0.5",y:"0.5",width:"47",height:"47",rx:"8.5",ry:"8.5",fill:"none",stroke:"rgba(255,255,255,0.06)"})]})]})}function TG(e,t,a){const i=[];for(let r=0;r<t;r++){const o=[];for(let l=0;l<e;l++){const d=Math.min(l,e-1-l),u=Math.min(r,t-1-r);let h=1;d===0?h*=.85:d===1&&(h*=.96),u===0?h*=.78:u===1&&(h*=.94),r===t-1&&(h*=.72),o.push(a()<h)}i.push(o)}return i}function ace(e,t,a){const i=[],r=(e-1)/2,o=(t-1)/2,l=e/2,d=t/2;
838for(let u=0;u<t;u++){const h=[];for(let m=0;m<e;m++){const f=(m-r)/l,y=(u-o)/d,b=Math.sqrt(f*f+y*y),x=b<.75?1:b<.95?.85:b<1.05?.45:b<1.15?.18:0;h.push(a()<x)}i.push(h)}return i}function ice(e,t,a){const i=[];for(let r=0;r<t;r++){const o=[];for(let l=0;l<e;l++){const d=l/(e-1),u=1+1.2*Math.sin(d*Math.PI*2.2),h=t-2-1.4*Math.sin(d*Math.PI*2.2+1.1);let m=0;r>u&&r<h?m=1:r>=u-1&&r<=h+1&&(m=.5),o.push(a()<m)}i.push(o)}return i}const rce={rect:TG,oval:ace,wave:ice},mP={sparse:{cell:38,gap:4,cols:20,rows:6},regular:{cell:30,gap:3,cols:26,rows:7},dense:{cell:24,gap:3,cols:32,rows:9}};function qj(e){return function(){let t=e+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}}function Zf({p:e}){return e==="x"?n.jsx("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.75",strokeLinecap:"round",strokeLinejoin:"round",children:n.jsx("path",{d:"M4 4l16 16M20 4L4 20"})}):e==="linkedin"?n.jsx("svg",{viewBox:"0 0 24 24",fill:"currentColor",children:n.jsx("path",{d:"M4.5 3.5a2 2 0 100 4 2 2 0 000-4zM3 9h3v12H3V9zm6 0h2.9v1.7h.04c.41-.78 1.41-1.7 2.91-1.7 3.11 0 3.69 2.05 3.69 4.71V21h-3v-5.6c0-1.34-.03-3.07-1.87-3.07-1.87 0-2.16 1.46-2.16 2.97V21H9V9z"})}):e==="case"?n.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.75",strokeLinecap:"round",strokeLinejoin:"round",children:[n.jsx("path",{d:"M5 4h10l4 4v12a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1z"}),n.jsx("path",{d:"M14 4v5h5"}),n.jsx("path",{d:"M8 13h7M8 17h5"})]}):n.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.75",strokeLinecap:"round",strokeLinejoin:"round",children:[n.jsx("path",{d:"M21 12a9 9 0 11-3.5-7.1"}),n.jsx("path",{d:"M21 5v4h-4"})]})}function oce(e){return e?e.split(/(@\w+)/g).map((a,i)=>/^@\w+/.test(a)?n.jsx("span",{className:"mc-popover__mention",children:a},i):n.jsx("span",{children:a},i)):null}function _G({person:e,dim:t,popover:a=!1,decorative:i=!1}){const[r,o]=M.useState(!1);return M.useEffect(()=>{o(!1)},[e.image]),e.image&&!r?n.jsx("img",{className:a?"mc-headshot mc-headshot--pop":"mc-headshot",src:e.image,alt:e.attributedName||"",loading:"lazy","data-dim":t?"true":"false",onError:()=>o(!0)}):e.platform==="g2"&&e.text?n.jsx(pP,{seed:parseInt(e.id.slice(1),10),dim:t,logo:"g2"}):n.jsx(pP,{seed:parseInt(e.id.slice(1),10),tone:e.tone,variant:e.variant,hue:e.hue,dim:t,decorative:i})}function sce({people:e=nce,shape:t="rect",density:a="regular"}){const i=M.useRef(null),r=M.useRef({}),o=M.useRef(null),l=mP[a]||mP.regular,d=M.useMemo(()=>{const A=qj(99+(t==="rect"?1:t==="oval"?2:3)),_=(rce[t]||TG)(l.cols,l.rows,A),E=(l.cols-1)/2,R=(l.rows-1)/2,W=l.cols/2,z=l.rows/2,H=[];for(let ae=0;ae<l.rows;ae++)for(let ge=0;ge<l.cols;ge++){if(!_[ae][ge])continue;const be=(ge-E)/W,le=(ae-R)/z,ee=Math.sqrt(be*be+le*le);H.push({row:ae,col:ge,d:ee})}const $=qj(789),U=ae=>{for(let ge=ae.length-1;ge>0;ge--){const be=Math.floor($()*(ge+1));[ae[ge],ae[be]]=[ae[be],ae[ge]]}return ae},X=U(e.filter(ae=>ae.text)),D=U(e.filter(ae=>!ae.text));H.sort((ae,ge)=>ae.d-ge.d);const P=qj(321),O=[];let B=0,Y=0;for(const ae of H){const ge=H.length-O.length,be=X.length-B,le=D.length-Y;let ee;be>=ge||le<=0?ee=!0:be<=0?ee=!1:ee=P()<Math.max(.25,1-Math.pow(ae.d,1.4)*.55),ee&&X[B]?O.push({...ae,person:X[B++]}):D[Y]&&O.push({...ae,person:D[Y++]})}const V=new Map;O.forEach((ae,ge)=>V.set(`${ae.row},${ae.col}`,ge));const G=O.map((ae,ge)=>ae.person.text?ge:-1).filter(ae=>ae>=0),I=O.map(()=>[]);for(const ae of G){const{row:ge,col:be}=O[ae];for(let le=-1;le<=1;le++)for(let ee=-1;ee<=1;ee++){if(le===0&&ee===0)continue;const ve=V.get(`${ge+le},${be+ee}`);ve!==void 0&&O[ve].person.text&&I[ae].push({j:ve,w:le===0||ee===0?4:1})}}const F=O.map(ae=>ae.person),K=ae=>ae.attributedName??(ae.platform==="g2"&&ae.text&&!ae.image?"g2-anon":`id:${ae.id}`),ne=(ae,ge)=>{let be=0;const le=new Set;for(const ee of ge==null?[ae]:[ae,ge])for(const{j:ve,w:Se}of I[ee]){const pe=ee<ve?`${ee}-${ve}`:`${ve}-${ee}`;le.has(pe)||(le.add(pe),K(F[ee])===K(F[ve])&&(be+=Se))}return be};for(let ae=0;ae<16;ae++){let ge=!1;for(const be of G)if(ne(be,null)!==0)for(const le of G){if(le===be||K(F[be])===K(F[le]))continue;const ee=ne(be,le);[F[be],F[le]]=[F[le],F[be]],ne(be,le)<ee?ge=!0:[F[be],F[le]]=[F[le],F[be]]}if(!ge)break}for(const ae of G)O[ae].person=F[ae];return O},[e,t,l.cols,l.rows]),u=M.useMemo(()=>d.map(A=>A.person),[d]),[h,m]=M.useState(null),[f,y]=M.useState(null);M.useEffect(()=>{m(null),y(null)},[t,a]);const[b,x]=M.useState(null),k=f||h,v=k?u.find(A=>A.id===k)??null:null;M.useEffect(()=>{if(!k){x(null);return}const A=r.current[k],C=i.current;if(!A||!C)return;const _=12,E=12,R=()=>{const z=A.getBoundingClientRect(),H=C.getBoundingClientRect(),$=z.left-H.left,U=z.top-H.top,X=z.width,D=z.height,P=o.current,O=P?P.offsetWidth:v!=null&&v.image?340:300,B=P?P.offsetHeight:200,Y=H.width,V=$+X+_+O<=Y-E,G=$-_-O>=E;let I,F,K;V?(I="right",F=$+X+_):G?(I="left",F=$-O-_):(I="below",F=$+X/2-O/2),K=I==="below"?U+D+_:U+D/2-B/2,K<0&&(K=4),K+B>H.height&&(K=Math.max(4,H.height-B-4));const ne=E,ae=Y-E-O;F<ne?F=ne:F>ae&&(F=Math.max(ne,ae));let ge,be;
838I==="right"?(ge=-6,be=U+D/2-K-6):I==="left"?(ge=O-6,be=U+D/2-K-6):(ge=$+X/2-F-6,be=-6),x({left:F,top:K,placement:I,tailX:ge,tailY:be})};R();const W=requestAnimationFrame(R);return()=>cancelAnimationFrame(W)},[k,v]),M.useEffect(()=>{if(!f)return;const A=C=>{var R;if(!i.current)return;(((R=C.composedPath)==null?void 0:R.call(C))??[]).some(W=>{var z,H;return(H=(z=W==null?void 0:W.classList)==null?void 0:z.contains)==null?void 0:H.call(z,"mc-popover")})||y(null)};return window.addEventListener("mousedown",A),window.addEventListener("touchstart",A,{passive:!0}),()=>{window.removeEventListener("mousedown",A),window.removeEventListener("touchstart",A)}},[f]);const j=d.map(({row:A,col:C,d:_,person:E})=>{const R=f===E.id||h===E.id,W=!!E.text,z=W&&!E.image;let H;if(R)H=1;else{const D=Math.max(0,Math.min(1,(_-.78)/.41999999999999993));H=W?Math.max(.85,1-D*.15):Math.max(.45,1-D*.55)}const $=n.jsx(_G,{person:E,dim:!R,decorative:!W});return n.jsx("div",{className:["mc-cell",W?"mc-cell--has-quote":"",z?"mc-cell--anon-quote":"",R?"mc-cell--active":""].join(" ").trim(),style:{gridColumn:C+1,gridRow:A+1,opacity:H},ref:U=>{U&&(r.current[E.id]=U)},children:W?n.jsx("button",{type:"button",className:"mc-cell__btn","aria-label":`Customer mention: ${E.text}`,onMouseEnter:()=>m(E.id),onMouseLeave:()=>m(null),onFocus:()=>m(E.id),onBlur:()=>{f||m(null)},onClick:()=>y(U=>U===E.id?null:E.id),children:$}):n.jsx("div",{className:"mc-cell__btn mc-cell__btn--decorative","aria-hidden":"true",children:$})},E.id)}),T={"--mc-cell-size":`${l.cell}px`,"--mc-cloud-gap":`${l.gap}px`,gridTemplateColumns:`repeat(${l.cols}, ${l.cell}px)`,gridAutoRows:`${l.cell}px`};return n.jsxs("div",{className:"mc-cloud-wrap",ref:i,children:[n.jsx("div",{className:"mc-cloud-viewport",children:n.jsx("div",{className:"mc-cloud",style:T,children:j})}),v&&b&&n.jsx(cce,{person:v,pos:b,pinned:f===v.id,innerRef:o})]})}const fP={x:"X",linkedin:"LinkedIn",g2:"G2",case:"Case study"},lce={x:"via",linkedin:"via",g2:"via",case:"From a"};function cce({person:e,pos:t,pinned:a,innerRef:i}){const r=!!e.attributedName,o=`mc-popover mc-popover--anon${r?" mc-popover--attributed":""}${e.href?" mc-popover--link":""}`,l={left:`${t.left}px`,top:`${t.top}px`},d=r?`${e.attributedName} testimonial`:"Customer testimonial",u=n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"mc-popover__tail",style:{left:`${t.tailX}px`,top:`${t.tailY}px`}}),e.text&&n.jsx("p",{className:"mc-popover__quote",children:oce(e.text)}),r?n.jsxs("div",{className:"mc-popover__attrib",children:[n.jsx("div",{className:"mc-popover__attrib-avatar",children:n.jsx(_G,{person:e,popover:!0})}),n.jsxs("div",{className:"mc-popover__attrib-meta",children:[n.jsx("div",{className:"mc-popover__attrib-name",children:e.attributedName}),n.jsxs("div",{className:"mc-popover__attrib-role",children:[e.role,e.company?` · ${e.company}`:""]})]}),n.jsx("span",{className:"mc-popover__source-icon mc-popover__attrib-platform",title:fP[e.platform],children:n.jsx(Zf,{p:e.platform})})]}):n.jsxs("div",{className:"mc-popover__source",children:[n.jsx("span",{className:"mc-popover__source-icon",children:n.jsx(Zf,{p:e.platform})}),n.jsxs("span",{className:"mc-popover__source-label",children:[lce[e.platform]||"via"," ",fP[e.platform]||e.platform]})]})]});if(e.href){const h=/^https?:\/\//.test(e.href),m=`${d} — opens source`;return h?n.jsx("a",{ref:i,className:o,"data-pinned":a?"true":"false",style:l,href:e.href,target:"_blank",rel:"noopener noreferrer nofollow","aria-label":m,children:u}):n.jsx(J,{ref:i,className:o,"data-pinned":a?"true":"false",style:l,to:e.href,"aria-label":m,children:u})}return n.jsx("div",{ref:i,className:o,"data-pinned":a?"true":"false",style:l,role:"dialog","aria-label":d,children:u})}function dce(){return n.jsxs("section",{id:"mentions",className:"mc-section","aria-labelledby":"mc-heading",children:[n.jsxs("header",{className:"mc-head",children:[n.jsxs("div",{className:"mc-eyebrow-row",children:[n.jsx("span",{className:"mc-eyebrow-dot"}),n.jsx("span",{className:"mc-eyebrow",children:"Voices from the public"})]}),n.jsx("h2",{id:"mc-heading",className:"mc-title",children:"Operators talk. We listen."}),n.jsx("p",{className:"mc-sub",children:"Real mentions from GTM leaders."})]}),n.jsx(sce,{}),n.jsx("div",{className:"mc-cta",children:n.jsx(J,{to:Wt,className:"mc-btn mc-btn--primary",children:"Talk to sales"})}),n.jsxs("div",{className:"mc-platform-row",role:"navigation","aria-label":"See more mentions",children:[n.jsx("span",{className:"mc-platform-row__label",children:"See more on"}),n.jsxs("a",{className:"mc-platform-link",href:"https://www.linkedin.com/company/upsidelabs/",target:"_blank",rel:"noopener noreferrer nofollow",children:[n.jsx("span",{className:"mc-platform-link__icon",children:n.jsx(Zf,{p:"linkedin"})}),n.jsx("span",{className:"mc-platform-link__name",children:"LinkedIn"}),n.jsx("span",{className:"mc-platform-link__arrow","aria-hidden":"true",children:"→"})]}),n.jsxs("a",{className:"mc-platform-link",href:"https://www.g2.com/products/upside-upside/reviews",target:"_blank",rel:"noopener noreferrer nofollow",children:[n.jsx("span",{className:"mc-platform-link__icon",children:n.jsx(Zf,{p:"g2"})}),n.jsx("span",{className:"mc-platform-link__name",children:"G2"}),n.jsx("span",{className:"mc-platform-link__arrow","aria-hidden":"true",children:"→"})]}),n.jsxs(J,{className:"mc-platform-link",to:"/case-studies",children:[n.jsx("span",{className:"mc-platform-link__icon",children:n.jsx(Zf,{p:"case"})}),n.jsx("span",{className:"mc-platform-link__name",children:"Case studies"}),n.jsx("span",{className:"mc-platform-link__arrow","aria-hidden":"true",children:"→"})]})]})]})}const Ae={green:"#2d6a4f",greenHover:"#1f5238",greenSoft:"#509A79",text:"#1b1f1c",muted:"#5f6563",border:"#eaeeea",bgSoft:"#fafafa",greenLight:"#e8f4ed",blueSoft:"#e4edf5",purpleSoft:"#ece7f5",cream:"#f5eedc",blue:"#347BD1"},Fc="'Geist', sans-serif",$j=[{name:"Graphite",src:"/images/graphite_logo_upside_customer.svg",height:19,href:"/case-studies/graphite-uncovering-real-channels-behind-inbound-growth"},{name:"Cresta",src:"/images/cresta_logo_upside_customer.svg",height:18,href:"/case-studies/cresta-from-attribution-to-ai-deep-research"},{name:"ServiceTitan",src:"/images/servicetitan_logo_upside_customer.png",height:31},{name:"Wonderschool",src:"/images/wonderschool_logo_upside_customer.png",height:25,nudge:-3},{name:"Syndio",src:"/images/syndio_logo_upside_customer.svg",height:25,href:"/case-studies/syndio-driving-strategic-gtm-decisions-with-upside"},{name:"dscout",src:"/images/dscout_logo_upside_customer.svg",height:20,href:"/case-studies/dscout-driving-confident-growth-with-upside"},{name:"Assembled",src:"/images/assembled_logo_upside_customer.svg",height:22,href:"/case-studies/assembled-from-attribution-guesswork-to-pipeline-surge"},{name:"Bandwidth",src:"/images/bandwidth_logo_upside_customer.svg",height:32},{name:"Cogna",src:"/images/cogna_logo_upside_customer.svg",height:25},{name:"Exa",src:"/images/exa_logo_upside_customer.svg",height:22},{name:"Springbrook",src:"/images/springbrook_logo_upside_customer.png",height:32}],uce=[{eyebrow:"The foundation",heading:"Know what actually happened.",body:"A forensically reconstructed knowledge graph of what actually happened in your accounts. Upside resolves every signal into one connected model: accounts, people, deals, and the touchpoints between them.",quote:{text:"A sales rep will say, ‘the deal came in this way.’ We go in and say, ‘actually, they pinballed their way through.’ No two journeys are the same. It’s like a snowflake.",attribution:"Wendy Werve, CMO, Comply"},poweredLabel:"Powered by",powered:[{label:"Data Foundation",blurb:"One clean, connected record of every account, deal, and interaction.",href:"/platform/data-foundation",iconName:"Database"},{label:"Dashboard",blurb:"Explorers and report cards that answer leadership’s questions, no SQL.",href:"/platform/dashboard",iconName:"Layers"}],visual:n.jsx("img",{src:"/images/home/the-foundation.png",alt:"Every source resolved 
838into one connected knowledge graph",loading:"lazy",style:{width:"100%",height:"auto",display:"block"}}),accentBg:Ae.greenLight,flip:!1},{eyebrow:"Analyst-quality insight",heading:"Answers that used to be impossible.",body:"Analyst-quality insights for questions that were never practical to answer, run across every account at once and returned as structured, cited data instead of one essay at a time.",quote:{text:"I’ve been in marketing for 10+ years, and I’ve never been able to get a clear picture of the buyer journey. But with Upside, we are able to see a complete milestone analysis with data pulled from Gong we wouldn’t ever be able to see in Salesforce.",attribution:"Lindsey Marymont, Head of Demand Generation, Assembled"},poweredLabel:"Powered by",powered:[{label:"Deep Research",blurb:"Analyst-quality answers across a whole cohort of accounts or deals at once.",href:"/platform/deep-research",iconName:"Network"},{label:"Pipedash",blurb:"AI-powered multi-touch attribution, with cited evidence behind every dollar.",href:"/platform/pipedash",iconName:"LineChart"}],visual:n.jsx("img",{src:"/images/home/analyst-insight.png",alt:"Analyst-quality answers returned as structured, cited data across every account at once",loading:"lazy",style:{width:"100%",height:"auto",display:"block"}}),accentBg:Ae.blueSoft,flip:!0},{eyebrow:"AI you can trust",heading:"Make AI correct about your business.",body:"Point the AI tools your team already uses at the healed record, and keep every agent grounded in your definitions, your pipeline, and how your business actually works.",quote:{text:"The first time I found a huge use case for AI for me. I can query it thinking the way I think.",attribution:"Carl Gunlefinger, Sr. Marketing Ops, Comply"},poweredLabel:"Powered by",powered:[{label:"MCP",blurb:"Your GTM data inside the AI tools you already use.",href:"/platform/mcp",iconName:"Workflow"},{label:"Upside Agent",blurb:"All the power of Claude, sandboxed to your GTM data.",href:"/platform/upside-agent",iconName:"Bot"},{label:"Radiant",blurb:"Coaches every agent with your definitions and institutional knowledge.",href:"/platform/radiant",iconName:"Target"}],visual:n.jsx("img",{src:"/images/home/home-grounded-ai.svg",alt:"AI tools grounded in your healed GTM record, answering with cited evidence",loading:"lazy",style:{width:"100%",height:"auto",display:"block"}}),accentBg:Ae.purpleSoft,flip:!1},{eyebrow:"Build on it",heading:"Build the GTM tools you used to buy.",body:"Custom GTM tools your operators build themselves, because the people closest to the problem understand it best. The reports, trackers, and internal apps you used to buy as point tools or wait on engineering for, your team now builds on Upside, wired to live data, in an afternoon.",quote:{text:"We had this idea on Tuesday. I had a draft done Wednesday and built it out fully for 99 accounts on Thursday.",attribution:"Matt Grebow, ServiceTitan"},poweredLabel:"Powered by",powered:[{label:"Miniapps",blurb:"Turn an insight into a live app the team can use.",href:"/platform/miniapps",iconName:"AppWindow"},{label:"MCP",blurb:"Your GTM data inside the AI tools you already use.",href:"/platform/mcp",iconName:"Workflow"}],visual:n.jsx("img",{src:"/images/home/build-gtm.png",alt:"Build custom GTM apps wired to live data from a single prompt",loading:"lazy",style:{width:"100%",height:"auto",display:"block"}}),accentBg:Ae.cream,flip:!0}],hce=[{slug:"aeo-influence",description:"Measures how AI engines like ChatGPT, Perplexity, and Claude influence pipeline by fusing citation traffic, call mentions, and CRM notes into win-rate lift, share of voice, and per-platform sentiment.",tags:["AEO","Share of Voice","Win-Rate Lift","LLMs"]},{slug:"prospect-awareness",description:"Classifies how much each prospect already knows about you before an SDR call, across thousands of sampled cold and warm calls. Includes an awareness breakdown, quarter-over-quarter trends, a notable-quotes wall, and a searchable call-detail table.",tags:["Awareness","SDR Calls","Quotes","Pipeline"]},{slug:"customer-quotes",description:"A website-ready voice-of-customer wall that surfaces quotes from call transcripts, alongside the full roster of customers and design partners. Search and filter by company, and see each account’s logo-use rights so you know 
838who you can feature publicly.",tags:["Voice of Customer","Quotes","Logo Rights","Testimonials"]},{slug:"send-time-optimizer",description:"An interactive heatmap that finds the day-and-hour windows where outbound emails earn the most replies, with audience segments, significance testing, and a what-if reply-lift calculator.",tags:["Heatmap","Email","Significance","What-if"]},{slug:"web-attribution",description:"Follows every inbound contact and opportunity from the web channel that first found them through the channel that last touched them before pipeline. Ties channels to pipeline and closed-won ARR, with first and last-touch breakdowns and per-record drill-downs.",tags:["Web Channels","First/Last Touch","Pipeline","Paid vs Organic"]}],pce=[{label:"SOC 2 Type II",blurb:"Public Trust Center and audit-ready controls for GTM data.",icon:"/images/home/enterprise/seal-soc2.svg"},{label:"GDPR",blurb:"Privacy controls and data handling for modern compliance.",icon:"/images/home/enterprise/seal-gdpr.svg"},{label:"Enterprise SSO & SCIM",blurb:"SAML, OIDC, and SCIM support for secure org-wide access.",icon:"/images/home/enterprise/seal-sso.png"}],mce=[{label:"Encrypted Data",blurb:"Data is encrypted in transit and at rest across every layer.",icon:"/images/home/enterprise/ic-encrypted.svg"},{label:"Customer-Owned",blurb:"Customer data stays yours and is never used to train models.",icon:"/images/home/enterprise/ic-customer.svg"},{label:"CSA STAR",blurb:"Cloud security practices aligned to enterprise review standards.",icon:"/images/home/enterprise/ic-csastar.svg"},{label:"Mithril",blurb:"Enterprise permissions to take Upside org-wide with confidence.",icon:"/images/home/enterprise/ic-mithril.svg",comingSoon:!0}],fce=[{title:"Connect your sources",icon:"/images/home/onboarding/ic-connect.svg",variant:"plain",items:["Connect CRM, email, calls, web","Approve OAuth in minutes","No field mapping or cleanup"]},{title:"Sync your data",icon:"/images/home/onboarding/ic-sync.svg",variant:"dash",items:["Pull records and activity history","Recover missing touchpoints","Rebuild account timelines"]},{title:"Get access and a walkthrough",icon:"/images/home/onboarding/ic-walkthrough.svg",variant:"green",items:["Access your team workspace","Tour answers in your own data","Start asking live questions"]}],gce=[{label:"Data Foundation",iconName:"Database",blurb:"One clean, connected record of every account, deal, and interaction.",links:[{text:"Data Foundation",to:"/platform/data-foundation"}]},{label:"Dashboard",iconName:"Layers",blurb:"Explorers and report cards that answer leadership’s questions, no SQL.",links:[{text:"Dashboard",to:"/platform/dashboard"}]},{label:"MCP & Miniapps",iconName:"Workflow",blurb:"Query from your AI tools, and ship live apps to the team.",links:[{text:"MCP",to:"/platform/mcp"},{text:"Miniapps",to:"/platform/miniapps"}]},{label:"Deep Research",iconName:"Microscope",blurb:"Analyst-quality answers across a whole cohort of accounts or deals at once.",links:[{text:"Deep Research",to:"/platform/deep-research"}]},{label:"Pipedash",iconName:"LineChart",blurb:"AI-powered multi-touch attribution, with cited evidence behind every dollar.",links:[{text:"Pipedash",to:"/platform/pipedash"}]},{label:"Insight Engineering",iconName:"Handshake",blurb:"GTM engineering on tap: analysts build your surface.",links:[{text:"Insight Engineering",to:"/platform/insight-engineering"}]}],yce=[{label:"Revenue attribution",to:"/use-cases/revenue-attribution",iconName:"LineChart"},{label:"AEO measurement",to:"/use-cases/aeo-measurement",iconName:"Crosshair"},{label:"Event & field marketing",to:"/use-cases/event-field-marketing",iconName:"MapPin"},{label:"Account management",to:"/use-cases/account-management",iconName:"Users"},{label:"Ask your GTM data",to:"/use-cases/ask-your-gtm-data",iconName:"Sparkles"},{label:"GTM apps",to:"/use-cases/gtm-apps",iconName:"AppWindow"}],bce=()=>n.jsxs(Qe,{navWrapperClassName:"cc-home-top",children:[n.jsx(Je,{title:"The data layer for the age of agentic GTM",description:"Upside reconstructs what actually happened in every account, then makes that record available to your team, your AI agents, and the apps you ship.",canonicalUrl:"https://upside.tech/",ogImage:"/og/og-home.png"}),n.jsx("style",{children:PM}),n.jsx("style",{children:`
839        @keyframes home-fade-up { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: translateY(0); } }
840        .home-theme-grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(1.5rem, 4vw, 3.5rem); align-items: start; }
841        .home-theme-copy { display: flex; flex-direction: column; min-height: clamp(440px, 42vw, 580px); }
842        .home-theme-copy .pl-block { margin-top: auto; }
843        .home-theme-grid.flip .home-theme-copy { order: 2; }
844        .home-theme-grid.flip .home-theme-art { order: 1; }
845        /* Powered-by rows: arrow CTA signals the row is clickable; nudges on hover. */
846        .pl-link .pl-arrow { transition: transform .18s ease, opacity .18s ease; opacity: .7; }
847        .pl-link:hover .pl-arrow { transform: translateX(3px); opacity: 1; }
848        .pl-link:hover .it-card-title { color: ${Ae.green}; }
849        .home-hero-bg { position: absolute; inset: 0; z-index: 1; pointer-events: none; }
850        .home-hero-bg svg { width: 100%; height: 100%; display: block; }
851        .home-hb-dot { fill: ${Ae.greenSoft}; opacity: 0; animation: home-hb-in 11s ease-in-out infinite; }
852        .home-hb-edge { stroke: ${Ae.greenSoft}; stroke-width: 1.6; fill: none; opacity: 0; stroke-dasharray: 240; stroke-dashoffset: 240; animation: home-hb-draw 11s ease-in-out infinite; }
853        @keyframes home-hb-in { 0% { opacity: 0; } 16% { opacity: .55; } 82% { opacity: .55; } 100% { opacity: 0; } }
854        @keyframes home-hb-draw { 0%,22% { opacity: 0; stroke-dashoffset: 240; } 42% { opacity: .4; stroke-dashoffset: 0; } 82% { opacity: .4; stroke-dashoffset: 0; } 100% { opacity: 0; stroke-dashoffset: 240; } }
855        @media (prefers-reduced-motion: reduce) { .home-hb-dot, .home-hb-edge { animation: none; } .home-hb-dot { opacity: .4; } .home-hb-edge { opacity: .25; stroke-dashoffset: 0; } }
856        /* ── Enterprise band (1:1 Figma node 2850:45809) ── */
857        .ent-head { display: flex; gap: 64px; align-items: flex-end; padding: 72px; }
858        .ent-head__left { flex: 1 1 auto; min-width: 0; }
859        .ent-head__right { flex: 0 0 530px; max-width: 530px; }
860        .ent-eyebrow { display: inline-block; font-size: 12px; font-weight: 600; line-height: 12px; letter-spacing: 0.84px; text-transform: uppercase; color: #fff; background: rgba(255,255,255,0.05); border-radius: 999px; padding: 8px 12px; margin-bottom: 16px; }
861        .ent-heading { margin: 0; font-size: 40px; line-height: 44px; font-weight: 500; letter-spacing: -1.6px; color: #fff; max-width: 600px; }
862        .ent-sub { margin: 0 0 20px 0; font-size: 18px; line-height: 27px; font-weight: 400; color: rgba(255,255,255,0.6); }
863        .ent-cta { display: inline-flex; align-items: center; gap: 8px; padding: 12px 16px; border: 1px solid rgba(255,255,255,0.3); border-radius: 999px; font-size: 14px; font-weight: 500; line-height: 1; color: #fff; text-decoration: none; }
864        .ent-cta img { display: block; }
865        .ent-grid { display: grid; gap: 1px; background: rgba(255,255,255,0.1); border-top: 1px solid rgba(255,255,255,0.1); }
866        .ent-grid--3 { grid-template-columns: 72px 1fr 1fr 1fr 72px; }
867        .ent-grid--4 { grid-template-columns: 72px 1fr 1fr 1fr 1fr 72px; }
868        .ent-spacer { background: #101010; }
869        .ent-cell { background: #101010; }
870        .ent-cell--seal { display: flex; flex-direction: column; gap: 24px; padding: 48px 40px; }
871        .ent-cell--ctrl { display: flex; flex-direction: column; gap: 8px; padding: 40px; }
872        .ent-cell--empty { min-height: 72px; }
873        .ent-seal { display: block; width: 68px; height: 68px; }
874        .ent-cell__body { display: flex; flex-direction: column; gap: 8px; }
875        .ent-cell__title--lg { font-size: 20px; line-height: 30px; font-weight: 500; color: #fff; }
876        .ent-cell__blurb--lg { margin: 0; font-size: 16px; line-height: 24px; font-weight: 400; color: rgba(255,255,255,0.6); max-width: 270px; }
877        .ent-ctrl__title-wrap { display: flex; flex-direction: column; gap: 16px; }
878        .ent-ic { display: block; width: 24px; height: 24px; }
879        .ent-cell__title-row { display: flex; align-items: center; gap: 12px; }
880        .ent-cell__title { font-size: 16px; line-height: 24px; font-weight: 500; color: #fff; }
881        .ent-cell__blurb { margin: 0; font-size: 14px; line-height: 21px; font-weight: 400; color: rgba(255,255,255,0.6); max-width: 220px; }
882        .ent-soon { font-size: 10px; font-weight: 600; letter-spacing: 0.4px; text-transform: uppercase; color: rgba(255,255,255,0.85); background: rgba(255,255,255,0.1); border: 1px solid rgba(255,255,255,0.18); border-radius: 6px; padding: 4px 8px; line-height: 1; white-space: nowrap; }
883        /* ── Onboarding (1:1 Figma node 2751:45316) ── */
884        .onb-band { background: linear-gradient(180deg, rgba(255,255,255,0.9), rgba(255,255,255,0.7)); border-top: 1px solid rgba(12,30,32,0.1); border-bottom: 1px solid rgba(12,30,32,0.1); padding: 72px; }
885        .onb-inner { max-width: 1296px; margin: 0 auto; display: flex; flex-direction: column; gap: 72px; align-items: center; }
886        .onb-head { display: flex; flex-direction: column; align-items: center; gap: 16px; text-align: center; }
887        .onb-badge { font-size: 12px; font-weight: 600; line-height: 12px; letter-spacing: 0.6px; text-transform: uppercase; color: #509a79; background: rgba(80,154,121,0.1); border-radius: 999px; padding: 8px 12px; }
888        .onb-heading { margin: 0; font-size: 40px; line-height: 44px; font-weight: 500; letter-spacing: -1.2px; color: #0c1e20; }
889        .onb-sub { margin: 0; font-size: 18px; line-height: 27px; font-weight: 400; color: rgba(12,30,32,0.6); max-width: 700px; }
890        .onb-flow { width: 100%; display: flex; flex-direction: column; gap: 64px; }
891        .onb-timeline { padding: 0 64px; }
892        .onb-track { position: relative; display: flex; align-items: center; padding-top: 40px; }
893        .onb-node { position: relative; flex: 0 0 14px; width: 14px; height: 14px; }
894        .onb-dot { width: 14px; height: 14px; border-radius: 999px; box-sizing: border-box; }
895        .onb-dot--hollow { border: 1.5px solid rgba(12,30,32,0.2); background: #fafafa; }
896        .onb-dot--fill { background: #509a79; border: 1.5px solid #509a79; }
897        .onb-line { flex: 1 1 auto; height: 1px; background: rgba(12,30,32,0.2); }
898        .onb-cap { position: absolute; bottom: calc(100% + 12px); left: 50%; transform: translateX(-50%); white-space: nowrap; font-size: 16px; line-height: 16px; font-weight: 500; border-radius: 8px; padding: 8px 10px; }
899        .onb-cap--solid { border: 1px solid rgba(12,30,32,0.2); color: #0c1e20; background: #fafafa; }
900        .onb-cap--dash { border: 1px dashed rgba(12,30,32,0.2); color: #0c1e20; background: #fafafa; }
901        .onb-cap--green { color: #509a79; background: rgba(80,154,121,0.1); }
902        .onb-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 24px; }
903        .onb-card { border-radius: 24px; padding: 32px; display: flex; flex-direction: column; gap: 24px; }
904        .onb-card--plain { background: #fff; box-shadow: 0 1px 2px rgba(12,30,32,0.04), 0 8px 24px rgba(12,30,32,0.04); }
905        .onb-card--dash { background: #fff; border: 1px dashed rgba(12,30,32,0.2); }
906        .onb-card--green { background: #509a79; }
907        .onb-card__icon { width: 28px; height: 28px; display: block; }
908        .onb-card__title { font-size: 20px; line-height: 21px; font-weight: 500; color: #0c1e20; }
909        .onb-card--green .onb-card__title { color: #fff; }
910        .onb-list { display: flex; flex-direction: column; gap: 12px; }
911        .onb-item { display: flex; align-items: flex-start; gap: 16px; }
912        .onb-item > span { font-size: 16px; line-height: 24px; color: rgba(12,30,32,0.7); }
913        .onb-card--green .onb-item > span { color: #fff; }
914        .onb-check { flex: 0 0 16px; width: 16px; height: 16px; margin-top: 4px; border-radius: 999px; display: inline-flex; align-items: center; justify-content: center; background: #509a79; }
915        .onb-card--green .onb-check { background: #fff; }
916        .onb-cta { display: inline-flex; align-items: center; gap: 12px; background: #509a79; color: #fff; border-radius: 999px; padding: 14px 20px; font-size: 16px; line-height: 21px; font-weight: 500; text-decoration: none; }
917        .onb-cta:hover { background: #1f5238; }
918
919        @media (max-width: 860px) {
920          .home-theme-grid { grid-template-columns: 1fr; }
921          .home-theme-copy { min-height: 0; }
922          .home-theme-copy .pl-block { margin-top: 0.5rem; }
923          .home-theme-grid.flip .home-theme-copy { order: 1; }
924          .home-theme-grid.flip .home-theme-art { order: 2; }
925          .onb-band { padding: 40px 24px; }
926          .onb-inner { gap: 48px; }
927          .onb-heading { font-size: 30px; line-height: 36px; }
928          .onb-timeline { padding: 0; }
929          .onb-grid { grid-template-columns: 1fr; }
930          .ent-head { flex-direction: column; align-items: flex-start; gap: 32px; padding: 40px 24px; }
931          .ent-head__right { flex: 1 1 auto; max-width: none; }
932          .ent-grid--3, .ent-grid--4 { grid-template-columns: 1fr 1fr; }
933          .ent-grid--3 .ent-spacer, .ent-grid--4 .ent-spacer { display: none; }
934          .ent-cell--seal, .ent-cell--ctrl { padding: 32px 24px; }
935          .ent-grid--empty { display: none; }
936        }
937        @media (max-width: 560px) {
938          .ent-grid--3, .ent-grid--4 { grid-template-columns: 1fr; }
939        }
940
941        /* ── Miniapp examples carousel ── */
942        .mac { max-width: 960px; margin: 0 auto; }
943        /* Vertical padding gives the card's drop shadow + hover lift room to render
944           (overflow:hidden clips at the padding box); horizontal padding stays 0 so
945           off-screen slides are clipped hard at the edge with no shadow sliver. The
946           hover shadow below is sized to fit within this padding so nothing clips. */
947        .mac-track { overflow: hidden; border-radius: 16px;
947 padding: 18px 0 30px; }
948        .mac-slides { display: flex; transition: transform .42s cubic-bezier(.22,.61,.36,1); }
949        .mac-slide { flex: 0 0 100%; min-width: 0; text-decoration: none; color: inherit; }
950        .mac-card { display: grid; grid-template-columns: 1fr 1.12fr; align-items: stretch; background: #fff; border: 1px solid ${Ae.border}; border-radius: 16px; overflow: hidden; box-shadow: 0 2px 12px rgba(12,30,32,0.06); transition: box-shadow .18s ease, transform .18s ease; }
951        .mac-card:hover { box-shadow: 0 8px 22px rgba(12,30,32,0.14); transform: translateY(-2px); }
952        /* Left cell is a soft category-tinted stage (bg set inline per slide); the
953           floating thumbnail (outer bg stripped) sits on it at native 16:10. */
954        .mac-thumb { display: flex; align-items: center; justify-content: center; padding: clamp(20px, 2.8vw, 34px); }
955        .mac-thumb img { width: 100%; max-width: 360px; height: auto; aspect-ratio: 16 / 10; object-fit: contain; display: block; }
956        .mac-body { padding: clamp(18px, 2.4vw, 28px); display: flex; flex-direction: column; justify-content: center; }
957        .mac-chip { align-self: flex-start; font-family: ${Fc}; font-weight: 700; font-size: 0.62rem; letter-spacing: 0.05em; text-transform: uppercase; border-radius: 999px; padding: 4px 10px; margin-bottom: 0.7rem; }
958        .mac-title { font-family: ${Fc}; font-weight: 600; font-size: clamp(1.06rem, 1.9vw, 1.3rem); line-height: 1.18; letter-spacing: -0.01em; color: ${Ae.text}; margin: 0 0 0.55rem; text-wrap: balance; }
959        .mac-desc { color: ${Ae.muted}; font-size: 0.84rem; line-height: 1.5; margin: 0 0 0.8rem; }
960        .mac-tags { display: flex; flex-wrap: wrap; gap: 6px; }
961        .mac-tag { font-size: 0.69rem; font-weight: 500; color: ${Ae.muted}; background: ${Ae.bgSoft}; border: 1px solid ${Ae.border}; border-radius: 999px; padding: 3px 9px; }
962        .mac-open { margin-top: 0.9rem; font-family: ${Fc}; font-weight: 600; font-size: 0.84rem; color: ${Ae.green}; display: inline-flex; align-items: center; gap: 6px; transition: gap .16s ease; }
963        .mac-card:hover .mac-open { gap: 10px; }
964        .mac-all { display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: 0.75rem; min-height: 100%; background: linear-gradient(160deg, ${Ae.greenLight}, #fff); border: 1px solid ${Ae.border}; border-radius: 16px; padding: 2.4rem 1.6rem; }
965        .mac-all-big { font-family: ${Fc}; font-weight: 700; font-size: clamp(1.6rem, 4vw, 2.25rem); line-height: 1; color: ${Ae.green}; letter-spacing: -0.02em; }
966        .mac-all-h { font-family: ${Fc}; font-weight: 600; font-size: 1.25rem; color: ${Ae.text}; margin: 0; }
967        .mac-all-p { color: ${Ae.muted}; font-size: 0.84rem; max-width: 46ch; margin: 0; }
968        .mac-btn { margin-top: 0.4rem; font-family: ${Fc}; font-weight: 600; font-size: 0.875rem; color: #fff; background: ${Ae.green}; border: none; border-radius: 999px; padding: 0.7rem 1.4rem; cursor: pointer; text-decoration: none; display: inline-flex; gap: 8px; transition: background .16s ease, transform .16s ease; }
969        .mac-btn:hover { background: ${Ae.greenHover}; transform: translateY(-2px); }
970        /* Single control row under the card */
971        .mac-ctl { display: flex; align-items: center; justify-content: center; gap: 0.9rem; margin-top: 0.6rem; }
972        .mac-arrow { width: 36px; height: 36px; border-radius: 999px; cursor: pointer; background: #fff; border: 1px solid ${Ae.border}; box-shadow: 0 2px 12px rgba(12,30,32,0.06); color: ${Ae.text}; display: inline-flex; align-items: center; justify-content: center; font-size: 17px; transition: transform .16s ease, box-shadow .16s ease, opacity .16s ease; }
973        .mac-arrow:hover { box-shadow: 0 14px 36px rgba(12,30,32,0.13); transform: scale(1.06); }
974        .mac-arrow:focus-visible { outline: 3px solid ${Ae.greenSoft}; outline-offset: 2px; }
975        .mac-arrow:disabled { opacity: 0.35; cursor: default; box-shadow: none; }
976        .mac-arrow:disabled:hover { transform: none; }
977        .mac-dots { display: flex; align-items: center; gap: 8px; }
978        .mac-dot { width: 7px; height: 7px; border-radius: 999px; border: none; padding: 0; cursor: pointer; background: ${Ae.border}; transition: width .2s ease, background .2s ease; }
979        .mac-dot.active { width: 24px; background: ${Ae.green}; }
980        .mac-dot.all.active { background: ${Ae.greenSoft}; }
981        .mac-dot:focus-visible { outline: 2px solid ${Ae.greenSoft}; outline-offset: 3px; }
982        .mac-seeall { font-family: ${Fc}; font-weight: 600; font-size: 0.82rem; color: ${Ae.green}; text-decoration: none; white-space: nowrap; margin-left: 0.4rem; }
983        .mac-seeall:hover { color: ${Ae.greenHover}; }
984        @media (max-width: 720px) {
985          .mac-card { grid-template-columns: 1fr; }
986          .mac-thumb img { max-width: 460px; margin: 0 auto; }
987          .mac-ctl { flex-wrap: wrap; }
988        }
989        @media (prefers-reduced-motion: reduce) {
990          .mac-slides { transition: none; }
991          .mac-card, .mac-arrow, .mac-btn, .mac-open { transition: none; }
992        }
993      `}),n.jsx("section",{className:"hero",style:{marginTop:"-65px"},children:n.jsxs("div",{className:"hero__container",style:{position:"relative",overflow:"hidden"},children:[n.jsx(Ole,{}),n.jsxs("div",{style:{position:"relative",zIndex:2,maxWidth:"var(--_layout---max-widths--l)",marginLeft:"auto",marginRight:"auto",width:"100%"},children:[n.jsx("div",{style:{display:"flex",justifyContent:"center",marginTop:"-0.9rem",marginBottom:"2.625rem"},children:n.jsxs(J,{to:"/gtme",className:"gtme-pill",style:{display:"inline-flex",alignItems:"center",gap:"0.6rem",textDecoration:"none",fontSize:"0.95rem",fontWeight:500,lineHeight:1,color:"var(--_neutral-colors---white--100)",background:"var(--_neutral-colors---white--10)",border:"1px solid var(--_neutral-colors---white--20)",borderRadius:"999px",padding:"0.5rem 0.5rem 0.5rem 1.1rem",backdropFilter:"blur(4px)",WebkitBackdropFilter:"blur(4px)"},children:[n.jsxs("span",{children:["The GTM Engineer Community",n.jsx("span",{className:"gtme-pill-extra",children:": jobs, events, peers"})]}),n.jsx("span",{"aria-hidden":"true",style:{display:"inline-flex",alignItems:"center",justifyContent:"center",background:"var(--_neutral-colors---white--20)",borderRadius:"999px",padding:"0.22rem 0.6rem",fontSize:"0.95rem",lineHeight:1},children:"→"})]})}),n.jsx("div",{className:"hero__content",style:{position:"relative",zIndex:2,flexDirection:"column",justifyContent:"center",textAlign:"center"},children:n.jsxs("div",{className:"hero__header",style:{alignItems:"center",minWidth:0,width:"100%",maxWidth:"780px",marginLeft:"auto",marginRight:"auto",textAlign:"center"},children:[n.jsxs("div",{className:"hero__header-content",style:{alignItems:"center"},children:[n.jsx("h1",{className:"heading-xxl",children:"The data layer for the age of agentic GTM."}),n.jsx("div",{className:"hero__header-paragraph-wrapper",style:{maxWidth:"560px",marginLeft:"auto",marginRight:"auto"},children:n.jsx("p",{className:"body-l",children:"Upside reconstructs what actually happened in every account, then makes that record available to your team, your AI agents, and the apps you ship."})})]}),n.jsxs("div",{className:"hero__buttons",style:{justifyContent:"center"},children:[n.jsx(J,{to:Wt,className:"cta cc-large w-button",children:"Request demo"}),n.jsx(J,{to:"/platform",className:"cta cc-hero-secondary cc-large w-inline-block",children:"Explore the platform →"})]})]})})]}),n.jsxs("div",{className:"hero__social-proof",style:{position:"relative",zIndex:2},children:[n.jsx("div",{className:"hero__social-proof-copy",children:n.jsx("p",{className:"body-m",children:"For go-to-market teams with large, complex deals"})}),n.jsx("div",{className:"hero__client-logos",children:n.jsx("div",{className:"hero__client-logos-track",children:[...$j,...$j].map((e,t)=>{const a=t>=$j.length;return n.jsxs("div",{className:"hero__client-logo-wrapper",children:[n.jsx("div",{className:"hero__client-logo-slot",children:n.jsx("img",{src:e.src,loading:"lazy",alt:a?"":Ple(e.name),"aria-hidden":a||void 0,className:"hero__client-logo",style:{"--hero-logo-h":`${e.height}px`,"--hero-logo-nudge":`${e.nudge??0}px`}})}),e.href?n.jsx(J,{to:e.href,className:"hero__case-study-link body-xs","aria-hidden":a||void 0,tabIndex:a?-1:0,children:"Case study →"}):n.jsx("span",{className:"hero__case-study-link hero__case-study-link--placeholder body-xs","aria-hidden":"true",children:"Case study →"})]},`${e.name}-${t}`)})})})]})]})}),n.jsx("div",{style:{background:Ae.bgSoft},children:n.jsxs("div",{className:"pf-boxed",style:{maxWidth:"1440px",margin:"0 auto",background:"transparent"},children:[n.jsx("section",{style:{padding:"clamp(3rem, 6vw, 4.5rem) clamp(1.25rem, 5vw, 4rem)",background:Ae.bgSoft,borderBottom:`1px solid ${Ae.border}`},children:n.jsxs("div",{style:{maxWidth:"1296px",margin:"0 auto"},children:[n.jsxs("div",{style:{textAlign:"center",marginBottom:"2rem"},children:[n.jsx(P4,{children:"Why now"}),n.jsx("h2",{className:"it-title",style:{margin:"0 0 0.85rem 0",color:Ae.text},children:"Get your GTM data ready for AI."}),n.jsx("p",{className:"it-lead",style:{color:Ae.muted,maxWidth:"720px",margin:"0 auto"},children:"Point AI at your CRM today and it answers with total confidence over data that was never complete, missing the moments that actually moved each deal."})]}),n.jsx("img",{src:"/images/home/why-now.png",alt:"A reconstructed account timeline: logged CRM events plus touchpoints recovered from email and calls, with inferred influence",loading:"lazy",style:{width:"100%",height:"auto",display:"block"}})]})}),uce.map((e,t)=>n.jsx(xce,{theme:e,index:t},e.heading)),n.jsx("section",{style:{padding:"clamp(3rem, 6vw, 4.5rem) clamp(1.25rem, 5vw, 4rem)",background:"#fff",borderBottom:`1px solid ${Ae.border}`},children:n.jsxs("div",{style:{maxWidth:"1200px",margin:"0 auto"},children:[n.jsxs("div",{style:{textAlign:"center",marginBottom:"2rem"},children:[n.jsx(P4,{children:"Built on Upside"}),n.jsx("h2",{className:"it-title",style:{margin:"0 0 0.85rem 0",color:Ae.text},children:"See what teams build on Upside"}),n.jsx("p",{className:"it-lead",style:{color:Ae.muted,maxWidth:"640px",margin:"0 auto"}
993,children:"Examples of real miniapps our customers built on their own go-to-market data."})]}),n.jsx(wce,{})]})}),n.jsxs("section",{className:"ent-band",style:{background:"#101010",color:"#fafafa",borderTop:`1px solid ${Ae.border}`,borderBottom:`1px solid ${Ae.border}`},children:[n.jsxs("div",{className:"ent-head",children:[n.jsxs("div",{className:"ent-head__left",children:[n.jsx("span",{className:"ent-eyebrow",children:"Enterprise-Ready"}),n.jsx("h2",{className:"ent-heading",children:"Built to clear your security review."})]}),n.jsxs("div",{className:"ent-head__right",children:[n.jsx("p",{className:"ent-sub",children:"Everything the security review will ask about, answered up front. Upside works with your most sensitive GTM data, so the controls your security team will ask about are already in place."}),n.jsxs(J,{to:"/security",className:"ent-cta",children:["Review security ",n.jsx("img",{src:"/images/home/enterprise/ic-arrow.svg",alt:"",width:18,height:18,"aria-hidden":"true"})]})]})]}),n.jsxs("div",{className:"ent-grid ent-grid--3",children:[n.jsx("div",{className:"ent-spacer","aria-hidden":"true"}),pce.map(e=>n.jsxs("div",{className:"ent-cell ent-cell--seal",children:[n.jsx("img",{className:"ent-seal",src:e.icon,alt:"",width:68,height:68,"aria-hidden":"true"}),n.jsxs("div",{className:"ent-cell__body",children:[n.jsx("div",{className:"ent-cell__title ent-cell__title--lg",children:e.label}),n.jsx("p",{className:"ent-cell__blurb ent-cell__blurb--lg",children:e.blurb})]})]},e.label)),n.jsx("div",{className:"ent-spacer","aria-hidden":"true"})]}),n.jsxs("div",{className:"ent-grid ent-grid--4",children:[n.jsx("div",{className:"ent-spacer","aria-hidden":"true"}),mce.map(e=>n.jsxs("div",{className:"ent-cell ent-cell--ctrl",children:[n.jsxs("div",{className:"ent-ctrl__title-wrap",children:[n.jsx("img",{className:"ent-ic",src:e.icon,alt:"",width:24,height:24,"aria-hidden":"true"}),n.jsxs("div",{className:"ent-cell__title-row",children:[n.jsx("span",{className:"ent-cell__title",children:e.label}),e.comingSoon&&n.jsx("span",{className:"ent-soon",children:"Coming Soon"})]})]}),n.jsx("p",{className:"ent-cell__blurb",children:e.blurb})]},e.label)),n.jsx("div",{className:"ent-spacer","aria-hidden":"true"})]}),n.jsxs("div",{className:"ent-grid ent-grid--4 ent-grid--empty","aria-hidden":"true",children:[n.jsx("div",{className:"ent-spacer"}),n.jsx("div",{className:"ent-cell ent-cell--empty"}),n.jsx("div",{className:"ent-cell ent-cell--empty"}),n.jsx("div",{className:"ent-cell ent-cell--empty"}),n.jsx("div",{className:"ent-cell ent-cell--empty"}),n.jsx("div",{className:"ent-spacer"})]})]}),n.jsx("div",{className:"onb-band",children:n.jsxs("div",{className:"onb-inner",children:[n.jsxs("div",{className:"onb-head",children:[n.jsx("span",{className:"onb-badge",children:"Onboarding"}),n.jsx("h2",{className:"onb-heading",children:"Live in a day, not a quarter."}),n.jsx("p",{className:"onb-sub",children:"No setup project, no data cleanup. Your team is working with real answers the next day."})]}),n.jsxs("div",{className:"onb-flow",children:[n.jsx("div",{className:"onb-timeline",children:n.jsxs("div",{className:"onb-track",children:[n.jsxs("div",{className:"onb-node",children:[n.jsx("div",{className:"onb-dot onb-dot--hollow"}),n.jsx("span",{className:"onb-cap onb-cap--solid",children:"09:05"})]}),n.jsx("div",{className:"onb-line"}),n.jsxs("div",{className:"onb-node",children:[n.jsx("div",{className:"onb-dot onb-dot--hollow"}),n.jsx("span",{className:"onb-cap onb-cap--dash",children:"09:10"})]}),n.jsx("div",{className:"onb-line"}),n.jsxs("div",{className:"onb-node",children:[n.jsx("div",{className:"onb-dot onb-dot--fill"}),n.jsx("span",{className:"onb-cap onb-cap--green",children:"Day 2"})]})]})}),n.jsx("div",{className:"onb-grid",children:fce.map(e=>n.jsxs("div",{className:`onb-card onb-card--${e.variant}`,children:[n.jsx("img",{className:"onb-card__icon",src:e.icon,alt:"","aria-hidden":"true",width:28,height:28}),n.jsx("span",{className:"onb-card__title",children:e.title}),n.jsx("div",{className:"onb-list",children:e.items.map(t=>n.jsxs("div",{className:"onb-item",children:[n.jsx("span",{className:"onb-check",children:n.jsx(kce,{green:e.variant==="green"})}),n.jsx("span",{children:t})]},t))})]},e.title))})]}),n.jsx(J,{to:Wt,className:"onb-cta",children:"Request demo"})]})}),n.jsx("div",{style:{padding:"clamp(3rem, 6vw, 4.5rem) clamp(1.25rem, 5vw, 4rem) clamp(2.5rem, 5vw, 3.5rem)",borderBottom:`1px solid ${Ae.border}`},children:n.jsx(Yle,{})}),n.jsxs("section",{className:"plat",children:[n.jsxs("div",{className:"plat-inner",children:[n.jsx("span",{className:"plat-badge",children:"Platform"}),n.jsxs("div",{className:"plat-head",children:[n.jsx("h2",{className:"plat-heading",children:"Go deeper, your way in."}),n.jsx("p",{className:"plat-sub",children:"Explore by platform surface, or by the job you’re trying to get done."})]}),n.jsxs("div",{className:"plat-group",children:[n.jsx("span",{className:"plat-label",children:"By product"}),n.jsx("div",{className:"plat-grid",children:gce.map(e=>{const t=ca(e.iconName);return n.jsxs(J,{to:e.links[0].to,className:"plat-card pf-card pf-card--nav pf-card__hit",children:[n.jsx("span",{className:"plat-card__icon",children:t&&n.jsx(t,{size:20,strokeWidth:1.8})}),n.jsx("span",{className:"plat-card__title",children:e.label}),n.jsx("span",{className:"plat-card__blurb",children:e.blurb}),n.jsx("span",{className:"plat-card__more",children:n.jsx(Ds,{label:"Learn more"})})]},e.label)})}),n.jsxs(J,{to:"/platform",className:"plat-more-btn",children:["See the full platform ",n.jsx("span",{"aria-hidden":"true",children:"→"})]})]}),n.jsxs("div",{className:"plat-group",children:[n.jsx("span",{className:"plat-label",children:"By use case"}),n.jsx("div",{className:"plat-grid",children:yce.map(e=>{const t=ca(e.iconName);return n.jsxs(J,{to:e.to,className:"plat-card pf-card pf-card--nav pf-card__hit",children:[n.jsx("span",{className:"plat-card__icon",children:t&&n.jsx(t,{size:20,strokeWidth:1.8})}),n.jsx("span",{className:"plat-card__title",children:e.label}),n.jsx("span",{className:"plat-card__more",children:n.jsx(Ds,{label:"Learn more"})})]},e.to)})}),n.jsxs(J,{to:"/use-cases",className:"plat-more-btn",children:["See all use cases ",n.jsx("span",{"aria-hidden":"true",children:"→"})]})]})]}),n.jsx("style",{children:`
994          .plat { padding: clamp(3rem, 6vw, 4.5rem) clamp(1.25rem, 5vw, 4rem); background: #fff; border-bottom: 1px solid ${Ae.border}; }
995          .plat-inner { max-width: 1296px; margin: 0 auto; }
996          .plat-badge {
997            display: inline-block; margin-bottom: 20px;
998            font-size: 12px; font-weight: 600; line-height: 12px; letter-spacing: 0.6px;
999            text-transform: uppercase; color: #509a79; background: rgba(80,154,121,0.1);
1000            border-radius: 999px; padding: 8px 12px;
1001          }
1002          .plat-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 32px; }
1003          .plat-heading { margin: 0; font-size: 40px; line-height: 44px; font-weight: 500; letter-spacing: -1.2px; color: #0c1e20; }
1004          .plat-sub { margin: 0; max-width: 420px; text-align: right; font-size: 18px; line-height: 27px; color: rgba(12,30,32,0.6); }
1005          .plat-group { margin-top: 48px; }
1006          .plat-label { display: block; margin-bottom: 16px; font-size: 12px; font-weight: 600; letter-spacing: 0.6px; text-transform: uppercase; color: rgba(12,30,32,0.5); }
1007          .plat-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; }
1008          /* Hover, focus, underline and arrow all come from the shared card
1009             model (CARD_CSS, rendered once below). .plat-card carries only
1010             this section's own layout — no border/background here, or the
1011             shared hover border-color would have nothing to override. */
1012          .plat-card {
1013            display: flex; flex-direction: column; align-items: flex-start; gap: 8px;
1014            padding: 24px; border-radius: 16px; text-decoration: none;
1015          }
1016          /* Home sits on BRAND.border while the platform pages use PF.border.
1017             Pre-existing drift, deliberately not resolved here. */
1018          .plat-card { --pf-card-border: ${Ae.border}; }
1019          .plat-card__icon {
1020            width: 36px; height: 36px; border-radius: 10px; background: #f2f5f3;
1021            display: inline-flex; align-items: center; justify-content: center; color: #509a79; margin-bottom: 4px;
1022          }
1023          .plat-card__title { font-size: 17px; line-height: 22px; font-weight: 500; color: #0c1e20; }
1024          .plat-card__blurb { font-size: 14px; line-height: 21px; color: rgba(12,30,32,0.6); }
1025          .plat-card__more { margin-top: 6px; font-size: 14px; font-weight: 500; color: #509a79; display: inline-flex; align-items: center; gap: 6px; }
1026          /* line-height MUST stay integral. Without it this pill inherits the
1027             1.5 body ratio, and 15px x 1.5 = 22.5px makes the button 48.5px
1028             tall. It is the last element in the "By product" group, so that
1029             half pixel shifts the entire "By use case" group below it onto a
1030             half-pixel offset — and its card underlines then rasterize
1031             differently from the identical ones above, which is exactly the
1032             "these two sections look different" bug. Same rule applies to any
1033             element added to the end of a .plat-group. */
1034          .plat-more-btn {
1035            display: inline-flex; align-items: center; gap: 8px; margin-top: 24px;
1036            border: 1px solid ${Ae.border}; border-radius: 999px; padding: 12px 18px;
1037            font-size: 15px; line-height: 22px; font-weight: 500; color: #0c1e20; background: #fff; text-decoration: none;
1038            transition: border-color 0.15s ease;
1039          }
1040          .plat-more-btn:hover { border-color: rgba(12,30,32,0.25); }
1041          @media (max-width: 860px) {
1042            .plat-head { flex-direction: column; align-items: flex-start; gap: 12px; }
1043            .plat-heading { font-size: 30px; line-height: 36px; }
1044            .plat-sub { text-align: left; }
1045            .plat-grid { grid-template-columns: 1fr; }
1046          }
1047        `})]}),n.jsx("div",{className:"home-voices",children:n.jsx(dce,{})})]})}),n.jsxs("section",{className:"hcta",children:[n.jsx("div",{className:"hcta-avatar",children:n.jsx("img",{src:"/images/upside-icon-green.svg",alt:"","aria-hidden":"true",width:54,height:45})}),n.jsxs("div",{className:"hcta-copy",children:[n.jsx("h2",{className:"hcta-heading",children:"Build your GTM on data you can trust."}),n.jsx("p",{className:"hcta-sub",children:"Book a demo and see what your team can build, automate, and finally answer once your GTM data is something you trust."})]}),n.jsxs("div",{className:"hcta-actions",children:[n.jsx(J,{to:Wt,className:"hcta-btn hcta-btn--primary",children:"Request demo"}),n.jsxs(J,{to:"/platform",className:"hcta-btn hcta-btn--secondary",children:["Explore the platform",n.jsx("span",{className:"hcta-btn__arrow","aria-hidden":"true",children:"→"})]})]}),n.jsx("style",{children:`
1048          .hcta {
1049            width: 100%;
1050            box-sizing: border-box;
1051            display: flex;
1052            flex-direction: column;
1053            align-items: center;
1054            gap: 40px;
1055            padding: 96px 72px;
1056            background: linear-gradient(180deg, rgba(255,255,255,0) 0%, rgba(255,255,255,0.2) 100%), #509a79;
1057          }
1058          .hcta-avatar {
1059            width: 96px;
1060            height: 96px;
1061            border-radius: 24px;
1062            display: flex;
1063            align-items: center;
1064            justify-content: center;
1065            background: rgba(255,255,255,0.95);
1066            box-shadow: 0 0 0 1px rgba(0,0,0,0.075), 0 2px 2px rgba(0,0,0,0.04);
1067          }
1068          .hcta-avatar img { display: block; }
1069          .hcta-copy {
1070            display: flex;
1071            flex-direction: column;
1072            align-items: center;
1073            gap: 20px;
1074          }
1075          .hcta-heading {
1076            margin: 0;
1077            max-width: 600px;
1078            text-align: center;
1079            color: #fff;
1080            font-size: 48px;
1081            line-height: 55.2px;
1082            font-weight: 500;
1083            letter-spacing: -1.92px;
1084          }
1085          .hcta-sub {
1086            margin: 0;
1087            max-width: 640px;
1088            text-align: center;
1089            color: rgba(255,255,255,0.6);
1090            font-size: 20px;
1091            line-height: 30px;
1092            font-weight: 400;
1093          }
1094          .hcta-actions {
1095            display: flex;
1096            gap: 20px;
1097            justify-content: center;
1098            flex-wrap: wrap;
1099          }
1100          .hcta-btn {
1101            display: inline-flex;
1102            align-items: center;
1103            gap: 8px;
1104            border-radius: 999px;
1105            padding: 14px 20px;
1106            font-size: 16px;
1107            line-height: 20.8px;
1108            font-weight: 500;
1109            text-decoration: none;
1110            transition: background 0.15s ease, color 0.15s ease, border-color 0.15s ease;
1111          }
1112          .hcta-btn--primary { background: #fff; color: #509a79; }
1113          .hcta-btn--primary:hover { background: rgba(255,255,255,0.9); }
1114          .hcta-btn--secondary { background: transparent; color: #fff; border: 1.75px solid #fff; }
1115          .hcta-btn--secondary:hover { background: rgba(255,255,255,0.12); }
1116          .hcta-btn__arrow { font-size: 15px; line-height: 1; }
1117          @media (max-width: 860px) {
1118            .hcta { padding: 56px 24px; gap: 32px; }
1119            .hcta-heading { font-size: 32px; line-height: 38px; letter-spacing: -1px; }
1120            .hcta-sub { font-size: 17px;
1120 line-height: 26px; }
1121          }
1122        `})]})]}),P4=({children:e})=>n.jsx("span",{className:"it-eyebrow",style:{display:"inline-flex",alignItems:"center",alignSelf:"flex-start",width:"auto",fontSize:"0.75rem",letterSpacing:"0.06em",color:Ae.greenSoft,borderRadius:"999px",padding:"0.42rem 0.78rem",marginBottom:"1rem",background:"rgba(80,154,121,0.10)"},children:e}),vce=({label:e,surfaces:t})=>n.jsxs("div",{className:"pl-block",children:[n.jsx("span",{className:"it-label",style:{display:"block",color:"#8a93a0",marginBottom:"0.85rem"},children:e}),t.map(a=>{const i=ca(a.iconName),r=!a.comingSoon&&!!a.href,o=n.jsxs("div",{style:{display:"flex",gap:"0.9rem",alignItems:"flex-start",padding:"0.95rem 0",borderTop:`1px solid ${Ae.border}`},children:[n.jsx("span",{style:{flex:"0 0 30px",height:30,borderRadius:"8px",background:a.comingSoon?"#f1f3f1":Ae.greenLight,display:"inline-flex",alignItems:"center",justifyContent:"center",color:a.comingSoon?"#9aa0a6":Ae.green,opacity:a.comingSoon?.7:1},children:i&&n.jsx(i,{size:16,strokeWidth:1.9})}),n.jsxs("span",{style:{flex:1,minWidth:0,lineHeight:1.45},children:[n.jsxs("span",{className:"it-card-title",style:{display:"block",fontWeight:600,color:a.comingSoon?"#9aa0a6":Ae.text},children:[a.label,a.comingSoon&&n.jsx("span",{style:{marginLeft:"0.5rem",fontSize:"0.55rem",fontWeight:700,letterSpacing:"0.05em",textTransform:"uppercase",color:Ae.blue,background:"#eaf2fc",border:"1px solid #cfe0f7",borderRadius:"5px",padding:"0.05rem 0.4rem",verticalAlign:"middle"},children:"Coming Soon"})]}),n.jsx("span",{className:"it-body-sm",style:{display:"block",color:Ae.muted,marginTop:"0.25rem"},children:a.blurb})]}),r&&n.jsx("span",{className:"pl-arrow","aria-hidden":"true",style:{flex:"0 0 auto",alignSelf:"center",color:Ae.green,fontWeight:700,fontSize:"1.05rem",lineHeight:1},children:"→"})]});return r?n.jsx(J,{to:a.href,className:"pl-link",style:{textDecoration:"none",color:"inherit",display:"block"},children:o},a.label):n.jsx("div",{children:o},a.label)})]}),xce=({theme:e,index:t})=>n.jsx("section",{style:{padding:"clamp(4rem, 7vw, 6rem) clamp(1.25rem, 5vw, 4rem)",background:t%2===0?"#fff":Ae.bgSoft,borderBottom:`1px solid ${Ae.border}`},children:n.jsxs("div",{style:{maxWidth:"1296px",margin:"0 auto"},children:[n.jsxs("div",{className:`home-theme-grid${e.flip?" flip":""}`,children:[n.jsxs("div",{className:"home-theme-copy",style:{minWidth:0},children:[n.jsx(P4,{children:e.eyebrow}),n.jsx("h2",{className:"it-title-sm",style:{margin:"0 0 0.75rem 0",color:Ae.text},children:e.heading}),n.jsx("p",{className:"it-body",style:{color:Ae.muted,margin:"0 0 1.75rem 0",maxWidth:"420px"},children:e.body}),n.jsx(vce,{label:e.poweredLabel,surfaces:e.powered})]}),n.jsx("div",{className:"home-theme-art",style:{display:"flex",justifyContent:"center",minWidth:0},children:n.jsx("div",{className:"pf-art",children:n.jsx("div",{style:{background:t%2===0?Ae.bgSoft:"#fff",border:`1px solid ${Ae.border}`,borderRadius:"24px",boxShadow:"0 8px 30px rgba(27,31,28,0.05)",overflow:"hidden",width:"100%"},children:e.visual})})})]}),n.jsxs("figure",{style:{position:"relative",maxWidth:"720px",margin:"clamp(1.75rem, 3vw, 2.5rem) auto 0",background:t%2===0?Ae.bgSoft:"#fff",border:`1px solid ${Ae.border}`,borderRadius:"16px",padding:"1.4rem 1.6rem 1.5rem"},children:[n.jsx("span",{"aria-hidden":"true",style:{position:"absolute",top:"-0.6rem",left:"1.1rem",fontFamily:"Georgia, 'Times New Roman', serif",fontSize:"3rem",lineHeight:1,color:Ae.greenSoft,opacity:.32},children:"“"}),n.jsx("blockquote",{style:{position:"relative",margin:0,padding:0,border:"none",fontFamily:"Geist, sans-serif",fontWeight:500,fontSize:"1.0625rem",color:Ae.text,lineHeight:1.5},children:e.quote.text}),n.jsx("figcaption",{className:"it-quote-cite",style:{display:"block",color:Ae.muted,marginTop:"0.8rem",fontSize:"0.92rem"},children:e.quote.attribution})]})]})}),gP={Attribution:{tint:Ae.blueSoft,ink:Ae.blue},Sales:{tint:Ae.greenLight,ink:Ae.green},Marketing:{tint:Ae.cream,ink:"#a5701c"}},wce=()=>{const[e,t]=M.useState(0),a=hce.flatMap(l=>{const d=_M(l.slug);return d?[{app:l,ex:d}]:[]}),i=a.length,r=a.length+1,o=l=>t(Math.max(0,Math.min(r-1,l)));return n.jsxs("div",{className:"mac",children:[n.jsx("div",{className:"mac-track",children:n.jsxs("div",{className:"mac-slides",style:{transform:`translateX(-${e*100}%)`},children:[a.map(({app:l,ex:d},u)=>{const h=gP[d.category]??gP.Sales,m=u!==e;return n.jsx("a",{href:xa(l.slug),className:"mac-slide","aria-hidden":m||void 0,tabIndex:m?-1:void 0,children:n.jsxs("div",{className:"mac-card",children:[n.jsx("div",{className:"mac-thumb",style:{background:h.tint},children:n.jsx("img",{src:d.thumbnail.replace("thumbnail.svg","thumbnail-floating.svg"),alt:"",loading:"lazy",onError:f=>{const y=f.currentTarget;
1122y.src.includes("/thumbnail-floating.svg")&&(y.src=d.thumbnail)}})}),n.jsxs("div",{className:"mac-body",children:[n.jsx("span",{className:"mac-chip",style:{background:h.tint,color:h.ink},children:d.category}),n.jsx("h3",{className:"mac-title",children:d.title}),n.jsx("p",{className:"mac-desc",children:l.description}),n.jsx("div",{className:"mac-tags",children:l.tags.map(f=>n.jsx("span",{className:"mac-tag",children:f},f))}),n.jsxs("span",{className:"mac-open",children:["Open example",n.jsx("span",{"aria-hidden":"true",children:"→"})]})]})]})},l.slug)}),n.jsx("div",{className:"mac-slide","aria-hidden":e!==i||void 0,children:n.jsxs("div",{className:"mac-all",children:[n.jsxs("div",{className:"mac-all-big",children:[Ed.length," miniapps"]}),n.jsx("h3",{className:"mac-all-h",children:"See the whole library"}),n.jsx("p",{className:"mac-all-p",children:"Dashboards, heatmaps, trackers, and analyses across sales, marketing, and attribution, all built on Upside."}),n.jsxs(J,{to:xa(),className:"mac-btn",tabIndex:e!==i?-1:void 0,children:["Browse all miniapps ",n.jsx("span",{"aria-hidden":"true",children:"→"})]})]})})]})}),n.jsxs("div",{className:"mac-ctl",children:[n.jsx("button",{className:"mac-arrow",onClick:()=>o(e-1),disabled:e===0,"aria-label":"Previous miniapp",children:"‹"}),n.jsx("div",{className:"mac-dots",children:Array.from({length:r}).map((l,d)=>n.jsx("button",{className:`mac-dot${d===e?" active":""}${d===i?" all":""}`,onClick:()=>o(d),"aria-label":d===i?"Go to the see-all slide":`Go to miniapp ${d+1}`,"aria-current":d===e?"true":void 0},d))}),n.jsx("button",{className:"mac-arrow",onClick:()=>o(e+1),disabled:e===r-1,"aria-label":"Next miniapp",children:"›"}),n.jsxs(J,{to:xa(),className:"mac-seeall",children:["See all ",Ed.length," →"]})]})]})},kce=({green:e})=>n.jsx("svg",{width:"10",height:"10",viewBox:"0 0 24 24",fill:"none",stroke:e?"#509a79":"#ffffff",strokeWidth:3,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:n.jsx("path",{d:"M20 6 9 17l-5-5"})}),Pe={green:"#2d6a4f",greenSoft:"#509A79",blue:"#347BD1",purple:"#7a4a9e",text:"#1b1f1c",muted:"#5f6563",border:"#eaeeea",bgSoft:"#fafafa",greenLight:"#e8f4ed",cream:"#f5eedc",blueSoft:"#e4edf5",purpleSoft:"#ece7f5",ctaGreen:"#509a79",ctaGreenHover:"#78a78f"},j0={"green-light":Pe.greenLight,"blue-soft":Pe.blueSoft,"purple-soft":Pe.purpleSoft,cream:Pe.cream},Hr=({title:e,description:t,eyebrow:a})=>n.jsx("section",{id:"hero",style:{position:"relative",marginTop:"-65px",background:Pe.bgSoft,borderBottom:`1px solid ${Pe.border}`,overflow:"hidden"},children:n.jsxs("div",{style:{maxWidth:840,margin:"0 auto",padding:"148px 40px 84px",textAlign:"center"},children:[a&&n.jsx("div",{style:{fontSize:"12px",fontWeight:500,letterSpacing:"0.14em",textTransform:"uppercase",color:Pe.greenSoft},children:a}),n.jsx("h1",{style:{margin:a?"20px auto 0":0,fontSize:"clamp(34px, 6vw, 62px)",fontWeight:600,letterSpacing:"-0.03em",lineHeight:1.04,color:Pe.text,maxWidth:"760px",textWrap:"balance"},children:e}),n.jsx("p",{style:{fontSize:"19px",lineHeight:1.6,color:Pe.muted,margin:"24px auto 0",maxWidth:"600px",textWrap:"pretty"},children:t})]})}),jce=[{image:"/images/alex-bauer.jpg",name:"Alex Bauer",role:"Product",bio:"Branch early employee + Head of Product",linkedin:"https://www.linkedin.com/in/alexdbauer"},{image:"/images/dan-ahmadi.png",name:"Dan Ahmadi",role:"GTM & Ops",bio:"12+ years in B2B Demand Gen + SDR management",linkedin:"https://www.linkedin.com/in/dahmadi"},{image:"/images/jonas-bauer.png",name:"Jonas Bauer",role:"Engineering",bio:"Branch Principal Engineer, 7+ years dev experience",linkedin:"https://www.linkedin.com/in/jonas-f-bauer"},{image:"/images/mada-seghete.jpg",name:"Mada Seghete",role:"CEO & Marketing",bio:"Branch ($100M+ revenue) founder and CMO, Stanford MBA",linkedin:"https://www.linkedin.com/in/madalina"}],Sce=[{name:"XYZ Ventures",logo:"/images/xyz.svg",url:"https://www.xyz.vc/"},{name:"Emerson Collective",logo:"/images/emerson-collective.svg",url:"https://www.emersoncollective.com/"},{name:"Peterson Ventures",logo:"/images/peterson-ventures.svg",url:"https://www.petersonventures.com/"},{name:"Westbound",logo:"/images/westbound.svg",url:"https://westboundequity.com/"}],Cce=()=>n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"About Upside",description:"Meet the team behind Upside: former operators, marketers, and engineers building better revenue attribution for modern B2B teams.",canonicalUrl:"https://upside.tech/about"}),n.jsx(Hr,{eyebrow:"About",title:"About Us",description:"We're a team of data enthusiasts and former operators on a mission to help revenue leaders make better decisions."}),n.jsx("div",{className:"container",children:n.jsxs("div",{className:"content",children:[n.jsxs("section",{className:"text-image-section",children:[n.jsxs("div",{className:"text-image-section__content-wrapper",children:[n.jsx("div",{className:"badge",children:"Our Story"}),n.jsx("div",{className:"text-image-section__heading-wrapper",children:n.jsx("h3",{className:"heading-m",children:"We built the platform we always wished we had."})}),n.jsx("p",{className:"body-m",children:"We're a team of engineers who spent over a decade in B2B sales and marketing, struggling to make sense of the giant mess that is revenue attribution. After building internal tools to tackle the problem at companies like Branch, Outreach, and MuleSoft, we're now on a mission to bring lasting clarity to every B2B revenue leader out there."})]}),n.jsx("img",{src:"/images/upside-founding-team.avif",loading:"lazy",alt:"",className:"text-image-section__image"})]}),n.jsxs("section",{className:"text-image-section cc-direction-rtl",children:[n.jsxs("div",{className:"text-image-section__content-wrapper",children:[n.jsx("div",{className:"badge",children:"Mission"}),n.jsx("div",{className:"text-image-section__heading-wrapper",children:n.jsx("h3",{className:"heading-m",children:"Better attribution. Smarter decisions. Stronger outcomes."})}),n.jsx("p",{className:"body-m",children:"We believe great attribution is the foundation for smarter, faster go-to-market decisions—knowing what to do next to close a deal, where to invest the next dollar, and where to place your next hire. Our mission is to replace noise with clarity, and help every B2B team act with confidence."})]}),n.jsx("img",{src:"/images/mission-visual.jpg",loading:"lazy",alt:"",srcSet:"/images/mission-visual-p-500.jpg 500w, /images/mission-visual-p-800.jpg 800w, /images/mission-visual-p-1080.jpg 1080w, /images/mission-visual-p-1600.jpg 1600w, /images/mission-visual-p-2000.jpg 2000w, /images/mission-visual.jpg 2136w",sizes:"(max-width: 2136px) 100v
1122w, 2136px",className:"text-image-section__image"})]}),n.jsxs("section",{id:"investors",className:"investors",children:[n.jsx("p",{className:"body-l",children:"Meet our investors"}),n.jsx("div",{className:"investors__list",children:Sce.map(e=>n.jsx("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",className:"investors__item w-inline-block",children:n.jsx("img",{src:e.logo,loading:"lazy",alt:e.name,className:"investors__image"})},e.name))})]}),n.jsxs("section",{id:"team",className:"section",children:[n.jsx("div",{children:n.jsxs("div",{className:"section-header",children:[n.jsxs("div",{className:"section-header__content",children:[n.jsx("div",{className:"badge",children:"Founding Team"}),n.jsx("div",{className:"section-header__heading-wrapper",children:n.jsx("h2",{className:"heading-l",children:"Meet our founders."})})]}),n.jsx("div",{className:"section-header__paragraph-wrapper",children:n.jsx("p",{className:"body-m",children:"We've scaled to $100M+ ARR and felt every data pain along the way. Now we're solving it."})})]})}),n.jsx("div",{className:"w-dyn-list",children:n.jsx("div",{role:"list",className:"collection-list w-dyn-items",children:jce.map(e=>n.jsx("div",{role:"listitem",className:"w-dyn-item",children:n.jsxs("div",{className:"team-member-card",children:[n.jsx("img",{loading:"lazy",src:e.image,alt:e.name,className:"team-member-card__image"}),n.jsxs("div",{className:"team-member-card__content",children:[n.jsx("div",{className:"team-member-card__header",children:n.jsx("h3",{className:"heading-xs",children:e.name})}),n.jsx("p",{className:"body-s",children:e.bio})]}),n.jsx("a",{href:e.linkedin,target:"_blank",rel:"noopener noreferrer",className:"team-member-card__social-link w-inline-block",children:n.jsx("img",{loading:"lazy",src:"/images/linkedin_1.svg",alt:"",className:"team-member-card__social-link-image"})})]})},e.name))})})]})]})})]}),yP="#1b1f1c",Ace="#394142",Tce="#eaeeea",_ce="#fafafa",Mce=()=>n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"AIE Artwork",description:"Submit your details and we'll be in touch about AIE artwork.",canonicalUrl:"https://upside.tech/AIE"}),n.jsx("section",{style:{background:_ce,minHeight:"calc(100vh - 80px)",display:"flex",flexDirection:"column",alignItems:"center",padding:"clamp(8rem, 9vw, 9rem) 1.25rem clamp(2.5rem, 6vw, 4rem)"},children:n.jsxs("div",{style:{width:"100%",maxWidth:"32rem",margin:"auto 0"},children:[n.jsx("h1",{className:"it-title",style:{margin:"0 0 0.5rem",color:yP,textAlign:"center"},children:"AIE Artwork"}),n.jsx("p",{className:"it-lead",style:{margin:"0 auto 2rem",color:Ace,maxWidth:"44ch",textAlign:"center"},children:"Fill out this form to see the results of your contribution—we'll keep you updated."}),n.jsxs("div",{style:{border:`1px solid ${Tce}`,borderRadius:"14px",padding:"clamp(1.25rem, 3vw, 1.75rem)",background:"#fff",boxShadow:"0 1px 3px rgba(0,0,0,0.05)",minWidth:0},children:[n.jsx("div",{className:"it-card-title",style:{marginBottom:"1.125rem",color:yP},children:"Let us know how to get in touch"}),n.jsx(Zw,{type:"aie-artwork"})]})]})})]}),Fj="#2d6a4f",bP="#509a79",Gc="#1b1f1c",hf="#5f6563",Ece="#394142",Hc="#eaeeea",Rce="#fafafa",pf=[{quote:"This is more data than we've ever been able to put together and visualize so quickly. This is amazing that Upside can do this.",name:"Lisa Cole",title:"Chief Marketing & AI Officer, 2X",photo:"/images/mentions/case/lisa-cole.jpg"},{quote:"This is probably the most impressive product demo I've ever seen.",name:"Jason Schleweis",title:"Senior Director, Marketing Technology & Automation, Commvault",photo:"/images/mentions/linkedin/jason-s.png"},{quote:"Their team has been the BEST partners. The platform just keeps getting better — definitely game changing for us.",name:"Wendy Werve",title:"Chief Market Officer, Comply",photo:"/images/mentions/linkedin/wendy-werve.png"},{quote:"Consultative, intelligent, and extremely accurate. Valuable for our company strategy.",name:"Stephen Daniels",title:"VP, GTM & Strategic Operations, Cresta",photo:"/images/mentions/g2/stephen-d.webp"},{quote:"Upside stitched all these data points together — and when I saw that, it created an epiphany for me. I finally understood what was possible.",name:"Matt Grebow",title:"Director of Enterprise Marketing, ServiceTitan",photo:"/images/mentions/case/matt-grebow.png"},{quote:"Upside is doing it in innovative ways we haven't seen other startups do 
1122yet.",name:"Amy Wellersdick",title:"Senior Director of Marketing Strategy & Growth, Syndio",photo:"/images/mentions/case/amy-wellersdick.jpg"},{quote:"Upside provides one of the clearest 360-degree views of our marketing activities and their impact.",name:"Carl Gunlefinger",title:"Senior Marketing Operations Manager, Comply",photo:"/images/mentions/g2/carl-g.jpg"},{quote:"Upside is pretty impressive. It can take over a huge chunk of the time most marketing leaders spend digging through the CRM doing dot-connecting detective work.",name:"Kacie Jenkins",title:"Marketing Leader",photo:"/images/mentions/linkedin/kacie-jenkins.jpg"},{quote:"Mada and the Upside team are amazing!",name:"Felicia Curcuru",title:"Co-founder & CEO, Binti",photo:"/images/mentions/linkedin/felicia-curcuru.jpg"},{quote:"The Upside team is the best!",name:"Tina Staroselsky",title:"VP, Revenue Marketing, Ironclad",photo:"/images/mentions/linkedin/tina-staroselsky.jpg"}];function Nce(){const[e,t]=M.useState(0),[a,i]=M.useState(!1),[r,o]=M.useState(!1),l=a||r,d=M.useRef(!1);M.useEffect(()=>{var m;d.current=typeof window<"u"&&((m=window.matchMedia)==null?void 0:m.call(window,"(prefers-reduced-motion: reduce)").matches)},[]);const u=M.useCallback(()=>{t(m=>(m+1)%pf.length)},[]);M.useEffect(()=>{if(l||d.current)return;const m=Math.min(11e3,Math.max(6500,pf[e].quote.length*55)),f=window.setTimeout(u,m);return()=>window.clearTimeout(f)},[e,l,u]);const h=pf[e];return n.jsxs("figure",{className:"demo-quote","aria-roledescription":"carousel","aria-label":"What customers say about Upside",onMouseEnter:()=>i(!0),onMouseLeave:()=>i(!1),onFocusCapture:()=>o(!0),onBlurCapture:()=>o(!1),children:[n.jsx("div",{className:"demo-quote-stage",children:n.jsxs("div",{className:"demo-quote-slide",children:[n.jsxs("blockquote",{className:"demo-quote-text",children:["“",h.quote,"”"]}),n.jsxs("figcaption",{className:"demo-quote-footer",children:[n.jsx("img",{src:h.photo,alt:"",className:"demo-quote-photo",loading:"lazy",width:44,height:44}),n.jsxs("div",{className:"demo-quote-who",children:[n.jsx("p",{className:"demo-quote-name",children:h.name}),n.jsx("p",{className:"demo-quote-title",children:h.title})]})]})]},e)}),n.jsx("div",{className:"demo-quote-dots",role:"tablist","aria-label":"Choose a testimonial",children:pf.map((m,f)=>n.jsx("button",{type:"button",role:"tab","aria-selected":f===e,"aria-label":`Show testimonial ${f+1} of ${pf.length}`,className:`demo-quote-dot${f===e?" is-active":""}`,onClick:()=>t(f)},m.name+f))})]})}const Oce=["send-time-optimizer","aeo-influence","channel-analysis","expansion-readiness","campaign-follow-up","paid-media-impact"],Pce=Oce.map(e=>Ed.find(t=>t.slug===e)).filter(e=>!!e);function Ice(){return n.jsx("div",{className:"demo-app-tiles",children:Pce.map(e=>n.jsxs("a",{href:xa(e.slug),className:"demo-app-tile",children:[n.jsx("span",{className:"demo-app-thumb",children:n.jsx("img",{src:e.thumbnail,alt:"",loading:"lazy",onError:t=>{t.currentTarget.style.display="none"}})}),n.jsxs("span",{className:"demo-app-info",children:[n.jsx("span",{className:"demo-app-cat",children:e.category}),n.jsx("span",{className:"demo-app-title",children:e.title})]})]},e.slug))})}function Dce(){const e=[...oa,...oa];return n.jsxs("div",{className:"demo-logos","aria-label":"Trusted by leading go-to-market teams",children:[n.jsx("p",{className:"demo-eyebrow",children:"Trusted by"}),n.jsx("div",{className:"demo-logos-marquee",children:n.jsx("div",{className:"demo-logos-track",children:e.map((t,a)=>{const i=a>=oa.length;return n.jsx("img",{src:t.src,alt:i?"":t.name,"aria-hidden":i||void 0,loading:"lazy",className:"demo-logo",style:{height:Math.round(t.height*.7)}},`${t.name}-${a}`)})})})]})}const Wce=()=>{const[e,t]=M.useState(!1);return M.useEffect(()=>{cG()},[]),n.jsxs(n.Fragment,{children:[n.jsx(Je,{title:"Request a Demo",description:"Book a walkthrough with Upside. See how GTM teams connect their revenue data, get AI-powered answers, and make every bet with evidence — not guesswork.",canonicalUrl:"https://upside.tech/request-demo"}),n.jsx("style",{children:`
1123        .demo-fullpage {
1124          min-height: 100vh;
1125          background: ${Rce};
1126          display: flex;
1127          flex-direction: column;
1128          overflow-x: hidden;
1129        }
1130        .demo-header {
1131          display: flex;
1132          align-items: center;
1133          justify-content: space-between;
1134          padding: clamp(1.1rem, 2.5vw, 1.6rem) clamp(1.25rem, 5vw, 3rem);
1135        }
1136        .demo-brand {
1137          display: inline-flex;
1138          height: 26px;
1139          color: ${Gc};
1140        }
1141        .demo-main {
1142          flex: 1;
1143          display: flex;
1144          flex-direction: column;
1145          justify-content: center;
1146          padding: clamp(1.5rem, 4vw, 3rem) clamp(1.25rem, 5vw, 3rem) clamp(2rem, 4vw, 3rem);
1147        }
1148        .demo-shell {
1149          max-width: 1120px;
1150          width: 100%;
1151          margin: 0 auto;
1152          display: grid;
1153          grid-template-columns: minmax(0, 1fr) minmax(0, 560px);
1154          grid-template-areas:
1155            "intro form"
1156            "proof form";
1157          column-gap: clamp(2.5rem, 5vw, 4rem);
1158          row-gap: clamp(1.5rem, 3vw, 2rem);
1159          align-items: start;
1160        }
1161        .demo-intro { grid-area: intro; }
1162        .demo-proof { grid-area: proof; }
1163        .demo-form-col { grid-area: form; }
1164        .demo-headline {
1165          margin: 0 0 1rem;
1166          color: ${Gc};
1167          max-width: 16ch;
1168        }
1169        .demo-lead {
1170          margin: 0;
1171          color: ${Ece};
1172          max-width: 42ch;
1173        }
1174        .demo-quote {
1175          margin: 0;
1176          padding: clamp(1.25rem, 3vw, 1.5rem);
1177          border: 1px solid ${Hc};
1178          border-radius: 14px;
1179          background: #fff;
1180          box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
1181        }
1182        /* Fixed-ish stage so the card (and the sticky form beside it) doesn't
1183           jump as quotes of different lengths rotate through. */
1184        .demo-quote-stage {
1185          position: relative;
1186          min-height: 188px;
1187          display: flex;
1188        }
1189        .demo-quote-slide {
1190          display: flex;
1191          flex: 1;
1192          flex-direction: column;
1193          justify-content: center;
1194          animation: demoQuoteFade 480ms ease both;
1195        }
1196        @keyframes demoQuoteFade {
1197          from { opacity: 0; transform: translateY(6px); }
1198          to { opacity: 1; transform: translateY(0); }
1199        }
1200        @media (prefers-reduced-motion: reduce) {
1201          .demo-quote-slide { animation: none; }
1202        }
1203        .demo-quote-text {
1204          /* Reset the global blockquote left-bar + padding (upside.css). */
1205          margin: 0 0 1.25rem;
1206          padding: 0;
1207          border: none;
1208          color: ${Gc};
1209          font-size: clamp(1.05rem, 2vw, 1.15rem);
1210          line-height: 1.5;
1211          text-align: center;
1212        }
1213        .demo-quote-footer {
1214          /* figcaption is centered globally (webflow-components.css) — undo it.
1215             The quote text + attribution group is vertically centered in the
1216             stage via the slide's justify-content. */
1217          display: flex;
1218          align-items: center;
1219          justify-content: center;
1220          text-align: left;
1221          margin-top: 0;
1222          gap: 0.85rem;
1223        }
1224        .demo-quote-photo {
1225          width: 44px;
1226          height: 44px;
1227          border-radius: 999px;
1228          object-fit: cover;
1229          flex-shrink: 0;
1230        }
1231        .demo-quote-who {
1232          min-width: 0;
1233        }
1234        .demo-quote-name {
1235          margin: 0;
1236          color: ${Gc};
1237          font-weight: 600;
1238          font-size: 0.92rem;
1239        }
1240        .demo-quote-title {
1241          margin: 0.15rem 0 0;
1242          color: ${hf};
1243          font-size: 0.82rem;
1244        }
1245        .demo-quote-dots {
1246          display: flex;
1247          justify-content: center;
1248          gap: 0.4rem;
1249          margin-top: 1.35rem;
1250        }
1251        .demo-quote-dot {
1252          width: 6px;
1253          height: 6px;
1254          padding: 0;
1255          border: none;
1256          border-radius: 999px;
1257          background: rgba(45, 106, 79, 0.2);
1258          cursor: pointer;
1259          transition: width 240ms ease, background-color 240ms ease;
1260        }
1261        .demo-quote-dot.is-active {
1262          width: 22px;
1263          background: ${Fj};
1264        }
1265        .demo-quote-dot:hover { background: ${bP}; }
1266        .demo-form-card {
1267          border: 1px solid ${Hc};
1268          border-radius: 16px;
1269          padding: clamp(1.35rem, 3vw, 1.75rem);
1270          background: #fff;
1271          box-shadow: 0 8px 28px rgba(27, 31, 28, 0.06);
1272          min-width: 0;
1273        }
1274        /* Keep HubSpot's injected markup inside the card on narrow screens. */
1275        .demo-form-card form,
1276        .demo-form-card input,
1277        .demo-form-card select,
1278        .demo-form-card textarea {
1279          max-width: 100%;
1280          box-sizing: border-box;
1281        }
1282        /* Post-submit thank-you state: a big, centered card holding the
1283           confirmation message and a gallery of explorable miniapps. */
1284        .demo-thanks-shell {
1285          width: 100%;
1286          max-width: 960px;
1287          margin: 0 auto;
1288          padding: clamp(2rem, 5vw, 3.25rem) clamp(1.5rem, 4vw, 3rem) clamp(2rem, 4vw, 2.75rem);
1289          background: #fff;
1290          border: 1px solid ${Hc};
1291          border-radius: 20px;
1292          box-shadow: 0 12px 36px rgba(27, 31, 28, 0.07);
1293          text-align: center;
1294          animation: demoQuoteFade 480ms ease both;
1295        }
1296        .demo-thanks-mark {
1297          width: 60px;
1298          height: 60px;
1299          margin: 0 auto 1.25rem;
1300          border-radius: 999px;
1301          background: rgba(45, 106, 79, 0.12);
1302          color: ${Fj};
1303          display: inline-flex;
1304          align-items: center;
1305          justify-content: center;
1306          font-size: 1.7rem;
1307          font-weight: 700;
1308        }
1309        .demo-thanks-title {
1310          margin: 0 0 0.65rem;
1311          color: ${Gc};
1312          font-size: clamp(1.6rem, 3vw, 2.1rem);
1313        }
1314        .demo-thanks-sub {
1315          margin: 0 auto 0.5rem;
1316          max-width: 52ch;
1317          color: ${hf};
1318          font-size: 1rem;
1319          line-height: 1.55;
1320        }
1321        .demo-thanks-link {
1322          display: inline-block;
1323          margin-top: 0.5rem;
1324          color: ${Fj};
1325          font-weight: 600;
1326          text-decoration: none;
1327        }
1328        .demo-thanks-link:hover { text-decoration: underline; }
1329
1330        /* Shared small uppercase eyebrow (e.g. "Trusted by"). */
1331        .demo-eyebrow {
1332          margin: 0 0 1rem;
1333          color: ${hf};
1334          font-size: 0.72rem;
1335          font-weight: 600;
1336          letter-spacing: 0.08em;
1337          text-transform: uppercase;
1338        }
1339
1340        /* Miniapp tiles on the thank-you state. */
1341        .demo-app-tiles {
1342          display: grid;
1343          grid-template-columns: repeat(3, 1fr);
1344          gap: 1rem;
1345          margin: 2rem 0 0.5rem;
1346          text-align: left;
1347        }
1348        .demo-app-tile {
1349          display: flex;
1350          flex-direction: column;
1351          border: 1px solid ${Hc};
1352          border-radius: 14px;
1353          overflow: hidden;
1354          background: #fff;
1355          text-decoration: none;
1356          transition: border-color 160ms ease, box-shadow 160ms ease, transform 160ms ease;
1357        }
1358        .demo-app-tile:hover {
1359          border-color: rgba(45, 106, 79, 0.4);
1360          box-shadow: 0 14px 34px rgba(27, 31, 28, 0.12);
1361          transform: translateY(-3px);
1362        }
1363        .demo-app-thumb {
1364          display: block;
1365          aspect-ratio: 16 / 10;
1366          background: #eef2f5;
1367          overflow: hidden;
1368          border-bottom: 1px solid ${Hc};
1369        }
1370        .demo-app-thumb img {
1371          width: 100%;
1372          height: 100%;
1373          object-fit: cover;
1374          display: block;
1375        }
1376        .demo-app-info {
1377          display: flex;
1378          flex-direction: column;
1379          gap: 0.3rem;
1380          padding: 0.85rem 0.95rem 1rem;
1381        }
1382        .demo-app-cat {
1383          color: ${bP};
1384          font-size: 0.68rem;
1385          font-weight: 600;
1386          letter-spacing: 0.04em;
1387          text-transform: uppercase;
1388        }
1389        .demo-app-title {
1390          color: ${Gc};
1391          font-weight: 600;
1392          font-size: 0.92rem;
1393          line-height: 1.3;
1394        }
1395
1396        /* "Trusted by" logo marquee — slow right-to-left loop. Sits under the
1397           quote carousel in the left copy column. */
1398        .demo-logos {
1399          width: 100%;
1400          margin-top: clamp(1.5rem, 3vw, 2rem);
1401          padding-top: clamp(1.25rem, 2.5vw, 1.75rem);
1402          border-top: 1px solid ${Hc};
1403        }
1404        .demo-logos-marquee {
1405          position: relative;
1406          overflow: hidden;
1407          mask-image: linear-gradient(90deg, transparent 0%, black 6%, black 94%, transparent 100%);
1408          -webkit-mask-image: linear-gradient(90deg, transparent 0%, black 6%, black 94%, transparent 100%);
1409        }
1410        .demo-logos-track {
1411          display: flex;
1412          width: max-content;
1413          align-items: center;
1414          gap: clamp(2.5rem, 5vw, 4rem);
1415          padding-right: clamp(2.5rem, 5vw, 4rem);
1416          animation: demoLogoScroll 45s linear infinite;
1417          will-change: transform;
1418        }
1419        @keyframes demoLogoScroll {
1420          from { transform: translateX(0); }
1421          to { transform: translateX(-50%); }
1422        }
1423        @media (prefers-reduced-motion: reduce) {
1424          .demo-logos-track { animation: none; flex-wrap: wrap; }
1425        }
1426        .demo-logo {
1427          width: auto;
1428          object-fit: contain;
1429          filter: brightness(0);
1430          opacity: 0.45;
1431          flex-shrink: 0;
1432        }
1433
1434        /* Minimal legal footer — kept since this page omits the global footer. */
1435        .demo-footer {
1436          display: flex;
1437          align-items: center;
1438          justify-content: space-between;
1439          flex-wrap: wrap;
1440          gap: 0.75rem 1.25rem;
1441          padding: clamp(1.1rem, 2.5vw, 1.5rem) clamp(1.25rem, 5vw, 3rem);
1442          border-top: 1px solid ${Hc};
1443        }
1444        .demo-footer-copy {
1445          color: ${hf};
1446          font-size: 0.8rem;
1447        }
1448        .demo-footer-links {
1449          display: flex;
1450          flex-wrap: wrap;
1451          gap: 1.25rem;
1452        }
1453        .demo-footer-links a {
1454          color: ${hf};
1455          font-size: 0.8rem;
1456          text-decoration: none;
1457          transition: color 160ms ease;
1458        }
1459        .demo-footer-links a:hover { color: ${Gc}; }
1460        @media (max-width: 900px) {
1461          /* Stack to one column and flow intro → form → proof so the form
1462             stays near the top, right under the headline, on phones. */
1463          .demo-main { justify-content: flex-start; }
1464          .demo-shell {
1465            /* minmax(0, 1fr) — not bare 1fr — so the HubSpot form's min-content
1466               width can't blow the column past the viewport on phones. */
1467            grid-template-columns: minmax(0, 1fr);
1468            grid-template-areas:
1469              "intro"
1470              "form"
1471              "proof";
1472            row-gap: clamp(1.5rem, 5vw, 2rem);
1473          }
1474          .demo-headline { max-width: none; }
1475          .demo-lead { max-width: none; }
1476          .demo-app-tiles { grid-template-columns: repeat(2, 1fr); }
1477          /* On phones, stack the logos above the quote carousel. */
1478          .demo-proof {
1479            display: flex;
1480            flex-direction: column;
1481            gap: clamp(1.25rem, 4vw, 1.75rem);
1482          }
1483          .demo-logos {
1484            order: -1;
1485            margin-top: 0;
1486            padding-top: 0;
1487            border-top: none;
1488          }
1489        }
1490        @media (max-width: 480px) {
1491          .demo-header { padding: 0.95rem 1.1rem; }
1492          .demo-form-card { padding: 1.15rem; }
1493          .demo-app-tiles { grid-template-columns: 1fr; }
1494          .demo-footer {
1495            justify-content: center;
1496            text-align: center;
1497            gap: 0.45rem 1rem;
1498          }
1499          .demo-footer-links { gap: 0.9rem; }
1500        }
1501      `}),n.jsxs("div",{className:"demo-fullpage",children:[n.jsx("header",{className:"demo-header",children:n.jsx(J,{to:"/",className:"demo-brand","aria-label":"Upside home",children:n.jsx(au,{})})}),n.jsx("main",{className:"demo-main",children:e?n.jsxs("section",{className:"demo-thanks-shell",children:[n.jsx("div",{className:"demo-thanks-mark","aria-hidden":"true",children:"✓"}),n.jsx("h2",{className:"demo-thanks-title",children:"Thanks, you're all set."}),n.jsx("p",{className:"demo-thanks-sub",children:"We're excited to meet you. In the meantime, explore the kinds of interactive apps you can build with Upside:"}),n.jsx(Ice,{}),n.jsx(J,{to:xa(),className:"demo-thanks-link",children:"Explore all miniapps →"})]}):n.jsxs("div",{className:"demo-shell",children:[n.jsxs("div",{className:"demo-intro",children:[n.jsx("h1",{className:"it-title demo-headline",children:"See Upside in action."}),n.jsx("p",{className:"it-lead demo-lead",children:"Book a 30-minute walkthrough to see how it works."})]}),n.jsx("div",{className:"demo-form-col",children:n.jsx("div",{className:"demo-form-card",children:n.jsx(Zw,{type:"demo",onSubmitted:()=>t(!0)})})}),n.jsxs("div",{className:"demo-proof",children:[n.jsx(Nce,{}),n.jsx(Dce,{})]})]})}),n.jsxs("footer",{className:"demo-footer",children:[n.jsxs("span",{className:"demo-footer-copy",children:["© ",new Date().getFullYear()," Upside"]}),n.jsxs("nav",{className:"demo-footer-links","aria-label":"Legal",children:[n.jsx(J,{to:"/legal/privacy-policy",children:"Privacy Policy"}),n.jsx(J,{to:"/legal/terms-of-service",children:"Terms of Service"}),n.jsx(J,{to:"/security",children:"Security"})]})]})]})]})},Pi="#2d6a4f",Wv="#509a79",oo="#1b1f1c",so="#5f6563",Tl="#eaeeea",zce="#fafafa",Gj="#c0392b",Lce=`https://api.hsforms.com/submissions/v3/integration/submit/${H0}/${MM.tshirt.formId}`,Uce=`https://api.hsforms.com/submissions/v3/integration/submit/${H0}/${MM.demo.formId}`,vP=[{value:"dark-funnel",name:"“I am the dark funnel.”",note:"Charcoal",image:"/images/tshirts/dark-funnel.png"},{value:"utm-source",name:"“?utm_source=this_tee”",note:"Forest green",image:"/images/tshirts/utm-source.png"},{value:"data-driven",name:"“That wasn’t very data driven of you.”",note:"Sage green",image:"/images/tshirts/data-driven.png"}],Bce=["XS","S","M","L","XL","2XL"],qce="upside",$ce="inbound_router";function Fce(e){const t=window.ChiliPiper;t!=null&&t.submit&&t.submit(qce,$ce,{map:!0,lead:{FirstName:e.firstname,LastName:e.lastname,Email:e.email,Company:e.company}})}const Gce={tshirt_design:"",tshirt_size:"",firstname:"",lastname:"",email:"",ph
1501one:"",shipping_address:""},Hce={company:"",message:""},Yce=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,Vce=()=>{const[e,t]=M.useState(!0),[a,i]=M.useState(Gce),[r,o]=M.useState(Hce),[l,d]=M.useState({}),[u,h]=M.useState("idle"),[m,f]=M.useState(!1),[y,b]=M.useState(null);M.useEffect(()=>{if(!y)return;const C=_=>{_.key==="Escape"&&b(null)};return window.addEventListener("keydown",C),()=>window.removeEventListener("keydown",C)},[y]);const x=C=>d(_=>_[C]?{..._,[C]:void 0}:_),k=(C,_)=>{i(E=>({...E,[C]:_})),x(C)},v=(C,_)=>{o(E=>({...E,[C]:_})),x(C)},j=()=>{const C={};a.tshirt_design||(C.tshirt_design="Pick a design."),a.tshirt_size||(C.tshirt_size="Pick a size."),a.firstname.trim()||(C.firstname="Tell us your first name."),a.lastname.trim()||(C.lastname="Tell us your last name."),a.email.trim()?Yce.test(a.email.trim())||(C.email="That doesn't look like a valid email."):C.email="Add an email so we can confirm your order.";const _=a.phone.replace(/\D/g,"");return a.phone.trim()?(_.length<7||_.length>20)&&(C.phone="That doesn't look like a valid phone number."):C.phone="We need a number to reach you about delivery.",a.shipping_address.trim()||(C.shipping_address="Where should we ship it?"),e&&(r.company.trim()||(C.company="What company are you with?")),C},T=async C=>{var W;C.preventDefault();const _=j();if(d(_),Object.keys(_).length>0){(W=document.getElementById("tso-order"))==null||W.scrollIntoView({behavior:"smooth",block:"start"});return}const E=e,R={pageUri:window.location.href,pageName:"Upside T-shirt Order"};h("submitting");try{const z=await fetch(Lce,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fields:Object.keys(a).filter(H=>a[H].trim()!=="").map(H=>({name:H,value:a[H].trim()})),context:R})});if(!z.ok)throw new Error(`HubSpot t-shirt form responded ${z.status}`);if(E){const H=[{name:"email",value:a.email.trim()},{name:"firstname",value:a.firstname.trim()},{name:"lastname",value:a.lastname.trim()},{name:"company",value:r.company.trim()}];r.message.trim()&&H.push({name:"message",value:r.message.trim()});const $=await fetch(Uce,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({fields:H,context:R})});if(!$.ok)throw new Error(`HubSpot demo form responded ${$.status}`);Fce({firstname:a.firstname.trim(),lastname:a.lastname.trim(),email:a.email.trim(),company:r.company.trim()})}f(E),h("success"),window.scrollTo({top:0,behavior:"smooth"})}catch{h("error")}},A=u==="submitting";return n.jsxs(n.Fragment,{children:[n.jsx(Je,{title:"Order your Upside T-shirt",description:"Pick a design, choose your size, and tell us where to ship it. Optionally book a walkthrough of Upside while you're here.",ogImage:"/og/tshirt-order.png",canonicalUrl:"https://upside.tech/tshirt-order"}),n.jsx("style",{children:`
1502        .tso-page { min-height: 100vh; background: ${zce}; display: flex; flex-direction: column; overflow-x: hidden; }
1503        .tso-header { display: flex; align-items: center; padding: clamp(1.1rem,2.5vw,1.6rem) clamp(1.25rem,5vw,3rem); }
1504        .tso-brand { display: inline-flex; height: 26px; color: ${oo}; }
1505        .tso-main { flex: 1; padding: clamp(0.5rem,2vw,1rem) clamp(1.25rem,5vw,3rem) clamp(2rem,4vw,3rem); }
1506        .tso-shell { max-width: 760px; margin: 0 auto; width: 100%; }
1507        .tso-h1 { margin: 0 0 .6rem; color: ${oo}; }
1508        .tso-lead { margin: 0 0 2rem; color: ${so}; max-width: 52ch; }
1509
1510        .tso-card { background: #fff; border: 1px solid ${Tl}; border-radius: 16px; padding: clamp(1.35rem,3vw,1.9rem); box-shadow: 0 8px 28px rgba(27,31,28,.06); margin-bottom: 1.5rem; }
1511        .tso-row-head { display: flex; align-items: center; margin-bottom: .35rem; }
1512        .tso-num { display: inline-flex; align-items: center; justify-content: center; width: 26px; height: 26px; border-radius: 999px; background: rgba(45,106,79,.12); color: ${Pi}; font-weight: 700; font-size: .85rem; margin-right: .55rem; flex-shrink: 0; }
1513        .tso-section-title { margin: 0; color: ${oo}; font-size: 1.15rem; font-weight: 700; }
1514        .tso-section-sub { margin: .1rem 0 1.1rem; color: ${so}; font-size: .9rem; }
1515
1516        /* Tee lineup: click any tee to blow it up in the lightbox */
1517        .tso-lineup { display: grid; grid-template-columns: 1fr; gap: 1.1rem; }
1518        .tso-tee { border: 1px solid ${Tl}; border-radius: 14px; overflow: hidden; background: #fff; }
1519        .tso-tee-img { display: block; width: 100%; margin: 0; padding: 0; border: 0; border-bottom: 1px solid ${Tl}; aspect-ratio: 8 / 5; background: #eef1ee; cursor: zoom-in; position: relative; overflow: hidden; font: inherit; color: inherit; }
1520        /* Crop the square mockup to an 8:5 band anchored at the shirts' shoulders
1521           (object-position 30% down): trims the dead top whitespace while keeping
1522           both shirts intact — front slogan + back logo fully in frame. */
1523        .tso-tee-img img { width: 100%; height: 100%; object-fit: cover; object-position: center 30%; display: block; transform: scale(1); transition: transform .2s ease; }
1524        .tso-tee-img:hover img, .tso-tee-img:focus-visible img { transform: scale(1.03); }
1525        .tso-tee-img:focus-visible { outline: 2px solid ${Wv}; outline-offset: -2px; }
1526        .tso-tee-zoom { position: absolute; top: .5rem; right: .5rem; display: inline-flex; align-items: center; justify-content: center; width: 28px; height: 28px; border-radius: 999px; background: rgba(27,31,28,.55); color: #fff; opacity: 0; transition: opacity .16s ease; }
1527        .tso-tee-img:hover .tso-tee-zoom, .tso-tee-img:focus-visible .tso-tee-zoom { opacity: 1; }
1528        .tso-tee-cap { display: flex; align-items: flex-start; gap: .55rem; padding: .8rem 1rem 1rem; }
1529
1530        /* Lightbox: expanded tee view */
1531        .tso-lightbox { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; padding: clamp(1rem,4vw,3rem); background: rgba(27,31,28,.72); animation: tsoFade .18s ease both; }
1532        @keyframes tsoFade { from { opacity: 0; } to { opacity: 1; } }
1533        /* Cap width off the viewport height minus the caption/padding so the
1534           square image + caption never exceed short/landscape viewports. */
1535        .tso-lightbox-inner { position: relative; background: #fff; border-radius: 16px; overflow: hidden; max-width: min(560px, calc(88vh - 96px)); width: 100%; box-shadow: 0 24px 60px rgba(27,31,28,.35); animation: tsoZoomIn .2s ease both; }
1536        @keyframes tsoZoomIn { from { opacity: 0; transform: scale(.96); } to { opacity: 1; transform: scale(1); } }
1537        @media (prefers-reduced-motion: reduce) { .tso-lightbox, .tso-lightbox-inner { animation: none; } }
1538        .tso-lightbox-img { width: 100%; aspect-ratio: 1 / 1; object-fit: contain; background: #eef1ee; display: block; }
1539        .tso-lightbox-cap { display: flex; align-items: center; gap: .6rem; padding: .9rem 1.15rem 1.1rem; border-top: 1px solid ${Tl}; }
1540        .tso-lightbox-cap .tso-tee-name { font-size: 1rem; }
1541        .tso-lightbox-close { position: absolute; top: .6rem; right: .6rem; appearance: none; border: 0; cursor: pointer; width: 34px; height: 34px; border-radius: 999px; background: rgba(27,31,28,.55); color: #fff; font-size: 1.15rem; line-height: 1; display: inline-flex; align-items: center; justify-content: center; transition: background .16s ease; }
1542        .tso-lightbox-close:hover { background: rgba(27,31,28,.8); }
1543        .tso-lightbox-close:focus-visible { outline: 2px solid #fff; outline-offset: 2px; }
1544        .tso-tee-badge { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 999px; background: ${Pi}; color: #fff; font-weight: 700; font-size: .78rem; flex-shrink: 0; }
1545        .tso-tee-text { display: flex; flex-direction: column; gap: .15rem; min-width: 0; }
1546        .tso-tee-name { font-weight: 700; color: ${oo}; font-size: .95rem; }
1547        .tso-tee-note { color: ${so}; font-size: .8rem; }
1548
1549        /* Custom order form */
1550        .tso-field { margin-bottom: 1.15rem; }
1551        .tso-field:last-child { margin-bottom: 0; }
1552        .tso-label { display: block; color: ${oo}; font-weight: 600; font-size: .9rem; margin-bottom: .45rem; }
1553        .tso-optional { color: ${so}; font-weight: 400; }
1554        .tso-input, .tso-select, .tso-textarea { width: 100%; box-sizing: border-box; padding: .7rem .85rem; border: 1px solid ${Tl}; border-radius: 10px; font-family: inherit; font-size: .95rem; color: ${oo}; background: #fff; transition: border-color .14s ease, box-shadow .14s ease; }
1555        .tso-input:focus, .tso-select:focus, .tso-textarea:focus { outline: none; border-color: ${Pi}; box-shadow: 0 0 0 3px rgba(45,106,79,.12); }
1556        .tso-textarea { min-height: 92px; resize: vertical; }
1557        .tso-select { appearance: none; -webkit-appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath fill='%235f6563' d='M1 1l5 5 5-5'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right .9rem center; padding-right: 2.2rem; }
1558        .tso-two-col { display: grid; grid-template-columns: 1fr; gap: 1.15rem; }
1559        .tso-two-col .tso-field { margin-bottom: 0; }
1560        .tso-invalid, .tso-invalid:focus { border-color: ${Gj}; box-shadow: 0 0 0 3px rgba(192,57,43,.1); }
1561        .tso-error { color: ${Gj}; font-size: .8rem; margin: .4rem 0 0; }
1562
1563        /* Design radio cards */
1564        .tso-picks { display: grid; grid-template-columns: 1fr; gap: .6rem; }
1565        .tso-pick { display: flex; align-items: center; gap: .7rem; border: 1px solid ${Tl}; border-radius: 12px; padding: .8rem .95rem; cursor: pointer; transition: border-color .14s ease, background .14s ease; }
1566        .tso-pick:hover { border-color: ${Wv}; }
1567        .tso-pick.is-selected { border-color: ${Pi}; background: rgba(45,106,79,.05); }
1568        .tso-pick input { appearance: none; -webkit-appearance: none; width: 18px; height: 18px; flex-shrink: 0; border: 1.5px solid ${Pi}; border-radius: 999px; margin: 0; position: relative; cursor: pointer; }
1569        .tso-pick input:checked { background: ${Pi}; box-shadow: inset 0 0 0 3px #fff; }
1570        .tso-pick input:focus-visible { outline: 2px solid ${Wv}; outline-offset: 2px; }
1571        .tso-pick-badge { display: inline-flex; align-items: center; justify-content: center; width: 22px; height: 22px; border-radius: 999px; background: rgba(45,106,79,.12); color: ${Pi}; font-weight: 700; font-size: .78rem; flex-shrink: 0; }
1572        .tso-pick-text { display: flex; flex-direction: column; gap: .1rem; min-width: 0; }
1573        .tso-pick-name { font-weight: 600; color: ${oo}; font-size: .92rem; }
1574        .tso-pick-note { color: ${so}; font-size: .78rem; }
1575
1576        /* Demo opt-in toggle + revealed demo-request fields */
1577        .tso-demo-toggle { display: flex; align-items: flex-start; gap: .7rem; cursor: pointer; user-select: none; }
1578        .tso-demo-check { appearance: none; -webkit-appearance: none; width: 20px; height: 20px; margin: 0; flex-shrink: 0; border: 1.5px solid ${Pi}; border-radius: 6px; background: #fff; cursor: pointer; position: relative; transition: background .14s ease, border-color .14s ease; }
1579        .tso-demo-check:checked { background: ${Pi}; }
1580        .tso-demo-check:checked::after { content: ""; position: absolute; left: 6px; top: 2px; width: 5px; height: 10px; border: solid #fff; border-width: 0 2px 2px 0; transform: rotate(45deg); }
1581        .tso-demo-check:focus-visible { outline: 2px solid ${Wv}; outline-offset: 2px; }
1582        .tso-demo-toggle-text { display: flex; flex-direction: column; gap: .15rem; }
1583        .tso-demo-toggle-title { font-weight: 700; color: ${oo}; font-size: .98rem; line-height: 1.3; }
1584        .tso-demo-toggle-hint { color: ${so}; font-size: .84rem; }
1585        .tso-demo-panel { margin-top: 1.25rem; border-top: 1px solid ${Tl}; padding-top: 1.25rem; animation: tsoReveal .28s ease both; }
1586        @keyframes tsoReveal { from { opacity: 0; transform: translateY(-4px); } to { opacity: 1; transform: translateY(0); } }
1587        @media (prefers-reduced-motion: reduce) { .tso-demo-panel { animation: none; } }
1588
1589        /* Bottom submit */
1590        .tso-submit-wrap { text-align: center; }
1591        .tso-submit { appearance: none; border: 0; cursor: pointer; background: ${Pi}; color: #fff; font-family: inherit; font-weight: 700; font-size: 1rem; padding: .95rem 2.4rem; border-radius: 999px; transition: background .16s ease, opacity .16s ease; }
1592        .tso-submit:hover { background: #245740; }
1593        .tso-submit:disabled { opacity: .6; cursor: default; }
1594        .tso-submit-error { color: ${Gj}; font-size: .85rem; margin: .9rem 0 0; }
1595        .tso-footnote { text-align: center; color: ${so}; font-size: .78rem; margin-top: 1rem; }
1596        .tso-footnote a { color: ${Pi}; }
1597
1598        /* Success state */
1599        .tso-success { text-align: center; padding: clamp(2rem,5vw,3.25rem) clamp(1.35rem,3vw,1.9rem); }
1600        .tso-success-mark { display: inline-flex; align-items: center; justify-content: center; width: 56px; height: 56px; border-radius: 999px; background: rgba(45,106,79,.12); margin-bottom: 1.1rem; }
1601        .tso-success-mark::after { content: ""; width: 14px;
1601 height: 26px; border: solid ${Pi}; border-width: 0 3px 3px 0; transform: rotate(45deg) translate(-1px,-2px); }
1602        .tso-success h2 { margin: 0 0 .5rem; color: ${oo}; font-size: 1.35rem; }
1603        .tso-success p { margin: 0 auto; color: ${so}; max-width: 44ch; }
1604
1605        .tso-footer { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: .75rem 1.25rem; padding: clamp(1.1rem,2.5vw,1.5rem) clamp(1.25rem,5vw,3rem); border-top: 1px solid ${Tl}; }
1606        .tso-footer-copy { color: ${so}; font-size: .8rem; }
1607        .tso-footer-links { display: flex; flex-wrap: wrap; gap: 1.25rem; }
1608        .tso-footer-links a { color: ${so}; font-size: .8rem; text-decoration: none; transition: color .16s ease; }
1609        .tso-footer-links a:hover { color: ${oo}; }
1610
1611        @media (min-width: 620px) {
1612          .tso-lineup { grid-template-columns: repeat(3, 1fr); }
1613          .tso-two-col { grid-template-columns: 1fr 1fr; }
1614        }
1615        /* On roomy screens let the tee lineup break out wider than the 760px
1616           form column so the shirts render big (the form stays comfortable). */
1617        @media (min-width: 1080px) {
1618          .tso-card-lineup { width: 980px; margin-left: -110px; }
1619        }
1620        @media (max-width: 560px) {
1621          .tso-footer { justify-content: center; text-align: center; }
1622        }
1623      `}),n.jsxs("div",{className:"tso-page",children:[n.jsx("header",{className:"tso-header",children:n.jsx(J,{to:"/",className:"tso-brand","aria-label":"Upside home",children:n.jsx(au,{})})}),n.jsx("main",{className:"tso-main",children:n.jsxs("div",{className:"tso-shell",children:[n.jsx("h1",{className:"it-title tso-h1",children:"Grab your Upside tee."}),n.jsx("p",{className:"it-lead tso-lead",children:"Pick a design, choose your size, and tell us where to ship it."}),u==="success"?n.jsxs("section",{className:"tso-card tso-success",role:"status","aria-live":"polite",children:[n.jsx("span",{className:"tso-success-mark","aria-hidden":"true"}),n.jsx("h2",{children:"Order's in. Nice pick."}),n.jsxs("p",{children:["Your Upside tee is on its way.",m?" We’ve got your demo request too — grab a time in the scheduler to lock in your walkthrough, or we’ll reach out to set it up.":" We’ll reach out by phone if we need anything to get it to you."]})]}):n.jsxs(n.Fragment,{children:[n.jsxs("section",{className:"tso-card tso-card-lineup",children:[n.jsxs("div",{className:"tso-row-head",children:[n.jsx("span",{className:"tso-num",children:"1"}),n.jsx("h2",{className:"tso-section-title",children:"The lineup"})]}),n.jsx("p",{className:"tso-section-sub",children:"Three designs. Note the one you want, then pick it by name in the form below."}),n.jsx("div",{className:"tso-lineup",children:vP.map((C,_)=>n.jsxs("figure",{className:"tso-tee",children:[n.jsxs("button",{type:"button",className:"tso-tee-img",onClick:()=>b(C),"aria-label":`Expand ${C.name} tee`,children:[n.jsx("img",{src:C.image,alt:`${C.name} tee, front and back`,loading:"lazy"}),n.jsx("span",{className:"tso-tee-zoom","aria-hidden":"true",children:n.jsxs("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",children:[n.jsx("circle",{cx:"7",cy:"7",r:"5.25",stroke:"currentColor",strokeWidth:"1.5"}),n.jsx("path",{d:"M11 11l3.5 3.5M7 5v4M5 7h4",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round"})]})})]}),n.jsxs("figcaption",{className:"tso-tee-cap",children:[n.jsx("span",{className:"tso-tee-badge","aria-hidden":"true",children:_+1}),n.jsxs("span",{className:"tso-tee-text",children:[n.jsx("span",{className:"tso-tee-name",children:C.name}),n.jsx("span",{className:"tso-tee-note",children:C.note})]})]})]},C.value))})]}),n.jsxs("form",{onSubmit:T,noValidate:!0,children:[n.jsxs("section",{className:"tso-card",id:"tso-order",children:[n.jsxs("div",{className:"tso-row-head",children:[n.jsx("span",{className:"tso-num",children:"2"}),n.jsx("h2",{className:"tso-section-title",children:"Claim yours"})]}),n.jsx("p",{className:"tso-section-sub",children:"Choose your design and size, and tell us where to ship it."}),n.jsxs("div",{className:"tso-field",children:[n.jsx("span",{className:"tso-label",id:"tso-design-label",children:"Choose your design"}),n.jsx("div",{className:"tso-picks",role:"radiogroup","aria-labelledby":"tso-design-label",children:vP.map((C,_)=>{const E=a.tshirt_design===C.value;return n.jsxs("label",{className:`tso-pick${E?" is-selected":""}`,children:[n.jsx("input",{type:"radio",name:"tshirt_design",value:C.value,checked:E,onChange:()=>k("tshirt_design",C.value)}),n.jsx("span",{className:"tso-pick-badge","aria-hidden":"true",children:_+1}),n.jsxs("span",{className:"tso-pick-text",children:[n.jsx("span",{className:"tso-pick-name",children:C.name}),n.jsx("span",{className:"tso-pick-note",children:C.note})]})]},C.value)})}),l.tshirt_design&&n.jsx("p",{className:"tso-error",children:l.tshirt_design})]}),n.jsxs("div",{className:"tso-field",children:[n.jsx("label",{className:"tso-label",htmlFor:"tso-size",children:"Pick your size"}),n.jsxs("select",{id:"tso-size",className:`tso-select${l.tshirt_size?" tso-invalid":""}`,value:a.tshirt_size,onChange:C=>k("tshirt_size",C.target.value),children:[n.jsx("option",{value:"",disabled:!0,children:"Select a size…"}),Bce.map(C=>n.jsx("option",{value:C,children:C},C))]}),l.tshirt_size&&n.jsx("p",{className:"tso-error",children:l.tshirt_size})]}),n.jsx("div",{className:"tso-field",children:n.jsxs("div",{className:"tso-two-col",children:[n.jsxs("div",{className:"tso-field",children:[n.jsx("label",{className:"tso-label",htmlFor:"tso-first",children:"First name"}),n.jsx("input",{id:"tso-first",type:"text",autoComplete:"given-name",className:`tso-input${l.firstname?" tso-invalid":""}`,value:a.firstname,onChange:C=>k("firstname",C.target.value)}),l.firstname&&n.jsx("p",{className:"tso-error",children:l.firstname})]}),n.jsxs("div",{className:"tso-field",children:[n.jsx("label",{className:"tso-label",htmlFor:"tso-last",children:"Last name"}),n.jsx("input",{id:"tso-last",type:"text",autoComplete:"family-name",className:`tso-input${l.lastname?" tso-invalid":""}`,value:a.lastname,onChange:C=>k("lastname",C.target.value)}),l.lastname&&n.jsx("p",{className:"tso-error",children:l.lastname})]})]})}),n.jsxs("div",{className:"tso-field",children:[n.jsx("label",{className:"tso-label",htmlFor:"tso-email",children:"Email"}),n.jsx("input",{id:"tso-email",type:"email",autoComplete:"email",className:`tso-input${l.email?" tso-invalid":""}`,value:a.email,onChange:C=>k("email",C.target.value)}),l.email&&n.jsx("p",{className:"tso-error",children:l.email})]}),n.jsxs("div",{className:"tso-field",children:[n.jsx("label",{className:"tso-label",htmlFor:"tso-phone",children:"Phone number"}),n.jsx("input",{id:"tso-phone",type:"tel",autoComplete:"tel",className:`tso-input${l.phone?" tso-invalid":""}
1623`,value:a.phone,onChange:C=>k("phone",C.target.value)}),l.phone&&n.jsx("p",{className:"tso-error",children:l.phone})]}),n.jsxs("div",{className:"tso-field",children:[n.jsx("label",{className:"tso-label",htmlFor:"tso-address",children:"Shipping address"}),n.jsx("textarea",{id:"tso-address",autoComplete:"street-address",className:`tso-textarea${l.shipping_address?" tso-invalid":""}`,placeholder:"Street, city, state/region, postal code, country",value:a.shipping_address,onChange:C=>k("shipping_address",C.target.value)}),l.shipping_address&&n.jsx("p",{className:"tso-error",children:l.shipping_address})]})]}),n.jsxs("section",{className:"tso-card",children:[n.jsxs("div",{className:"tso-row-head",children:[n.jsx("span",{className:"tso-num",children:"3"}),n.jsx("h2",{className:"tso-section-title",children:"See it in action"})]}),n.jsx("p",{className:"tso-section-sub",children:"While you're here, want to see what Upside actually does?"}),n.jsxs("label",{className:"tso-demo-toggle",htmlFor:"tso-wants-demo",children:[n.jsx("input",{id:"tso-wants-demo",type:"checkbox",className:"tso-demo-check",checked:e,onChange:C=>t(C.target.checked)}),n.jsxs("span",{className:"tso-demo-toggle-text",children:[n.jsx("span",{className:"tso-demo-toggle-title",children:"I'd like to see a demo with Upside"}),n.jsx("span",{className:"tso-demo-toggle-hint",children:"Tell us your company and we'll set up a walkthrough. It goes out with your order when you hit Submit."})]})]}),e&&n.jsxs("div",{className:"tso-demo-panel",children:[n.jsxs("div",{className:"tso-field",children:[n.jsx("label",{className:"tso-label",htmlFor:"tso-company",children:"Company"}),n.jsx("input",{id:"tso-company",type:"text",autoComplete:"organization",className:`tso-input${l.company?" tso-invalid":""}`,value:r.company,onChange:C=>v("company",C.target.value)}),l.company&&n.jsx("p",{className:"tso-error",children:l.company})]}),n.jsxs("div",{className:"tso-field",children:[n.jsxs("label",{className:"tso-label",htmlFor:"tso-message",children:["What is top of mind for you right now? ",n.jsx("span",{className:"tso-optional",children:"(optional)"})]}),n.jsx("textarea",{id:"tso-message",className:"tso-textarea",placeholder:"The one thing you'd want Upside to sort out.",value:r.message,onChange:C=>v("message",C.target.value)})]}),n.jsx("p",{className:"tso-demo-toggle-hint",children:"We'll use the name and email you entered above for your demo request."})]})]}),n.jsxs("section",{className:"tso-card tso-submit-wrap",children:[n.jsx("button",{type:"submit",className:"tso-submit",disabled:A,children:A?"Sending your request…":"Submit request"}),u==="error"&&n.jsx("p",{className:"tso-submit-error",role:"alert",children:"Something went sideways sending your order. Please try again."}),n.jsxs("p",{className:"tso-footnote",children:["By submitting you agree to Upside's"," ",n.jsx(J,{to:"/legal/privacy-policy",children:"Privacy Policy"}),"."]})]})]})]})]})}),n.jsxs("footer",{className:"tso-footer",children:[n.jsxs("span",{className:"tso-footer-copy",children:["© ",new Date().getFullYear()," Upside"]}),n.jsxs("nav",{className:"tso-footer-links","aria-label":"Legal",children:[n.jsx(J,{to:"/legal/privacy-policy",children:"Privacy Policy"}),n.jsx(J,{to:"/legal/terms-of-service",children:"Terms of Service"}),n.jsx(J,{to:"/security",children:"Security"})]})]}),y&&n.jsx("div",{className:"tso-lightbox",role:"dialog","aria-modal":"true","aria-label":`${y.name} tee`,onClick:()=>b(null),children:n.jsxs("div",{className:"tso-lightbox-inner",onClick:C=>C.stopPropagation(),children:[n.jsx("button",{type:"button",className:"tso-lightbox-close",onClick:()=>b(null),"aria-label":"Close",children:"×"}),n.jsx("img",{className:"tso-lightbox-img",src:y.image,alt:`${y.name} tee, front and back`}),n.jsxs("div",{className:"tso-lightbox-cap",children:[n.jsx("span",{className:"tso-tee-name",children:y.name}),n.jsx("span",{className:"tso-tee-note",children:y.note})]})]})})]})]})},I4=[{slug:"the-hand-raise-got-zero-credit-three-times",title:"Running our Pipedash attribution model on our own GTM data.",description:"Three closed-won deal
1623s show why a demo request, a text, and a reconnection can all get 0% attribution credit, and why demand creation comes earlier.",date:"August 26, 2026",topics:["Product","Attribution"],image:"/images/blog/bandwidth-form-zero-highlight-redacted.png",author:"Mada Seghete"},{slug:"how-we-built-pipedash",title:"How We Built Pipedash: An Attribution Engine that Argues with Itself",description:"A technical walkthrough of Pipedash, our agentic B2B attribution engine. Three independent Opus-tier analysts read an entire deal, a consensus judge weighs their reasoning rather than their votes, and two skeptical agents veto anything they can't verify. The output is a zero-sum credit allocation built from evidence instead of time-decay curves — in which demo request forms, and every other buyer response, get exactly 0%.",date:"July 30, 2026",topics:["Product"],image:"/images/blog/pipedash-hero.png"},{slug:"agentic-gtm-is-here-your-data-isnt-ready-for-it",title:"Agentic GTM is here. Your data isn’t ready for it.",description:"For as long as there's been B2B, hiring more humans was the way to scale go-to-market. That age is over. The teams pulling ahead are deploying agents, building internal tools, and running analyses that would have seemed miraculous in 2023, but only if a clean, AI-native data layer sits underneath. Our manifesto on the new age of agentic GTM: why your data isn't ready, the three bosses every established team has to beat, and what winning looks like.",date:"June 30, 2026",topics:["Manifesto"],image:"/images/blog/agentic-gtm-hero.png"},{slug:"how-to-build-the-ultimate-win-back-sales-kit",title:"How to Build the Ultimate Win-Back Sales Kit",description:"Closed-lost deals aren't dead — the follow-ups are. We built custom win-back kits for 100 closed-lost accounts that saw a demo and passed, using Exa, Upside, and the Upside MCP. Here's the exact recipe: surface fresh external signals, contextualize them against clean deal history, answer the objection that lost the deal, arm the rep, and scale it into one filterable view across every account.",date:"June 17, 2026",topics:["How To"],image:"/images/blog/win-back-hero.png"},{slug:"how-to-build-an-email-send-time-optimizer-using-the-upside-mcp",title:"How to Build an Email Send Time Optimizer Using the Upside MCP",description:"Generic send-time advice tells everyone to email Tuesday morning, but your audience has its own rhythms. Here's how we built a Send Time Optimizer with the Upside MCP that reconstructs email chains, normalizes timezones, and maps real engagement to timing, and how you can build one yourself.",date:"June 12, 2026",topics:["How To"],image:"/images/blog/send-time-optimizer-hero.png"},{slug:"8-b2b-attribution-assassins-and-how-to-beat-them-with-agentic-analysis",title:"8 B2B Measurement Saboteurs (and How to Beat Them with Agentic Analysis)",description:"Attribution breaks in familiar ways — missed scans, swapped invites, job changes, and more. We identified eight common breakdowns - and show how forensic, agentic analysis can reconnect the dots and reveal the true buyer journey - so you don't have to.",date:"June 24, 2025",topics:["Best Practices"],image:"/images/blog/attribution-saboteurs-hero.jpg"},{slug:"9-metrics-modern-b2b-teams-use-to-understand-the-real-impact-of-their-campaigns-content-and-channels",title:"9 Metrics Modern B2B Teams Use to Understand the Real Impact of Their Campaigns, Content, and Channels",description:"A breakdown of the nine metrics modern teams use to understand the real, multi-threaded impact behind their campaigns—and finally move past illusory zero-sum attribution models.",date:"November 20, 2025",topics:["Best Practices"],image:"/images/blog/b2b-impact-metrics-hero.png"},{slug:"4-ways-upside-cleans-your-data-out-of-the-box",title:"Four ways Upside cleans your data out of the box",description:"If you don't have a good understanding of what happened, there's no way you can have a good understanding of what worked. That's why Upside starts with cleaning and structuring data. From persona resolution, buying group detection, touchpoint direction, and email chain deconstruction aren't just conveniences, they are the foundation for attribution you can trust. But clean data isn't the end goal. It's the beginning of attribution that actually helps you make better decisions.",date:"August 20, 2025",topics:["Product"],image:"/images/blog/upside-data-cleaning-hero.png"},{slug:"how-ai-is-changing-marketing-attribution",title:"How AI is Changing Marketing Attribution",description:"AI is transforming marketing attribution by moving beyond static, rule-based models to dynamic systems that learn, adapt, and explain what actually drives revenue. This piece explores how AI improves accuracy, handles complex buyer journeys, and gives go-to-market teams clearer signals for where to invest and where to pull back.",date:"January 28, 2026",topics:["Product"],image:"/images/blog/ai-marketing-attribution-hero.png"},{slug:"how-to-finally-measure-the-impact-of-b2b-events",title:"How to Finally Measure the Impact of B2B Events",description:"Events are one of the most powerful marketing tactics in B2B, but their true impact is notoriously hard to prove. This blog post details challenges with B2B event measurement and how Upside helps address them to show the true impact of events.",date:"November 13, 2025",topics:["Best Practices"],image:"/images/blog/b2b-event-attribution-hero.jpg"},{slug:"how-to-identify-which-web-content-is-driving-net-new-pipeline-upsells-and-renewals",title:"How to Identify Which Web Content Is Driving Net-Ne
1623w Pipeline, Upsells, and Renewals",description:"A practical guide to uncovering which web pages actually drive net-new pipeline, upsells, and renewals.",date:"November 17, 2025",topics:["How To","Best Practices"],image:"/images/blog/web-content-attribution-hero.png"},{slug:"how-to-build-a-visual-customer-journey-map-with-existing-gtm-data",title:"How to build a visual customer journey map with existing GTM data",description:"A customer journey map turns scattered GTM data into a clear, chronological story of how a deal came together. By pulling touchpoints from your CRM, marketing automation, sales engagement, and meeting tools into one view, you can reveal the real influencers, key moments, and engagement patterns that move deals forward. Those insights can be leveraged to repeat successful plays and drive more deals.",date:"August 14, 2025",topics:["How To"],image:"/images/blog/customer-journey-map-hero.png"},{slug:"how-to-leverage-utm-tagging-for-better-b2b-attribution",title:"How to leverage UTM tagging for better B2B attribution",description:"Clean, consistent UTM tags are the foundation of accurate B2B attribution. A robust tagging framework, covering source, medium, and campaign, helps eliminate messy data before it hits models and dashboards. When properly implemented and mapped into reporting systems, UTMs turn clicks into insights and link marketing activity directly with pipeline results.",date:"November 13, 2025",topics:["Best Practices"],image:"/images/blog/utm-tagging-hero.png"},{slug:"two-radical-new-solutions-to-b2b-revenue-attribution",title:"One Year In: Two Radical New Solutions to B2B Revenue Attribution",description:"A year ago, we set out to help B2B go-to-market teams make better decisions by building the best multi-touch attribution model in the world. We failed. But that turned out to be a good thing.",date:"May 6, 2025",topics:["Manifesto"],image:"/images/blog/two-radical-attribution-solutions-hero.avif"},{slug:"the-quest-for-b2b-revenue-attribution-and-intelligence",title:"The Quest for B2B Revenue Attribution and Intelligence",description:'Once upon a time, "growth at any cost" was an acceptable strategy for B2B companies. Money was cheap, so teams could drive new revenue simply by spending their way to success.',date:"May 6, 2024",topics:["Manifesto"],image:"/images/weighted-model-upside.png"},{slug:"what-is-forensic-attribution",title:"What is forensic attribution?",description:"Forensic attribution is a new way of doing B2B large opportunity and ABM attribution. Instead of using your existing data and applying models to it, a forensic attribution system pulls every signal from different data sources (your CRM, marketing tools, email tracking or meeting video recording, and so on) and recreates what happened to understand what actually worked.",date:"May 29, 2025",topics:["Product"],image:"/images/blog/forensic-attribution-hero.avif"}],Kce=()=>{const[e,t]=M.useState(""),[a,i]=M.useState("date-desc"),r=M.useMemo(()=>{const l=I4.flatMap(d=>d.topics);return[...new Set(l)].sort()},[]),o=M.useMemo(()=>{let l=[...I4];return e&&(l=l.filter(d=>d.topics.includes(e))),l.sort((d,u)=>{const h=new Date(d.date).getTime(),m=new Date(u.date).getTime();return a==="date-desc"?m-h:h-m}),l},[e,a]);return n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"B2B Revenue Intelligence Blog",description:"Actionable insights and proven practices to help B2B go-to-market leaders build smarter, faster-growing businesses.",canonicalUrl:"https://upside.tech/blog"}),n.jsx(Hr,{eyebrow:"Blog",title:"The Efficiency Edge",description:"Actionable insights and proven practices to help leaders build smarter, faster-growing businesses."}),n.jsx("div",{className:"container",children:n.jsx("div",{className:"content",children:n.jsx("section",{id:"case-studies",className:"section",children:n.jsxs("div",{className:"blog-posts blog-index",children:[n.jsx("div",{className:"collection-filters w-form",children:n.jsxs("form",{className:"collection-filters__form",children:[n.jsxs("div",{className:"collection-filters__wrapper",children:[n.jsxs("div",{className:"select__wrapper",children:[n.jsxs("select",{className:"select w-select",value:a,onChange:l=>i(l.target.value),children:[n.jsx("option",{value:"date-desc",children:"Latest"}),n.jsx("option",{value:"date-asc",children:"Oldest"})]}),n.jsx("img",{loading:"lazy",src:"/images/chevron-down-input-icon.svg",alt:"",className:"select__icon"})]}),n.jsxs("div",{className:"select__wrapper",children:[n.jsxs("select",{className:"select w-select",value:e,onCh
1623ange:l=>t(l.target.value),children:[n.jsx("option",{value:"",children:"All Topics"}),r.map(l=>n.jsx("option",{value:l,children:l},l))]}),n.jsx("img",{loading:"lazy",src:"/images/chevron-down-input-icon.svg",alt:"",className:"select__icon"})]})]}),n.jsx("div",{className:"collection-filters__counter-wrapper",children:n.jsxs("p",{className:"body-s",children:[n.jsx("span",{children:o.length})," blog posts"]})})]})}),n.jsx("div",{className:"w-dyn-list",children:n.jsx("div",{role:"list",className:"blog-posts__list w-dyn-items",children:o.map(l=>n.jsx("div",{role:"listitem",className:"w-dyn-item",children:n.jsxs("div",{className:"article-card",children:[n.jsx(J,{to:`/blog/${l.slug}`,className:"article-card__link-block","aria-label":l.title}),n.jsx("div",{className:"article-card__image-wrapper",children:n.jsx("img",{src:l.image,loading:"lazy",alt:l.title,className:"article-card__image"})}),n.jsxs("div",{className:"article-card__content",children:[n.jsx("div",{className:"article-card__tags",children:l.topics.map(d=>n.jsx("div",{className:"badge",children:d},d))}),n.jsx("div",{className:"article-card__header",children:n.jsx("h2",{className:"truncate-two-lines",children:l.title})}),n.jsx("div",{className:"article-card__meta",children:n.jsx("div",{className:"article-card__date",children:l.date})}),n.jsx("div",{className:"article-card__summary",children:n.jsx("p",{className:"body-s truncate-two-lines",children:l.description})}),n.jsx("div",{className:"article-card__cta-wrapper",children:n.jsx(J,{to:`/blog/${l.slug}`,className:"cta w-button",children:"Read more"})})]})]})},l.slug))})})]})})})})]})};function Xce(e,t){const a=encodeURIComponent(e),i=encodeURIComponent(t),r=encodeURIComponent(`${t} by @upsidegtm`),o=encodeURIComponent(`Check out this blog post from Upside:
1624
1625${t}
1626
1627${e}`);return[{id:"linkedin",label:"LinkedIn",href:`https://www.linkedin.com/sharing/share-offsite/?url=${a}`},{id:"x",label:"X",href:`https://twitter.com/intent/tweet?url=${a}&text=${r}`},{id:"email",label:"Email",href:`mailto:?subject=${i}&body=${o}
1627`}]}function xP({id:e}){const t={width:20,height:20,viewBox:"0 0 24 24",className:"blog-share__icon-svg","aria-hidden":!0},a={...t,className:"blog-share__icon-svg blog-share__icon-svg--stroke"};return e==="linkedin"?n.jsx("svg",{...t,fill:"currentColor",children:n.jsx("path",{d:"M4.703 1C2.117 1 0 3.117 0 5.703v14.594C0 22.883 2.117 25 4.703 25h14.594C21.884 25 24 22.883 24 20.297V5.703C24 3.117 21.883 1 19.297 1H4.703Zm1.183 3.96c1.24 0 2.004.814 2.028 1.885 0 1.046-.787 1.883-2.051 1.883h-.023c-1.217 0-2.003-.837-2.003-1.883 0-1.07.81-1.885 2.05-1.885h.001Zm10.687 5.002c2.385 0 4.173 1.559 4.173 4.909v6.253h-3.625v-5.834c0-1.466-.524-2.466-1.836-2.466-1.001 0-1.598.674-1.86 1.325-.096.233-.12.559-.12.884v6.091H9.631s.048-9.883 0-10.906h3.625v1.544c.482-.743 1.343-1.8 3.267-1.8v.001ZM4.05 10.219H7.674v10.906H4.05V10.219Z"})}):e==="x"?n.jsx("svg",{...t,fill:"currentColor",children:n.jsx("path",{d:"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24h-6.66l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231 5.45-6.231zm-1.161 17.52h1.833L7.084 4.126H5.117l11.966 15.644z"})}):e==="email"?n.jsxs("svg",{...a,fill:"none",children:[n.jsx("path",{d:"M3.75 5.25h16.5A1.75 1.75 0 0 1 22 7v10a1.75 1.75 0 0 1-1.75 1.75H3.75A1.75 1.75 0 0 1 2 17V7a1.75 1.75 0 0 1 1.75-1.75Z",stroke:"currentColor",strokeWidth:"1.85",strokeLinejoin:"round"}),n.jsx("path",{d:"m3 7.25 9 6.75 9-6.75",stroke:"currentColor",strokeWidth:"1.85",strokeLinecap:"round",strokeLinejoin:"round"})]}):e==="check"?n.jsx("svg",{...a,fill:"none",children:n.jsx("path",{d:"M5 12.5 9.5 17 19 7.5",stroke:"currentColor",strokeWidth:"1.85",strokeLinecap:"round",strokeLinejoin:"round"})}):n.jsx("svg",{...a,fill:"none",children:n.jsx("path",{d:"M10.5 13.5a4.25 4.25 0 0 0 5.9 0l2.6-2.6a4.25 4.25 0 0 0-6-6l-1.4 1.4M13.5 10.5a4.25 4.25 0 0 0-5.9 0l-2.6 2.6a4.25 4.25 0 0 0 6 6l1.4-1.4",stroke:"currentColor",strokeWidth:"1.85",strokeLinecap:"round",strokeLinejoin:"round"})})}function Hj({url:e,title:t,className:a=""}){const[i,r]=M.useState(!1),o=Xce(e,t),l=M.useCallback(async()=>{try{await navigator.clipboard.writeText(e),r(!0),window.setTimeout(()=>r(!1),2e3)}catch{r(!1)}},[e]);return n.jsxs("div",{className:`blog-share${a?` ${a}`:""}`,children:[n.jsx("p",{className:"blog-share__heading",children:"Share"}),n.jsxs("ul",{className:"blog-share__list",children:[o.map(d=>n.jsx("li",{children:n.jsx("a",{href:d.href,className:"blog-share__icon-btn",target:d.id==="email"?void 0:"_blank",rel:d.id==="email"?void 0:"noopener noreferrer","aria-label":`Share on ${d.label}`,children:n.jsx(xP,{id:d.id})})},d.id)),n.jsx("li",{children:n.jsx("button",{type:"button",className:`blog-share__icon-btn${i?" is-copied":""}`,onClick:l,"aria-label":i?"Link copied":"Copy link to clipboard",title:i?"Copied!":"Copy link",children:n.jsx(xP,{id:i?"check":"copy"})})})]})]})}function Yj({items:e,activeId:t,onNavigate:a}){return n.jsx("ul",{className:"blog-toc__list",children:e.map(i=>n.jsxs("li",{className:"blog-toc__item",children:[n.jsx("a",{href:`#${i.id}`,className:`blog-toc__link${t===i.id?" is-active":""}`,onClick:r=>{r.preventDefault(),a(i.id)},children:i.label}),i.children&&i.children.length>0&&n.jsx("ul",{className:"blog-toc__list blog-toc__list--nested",children:i.children.map(r=>n.jsx("li",{className:"blog-toc__item",children:n.jsx("a",{href:`#${r.id}`,className:`blog-toc__link blog-toc__link--nested${t===r.id?" is-active":""}`,onClick:o=>{o.preventDefault(),a(r.id)},children:r.label})},r.id))})]},i.id))})}function wP({items:e,activeId:t,variant:a,onNavigate:i,embedded:r=!1}){return e.length===0?null:a==="mobile"?r?n.jsx(Yj,{items:e,activeId:t,onNavigate:i}):n.jsxs("details",{className:"blog-toc blog-toc--mobile",children:[n.jsx("summary",{className:"blog-toc__summary",children:"On this page"}),n.jsx("nav",{className:"blog-toc__nav","aria-label":"On this page",children:n.jsx(Yj,{items:e,activeId:t,onNavigate:i})})]}):n.jsxs("nav",{className:"blog-toc blog-toc--sidebar","aria-label":"On this page",children:[n.jsx("p",{className:"blog-toc__heading",children:"On this page"}),n.jsx(Yj,{items:e,activeId:t,onNavigate:i})]})}function kP({variant:e,url:t,title:a,tocItems:i,showToc:r,activeId:o,onNavigate:l}){return e==="mobile"?r?n.jsxs("details",{className:"blog-toc blog-toc--mobile",children:[n.jsx("summary",{className:"blog-toc__summary",children:"On this page"}),n.jsxs("div",{className:"blog-toc__nav",children:[n.jsx("nav",{"aria-label":"On this page",children:n.jsx(wP,{variant:"mobile",items:i,activeId:o,onNavigate:l,embedded:!0})}),n.jsx(Hj,{url:t,title:a,className:"blog-share--in-mobile-panel"})]})]}):n.jsx("div",{className:"blog-post-sidebar blog-post-sidebar--mobile",children:n.jsx(Hj,{url:t,title:a,className:"blog-share--mobile-card"})}):n.jsxs("aside",{className:"blog-post-sidebar blog-post-sidebar--desktop","aria-label":"Article tools",children:[r&&n.jsx(wP,{variant:"sidebar",items:i,activeId:o,onNavigate:l}),n.jsx(Hj,{url:t,title:a,className:r?void 0:"blog-share--solo"})]})}function MG(){return n.jsx("section",{className:"trust-data-cta",style:{padding:"clamp(4rem, 8vw, 6rem) clamp(1.25rem, 5vw, 4rem)",background:"#fafafa",textAlign:"center"},children:n.jsxs("div",{style:{maxWidth:"760px",margin:"0 auto"},children:[n.jsx("h2",{className:"it-title",style:{margin:"0 0 1rem 0",color:"#1b1f1c"},children:"Build your GTM on data you can trust."}),n.jsx("p",{className:"it-lead",style:{color:"#5f6563",margin:"0 auto 2rem",maxWidth:"620px"},children:"Book a demo and see what your team can build, automate, and finally answer once your GTM data is something you trust."}),n.jsxs("div",{style:{display:"flex",gap:"0.75rem",justifyContent:"center",flexWrap:"wrap"},children:[n.jsx(J,{to:Wt,className:"cta w-button",children:"Book a demo"}),n.jsx(J,{to:"/platform",className:"cta cc-secondary w-button",children:"Explore the platform →"})]})]})})}const Qce=3,Zce=6,Jce=4,EG=96;function ede(e){return e.replace(/<[^>]+>/g,"").replace(/[\u200B-\u200D\uFEFF]/g,"").normalize("NFD").replace(new RegExp("\\p{M}","gu"),"").toLowerCase().replace(/[^\w\s-]/g,"").trim().replace(/\s+/g,"-")}function zM(e){return(e.textContent||"").replace(/[\u200B-\u200D\uFEFF]/g,"").replace(/\s+/g," ").trim()}function tde(e){return e.tagName==="H1"||e.closest("blockquote")?!0:zM(e).length===0}
1627function nde(e){const t=new Set;return typeof document>"u"||document.querySelectorAll("[id]").forEach(a=>{var r;if(e&&e.contains(a))return;const i=(r=a.id)==null?void 0:r.trim();i&&t.add(i)}),t}function ade(e,t){var l;const a=(l=e.id)==null?void 0:l.trim();if(a)return t.add(a),a;const i=ede(zM(e))||"section";let r=i,o=2;for(;t.has(r);)r=`${i}-${o}`,o+=1;return e.id=r,t.add(r),r}function ide(e){return e.reduce((t,a)=>{var i;return t+1+(((i=a.children)==null?void 0:i.length)??0)},0)}function rde(e){var a;const t=[];for(const i of e){if(i.level===2){t.push({id:i.id,label:i.label,level:2,children:[]});continue}const r=t[t.length-1];(r==null?void 0:r.level)===2&&r.children?r.children.push({id:i.id,label:i.label,level:3}):t.push({id:i.id,label:i.label,level:3})}for(const i of t)((a=i.children)==null?void 0:a.length)===0&&delete i.children;return t}function ode(e){if(typeof document>"u"||!e)return{html:e,items:[]};const t=document.createElement("div");t.innerHTML=e;const a=document.querySelector(".article-content__rich-text"),i=nde(a),r=sde(t,i);return{html:t.innerHTML,items:r}}function sde(e,t){const a=e.querySelectorAll("h2, h3"),i=[];a.forEach(u=>{if(tde(u))return;const h=u.tagName==="H2"?2:3,m=ade(u,t);i.push({id:m,label:zM(u),level:h})});const r=i.filter(u=>u.level===2).length,d=i.filter(u=>u.level===3).length>=Zce&&r>=Jce?i.filter(u=>u.level===2).map(({id:u,label:h,level:m})=>({id:u,label:h,level:m})):rde(i);return ide(d)<Qce?[]:d}function jP(e){const t=[];for(const a of e)t.push(a.id),a.children&&t.push(...a.children.map(i=>i.id));return t}function lde(){return typeof window<"u"&&window.matchMedia("(prefers-reduced-motion: reduce)").matches}let Vj=0;function Kj(e){return Math.max(0,window.scrollY+e.getBoundingClientRect().top-EG)}function SP(e){const t=++Vj,a=`${window.location.pathname}${window.location.search}#${e}`;window.history.replaceState(null,"",a);const i=()=>document.getElementById(e),r=i();if(!r)return;const o=Kj(r);if(Math.abs(o-window.scrollY)<=8)return;if(lde()){window.scrollTo({top:o,behavior:"auto"});return}const l=window.scrollY,d=performance.now(),u=700,h=y=>y<.5?2*y*y:1-Math.pow(-2*y+2,2)/2,m=()=>{Vj+=1};window.addEventListener("wheel",m,{once:!0,passive:!0}),window.addEventListener("touchmove",m,{once:!0,passive:!0});const f=y=>{const b=i();if(!b||t!==Vj){window.removeEventListener("wheel",m),window.removeEventListener("touchmove",m);return}const x=Kj(b),k=Math.min(1,(y-d)/u);if(window.scrollTo({top:l+(x-l)*h(k),behavior:"auto"}),k<1){window.requestAnimationFrame(f);return}window.scrollTo({top:Kj(b),behavior:"auto"}),window.removeEventListener("wheel",m),window.removeEventListener("touchmove",m)};window.requestAnimationFrame(f)}function cde(e){const t=document.querySelector(".blog-post-sidebar--desktop");if(!t)return;const a=t.querySelector(`a[href="#${CSS.escape(e)}"]`);if(!a)return;const i=t.getBoundingClientRect(),r=a.getBoundingClientRect(),o=8;if(r.top>=i.top+o&&r.bottom<=i.bottom-o)return;const l=t.scrollTop+(r.top-i.top)-t.clientHeight/2+r.height/2;typeof t.scrollTo=="function"?t.scrollTo({top:Math.max(0,l)}):t.scrollTop=Math.max(0,l)}function dde(e){const[t,a]=M.useState(e??""),[i,r]=M.useState([]),[o,l]=M.useState(null),[d,u]=M.useState(e);d!==e&&(u(e),a(e??""),r([]),l(null)),M.useEffect(()=>{if(!e){a(""),r([]),l(null);return}const m=ode(e);a(m.html),r(m.items);const f=window.location.hash.replace(/^#/,""),y=jP(m.items);let b;return f&&y.includes(f)?(l(f),b=window.setTimeout(()=>SP(f),50)):m.items.length>0&&l(m.items[0].id),()=>{b!==void 0&&window.clearTimeout(b)}},[e]),M.useEffect(()=>{if(i.length===0){l(null);return}const m=jP(i),f=window.location.hash.replace(/^#/,""),y=!!(f&&m.includes(f)),b=()=>{let x=m[0];for(const k of m){const v=document.getElementById(k);if(v)if(v.getBoundingClientRect().top<=EG+16)x=k;else break}l(x)};return y||b(),window.addEventListener("scroll",b,{passive:!0}),window.addEventListener("resize",b,{passive:!0}),()=>{window.removeEventListener("scroll",b),window.removeEventListener("resize",b)}},[i]),M.useEffect(()=>{o&&cde(o)},[o]);const h=M.useCallback(m=>{l(m),window.requestAnimationFrame(()=>SP(m))},[]);return{items:i,html:t,activeId:o,scrollToHeading:h}}const ude={"the-hand-raise-got-zero-credit-three-times":`<p><em>What three closed-won analyses reveal about demand capture and demand creation.</em></p>
1628<p>
1628Most B2B attribution systems give too much credit to the hand-raise.</p>
1629<p>Forms, demo requests, and inbound messages are clean, time-stamped events. The activities that created buyer preference often are not: an article forwarded internally, prior product experience, years of trust, or the arrival of a real buying window.</p>
1630<p>When attribution starts with structured touchpoints, it rewards what the system can observe rather than what changed the buyer's mind.</p>
1631<p>We saw this when we ran <a href="/platform/pipedash">Pipedash</a> across three recent closed-won deals from our own pipeline. In every deal, the clearest hand-raise received <strong>0% credit</strong>:</p>
1632<ul><li>A demo request form</li><li>A text saying "we need Upside"</li><li>A buyer proactively reconnecting</li></ul>
1633<p>These events still mattered. They were valuable buying signals. But they captured demand that earlier activities had created.</p>
1634<p>That distinction changes the action. If a form gets credit for demand created by content, the team optimizes the form. If the content gets credit, the team can invest in what actually created buyer readiness.</p>
1635<h2>Why attribution over-credits visible events</h2>
1636<p>Traditional models distribute credit among the events they can see. The weakness is not the arithmetic. It is the evidence set.</p>
1637<p>Much of the B2B journey lives outside campaign fields, inside calls, emails, product history, internal forwarding, peer conversations, and relationships that carry across companies.</p>
1638<p>A useful analysis distinguishes among the <strong>source</strong> that set the journey in motion, the <strong>influences</strong> that built trust or conviction, and the <strong>response</strong> that revealed the buyer was ready. A response should not receive explanatory credit simply because it has the cleanest timestamp.</p>
1639<h2>How we analyzed our own deals</h2>
1640<p>Upside reconstructs the account journey across CRM, marketing, email, calendar, and call data. Pipedash uses that timeline to evaluate what worked and why.</p>
1641<p>We built a small miniapp inside Upside using our live Pipedash results. It removed deal values while preserving the percentage allocation, timeline, and evidence behind each decision.</p>
1642<p>Pipedash separates <strong>tracked</strong> activities already present in GTM systems, <strong>extracted</strong> evidence found in calls and emails, and <strong>inferred</strong> influences that mattered but could not be tied honestly to one event. Every deal adds up to 100%, without manufacturing precision the evidence cannot support.</p>
1643<h2>Deal one: the form recorded demand; it did not create it</h2>
1644<p>A piece of thought leadership received <strong>34%</strong> of the credit. Internal forwarding received <strong>17%</strong>, newsletter distribution <strong>10%</strong>, and an offline peer recommendation <strong>2%</strong>.</p>
1645<p>The demo request form received <strong>0%</strong>.</p>
1646<p>A conventional report would likely classify this as an inbound conversion and make the form the hero. The reconstructed journey showed that content created interest, distribution extended its reach, and internal and peer validation built conviction.</p>
1647<p>The form told the team the buyer was ready. It did not explain why.</p>
1648<figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/bandwidth-form-zero-highlight-redacted.png" width="auto" height="auto" alt="Attribution analysis where the web form is labeled as a hand-raise response with 0% credit, while earlier sources and inferred influences receive the allocation." loading="lazy" /></div><figcaption>The web form is labeled as a hand-raise response with 0% credit. Earlier sources and influences receive the allocation.</figcaption></figure>
1649<h2>Deal two: a new opportunity was not a new journey</h2>
1650<p>Internal championing received <strong>47%</strong>, the pre-existing relationship <strong>28%</strong>, and the discovery call <strong>13%</strong>.</p>
1651<p>The buyer then sent a text saying "we need Upside." It received <strong>0%</strong>.</p>
1652<p>The message was a clear hand-raise, but the conviction came from prior product experience and years of trust. That history moved with the champion into a new role.</p>
1653<p>The CRM saw a new opportunity. The buyer did not experience a new journey.</p>
1654<figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/springbrook-text-zero-highlight-redacted.png" width="auto" height="auto" alt="Attribution analysis where a text to Mada is labeled as a hand-raise response with 0% credit, while internal 
1654championing, a pre-existing relationship, and inferred influences receive credit." loading="lazy" /></div><figcaption>The text to Mada is labeled as a hand-raise response with 0% credit. Internal championing, a pre-existing relationship, and inferred influences receive credit.</figcaption></figure>
1655<h2>Deal three: uncertainty was part of the answer</h2>
1656<p>Prior product experience received <strong>22%</strong>, relationship cultivation <strong>10%</strong>, and a LinkedIn post that brought Upside back to mind <strong>5%</strong>.</p>
1657<p>The buyer's proactive reconnection received <strong>0%</strong>. The largest category was <strong>63% inferred</strong>.</p>
1658<p>That inferred share included timing, organizational readiness, and influence the evidence could not resolve precisely. Forcing it into the visible activities would have produced a cleaner answer, but a less honest one.</p>
1659<p>An inferred pool is a boundary on the claim. It shows where specific evidence ends and uncertainty begins.</p>
1660<figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/exa-hand-raise-zero-highlight-redacted.png" width="auto" height="auto" alt="Attribution analysis where a reconnection is labeled as a hand-raise response with 0% credit, while founder relationships and inferred influences account for the allocation." loading="lazy" /></div><figcaption>The reconnection is labeled as a hand-raise response with 0% credit. Founder relationships and inferred influences account for the allocation.</figcaption></figure>
1661<h2>What this changes</h2>
1662<p>Attribution should separate demand capture from demand creation, include unstructured and cross-cycle evidence, and preserve uncertainty instead of assigning every point of credit with false confidence.</p>
1663<p>For us, the results support investing in thought leadership worth forwarding, the people and channels that help ideas travel, better tools for internal champions, and long-term product trust.</p>
1664<p>Three deals show a pattern, not a statistical conclusion. Attribution is also not incrementality. Attribution reconstructs an observed journey; incrementality estimates what would have happened without a program, usually through experiments or a credible counterfactual.</p>
1665<p>Pipedash gives teams a more complete and defensible account of what happened in complex B2B deals. It does not turn post-hoc evidence into a causal experiment.</p>
1666<p>The wrong question is:</p>
1667<p><strong>Which tracked activity sourced this deal?</strong></p>
1668<p>The better question is:</p>
1669<p><strong>What evidence explains why the buyer became ready, and which motions should we repeat?</strong></p>
1670<p>If you want to see what Pipedash finds in your own closed deals, <a href="/request-demo">book a demo</a>.</p>`,"how-we-built-pipedash":'<p id="">Everyone has a love/hate relationship with attribution. Mostly hate. I was the CMO of Branch and I built a multi-touch model there that was directionally useful, not truly right. It over-credited what was easy to measure (late-stage clicks, form fills and email) and under-credited what actually created the deal (content, referrals, events, the dark funnel). For the past two years at Upside we&rsquo;ve been building the <a href="/platform/data-foundation">data layer</a> to fix that, and a few months ago Alex Bauer (Branch early employee, now my co-founder at Upside) built something on top of it that I think is truly new: an attribution engine that runs a panel of independent LLM analysts on every deal, argues with itself, and produces a zero-sum credit allocation where every dollar is accounted for.</p><p id="">This post is the technical overview of how it works. The part that most marketers will be surprised by, but eventually agree with: <strong>demo request forms (and all form fills and customer actions) get exactly 0% credit.</strong> I&rsquo;ll get to why.</p><hr><h2 id="">Why B2B attribution was never actually solved</h2><p id="">One thing I have learned while working on <a href="/use-cases/revenue-attribution">attribution</a> at Upside and at Branch is that there is no attribution model that can be applied to every problem. The tagline &ldquo;all models are wrong, but some are useful&rdquo; applies to attribution models, and most of what this article explores is the concept of <strong>applying a zero-sum credit allocation to the activities that led to sourcing a complex B2B deal.</strong></p><p id="">The market currently agrees that there is no accurate model to solve this and instead uses time-based heuristics: first-touch, last-touch, U-shape, W
1670-shape. These are just weighting curves over timestamps. The first or last touchpoint might not matter at all, but the curve doesn&rsquo;t know that, because the curve doesn&rsquo;t read the emails.</p><p id="">Our thesis is that finding a more accurate B2B attribution model failed for two reasons, and neither of them is &ldquo;attribution is conceptually impossible&rdquo;:</p><ul role="list"><li><strong>The data was never complete enough.</strong> A huge fraction of what creates pipeline (a coffee meeting, a peer referral, someone seeing your billboard) never becomes a CRM record.</li><li><strong>B2B has the worst possible shape for statistical modeling.</strong> Thousands of touchpoints per deal, and a limited number of deals. You cannot fit a credible causal model on 40 deals with 2,000 touchpoints each; there is not enough signal to get a statistically accurate causality model. Some companies like Paramark are tackling this problem, but they only do it for actions that have significant volume and distinct touchpoints, like ads, not the whole deal.</li></ul><h2 id="">Prerequisite: 24 months of unglamorous data work</h2><p id="">The first version of an attribution model was a more complex weighted model &mdash; give weights to all the touchpoints involved based on rules: emails take less effort and should get less weight than webinars.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 47.0rem"><div><img src="/images/blog/pipedash-weighted-model.png" width="auto" height="auto" alt="A spreadsheet of the early rules-based weighted model, with touchpoints classified across five levels (for example Sales/SDR/Partnerships &rarr; Meeting &rarr; In Person) and each assigned a hand-tuned weighting, from 45 for an in-person meeting down to 0.0001 for an outbound email." loading="lazy"/></div></figure><p id="">To know if this kind of model was right we decided to manually look at hundreds of complex customer deals ($1M+) and understand what actually drove them. We found two things:</p><ul role="list"><li>There were many touchpoints that were mostly irrelevant &mdash; many marketing and sales emails, sometimes other marketing touchpoints that never led to any real engagement.</li><li>The real story was sometimes found inside unstructured data: email forwards that were never logged, SFDC call notes, call transcripts. But finding it felt like forensic digging &mdash; sometimes two of us would look at the same deal and only one would find a buried relevant touchpoint. Someone was referred by an existing customer or a partner and mentioned it on a call, but they showed up as a direct website visit. Someone <a href="/use-cases/event-field-marketing">attended an event</a> and asked for a demo after but never registered, so the demo form was getting all the credit.</li></ul><p id="">In most cases the real story of the deal was completely different from what an attribution model showed, because any model would <em>only look at structured data</em>.</p><p id="">So before any of the interesting agent stuff, we spent about two years building the boring part: pulling CRM, email, calendar, call transcripts, and web activity into one place, then healing it. Identity resolution (the same person with two emails across two systems becomes one person), buying group detection, activity deduplication across systems, and extracting touchpoints that only exist inside unstructured text. The output is an account-level timeline that is the cleanest, most complete version of &ldquo;what happened&rdquo; we can reconstruct.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 47.0rem"><div><img src="/images/blog/pipedash-account-explorer.png" width="auto" height="auto" alt="Account Explorer: the audit console view of a deal timeline, showing every touchpoint reconstructed across CRM, email, calendar, and call transcripts." loading="lazy"/></div></figure><p id="">That gets you a great <a href="/platform/dashboard">audit console</a> but does not tell you what <em>worked</em>. Some of our customers&rsquo; deals run 18+ months with thousands and even tens of thousands of touchpoints. Knowing everything that happened just makes the credit question harder.</p><h2 id="">The core idea: attribution as evidence reasoning, not curve fitting</h2><p id="">Alex&rsquo;s insight was that we already had an <a href="/platform/mcp">intelligence layer that agents use to query this data</a>, and now we could use AI to replicate the human logic we did in the early days. So instead of fitting a model, what if we made AI agents do what a smart human analyst does: read the whole deal, reason about causality, and defend a credit allocation with citations?</p><p id="">That required building a real domain theory first, because &ldquo;just ask the LLM&rdquo; produces vibes, not attribution. The theory lives in two prompt documents every agent reads: a commander&rsquo;s intent (what we&rsquo;re building, for whom, and the governing principles) and structural rules (the mechanics). Our main concepts:</p><h3 id="">Bids, responses, and cobids</h3><p id="">Every discrete action on a deal timeline is one of three things:</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 47.0rem"><div><img src="/images/blog/pipedash-bid-response-cobid.png" width="auto" height="auto" alt="Diagram of the three types of actions on a deal timeline: a bid from the selling org to the buyer, a response from the buyer back to the selling org, and a cobid from a third party to the buyer." loading="lazy"/></div></figure><ul role="list"><li><strong>Bid</strong>: selling org &rarr; buyer. Someone on your team instantiated it. Sent the email, organized the meeting, wrote the blog post, hosted the event.</li><li><strong>Response</strong>: buyer &rarr; selling org. A form fill, an email reply, meeting attendance.</li><li><strong>Cobid</strong>: third party &rarr; buyer, about you. A peer referral, an advisor intro, a press mention, a search ranking, a ChatGPT recommendation. You didn&rsquo;t orchestrate it (if you did, it&rsquo;s a bid).</li></ul><p id="">The rule that everything else is based on, which can be quite controversial: <strong>credit belongs to whoever instantiated the thing, not to the buyer&rsquo;s observable reaction to it.</strong> Responses always carry 0% credit. They are evidence that something worked, not the thing that worked.</p><p id="">This is why the demo request gets zero. From the buyer&rsquo;s perspective, the demo request form is the annoying thing they have to get through to talk to someone about buying. It did n
1670othing to convince them. If anything it was friction. Instead, everything that led them to be convinced enough to fill it out is what deserves the credit. Most attribution models we&rsquo;ve seen, including the one I built at Branch, hand form fills 20% of the deal. Then leadership reads the report and concludes the growth strategy is &ldquo;more forms.&rdquo;</p><p id="">And if we can&rsquo;t see anything before the demo request? What happened after doesn&rsquo;t get more credit &mdash; instead the <strong>pool</strong> of circumstantial influence gets the credit, more on that below.</p><p id="">The 0% rule is also a structural constraint, not just philosophy: in our classification hierarchy, bids roll up through the selling org branch (team &rarr; person &rarr; channel &rarr; campaign &rarr; engagement) and cobids through the third-party branch (entity type &rarr; actor). A response with non-zero credit belongs to neither branch and shows up as &ldquo;Unassigned&rdquo; in every rollup. Making responses 0% keeps the whole reporting tree zero-sum and aggregatable.</p><h3 id="">Direct, extracted, inferred</h3><p id="">Touchpoints come in three evidence classes:</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 47.0rem"><div><img src="/images/blog/pipedash-direct-extracted-inferred.png" width="auto" height="auto" alt="Diagram of the three evidence classes for influences: direct (a CRM record exists), extracted (citable evidence in other records), and inferred (existence strongly implied by context)." loading="lazy"/></div></figure><ul role="list"><li><strong>Direct</strong>: a CRM record exists. Deterministic.</li><li><strong>Extracted</strong>: no CRM record, but citable evidence in other records. &ldquo;Great meeting you for coffee yesterday&rdquo; in an email thread means a meeting happened that nobody logged. A customer saying &ldquo;I&rsquo;ve been seeing your billboards&rdquo; on a call means the billboard mattered. These get held to the same quality bar as tracked touchpoints; they simply weren&rsquo;t tracked.</li><li><strong>Inferred</strong>: no direct evidence, but existence strongly implied by context. A cold inbound from a C-level exec implies brand awareness got built somewhere.</li></ul><h3 id="">The pool: uncertainty as a first-class output</h3><p id="">Direct and extracted touchpoints each get a specific credit percentage. The remainder goes into a <strong>pool</strong> of circumstantial influence, broken into named, explicitly probabilistic subdivisions (organizational readiness, internal champion relay, brand awareness, and so on). The pool is not a hedge, but a specific claim about invisible influence, and its size is computed from signal coverage:</p><ul role="list"><li>If most tracked activity is inbound with few outbound actions, the outbound bids must be happening somewhere invisible. Bigger pool.</li><li>A 6-month gap with zero activity followed by immediate re-engagement means something sustained the relationship through the gap. Bigger pool.</li><li>25 touchpoints over 14 months with a coherent story from first engagement to hand-raise. Small pool.</li></ul><p id="">A deal with a 10% pool has great CRM coverage. A deal with a 65% pool is telling you that most of your pipeline creation is invisible to your systems, which is itself one of the most useful things a CMO can learn.</p><h2 id="">The architecture: jury, judge, and two skeptics</h2><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 47.0rem"><div><img src="/images/blog/pipedash-pipeline-architecture.png" width="auto" height="auto" alt="The full Pipedash pipeline: an orchestrator dispatches three independent analyst agents, whose outputs go to a consensus judge, then through enrichment and canonicalization agents to produce the final report." loading="lazy"/></div></figure><p id="">A run starts with &ldquo;run attribution on the Acme deal.&rdquo; An orchestrator dispatches <strong>three independent analyst agents</strong>. Each is an Opus-tier model with the same CRM query tools and the same instructions, running up to an hour. They are not assigned different angles on purpose. The point is that three equally capable analysts looking at the same messy deal will not reach identical conclusions, same as three skilled humans wouldn&rsquo;t. Each one&rsquo;s primary obligation is traceability: every claim needs citations (record IDs, transcript quotes, email references) a downstream agent can verify.</p><p id="">Their outputs go to a <strong>consensus judge</strong>. The judge weighs the reasoning, not the votes. A year ago Alex and I were doing this manually, disagreeing about deals and arguing it out, and the judge behaves the way 
1670we did: where the runs agree, follow. Where they disagree, evaluate <em>why</em>. A minority run that noticed evidence the others missed can override the majority, but overriding requires explicit reasoning. We deliberately rejected majority vote and median-of-three, because the entire value of the system is contextual reasoning, and mechanical aggregation throws that away. When the spread is too wide to adjudicate, the judge escalates: 3 analysts &rarr; 5 &rarr; 7.</p><p id="">(Why start at three? Cost. Each analyst is an expensive model running up to an hour. On a straightforward deal, five analysts agree the same way three do, just slower and pricier.)</p><p id="">Then two more agents that exist mostly to be skeptical:</p><ul role="list"><li><strong>Enrichment</strong> attaches full CRM data to every touchpoint in the consensus. Its instruction is to over-query rather than under-query. It also holds veto power: if the consensus contains a citation to a record that doesn&rsquo;t exist, it rejects the whole deal back to re-analysis. This is our hallucination firewall.</li><li><strong>Canonicalization</strong> maps every touchpoint onto a per-customer classification tree and influence taxonomy, so results aggregate across deals. Its bar for every dimension value is what we call the rollup test: &ldquo;would a GTM leader reading a report grouped by this dimension find this value useful and truthful?&rdquo; It has the same veto power.</li></ul><p id="">One prompt-design principle runs through all of them, straight from the structural rules doc: <strong>exhaust before escaping.</strong> Every agent has fallbacks (a classification path can stop at team level, a source can be &ldquo;unknown&rdquo;) but using one requires documenting what you tried first. A short path means you looked everywhere and truly could not resolve deeper, not that it was hard and you moved on. Agent time is cheap; a misleading value in a CMO&rsquo;s report is not. Relatedly, we made classification paths variable-depth with explicit null gaps, because &ldquo;we know the team and channel but not the person&rdquo; is a more trustworthy statement than a fabricated person name, and downstream consumers can see exactly where knowledge stops.</p><h2 id="">What comes out the other end</h2><p id="">Per deal, two outputs: a zero-sum multi-touch allocation across all identified influences, and an opportunity source (the system distinguishes the <em>hand-raise</em>, the buyer&rsquo;s decision moment, from the <em>source</em>, the upstream event whose removal would have broken the causal chain). Here&rsquo;s a real (anonymized) deal:</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 47.0rem"><div><img src="/images/blog/pipedash-deal-timeline.png" width="auto" height="auto" alt="An anonymized deal timeline with credit amounts assigned to each touchpoint, including the RFP email flagged as the hand-raise with $0 credit." loading="lazy"/></div></figure><p id="">Note the RFP email flagged HAND-RAISE with $0 credit, while the AE&rsquo;s relationship maintenance during dormancy, the SDR&rsquo;s 12-month outbound sequence, and the webinar carry the dollars. And every touchpoint, including the $0 ones, carries a reasoning trace exposed in the UI, so when someone asks &ldquo;why did the chatbot get nothing but the chatbot <em>campaign</em> get credit,&rdquo; the answer is right there.</p><p id="">The causal chain reads like a <a href="/use-cases/win-loss-intelligence">deal post-mortem</a> written by someone with perfect memory: persistent SDR outreach &rarr; webinar attendance &rarr; post-webinar follow-up &rarr; discovery and demos &rarr; budget dormancy &rarr; relationship maintenance &rarr; buyer re-initiates RFP. Then everything <a href="/use-cases/campaign-intelligence">rolls up across the portfolio</a> by team, channel, campaign, and salesperson, which is where it starts looking like a normal attribution dashboard, except the numbers underneath are built from evidence instead of curve positions.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 47.0rem"><div><img src="/images/blog/pipedash-channel-rollup.png" width="auto" height="auto" alt="Portfolio-level rollup of attributed revenue by channel across all analyzed deal
1670s." loading="lazy"/></div></figure><p id="">For the times when leadership does want the ONE thing that got the deal, our model also allows you to see the one activity that got this deal moving, and run aggregate reporting using that model as well.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 47.0rem"><div><img src="/images/blog/pipedash-causal-chain.png" width="auto" height="auto" alt="Single-touch opportunity source example, showing the redacted causal chain from the upstream sourcing event through to the buyer&rsquo;s hand-raise." loading="lazy"/></div></figure><p id="">The interesting part is that this approach finds sources that were thought impossible to detect: &ldquo;there is no way your model can tell this deal came through an alumni network.&rdquo; It could. Someone had mentioned it on a call, the analyst extracted it, and it survived the judge.</p><h2 id="">This is not the only model</h2><p id="">While we believe this approach outputs the most accurate results in zero-sum B2B attribution, we also know it has its limitations. This is one way to approach attribution powered by a clean and unified data layer, but the possibilities in <a href="/platform/miniapps">what you can build to measure</a> are endless. Examples of other types of measurement our customers built on top of Upside data can be found in our <a href="/resources/miniapp-examples">miniapp library</a>.</p><h2 id="">Limitations</h2><ul role="list"><li><strong>It&rsquo;s expensive and slow.</strong> Three to seven Opus-tier agents at up to an hour each, per deal. This works because B2B deal counts are small (the same fact that killed statistical models makes agent reasoning affordable). If you have 50,000 small deals a quarter, this architecture is not for you.</li><li><strong>No immediate signals.</strong> This is the type of model you run once the deal is closed to help you understand where to invest, not something that gives you short-term signal on whether a campaign or tactic is working. Metrics like influence or number of opportunities created post engagement are better measurements for that type of attribution.</li><li><strong>It needs a clean data layer.</strong> Two years of identity resolution and extraction work is doing a lot of lifting here. Pointed at a raw CRM export, the analyst might struggle to make sense of duplicate identities, accounts, and the rest.</li><li><strong>The full reasoning is extensive.</strong> Each touchpoint&rsquo;s trace is exposed in the UI, but the complete analysis runs many pages and nobody consuming a marketing report wants that. We&rsquo;re still figuring out the right way to surface it.</li></ul><p id="">We packaged the whole orchestration layer as a product called <a href="/platform/pipedash">Pipedash</a>, and the underlying <a href="/platform/mcp">data layer is queryable</a> if you&rsquo;d rather build your own version of this on top. Alex and I did a <a href="https://youtu.be/6PbHptEcQ-c?si=N-1kjyZcsa-ZLs-p">full webinar walkthrough</a> with live examples if you want the video version. And yes, if you submit a demo request after reading this, the form itself will get 0% credit in our system. This blog post will get it instead.</p>',"agentic-gtm-is-here-your-data-isnt-ready-for-it":`<p id="">For as long as there’s been B2B, hiring more humans has been the best way to scale go-to-market. <strong>That age is over</strong>. People still matter (the exceptional ones more than ever), but headcount need no longer be the default scaling lever: the teams pulling ahead today are deploying agents, building internal tools, and running analyses to answer questions that would seem miraculous to someone visiting from even as recently as 2023.</p><p id=""><strong>This is the new age of agentic GTM,</strong> and the winners are leaning in far beyond <em>‘give everyone Microsoft Copilot seats and call it a day’. </em></p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 47.0rem"><div><img src="/images/blog/agentic-gtm-1-the-quest-begins.png" width="auto" height="auto" alt="Comic — “The Quest Begins.” A GTM team sets off down the path to AI-ready revenue intelligence, dwarfed by a dragon-topped mountain of messy GTM data labeled Salesforce, HubSpot, Gong, spreadsheets, product logs, and misc.csv." loading="lazy"/></div></figure><p id="">You probably know all of that, and you've heard the next part too, from about a dozen vendors in the last quarter: <strong>your data isn’t ready for this.</strong> It’s the detritus of a tech stack built for humans working with records by hand. The agents, internal tools, and analyst-quality reports that help you scale in this new age can be afternoon projects now…but not until you have a clean, AI-native data layer to power them.</p><p id=""><strong>AI is only as good as the data under it, and B2B data is a swamp.</strong> We've had dirty CRMs for thirty years, but people are astonishingly good at mentally repairing the mess. AI isn’t. It can't build that context graph on its own. For the age of agentic GTM, you need a governed layer that reconstructs what actually happened and makes it usable by humans, agents, and apps.</p><hr><h2 id="">GTM circa 2026: valedictorian interns, new heroes, and a tech stack of the walking dead</h2><p id="">Our team has talked to hundreds of go-to-market leaders over the past two years. <strong>The future of agentic GTM is here; it’s just not evenly distributed yet.</strong> If you’re already living in the new world, nothing in this section will be news and you should probably ski
1670p it. But if your organization is just getting started on its AI-fueled journey of self-transformation, here is a quick state-of-the-industry for agentic GTM in mid-2026:</p><ul role="list"><li><strong>AI is ‘valedictorian intern on demand’.</strong> It’s book-smart as hell, a little too self-confident, and still lacking real-world experience. But it’s also able to do an absurd amount of impressive work when you point it in the right direction.</li><li><strong>We’re witnessing the rapid emergence of the first truly new GTM role in many years.</strong> Whether you call them <a href="/gtme">GTM Engineers</a> (that job title has come a long way since Clay coined it as a synonym for 'outbound automation manager'), Chief AI Intern Wranglers, or simply <em>‘the people who know how to turn data into intelligence and ship tools that everyone else can use’</em>, they’re force-multipliers for their teams. <strong>They are the heroes of this new age, </strong>and nearly every org we talk to is either hiring this role or trying to grow it internally.</li><li><strong>The traditional GTM tech stack is decomposing into its elemental primitives.</strong> LinkedIn influencers would have us all believe that we’re in the middle of the SaaSpocalypse and legacy products are just waiting around to die. This is overblown, of course, but many purpose-built tools are no longer necessary when Claude can do the same things for you over an MCP, or a GTME can spin up a better-fit internal replacement in a weekend.</li></ul><h2 id="">If B2B GTM has a Rosetta Stone, attribution is probably it</h2><p id="">At Upside, we discovered the importance of a GTM data layer while trying to do something else: in early 2024, our team set out to help B2B go-to-market orgs make better decisions by building the best multi-touch attribution model in the world. We eventually succeeded (it's called <a href="/platform/pipedash">Pipedash</a>, and it’s quite good), but that’s the headline for a different article.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 42.0rem"><div><img src="/images/blog/agentic-gtm-2-attribution-rosetta-stone.png" width="auto" height="auto" alt="Comic — “Attribution is a Rosetta Stone.” Archaeologists brush off a stone tablet that translates tangled GTM signals — same person, buying group, touchpoint order, campaign names, the 2017 ABM layer, CRM history — into clean, joined entities." loading="lazy"/></div></figure><p id="">Later on, we realized what we’d <em>actually</em> built.<strong> </strong>The quest to fix attribution had forced us to reckon with the encyclopedia of all the ways that B2B GTM data can get screwed up: figuring out which contacts are really the same person, reconstructing who was actually in each buying group, putting scattered touchpoints back in the right order, untangling campaign naming conventions that are an archaeological dig through who was in charge back when ABM became fashionable in 2017.</p><p id="">We'd thought of it all as plumbing for an attribution model, but this created exactly what our customers were missing for all their other GTME projects: <strong>an AI-native GTM data layer.</strong> We just had to turn on the lights and open it up to all the places GTMEs were already working.</p><h2 id="">Established teams need to defeat the three bosses of agentic GTM…with a handicap</h2><p id="">Today, Upside works primarily with <a href="/customers">large, established B2B companies</a>. We help them transform their go-to-market data swamp into something AI can use. We find they are drowning in raw data, but typically still feel like they have no answers. In fact, they often can’t even get access to many of the new tools that AI-native startups consider critical, because the compliance team is busy working through how to update their evaluation rubrics for the age of AI.</p><p id="">The good news is these coins flip over to reveal strengths on the other side: years (sometimes decades) of history worth mining, plus the playbooks, the operational discipline, and the customer relationships that startups don’t even realize they’re missing. But if you’re part of a more established organization that is learning to play the new agentic GTM game, you have some work ahead of you.</p><p id="">Here are the three big bosses we see these teams struggle with most often, and the tactics to beat each one. Look carefully, and you’ll notice that all three tie back to the same missing layer: governed GTM context that agents, apps, and humans can use safely and effectively.</p><h3 id=""><strong class="it-heading-accent">Boss 1:</strong> The best AI tools aren't allowed anywhere near your data</h3><p id="">After nearly 50 years, the spreadsheet finally has a competitor: general-purpose AI harnesses (Claude, Codex, Cursor) are the new 'default business tool'.</p><p id="">But not everyone has access yet, because what works at a hot startup (‘everyone gets a license, connect it to whatever you want’) is a non-starter in a Fortune 500 company, where pointing an agent at production data is how you accidentally create an insider-trading problem instead of a productivity gain.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 40.2rem"><div><img src="/images/blog/agentic-gtm-3-boss-1-ai-governance-ogre.png" width="auto" height="auto" alt="Comic — “Boss #1: AI Governance Ogre.” An AI Governance Committee ogre guards customer data, PII, and secrets, blocking agents from production data." loading="lazy"/></div></figure><p id="">So when the IT team hands people a locked-down, enterprise-approved derivative, the gap between the real thing and the sanctioned version is the difference between ‘game-changing’ and ‘frustrating, unusable trash’.</p><p id=""><strong>The fix: </strong>don't accept the ‘pick one’ framing of frontier AI vs. governance, because you can have both. Build the data layer that lets state-of-the-art AI operate safely. If that means a dataset sandboxed inside a safe-by-default shell to enforce security and permissions, so be it. Datasets scoped by role, permissioned hosting for generated apps. Focus on making the <em>environment</em> secure, and if you absolutely cannot get approval for a best-in-class generic AI harness like Claude, Codex, or Cursor, make sure you stay as close to that layer as you can instead of taking the easy, bundled-with-your-office-suite way out.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 49.9rem"><div><img src="/images/blog/agentic-gtm-4-defeating-the-governance-ogre.png" width="auto" height="auto" alt="Comic — “Defeating the AI Governance Ogre.” The boss falls to boring-sounding tools: a safe-by-default shell, permissioning, and governance — policies, audit logs, access reviews, separation of duties, insider-trading prevention." loading="lazy"/></div></figure><h3 id=""><strong class="it-heading-accent">Boss 2:</strong>
1670 The quality of your 'boring data infrastructure' actually matters a lot</h3><p id="">You can point your AI agent directly at Salesforce today. It'll even dig up some interesting trivia. Unfortunately, a typical enterprise CRM instance is somewhere between a geological record and a garbage dump — much like crude oil, the value is in there but it’s not something you should put directly into your car.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 41.0rem"><div><img src="/images/blog/agentic-gtm-5-boss-2-data-quality-hydra.png" width="auto" height="auto" alt="Comic — “Boss #2: Data Quality Hydra.” A many-headed hydra of lead, contact, account, opportunity, workspace, user, buying committee, deal, and pipeline, with one company logged three ways as Acme, Acme Inc., and Acme?." loading="lazy"/></div></figure><p id="">Let's say you're trying to run a deal analysis. You’re going to need signals scattered across Salesforce, HubSpot, Gong, and your ad platforms, all overlapping, half-logged, none of it joined. If you — a knowledgeable-on-GTM human — open all those sources in different browser tabs, it'll take you a couple hours to piece through the unstructured mess, untangle all the overlap, and develop a thesis about what is actually going on in that single account. If you give that same task to a skilled data analyst (but one without your GTM knowledge), they'll probably be quicker at the mechanics but more likely to miss the forest for the trees about what it all means.</p><p id="">Claude is that data analyst wearing rocket boots. Yes, you can connect it to all of those sources directly (via MCP, or even an intermediate warehouse like Snowflake or BigQuery), but that very much does not take care of the mess. Copilot it through the process carefully and you can do something great once; you'll start from scratch next time, and so will everyone else on your team.</p><p id=""><strong>The fix: </strong>materialize the data fabric first, so your agents can understand it intuitively and aren’t reinventing how everything connects in each new session.</p><ul role="list"><li><strong>At minimum:</strong> document an ontology of how your sources relate and make sure your agent knows about it.</li><li><strong>Better:</strong> create a joined data lake on a shared schema.</li><li><strong>Best:</strong> treat every upstream system as a source of signal (not a source of truth), and reconstruct a knowledge graph of what actually happened.</li></ul><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 46.5rem"><div><img src="/images/blog/agentic-gtm-6-three-levels-of-weapons.png" width="auto" height="auto" alt="Comic — “Beating Boss #2: Three Levels of Weapons.” At minimum, an ontology of sources; better, a joined data lake on a shared schema; best, a knowledge graph of what actually happened." loading="lazy"/></div></figure><h3 id=""><strong class="it-heading-accent">Boss 3:</strong> Nobody trusts an answer they can't trace</h3><p id="">AI is non-deterministic. Just like with people, you get different answers if you ask the same question twice. But with AI, add in that you're hiring a fresh intern straight off the street for each new thread, and that means they come with only what they learned in school — they haven't gone through onboarding for your company yet.</p><p id="">Worse, the quality of AI results still depends on the skill of the human operator in non-obvious ways. Did Jane, the event manager, know to batch fifty deals across subagents so the run didn't get lazy halfway through? To check meeting transcripts for event attendance, not just the Salesforce campaign? That ‘pipeline’ here means deals past Qualification?</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 50.0rem"><div><img src="/images/blog/agentic-gtm-7-boss-3-trust-sphynx.png" width="auto" height="auto" alt="Comic — “Boss #3: Trust Sphynx.” A sphinx labeled DATA TRUST asks “Why should anyone believe the answer?”, guarding the door to answers people will actually believe." loading="lazy"/></div></figure><p id="">A small, AI-native team improvises around that. A large, more established one can't afford multiple answers to the same question if they differ in definitionally critical ways.</p><p id=""><strong>The fix: </strong>architect the system so that individual operator skill can’t become a failure. This means encoding the scaffolding and context engineering that your best operators use to get great results, and then applying it automatically when Jane the event manager asks a basic-sounding question about campaign performance.</p><ul role="list"><li><strong>Bad: </strong>trust the AI to figure it out. Models get better all the time, plan mode and the ask-user-question tool help a lot, and there have been multiple step-function improvements in intelligence over the past year. But remember the overconfident intern; this is where the bill comes due.</li><li><strong>Better:</strong> invest in solid documentation about how the data is structured, with a context layer of ‘anchor assets’ that you keep up to date as onboarding material for each new agent session (skills and agent-specific memory are this category in a trench coat).</li><li><strong>Best:</strong> give the agents live, just-in-time coaching (this is how Upside’s <a href="/platform/radiant">Radiant</a> active context layer works). Train a 'librarian agent' that they can go to for advice before each query. Set the librarian up with context on how your data works (including shared memories about org-specific nuance), and design a continual learning loop that extracts new entries w
1670orth recalling from day-to-day usage. This way, wins compound team wide and no one is starting from scratch.</li></ul><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 37.5rem"><div><img src="/images/blog/agentic-gtm-8-bad-good-better-librarian-agent.png" width="auto" height="auto" alt="Comic — “Bad, Good, Better.” Bad: tell the AI to figure it out. Good: a shelf of documentation and anchor assets. Better: a librarian agent that briefs each new agent on how the company’s data works, so wins compound team-wide." loading="lazy"/></div></figure><p id=""><strong>Bonus:</strong> a few tactics and tools that we’ve found help with overall trustworthiness:</p><ul role="list"><li>Make sure you have non-AI audit and traceability tooling, so users can ‘go to ground’ in the data layer when needed. Give them an old-fashioned tabular dashboard with filters and a visual timeline explorer, where they can investigate by hand. For new users, these things can also help with the cold start problem of an empty chat window.</li><li>When you use AI to generate deep-researched outputs, do it once and store them for queryable reference in future. This is both more consistent and cheaper than running the research on demand every time someone needs the answer.</li><li>For more subjective, high-complexity questions, use jury-and-judge workflows (for example: a panel of three analyst agents independently run the same investigation, and then a separate evaluator is responsible for verifying their findings and normalizing the final answer).</li></ul><h2 id="">What happens when you win</h2><p id="">If you want to work agentically and are already operating beyond the scale of ‘vibecoders in a Blue Bottle’, <strong>you need a GTM data layer.</strong> This is the single greatest accelerator your team will find, and you’ll see a Cambrian explosion of creativity once you have it: the person you had filed under ‘average’ starts shipping brilliant things nobody thought to ask for, and everyone gets more data-driven because the data is finally on tap (for examples of what we mean, <a href="/resources/miniapp-examples">check out this gallery of miniapps</a> inspired by things we’ve seen actual Upside customers create).</p><p id="">But be careful before you sign up to rebuild the boring infrastructure yourself. This layer does not come out of the box with Claude, and unless you happen to have a spare top-tier engineering team just hanging around, an in-house solution quickly becomes a trap — a constant hope that ‘just one more fix’ will finish the project and finally make things stable. <strong>Because it won't.</strong> <a href="https://openai.com/index/inside-our-in-house-data-agent/">OpenAI</a> and <a href="https://claude.com/blog/how-anthropic-enables-self-service-data-analytics-with-claude">Anthropic</a> have both published long write-ups of the un-glamorous, non-model work they had to do before their own internal data agents became usable. You wouldn’t build all of Excel just to use a spreadsheet, and your company probably shouldn’t run its own go-to-market context graph either.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 60.7rem"><div><img src="/images/blog/agentic-gtm-9-one-weapon-dragon-on-gold.png" width="auto" height="auto" alt="Comic — turning the tools into one weapon (observability, lineage, testing, guardrails, monitoring, policies forged into a single source of truth), and discovering the dragon was just sitting on a hoard of clean data, trusted metrics, complete history, context, and growth gold." loading="lazy"/></div></figure><p id="">That's why Upside exists. We believe AI makes it possible to ask better questions, run deeper analyses, and build internal tools faster. But that only works if GTM engineers have a clean, normalized data layer that covers every GTM team. We extract the raw signals from everywhere they exist across your systems and transform them into a knowledge graph, the single best source of what actually happened in your accounts. Then we make that data available in all the places and ways you need: a powerful MCP, analytics dashboards for your broader team, and hosted interactive miniapps with live data, all in a way that won't get you in trouble with your compliance team. <strong>We keep the boring part boring so that your team can do the exciting stuff.</strong></p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" style="max-width: 38.9rem"><div><img src="/images/blog/agentic-gtm-10-to-the-promised-land.png" width="auto" height="auto" alt="Comic — “To the Promised Land.” With trusted data, the GTM team reaches a Cambrian explosion of growth and creativity: miniapps built by GTM teams, Customer 360, a deal desk copilot, an account planning agent, a pipeline forecaster, win/loss insights, a content generator, and a churn risk detector." loading="lazy"/></div></figure><p id="">We’ve been building in the GTM space for a long time, and this is the most fun we've ever had. If you’re already duct-taping this together by hand, you're ahead of the curve, and you also don't have to do it alone. The old GTM stack was built for humans updating records. The next one will be built for humans, agents, and apps reasoning over context.</p><p id="">Upside is the AI-native data layer for GTM engineers. <a href="/platform">Come build the age of agentic GTM with us!</a></p>`,"how-to-build-the-ultimate-win-back-sales-kit":`<p id="">Every sales team has a pile of closed-lost deals they treat as dead in the water. It's unfortunate, but it's true. The usual next step is a generic "just checking in, here's what's new" email, written reluctantly or fired off by an automated workflow, hoping someone bites. But that's the same recycled outreach that lost the deal in the first place. If a prospect passed once, why would the second attempt land any better?</p><p id="">So we tested an alternative: custom win-back kits for 100 closed-lost accounts that saw a demo once and passed. The result was outstanding. Turns out teams are far more willing to re-engage when the follow-up isn't mass produced. Who would have thought! Deals aren't dead, and treating them that way only does more damage. The follow-ups are what's dead. Here's how y
1670ou can turn them around too.</p><h2 id="">Building it</h2><p id="">So how do you actually put one of these together? The recipe is simpler than it sounds. Tell the agent what you want, point it at your data, and let it work. Here's the sequence we followed.</p><p id="">Prior to building, do some thought work to identify the sections you want in every account's kit. The strongest kits we've seen from customers include:</p><ul role="list"><li><em>Why you lost the deal.</em> Sometimes this is well documented, but often it has to be inferred from account history. AI is already capable of this when you give it the data in a structured format. Upside helps with the unstructured, parsing and ingesting CRM notes, call transcripts, and email threads to give you a full understanding of the deal history.</li><li><em>What the customer cared about.</em> Pull this from a summary of all previous opportunity notes and calls, including transcript summaries.</li><li><em>Talking points and objection handling.</em> Map each contact's role to their business concerns.</li><li><em>A draft email sequence.</em> Write one for every company and contact.</li><li><em>A targeted approach plan by person.</em> Decide the specific play that earns the next meeting with each contact.</li></ul><p id="">The best plans get personal. One contact collected wine, so the play was a gift box to earn the meeting. Another account's budget planning cycle was about to open, making the timing finally right. A third had a pain point the product now solves outright. Each is a different door in, and the kit tells the rep which one to use.</p><p id="">Now here are the steps to create it and scale it with AI:</p><h3 id="">1. Pull the external signals (Tool: Exa)</h3><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/win-back-recent-company-news.png" width="auto" height="auto" alt="Recent Company News panel surfacing partnership, recognition, and growth signals for a closed-lost account, with an insight summary" loading="lazy"/></div></figure><p id="">Getting up to date with customer and industry news is essential for generating an updated, bespoke approach.</p><ul role="list"><li><em>Leverage an external signal engine to surface what's going on at an account in real time.</em> We suggest Exa: its strength lies in niche, specific discovery and it's built for AI-native and semantic querying.</li><li><em>Look for funding, hiring, leadership shuffles, expansion, or new initiatives.</em> Find anything that hints a closed-lost account's situation has changed since they passed. This puts you in a great position to find new angles in with their team.</li></ul><h3 id="">2. Contextualize all signals (Tool: Upside)</h3><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/win-back-account-context.png" width="auto" height="auto" alt="Account context card showing tech stack, business context, why they lost, what's changed since then, and key internal notes" loading="lazy"/></div></figure><p id="">An external signal means nothing without the history sitting behind it: what the account evaluated, who was in the room, and why they walked.<
1670/p><ul role="list"><li><em>Unify and deduplicate your touchpoints for internal sources.</em> The agent needs one clean account story instead of three systems stitched together that all disagree with each other. This is the part Upside handles for you.</li><li><em>Connect data from external signals to cleaned internal data.</em> The goal is to have every external signal land against the real context of the deal instead of floating on its own.</li></ul><h3 id="">3. Answer the question that lost the deal (Tool: Claude x Upside MCP)</h3><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/win-back-why-they-lost.png" width="auto" height="auto" alt="Why They Lost and What's Changed Since Then summary for a closed-lost account" loading="lazy"/></div></figure><p id="">A kit that can say "you passed because of X, and here's exactly what we fixed" is worth more than a hundred generic feature lists. That's the aim here.</p><ul role="list"><li><em>For each account, use AI to pin down why you actually lost.</em> Find the objection, the gap, the dealbreaker. These results determine the perspective with which you can approach the buying group.</li><li><em>Answer the question head-on: have you solved it since?</em> Take the enhancements you've shipped since they last looked and tie each one back to that account's specific interests for the highest chance of re-engagement.</li></ul><h3 id="">4. Arm the rep (Tool: Upside)</h3><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/win-back-rep-enablement.png" width="auto" height="auto" alt="Recommended talking points and recommended case studies and content tailored to a closed-lost account" loading="lazy"/></div></figure><p id="">Build the part the rep actually uses. The more details you include, the easier it will be for the rep to act upon the information and close deals.</p><ul role="list"><li><em>Map out the important contacts and what each one cares about.</em> Pull from both first-party conversations and third-party research. Knowing who to engage is just as important as knowing how to engage; the right person can open a new door for you.</li><li><em>Turn the contact list into talking points and objection handling.</em> Map each person's role to their business concerns. By anticipating personalized concerns, reps come to the meeting one step ahead.</li><li><em>Draft an email sequence for every company and contact.</em> Trace each one back to something real that account said or a signal you just surfaced — personalization is the key here.</li></ul><h3 id="">5. Scale and filter (Tool: Upside)</h3><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/win-back-account-overview.png" width="auto" height="auto" alt="Roofing Win-Back Account Overview: a filterable table of closed-lost accounts with owner, signal strength, and summary and strategy" loading="lazy"/></div></figure><p id="">Run the whole thing across your list.</p><ul role="list"><li><em>Build a single filterable view where every account shows its owner, signal strength, and recommended strategy.</em> This is what turns a hundred kits into something a rep can actually work, sorting the full list down to the ten worth a call this morning, instead of staring at a wall of accounts and not knowing where to start. Upside's MCP can help build this view with live data.</li></ul><h2 id="">What we didn't expect</h2><p id="">The agent went well beyond our initial brief, and two surprises stood out. Pointed at our positioning docs, it started generating mini battle cards tailored to each account's specific competitors. Pointed at the case study library, it pulled the exact stats and testimonials that mapped to each account's concerns, without ever being told which to use.</p><p id="">This is a pattern we keep seeing: once the data foundation is in place (which Upside handles for you), the agent finds angles a human would never have time to chase. The kit got better than the person who specced it.</p><p id=""><strong>Try it yourself</strong> — drop this into an agent connected to the Upside MCP:</p><pre class="copy-prompt" style="background:#f5f5f7;color:#1d1d1f;padding:1.25rem 1.5rem;border-radius:10px;font-size:0.9rem;line-height:1.6;overflow-x:auto;margin:1.5rem 0;border:1px solid #d2d2d7;white-space:pre-wrap;word-wrap:break-word;"><code style="font-family:inherit;font-size:inherit;color:inherit;background:none;">Build me a Win-Back Sales Kit for my closed-lost accounts that reached a demo before passing. For each account, generate: a re-engagement assessment with a signal-strength score and recommended strategy; an account narrative covering what they evaluated, why they passed, and recent news that makes now worth a second look; a contact map with what each decision-maker cares about and the objections they raised; the product enhancements shipped since they last engaged, mapped to those specific objections; the case studies and proof points that match their concerns; and a draft email sequence per contact. Then give me a filterable view across all accounts with owner, signal strength, and strategy.</code></pre><h2 id="">The result</h2><p id="">With Upside, going from idea to draft took a day. Implementing feedback took another. Two days, start to finish, for a custom system covering a hundred accounts, each with their own narratives, contacts, and history.</p><p id="">The reason closed-lost lists go stale is not about strategy; everyone knows that a personalized approach beats a generic one. It was the time, effort, and money going into each view. A hundred accounts, analyzed properly, takes weeks of manual work nobody has the bandwidth to do. Lists sit untouched or they get a lazy blast that goes unnoticed.</p><p id="">When dossiers are rebuilt with AI and context, the story changes. Reps actually start re-engaging and selling, walking into calls already knowing what the account saw last time, why they passed, what's changed, and which proof points to lead with. The prep that used to define the ceiling of how many accounts you could reopen doesn't serve as a constraint anymore, and closed-lost deals start winning.</p>`,"how-to-build-an-email-send-time-optimizer-using-the-upside-mcp":`<p>Marketers have all heard the traditional advice for sending outbound emails: stick to Tuesday mornings, avoid Fridays, and don't even think about weekends. It <em>sounds</em>
1670 reasonable, but most of this guidance is <strong>just recycled best practice</strong> rather than insight tailored to your specific audience. GTM leaders don't need more generic benchmarks; they need to understand the rhythms of the people they are actually trying to reach.</p><p>In practice, when you look across SDR, AE, and executive outbound and marketing emails, the data is pretty messy. To address the ambiguity of outbound timing, we built the Send Time Optimizer, using the power of the Upside MCP to reconstruct complex email chains and unify engagement signals.</p><h2>Here's how you can do it too</h2><h3>1. Consolidate</h3><p>Gather all of your interactions into a single, unified view. Make sure all contacts are deduplicated and people are attributed to the correct identity. Upside users automatically have this handled for them.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/send-time-optimizer-touchpoints.png" width="auto" height="auto" alt="Upside Touchpoints view showing thousands of unified email and meeting touchpoints across executive, marketing, and SDR activity" loading="lazy"></div></figure><h3>2. Filter</h3><p>Differentiate between direct outbounding and broader marketing initiatives (such as email blasts), as each generates distinct behavioral signals. This can be done by filtering in a dashboard view or by querying your data directly with an AI agent such as Claude or Cursor.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/send-time-optimizer-touchpoints-filtered.png" width="auto" height="auto" alt="Touchpoints view filtered to direct email only, separating personal outbound from bulk marketing sends" loading="lazy"></div></figure><h3>3. Clean, audit, and normalize</h3><p>Audit the timestamps and responses attached to all emails for accuracy, so they reflect true outbound activity rather than bulk emails. Critically, add logic that addresses the friction of conflicting timezones within threads. In Upside this is already handled for you, and a quick prompt lets you toggle between timezones so you can optimize for yourself <em>and</em> the receiver in the final product (along with anyone else who has enterprise-level permissions to the dashboard you build).</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/send-time-optimizer-timezone-toggle.png" width="auto" height="auto" alt="Timezone toggle switching the Send Time Optimizer between CT, ET, and PT" loading="lazy"></div></figure><h3>4. Contextualize</h3><p>Contextualize response rates with total volume in mind, so you are not misled by outliers in low-traffic windows. Even better if you can switch between a few options. We want as much information as possible here.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/send-time-optimizer-volume-filter.png" width="auto" height="auto" alt="Minimum weekly volume filter that sets low-traffic time slots aside" loading="lazy"></div></figure><h3>5. Visualize</h3><p>Combine all of this by leveraging an AI agent to build a visual interface that maps engagement signals like opens and clicks against timing. Here's the example we built using the Upside MCP:</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/send-time-optimizer-heatmap.png" width="auto" height="auto" alt="Send Time Optimizer dashboard with KPI cards and a response-rate heatmap by day and hour, highlighting Tuesday at 5:00 am as the best window" loading="lazy"></div></figure><p><strong>Try it yourself.</strong> Copy this prompt and drop it into an AI agent connected to the Upside MCP:</p><pre class="copy-prompt" style="background:#f5f5f7;color:#1d1d1f;padding:1.25rem 1.5rem;border-radius:10px;font-size:0.9rem;line-height:1.6;overflow-x:auto;margin:1.5rem 0;border:1px solid #d2d2d7;white-space:pre-wrap;word-wrap:break-word;"><code style="font-family:inherit;font-size:inherit;color:inherit;background:none;">Build me a Send Time Optimizer dashboard. Pull all direct email touchpoints from the last 12 months, excluding bulk marketing sends. Normalize timestamps to the recipient&#x27;s timezone. Create a heatmap showing response rates by day of week and hour of day, with a minimum volume filter to exclude low-traffic windows. Include KPI cards for overall response rate, best send window, and worst send window. Add a timezone toggle so I can switch between sender and recipient perspectives. Also include a monthly trend chart comparing response rate against email volume, a day-of-week breakdown, and a ranked list of the top best and worst send windows.</code></pre><h3>Bonus</h3><p>Build out additional table and graph views that visualize the data broken down further.</p><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/send-time-optimizer-monthly-trend.png" width="auto" height="auto" alt="Monthly trend chart comparing response rate against email volume over time" loading="lazy"></div></figure><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/send-time-optimizer-day-of-week.png" width="auto" height="auto" alt="Day-of-week response rate summary across business hours" loading="lazy"></div></figure><figure class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div><img src="/images/blog/send-time-optimizer-best-worst-windows.png" width="auto" height="auto" alt="Top eight best and worst send windows ranked by response rate" loading="lazy"></div></figure><h2>Common pitfalls</h2><p>These are where standard analysis tends to get tripped up. A reliable dashboard will account for these inconsistencies.</p><ul><li>Not identifying hidden engagement and activity, which is frequently masked as simple CRM entries without context.</li><li>Not managing time variances by directing the system to normalize data based on the recipient's specific geographic location.</li><li>Not adding a volume filter that sets low-traffic time slots aside, so a handful of off-hours email sends don't distort the recommendations as a whole.</li></ul><h2>The result</h2><p>When implemented correctly, the Send Time Optimizer lets teams prioritize their most important outreach during high-performance windows while shifting lower-priority tasks to "dead zones." Having this level of detail transforms send timing from a game of chance into a pillar of the outbound effort.</p><p>Developing this app revealed some unconventional patterns:</p><ul><li>The optimal send window was Tuesday at 5:00 am.</li><li>The least effective window was Tuesday at 9:00 am.</li><li>The overall response rate reached 27%.</li></ul><p>We could not have surfaced these insights without building this custom dashboard using Upside.</p><h2>How Upside makes this effortless</h2><p>The magic of the Upside platform lies in the data foundation. We take on the work of cleaning, normalizing, and connecting your fragmented go-to-market data so you walk away with clear advantages:</p><ul><li>Teams spend time asking questions instead of wrestling with spreadsheets.</li><li>Natural language prompts allow for instant generation of insights and dashboards.</li><li>Relevant filters and logic are applied automatically based on your descriptions.</li></ul><p>Upside represents a fundamental shift away from static reports toward a dynamic environment where insights are generated in real time.</p><p>By removing the chasm between a business question and a data-backed answer, we ensure that your outbound strategy keeps evolving alongside your audience's behavior. Your most ambitious ideas for custom applications and data tools are no longer destined to be stuck in a technical backlog; instead, they are a prompt away from becoming reality. This accessibility empowers everyone from executive leadership to frontline contributors to make data-driven decisions that compound revenue and build stronger connections with customers.</p>`,"best-marketing-attribution-tools-software-b2b":`<p id="">You've installed the marketing attribution tools. You've connected the integrations. And yet, when the CFO asks which campaigns actually drove revenue last quarter, the room goes quiet.</p><p id="">You're not alone. According to Gartner's 2025 survey of 174 senior marketing leaders, only 30% of CMOs feel confident in their attribution data. That's a striking number for an industry that spends billions on measurement te
1670chnology every year.</p><p id="">Here's the uncomfortable truth most attribution tool roundups won't tell you: the problem isn't which tool you pick. The problem is that every tool on the market is modeling incomplete data. Dreamdata's 2025 B2B Benchmarks Report found the average B2B customer journey involves 76 touchpoints across 211 days. But most CRM systems capture a fraction of those interactions. Your attribution tool can only score what it can see.</p><p id="">So before we get into the best marketing attribution software for B2B teams in 2026, we need to talk about what actually makes attribution work (and why most tools fail before they start).</p><h2 id="">Why Most Marketing Attribution Tools Fail Before They Start</h2><p id="">Every attribution tool on the market solves the same problem: assign credit to marketing touchpoints. First-touch, last-touch, multi-touch, algorithmic. The models differ. But they all share one assumption.</p><p id=""><strong id="">They assume the data is there.</strong></p><p id="">It isn't. Research from multiple sources estimates that most brands are making attribution decisions on data that is missing 50-70% of actual touchpoints. When 97% of B2B website traffic is anonymous (6sense/Unbounce 2023) and buying committees average 13 internal stakeholders plus 9 external participants (Forrester 2025), the interactions that matter most are often the ones nobody logged.</p><p id="">Think about it: the casual intro over coffee that led to a champion referral. The Slack DM from a peer recommending your product. The three internal meetings where your brand came up but no one tagged a campaign. These are phantom touchpoints, and they're invisible to every traditional attribution tool.</p><p id="">67% of marketers cite data silos as their top attribution challenge (Gitnux 2026). But the issue runs deeper than silos. Even with perfectly connected systems, you're still missing the interactions that happen outside tracked channels.</p><p id="">As marketing strategist Kathleen Schaub put it: <em id="">"Customer journeys look less like a linear funnel and more like a child's scribble. Markets are complex systems, not predictable machines attribution tries to mold them into."</em></p><p id="">So what's the fix? You have two options. Accept that attribution will always be partial and use it directionally. Or invest in tools that recover missing signals before trying to model them.</p><p id=""><strong id="">Forensic attribution</strong> takes the second path. Instead of starting with a model, it starts with data recovery: pulling signals from emails, calendars, meeting transcripts, and web sessions to reconstruct what actually happened. Then it interprets what mattered. It's a fundamentally different starting point, and it's why we built Upside.</p><h2 id="">What to Look for in Marketing Attribution Software</h2><p id="">Not every team needs the same thing. But there are five criteria that separate tools that actually work from tools that generate pretty dashboards nobody trusts.</p><h3 id="">Data completeness and signal recovery</h3><p id="">Does the tool just model what's in your CRM, or does it actively recover missing touchpoints? If it only works with data you've already captured, you're building attribution on a foundation with gaps. Look for tools that connect to email, calendar, meeting transcripts, and web analytics, not just your marketing automation platform.</p><h3 id="">Buying group support</h3><p id="">B2B deals involve committees, not individuals. Forrester's 2025 data shows buying groups now average 13 internal stakeholders. If your attribution tool tracks individual lead journeys instead of account-level buying group activity, it's solving the wrong problem. Ask whether the tool can reconstruct who was actually involved in a deal, including people who never filled out a form.</p><h3 id="">CRM integration depth</h3><p id="">Surface-level Salesforce or HubSpot integrations won't cut it. You need bi-directional sync at the opportunity level, stage history access, and the ability to match touchpoints to specific deals. The best tools pull from CRM, MAP, ad platforms, and communication channels simultaneously.</p><h3 id="">Model flexibility (or model irrelevance)</h3><p id="">Some teams want to compare first-touch vs. multi-touch vs. time-decay. Others have moved past the model debate entirely and want evidence-based deal narratives instead of credit scores. Know which camp y
1670ou're in before evaluating.</p><h3 id="">Time to value</h3><p id="">If setup takes 8 weeks and requires a dedicated analytics engineer, factor that into your decision. Some tools deliver insights within days. Others require months of configuration before they're useful.</p><h2 id="">The Best Marketing Attribution Tools for B2B Teams in 2026</h2><p id="">Here are the tools worth evaluating, organized by what they do best. We've included tools across different price points and approaches, because the right choice depends on your sales motion, data maturity, and team size.</p><h3 id="">1. Upside</h3><p id=""><strong id="">Best for:</strong> B2B teams that want attribution built on complete data, not partial CRM records</p><p id="">Upside is a forensic revenue intelligence platform. Where traditional marketing attribution tools assign credit based on whatever data happens to be in your CRM, Upside starts by recovering the signals that are missing.</p><p id="">The platform connects to Salesforce, email systems, calendars, meeting transcripts (via Gong, Fireflies, or Fathom), and web analytics. It then runs a process called data healing: deduplicating records, resolving identities across systems, and reconstructing the most likely correct version of events. No manual data cleanup required from your team.</p><p id="">Once the data foundation is solid, Upside uses agentic analysis (AI agents that reason across evidence) to generate deal stories: chronological narratives of what actually happened in each deal, with citations from real emails, meetings, and web sessions. Instead of seeing "LinkedIn gets 23% credit," you see the actual sequence of events that influenced the outcome.</p><p id="">Upside also automatically reconstructs buying groups by detecting all deal stakeholders from meeting attendees, email threads, and transcripts. No reliance on manually maintained CRM contact roles.</p><p id="">Founded by Mada Seghete and Dan Ahmadi, who built the attribution model at Branch that scaled the company to $100M+ revenue and a $4B valuation through complex enterprise deals. This is lived experience, not theory.</p><p id=""><strong id="">Strengths:</strong> Signal recovery, buying group reconstruction, deal narratives with evidence, data healing, account-level attribution<br><strong id="">Limitations:</strong> Best suited for B2B teams with Salesforce or HubSpot; not designed for B2C or ecommerce<br><strong id="">Pricing:</strong> Custom, based on data volume</p><h3 id="">2. HockeyStack</h3><p id=""><strong id="">Best for:</strong> B2B teams wanting a broad GTM analytics platform with attribution as one component</p><p id="">HockeyStack positions itself as a GTM intelligence platform that combines attribution with broader analytics, intent data, and AI-powered insights. It pulls data from CRM, ad platforms, website, and product usage to build a unified view.</p><p id="">The platform's AI agents can surface pipeline insights, campaign performance, and lift analysis. It's a wide platform that tries to be the single analytics layer for revenue teams.</p><p id=""><strong id="">Strengths:</strong> Breadth of GTM data, AI agents for analysis, unified marketing and sales visibility<br><strong id="">Limitations:</strong> Breadth comes at the cost of attribution depth; the platform doesn't recover signals from emails, calendars, or meeting transcripts. Still relies on data that's already in connected systems. Pricing is enterprise-level (starting around $1,400/month per G2 reviews).<br><strong id="">Pricing:</strong> Custom, enterprise-focused</p><h3 id="">3. Dreamdata</h3><p id=""><strong id="">Best for:</strong> Mid-market B2B teams wanting CRM-native buyer journey visualization</p><p id="">Dreamdata maps marketing touches to accounts, opportunities, and closed-won revenue using your Salesforce or HubSpot data. Its strength is buyer journey visualization at the account level, showing how multiple stakeholders interacted across channels before a deal closed.</p><p id=""><strong id="">Strengths:</strong> Clean account-level journey visualization, solid CRM integration, good for teams with standardized sales processes<br><strong id="">Limitations:</strong> Setup takes 4-8 weeks. Attribution models are rule-based with limited flexibility. Struggles with complex ABM motions. Doesn't recover signals outside of connected marketing and CRM platforms.<br><strong id="">Pricing:</strong> Free tier available; Team at $999/month; Business at $2,499/month; Enterprise custom</p><h3 id="">4. CaliberMind</h3><p id=""><strong id="">Best for:</strong> Enterprise B2B teams with complex, fragmented data environments</p><p id="">CaliberMind is a GTM intelligence platform built on an enterprise-grade marketing data warehouse. It handles custom Salesforce objects, unique workflows, and complex business logic that break other tools. Multi-touch attribution, ABM insights, account scoring, and funnel analysis in one platform.</p><p id=""><strong id="">Strengths:</strong> Handles enterprise data complexity, flexible data modeling, strong strategic consulting support<br><strong id="">Limitations:</strong> Requires significant implementation investment. Best for large orgs with dedicated marketing ops. Not self-serve.<br><strong id="">Pricing:</strong> Custom, enterprise</p><h3 id="">5. SegmentStream</h3><p id=""><strong id="">Best for:</strong>
1670 Paid media teams spending $50K+/month who need attribution tied to budget optimization</p><p id="">SegmentStream combines ML-powered multi-touch attribution with incrementality testing, marketing mix modeling, and predictive lead scoring. It's specifically built for teams that want attribution outputs to directly inform spend decisions.</p><p id=""><strong id="">Strengths:</strong> Attribution connected to budget optimization, incrementality testing, predictive scoring<br><strong id="">Limitations:</strong> Focused on paid media channels. Less suited for teams where organic, events, or sales-assisted touchpoints drive most pipeline. Requires meaningful ad spend to be useful.<br><strong id="">Pricing:</strong> Custom</p><h3 id="">6. Ruler Analytics</h3><p id=""><strong id="">Best for:</strong> Inbound-heavy B2B companies with significant phone and form-based lead flow</p><p id="">Ruler Analytics specializes in call tracking, form attribution, and offline conversion tracking. It connects phone calls and form fills back to the marketing source and pushes revenue data into your CRM.</p><p id=""><strong id="">Strengths:</strong> Call tracking and offline attribution, strong for industries where phone calls drive business, good CRM revenue linking<br><strong id="">Limitations:</strong> Focused on inbound lead attribution. Less useful for complex enterprise sales cycles with buying committees and long timelines.<br><strong id="">Pricing:</strong> Small business at ~$179/month; scales up to enterprise</p><h3 id="">7. Fibbler</h3><p id=""><strong id="">Best for:</strong> Teams focused specifically on LinkedIn and Google Ads revenue attribution</p><p id="">Fibbler is a focused tool that connects LinkedIn and Google Ads performance directly to CRM revenue. It's narrow by design: rather than trying to be a full attribution platform, it solves the specific problem of proving ROI on LinkedIn and paid search spend.</p><p id=""><strong id="">Strengths:</strong> Fast setup (connects to HubSpot and Salesforce in minutes), affordable, impression capping for cost control<br><strong id="">Limitations:</strong> Only tracks digital paid channels. No offline, organic, or event attribution. Google Ads is a paid add-on.<br><strong id="">Pricing:</strong> Growth plan at $89/month; Google Ads add-on at $59/month</p><h3 id="">8. Attribution (AttributionApp)</h3><p id=""><strong id="">Best for:</strong> Growing B2B and SaaS teams taking their first step into multi-touch attribution</p><p id="">Attribution uses automated multi-touch modeling with custom data science algorithms. It provides full-funnel visibility from first touch to close, with features for ABM campaign measurement and ROAS by vend
1670or.</p><p id=""><strong id="">Strengths:</strong> Easy setup (G2 awards for fastest implementation), good entry point for teams new to attribution, ABM-specific reporting<br><strong id="">Limitations:</strong> Lighter than enterprise solutions. May not handle the data complexity of large, multi-product organizations.<br><strong id="">Pricing:</strong> Starting at $399/month</p><h3 id="">9. Google Analytics 4 (GA4)</h3><p id=""><strong id="">Best for:</strong> Early-stage teams that need free, basic attribution before investing in a dedicated tool</p><p id="">GA4 provides data-driven attribution out of the box, analyzing conversion paths to assign credit based on statistical impact. It's free, widely adopted, and integrates with the Google ecosystem.</p><p id=""><strong id="">Strengths:</strong> Free, powerful for web and paid channel analytics, data-driven attribution model included<br><strong id="">Limitations:</strong> Not built for B2B. No account-level attribution, no buying group tracking, no CRM integration by default. Requires significant customization for B2B use cases. Companies implementing multi-touch attribution see 37% more accurate ROI measurement vs. GA4's default models (HubSpot Attribution Report).<br><strong id="">Pricing:</strong> Free</p><h2 id="">Multi-Touch Attribution vs. Marketing Mix Modeling vs. Forensic Attribution</h2><p id="">Most "best attribution tools" articles compare features and pricing. But the more important question is which approach to measurement your team actually needs.</p><p id=""><strong id="">Multi-touch attribution (MTA)</strong> tracks individual touchpoints and assigns credit to each one. First-touch, last-touch, linear, time-decay, U-shaped, W-shaped, data-driven. These are all MTA variants. MTA works well when you have complete journey data and your buyer interactions happen in tracked digital channels. It breaks down when buying groups involve 13+ stakeholders (Forrester 2025), sales cycles span 211 days (Dreamdata 2025), and most interactions happen offline or in untracked channels.</p><p id=""><strong id="">Marketing mix modeling (MMM)</strong> takes a top-down statistical approach, analyzing how aggregate marketing spend correlates with business outcomes over time. It doesn't track individuals. According to eMarketer's November 2025 data, 46.9% of U.S. marketers plan to invest more in MMM over the next year. MMM is useful for budget allocation decisions at the channel level, but it can't tell you what happened in a specific deal.</p><p id=""><strong id="">Forensic attribution</strong> starts from a different premise entirely. Rather than choosing a credit-assignment model, it first reconstructs reality by recovering missing signals across all available evidence sources (emails, meeting transcripts, calendars, web sessions, CRM data). Then it uses AI to interpret what influenced outcomes, generating deal stories instead of attribution scores.</p><p id="">The difference matters. MTA and MMM both accept incomplete data as a given and try to model around it. Forensic attribution treats data completeness as the prerequisite. When your B2B deals involve dozens of stakeholders and hundreds of touchpoints over months, the model you use matters less than whether you have the data to feed it.</p><p id="">As Tonya Walker, a fractional CMO and marketing advisor, wrote in MarTech: <em id="">"Every attribution model is built on partial data. Attribution will always matter, but mature organizations understand its role. They don't ask 'What does the model say?' They ask 'What are we responsible for and what are we doing about it?'"</em></p><p id="">For a deeper look at how Upside approaches this problem, read our <a href="/blog/two-radical-new-solutions-to-b2b-revenue-attribution" id="">manifesto on two radical new solutions to B2B revenue attribution</a>.</p><h2 id="">How to Choose the Right Marketing Attribution Tool for Your Business</h2><p id="">The right tool depends on your sales motion, not your marketing stack.</p><p id=""><strong id="">If you sell to enterprise accounts with 6+ month sales cycles and buying committees:</strong> You need account-level attribution with buying group reconstruction and evidence from emails, meetings, and transcripts. Tools that only track digital touchpoints will miss most of what actually influenced the deal. Look at Upside for forensic attribution, CaliberMind for enterprise data complexity, or Dreamdata for CRM-native journey visualization.</p><p id=""><strong id="">If you sell to mid-market with 2-4 month cycles and inbound-heavy motion:</strong> Multi-touch attribution connected to your CRM will serve you well. HockeyStack provides broad GTM analytics. Attribution (AttributionApp) is a strong, affordable entry point. If phone calls drive significant pipeline, Ruler Analytics solves that specific problem.</p><p id=""><strong id="">If you're a paid-media-heavy team spending $50K+ per month:</strong> You need attribution tied directly to budget optimization. SegmentStream connects attribution to spend decisions. Fibbler is excellent for LinkedIn and Google Ads ROI specifically.</p><p id=""><strong id="">If you're early-stage and budget-constrained:</strong> Start with GA4 for basic web attribution. Supplement with manual CRM tagging and self-reported attribution ("How did you hear about us?") on forms. As your pipeline grows, graduate to a B2B-specific tool.</p><p id="">Whatever you choose, remember this: 91% of marketers say attribution is important to their success, but only 31% are confident in their current models (MarketingLTB 2025). The confidence gap isn't a tool problem. It's a data problem. Start with the completeness of your data, then pick the model.</p><h2 id="">The Future of Marketing Attribution: From Scores to Stories</h2><p id="">The attribution industry is going through a fundamental shift. For two decades, the question has been "which channel gets credit?" The next decade will be about "what actually happened?"</p><p id="">Three forces are driving this change.</p><p id=""><strong id="">First, buying groups are getting larger and harder to track.</strong> Forrester's 2026 data shows that when a purchase includes AI features, the buying group doubles in size. More stakeholders means more interactions, more untracked channels, and more phantom touchpoints that traditional tools miss.</p><p id=""><strong id="">Second, AI is enabling a new kind of analysis.</strong> Instead of applying rules to incomplete data, AI agents can now reason across evidence from multiple sources (CRM records, emails, transcripts, calendars) and reconstruct what likely happened. This is agentic analysis, and it's the foundation of forensic attribution.</p><p id=""><strong id="">Third, executives are losing patience with attribution theater.</strong> Gartner's research shows revenue growth remains the top priority for 46% of CMOs in 2026, but budgets have flatlined at 7.7% of revenue, down from 11% pre-pandemic. When every dollar is scrutinized, attribution that produces scores nobody trusts isn't useful. Attribution that tells evidence-backed stories about what influenced revenue is.</p><p id="">The marketing attribution tools market is projected to reach $10.2 billion by 2032 (Gitnux 202
16706). But the winners won't be the tools with the fanciest dashboards. They'll be the ones that solve the data completeness problem first and deliver narratives that revenue teams actually believe.</p><p id="">Mike Harty of The B2B Stack captured it well: <em id="">"Perfect attribution will never exist in B2B. Because buyers are human, journeys are collective, intent forms invisibly, behaviour fragments, and privacy continues evolving. The future of attribution is not certainty. It's signal intelligence."</em></p><p id="">We agree. And we'd add: the future is forensic.</p>`,"4-ways-upside-cleans-your-data-out-of-the-box":`<h2 id="">‍<strong id="">Why clean data comes first</strong></h2><p id="">B2B attribution isn’t just about models or math, it's about cause and effect. One of the first insights we had as we started on the journey to tackle attribution: you can’t understand what worked if you don’t understand what happened.</p><p id="">That’s the core problem with attribution today. Buyer journeys in B2B stretch over months or years, with hundreds of touchpoints and dozens of stakeholders. But the systems we rely on to track them. CRMs, marketing automation software, email, calendars only capture fragments of that journey. They’re messy, duplicated, incomplete, and siloed.</p><p id="">‍</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/upside-data-cleaning-clean-data-comes-first-1.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">If you feed that “Swiss cheese data” into any attribution model, you get Swiss cheese results, or as some say, garbage in, garbage out. That’s why most teams end up abandoning complex attribution models and falling back to naive last-touch reporting. It’s not that they believe last-touch to be accurate; it’s just <em id="">easier</em> than pretending broken data can support sophistication.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/upside-data-cleaning-clean-data-comes-first-2.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">Upside approaches it differently. We assume your systems are <em id="">signals</em>, not unquestionable truth. Then we reconstruct the actual story of the deal using a knowledge graph designed to handle complex relationships. Out of the box, here are four ways we clean and enhance your GTM data so you can finally trust it.</p><h2 id=""><strong id="">1. Persona resolution</strong></h2><p id="">Buyers appear across systems under different guises, from a Gmail address on an event signup, a Salesforce lead without a job title that is the same person appearing on a corporate email on an opportunity.</p><p id="">Upside automatically merges these into one unified identity. That means both one complete record of a person’s journey across systems AND&nbsp;events and campaigns get the credit they deserve. <br></p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/upside-data-cleaning-1-persona-resolution.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h2 id=""><strong id="">2. Buying group detection</strong></h2><p id="">Every deal has a buying group, but CRMs rarely capture everyone involved. AEs sometimes only add the minimum number of contacts their leaders require, leaving out key influencers.</p><p id="">Upside automatically reconstructs the <em id="">real</em> buying group by scanning emails, calendar invites, and meeting transcripts. We don’t rely on what was manually logged. Instead, we spider out the connections so you see the actual group of stakeholders who shaped the decision.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/upside-data-cleaning-2-buying-group-detection.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h2 id=""><strong id="">3. Touchpoint direction detection</strong></h2><p id="">Not every touchpoint means the same thing, for example <em id="">sending an email isn’t the same as clicking on it.</em> Upside automatically distinguishes between:</p><p id=""><strong id="">Engagements</strong> → what the customer actually did (clicked, replied, attended).<br></p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/upside-data-cleaning-3-touchpoint-direction-detection-1.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id=""><strong id="">Attempts (“bids”)</strong> → what your team tried to do (sent, invited, called).<br></p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/upside-data-cleaning-3-touchpoint-direction-detection-2.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">This lets you separate effort from impact and see when true momentum measured as engagements over time shifted on a deal and what drove that shift.</p><h2 id=""><strong id="">4. Email chain reconstruction</strong></h2><p id="">Email is where deals live, but it can also be where attribution breaks down. Execs don’t track their emails or log their intros, some reps track, others don’t and sometimes forwarded threads disappear into the ether and the first thing you find tracked on an opp is a meeting. Upside reconstructs email chains, including forwarded ones and trunks them into singular touchpoints appearing at the appropriate time in a journey. If a CEO forwards an intro, we pull it into the record. If an AE joins a forwarded thread, we stitch it back into the journey. That way, you can see the full conversation and how it interacted with other deal activities.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/upside-data-cleaning-4-email-chain-reconstruction.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h3 id=""><strong id="">Why this matters</strong></h3><p id=""><em id="">If you don’t have a good understanding of what happened, there’s no way you can have a good understanding of what worked. </em>That’s why Upside starts with cleaning and structuring data. Persona resolution, buying group detection, touchpoint direction, and email chain deconstruction aren’t just conveniences, they are the foundation for attribution you can trust. But clean data isn’t the end goal. It’s the beginning of attribution that actually helps you make better decisions. With Upside we think about is as a pyramid:</p><ol id=""><li id=""><strong id="">What happened</strong> → Reconstruct the deal story.<br></li><li id=""><strong id="">What worked</strong> → Analyze which signals truly mattered.<br></li><li id=""><strong id="">What to do next</strong> → Forecast, allocate, and decide with confidence.<br></li></ol>`,"8-b2b-attribution-assassins-and-how-to-beat-them-with-agentic-analysis":'<h1 id=""><strong id="">Intro: “Is it just me…?&nbsp;</strong></h1><p id="">If you’ve ever stared at an immaculate-looking funnel report and thought <em id="">“this feels wrong”</em>, you’re not alone. Modern marketers bend over backwards to label every click, form-fill, webinar, and handshake – yet the story in the CRM still reads like a half-finished novel. It’s not because you’re bad at tagging. It’s because humans are…well, human. They ghost meetings, swap tickets, clear cookies, and generally refuse to behave like tidy rows in a spreadsheet.</p><p id="">At Upside, we’ve spent the last year watching attribution break in the wild. The good news: the chaos is patterned. We studied eight of the most common culprits that pop up again and again so you don’t have to. Recognizing them is the first step; using an agentic, forensic model to <em id="">reason</em> around them is the real fix. Let’s meet the offenders.</p><h2 id="">1. The Invite Swapper</h2><blockquote id="">"<em id="">I can’t make it – sending my colleague instead.</em>"</blockquote><p id="">Your VIP Sporting Event looks like a no-show in Mark’s record, even though Jenna from his team actually showed up, got engaged, and later became the champion. Because nobody backfilled the attendee list (did we ever get her email address?), your event ROI just evaporated.</p><p id=""><strong id="">What it breaks:</strong> Event → Opp attribution<br></p><p id=""><strong id="">Agentic Save:</strong> An agent can link the AE’s follow up email thread to Mark’s original event registration and stitch the story back together.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/attribution-saboteurs-1-invite-swapper.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">‍</p><h2 id=""><strong id="">2. The Zero-Click User</strong></h2><blockquote id=""><em id="">Looks admiringly at your ads, but never clicks one</em>.</blockquote><p id=""><strong id="">What it breaks:</strong> Ad → Opp attribution<br></p><p id=""><strong id="">Agentic save:</strong> An agent can detect mentions of ad influence and links in emails. Call transcript and SFDC notes, revealing that ads did actually make a difference in the deal.&nbsp;</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/attribution-saboteurs-2-zero-click-user.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">‍</p><h2 id=""><strong id="">3. The Contactless Closer</strong></h2><blockquote id=""><em id="">“I sell to people, not opportunity contact roles in Salesforce.”</em></blockquote><p id="">The AE logs the opp but has precisely zero opportunity contact roles listed. They have a great sense of who they’re selling to, but your attribution engine thinks you’re selling a deal to thin air.&nbsp;</p><p id=""><strong id="">What it breaks:</strong> No attribution due to no contacts</p><p id=""><strong id="">Agentic Save:</strong> Entity resolution fills the gap, matching calendar invites, email threads, and meeting transcripts to detect the entire buying group, even if they don’t exist in y
1670our CRM as records.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/attribution-saboteurs-3-contactless-closer.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">‍</p><h2 id=""><strong id="">4. The Badge-Scanner Avoider</strong></h2><blockquote id=""><em id="">They hover at your booth or after your talk, death-gripping the lanyard.</em></blockquote><p id="">Great vibes, no scan. By day three of the show, your reps can’t even remember the face, let alone the name or company.</p><p id=""><strong id="">What it breaks:</strong> Conference/tradeshow → Opp attribution<br></p><p id=""><strong id="">Agentic Save:</strong> Follow-up emails and meeting transcripts can triangulate who was actually there and influenced, even if there’s no record of it.&nbsp;</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/attribution-saboteurs-4-badge-scanner-avoider.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">‍</p><h2 id=""><strong id="">5. The Serial Job Swapper</strong></h2><blockquote id=""><em id="">Same human, brand-new email address.</em></blockquote><p id="">They loved you at their last company and brought you into every new role. Unfortunately, your CRM treats <em id="">[email protected]</em> and <em id="">[email protected]</em> as two completely different people.</p><p id=""><strong id="">What it breaks:</strong> Visibility into what’s truly inbound vs. champion-led</p><p id=""><strong id="">Agentic Save:</strong> Identity resolution ties the two records together and flags “repeat champion” for your nurture team. Even better if they talk about their previous role on a call, leaving fingerprints of the association in transcripts.<br>&nbsp;</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/attribution-saboteurs-5-serial-job-swapper.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">‍</p><h2 id=""><strong id="">6. The Invisible Referrer</strong></h2><blockquote id=""><em id="">Not in the meeting, and not in the CRM. But they’re the reason the meeting exists.</em></blockquote><p id="">They make a quiet connection, then step aside. The buyer engages, the conversation shifts hands, and momentum builds – all without the system ever knowing who opened the door.</p><p id=""><strong id="">What it breaks:</strong> Referral influence and top-of-funnel clarity.</p><p id=""><strong id="">Agentic Save:</strong> Agents crawl the email threads to detect referral-driven introductions that trigger downstream engagement.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/attribution-saboteurs-6-invisible-referrer.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">‍</p><h2 id=""><strong id="">7. The Double Tapper</strong></h2><blockquote id=""><em id="">The first touch gets noticed. The second gets the reply.</em></blockquote><p id="">Webinar in the inbox. Dinner invite in the calendar. Now you’ve got their attention. The Double Tapper doesn’t wait for one channel to work – they stack the signals. <strong id="">One warms, one converts.</strong>&nbsp;</p><p id=""><strong id="">What it breaks:</strong> True source of engagement from multiple touchpoints.</p><p id="">‍<strong id="">Agentic Save:</strong> An agent recognizes when sequential touches, like emails and calendar invites, converge from different sources to create a compound influence message that single-channel attribution misses.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/attribution-saboteurs-7-double-tapper.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">‍</p><h2 id=""><strong id="">8. The Loop-In Lead</strong></h2><blockquote id=""><em id="">Same partner, new door. They make the quiet intro, and suddenly there’s a meeting on the books. No outbound, no form fill, just trust doing the work.</em></blockquote><p id="">
1670The CRM logs it as inbound. The referral field stays blank. The partner’s role? <strong id="">Erased from the record. </strong>The deal moves, revenue lands, but the signal gets lost. No credit, no visibility, no way to repeat what worked.</p><p id=""><strong id="">What it breaks: </strong>Partner influence and repeatability.</p><p id=""><strong id="">Agentic Save:</strong> Though attribution fields fall silent, an agent surfaces partner-triggered momentum – catching trusted referrals before they disappear into inbound noise.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/attribution-saboteurs-8-loop-lead.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">‍</p><h2 id=""><strong id="">So…now what?</strong></h2><p id="">If any (or all) of these sound painfully familiar, it’s not your tracking that’s broken. It’s the model. Legacy attribution models were built for linear, single-device journeys and perfect CRM hygiene – things that simply don’t exist anymore.</p><p id="">Upside’s agentic model considers <strong id="">context</strong> alongside isolated events. It asks, <em id="">“What actually happened between these two cataloged touchpoints?”</em> and actively gathers evidence from calendars, emails, events, and web sessions to fill in the blanks; just like a great RevOps analyst would, only faster and at scale.</p>',"9-metrics-modern-b2b-teams-use-to-understand-the-real-impact-of-their-campaigns-content-and-channels":`<h1 id="">Enterprise deals don’t behave the way attribution models pretend they do.</h1><p id="">And yet, most B2B teams still try to answer high-stakes questions like: “<em id="">Did this campaign work? What moved this deal? Which channels deserve more budget?</em>” Using systems built under the premise that a single person, a single form fill, and a neatly trackable touchpoint “caused” an opportunity.</p><p id="">That premise doesn’t really work.</p><p id="">In modern ABM cycles, a single deal can involve an extensive network of stakeholders, scattered across functions, geographies, and touchpoint surfaces. You may see dozens of interactions, many invisible to CRM, happening across emails, meetings, forwarded threads, social channels, and unstructured buyer behavior.</p><p id="">We’ve all lived through this chaos. And all Upside customers’ raw data shows the same pattern long before we clean it: duplicates, missing timestamps, disjointed personas, off-CRM conversations, and signals buried in meeting notes, call transcripts or email chains. Traditional attribution tries to compress that complexity into a zero-sum game. If marketing gains credit, sales must lose it, or vice versa, driving arguments over credit and a lack of collaboration.</p><p id="">But enterprise buying cycles are <strong id="">not</strong> zero-sum. When done right, they are <strong id="">collaborative, cumulative, </strong>and<strong id=""> deeply multi-threaded.</strong></p><p id="">At Upside, we aim to replace this <strong id="">illusion of precision</strong> with metrics designed for how deals actually happen using <a href="/blog/what-is-forensic-attribution">forensic attribution</a>. Below are nine metrics modern teams use when they want to understand the <em id="">full</em>, multi-dimensional impact of their GTM efforts across the entire account journey: before, during, and beyond the opportunity.</p><h1 id=""><strong id="">Why Identifying the Real Buying Group Matters More Than Ever</strong></h1><p id="">You cannot measure influence accurately if you don’t know who the real buyers are. Most CRMs list a single “Primary Contact” roleplayer or a sparse handful of names, if any, and few organizations focus on enforcing CRM contact role cleanliness — AEs would rather do what they do best, sell the product vs doing <em id="">“data entry</em>”. But enterprise deals are shaped by a constellation of actors: the economic buyer, the technical screener, the blocker, the champion, the end user, the skeptic, the change-management owner, and others who pop in and out of the process.</p><p id="">Failing to consider activity from the whole buying group can often lead to:</p><h3 id=""><strong id="">1. Wrong conclusions about what worked</strong></h3><p id="">If only the champion is tracked, an entire tail of influence generated by campaigns among engineers, finance, operations, or procurement remains invisible.</p><h3 id=""><strong id="">2. Misallocated budget</strong></h3><p id="">When your reporting dashboards miss the real impact on opportunities, teams end up under-investing in the very channels activating their influencers, technical reviewers, or even deal sponsors.</p><h3 id=""><strong id="">3. Broken GTM alignment</strong></h3><p id="">Marketing, SDR, and Sales end up optimizing for different people, sometimes not the ones who actually drive the deal forward.</p><p id="">To measure what matters, you need to detect the <strong id="">actual</strong> buying group - <em id="">who participated, who engaged, who influenced, and when</em>
1670.</p><p id="">This is where Upside’s approach is fundamentally different.</p><h1 id=""><strong id="">How Upside Detects Activation, Influence, and Buying Groups Using AI</strong></h1><p id="">Upside starts from a simple but radical principle:</p><p id=""><strong id="">You can’t attribute what you can’t see.</strong></p><p id="">To reconstruct how deals really moved, Upside ingests signals across the entire GTM stack CRM, marketing automation, email inboxes, calendars, meeting transcripts, website activity, content interactions, and more. Then, we use a combination of identity resolution, email-chain reconstruction, and AI-powered detection logic to unify everything into a clean, objective timeline.</p><h3 id=""><strong id="">1. Complete Identity Resolution</strong></h3><p id="">People show up under multiple emails, mismatched CRM records, and forwarded threads. Upside merges them into a single identity, so you don’t treat five duplicates as five people.</p><h3 id=""><strong id="">2. Buying Group Reconstruction</strong></h3><p id="">We identify <strong id="">relevant</strong> stakeholders: those who attended relevant meetings or were involved in relevant email threads. We only count participants with engagements as relevant, meaning someone added to a thread who never replied is not considered an active buying group participant.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/b2b-event-attribution-4-buying-groups-incomplete.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h3 id=""><strong id="">3. Directional Touchpoint Detection</strong></h3><p id="">Upside distinguishes <strong id="">attempts</strong> (emails sent, invites, outbound calls) from <strong id="">engagements</strong> (replies, acceptances, meetings held, content consumed). That distinction is essential for measuring influence: only campaigns and emails that drive engagement are counted.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/b2b-impact-metrics-3-directional-touchpoint-detection.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h3 id=""><strong id="">4. AI Detection of Activation Moments</strong></h3><p id="">Upside’s AI agents scan the unified timeline to determine when an account or opportunity moved from “quiet” to “active.” Those moments are summarized into “Milestone Analyses” helping teams understand what really drives their pipeline.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/b2b-impact-metrics-4-ai-detection-activation-1.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h1 id=""><strong id="">The 9 Metrics That Reflect How Enterprise Deals Really Happen</strong></h1><p id="">Below are the nine metrics that replace outdated attribution models with a more accurate, more actionable understanding of influence. In Upside, these metrics can be applied on campaign reports, channel reports, web reports, or even rep reports, and can be filtered by account and opportunity fields or by date.&nbsp;</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/b2b-impact-metrics-4-ai-detection-activation-2.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h2 id=""><strong id="">1. Deal Contacts Engaged</strong></h2><p id=""><strong id="">Who from the true buying group actually engaged?</strong></p><p id="">In enterprise deals, engaging the <em id="">right</em> people matters far more than generating raw volume. This metric reveals whether your efforts reached the actual decision-makers, influencers, blockers, and champions.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/b2b-impact-metrics-1-deal-contacts-engaged.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h2 id=""><strong id="">2. AI-Detected Opportunities Activated</strong></h2><p id="">Which opportunities moved into “active mode” as a result of your touchpoints?</p><p id="">Activation rarely looks like a clean form fill. Upside detects the real inflection point, the moment meaningful engagement begins, providing one of the most accurate “what actually worked” signals in modern GTM.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/b2b-impact-metrics-2-ai-detected-opportunities.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h2 id=""><strong id="">3. Opportunities Influenced</strong></h2><p id="">Which in-cycle opportunities experienced momentum or new engagement because of your touchpoints?</p><p id="">Upside counts influence someone's engagement in the healed buying group. This influence metric is superior to other, more generalized influence metrics because:</p><ul id=""><li id="">It only looks at the buying group, but an enhanced version to what most other systems can report on</li><li id="">It only looks at engagements - meaning non-active campaign memberships (i.e. invites, emails sent, etc) don’t count as influence.</li></ul><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/b2b-impact-metrics-3-opportunities-influenced.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h2 id=""><strong id="">4. Opportunities Created Post-Engagement</strong></h2><p id="">Which new deals opened within a window after someone engaged?</p><p id="">This metric shows how many new deals were created after one of the buying group members engaged with the website, channel, or campaign. This is a great metric to help you understand what is actually helping to create new pipeline vs just influencing it.&nbsp;</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/b2b-impact-metrics-4-opportunities-created-post.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h2 id=""><strong id="">5 and 6. Opportunities Influenced In-Cycle and Progressed Opportunities</strong></h2><p id="">Which touchpoints meaningfully affected or helped progress active deals?</p><p id="">These metrics complement Opportunities Created Post engagement by showing how many deals were influenced in flight. While some teams are heavily focused on pipeline, marketing, partnerships, or exec touches can have a significant impact on deal acceleration. These metrics help you understand what is actually progressing pipeline and what you need to keep investing in to help move deals forward.&nbsp;</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/b2b-impact-metrics-5-6-opportunities-influenced.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h2 id=""><strong id="">7 and 8. Accounts Activated and Accounts Reactivated</strong></h2><p id="">Which accounts showed meaningful first engagement because of your effort?</p><p id="">This metric shows which efforts drive the top of funnel awareness and get the first engagement on an account or the first engagement after a long period of inactivity.&nbsp;</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/b2b-impact-metrics-7-8-accounts-activated.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h2 id=""><strong id="">9. Accounts Engaged Outside the Opportunity Cycle</strong></h2><p id="">Selling into large accounts takes many months and sometimes many years. This metric shows all the early influences current systems might miss entirely. Some of the most essential GTM impact happens months before an opportunity exists.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/b2b-impact-metrics-9-accounts-engaged-outside.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h1 id=""><strong id="">The Future of Measurement Is Forensic, Not Zero-Sum</strong></h1><p id="">The old playbook asked: <strong id="">“Which single touchpoint deserves credit?”</strong></p><p id="">The new playbook asks: <strong id="">“How did this deal actually happen, and where did we create real impact — together?” </strong>Reconstructing the full account story using clean, unified data unlocks the ability to answer questions with confidence, building&nbsp; the foundation for answering the only question that truly matters:</p><p id=""><strong id="">What should we do next to win more deals?</strong></p>`,"how-ai-is-changing-marketing-attribution":'<blockquote>The following is a guest post by <a href="https://www.linkedin.com/in/cariludietric
1670h/">Carilu Dietrich</a>, and was originally published on <a href="https://www.carilu.com/p/how-ai-is-changing-marketing-attribution">https://www.carilu.com/p/how-ai-is-changing-marketing-attribution</a>.<br><br><em>Carilu Dietrich is a former CMO, most notably the head of marketing who took Atlassian public. She currently advises CEOs and CMOs of high-growth tech companies. Carilu helps leaders operationalize the chaos of scale, see around corners, and improve marketing and company performance.</em></blockquote><p><em>‍</em><br>Have you ever spent hours (or days) reconstructing micro details of marketing, sales, and partner activity behind a big win to show marketing’s <em>real</em> impact at a board meeting?</p><p>AI is fundamentally changing what’s possible: pulling signals from calls, emails, documents, chats, and CRM data, and analyzing momentum across all of it, to understand what actually moves deals forward.</p><p>For years, marketers did the best they could with incomplete data and rigid, incomplete measurement frameworks. First-, last-touch and multi-touch attribution weren’t wrong so much as necessary shortcuts, compressed versions of reality in a world where most meaningful signals and full data simply weren’t accessible.</p><p>That’s what’s changed. AI is set to massively improve attribution by reconstructing the <em>full story</em> of a deal and letting patterns of influence emerge across people, time, and activity - instead of relying on proxy weighting.</p><p>I’ve been watching <a href="https://www.linkedin.com/in/madalina/"><strong>Mada Seghete</strong></a><strong> and </strong><a href="https://www.linkedin.com/in/alexdbauer/"><strong>Alex Bauer</strong></a><strong>, co-founders of </strong><a href="/"><strong>Upside</strong></a> closely over the past year. What first caught my attention wasn’t just the breadth of signals they were pulling together, but how they visualized them, creating the automated version of the board slides I used to build by hand, with many touches, many buyers, over long periods of time, finally telling a complete story.</p><p>After my <a href="https://www.carilu.com/p/brand-vs-demand-isnt-a-budget-fight"><em>Brand vs. Demand</em> <em>is a Measurement Crisis</em></a> post showed that many marketers want to invest more in brand but feel constrained by attribution limitations, I asked Mada and Alex if they would share how they’re approaching marketing attribution in an AI-first world. Below she covers the following with screenshots that will have you drooling : )</p><ul><li><strong>Why Traditional Models Fail</strong></li><li><strong>What’s Actually Changed with AI<br>1. Unstructured context is now capturable<br>2. Analysis that was too expensive is now feasible<br>3. We moved from data scarcity to data abundance</strong></li><li><strong>A Different Approach: Questions Instead of Models</strong></li><li><strong>The Prerequisite: Data Quality</strong></li><li><strong>What This Looks Like in Practice</strong></li><li><strong>How This Applies at Different Stages of Growth</strong></li></ul><h2><strong>I. The Attribution Problem Everyone Knows</strong></h2><p>Marketers hate attribution because it has been fundamentally inaccurate. It drives endless debates and turf wars over credit. It over-credits what’s easy to measure: late-stage clicks, form fills, “sourced” fields, and under-credits what’s hard to track: brand awareness, events, partner influence, the dark funnel, internal forwarding chains.</p><p>The problem isnt’t effort it is access. Marketers can only measure a fraction of the signals shaping deals, so attribution models are often necessary shortcuts rather than sources of truth.</p><p>Plus the data they DO have is bad: <a href="https://www.adverity.com/state-of-play-research-data-quality-2025">Adverity’s 2025 research</a> found nearly half (45%) of the data marketers use to make decisions is incomplete, inaccurate, or out-of-date. And 43% of CMOs believe less than half of their marketing data can be trusted.</p><h2><strong>II. Why Traditional Models Fail</strong></h2><p>Deals are too complex for any single model.</p><p>My experience: I spent a full day analyzing 10,000 touchpoints for one customer’s $3M deal. The activation moment? A BD partner convinced an executive to take a look at the tool. The exec forwarded a note to a manager, who forwarded it to the client team. This was in addition to hundreds of marketing and sales interactions that built awareness.</p><p>The insight: <strong>No rule-based system would catch this.</strong> The internal team didn’t even know it happened. And no human would invest this time for every deal.</p><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!QgVs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18d54360-9edb-4bd2-9286-3d2813feacdc_960x540.png"><div><img src="/images/blog/ai-marketing-attribution-ii-traditional-models-fail-1.jpeg" alt="" width="auto" height="auto" loading="auto"></div></a></figure><p>Even sophisticated multi-touch approaches struggle because:</p><ul><li><strong>Tracking is incomplete and noisy</strong> - identity gaps, cross-device behavior, missing interactions</li></ul><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!R_PQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c30f613-81b1-45c5-a568-b3f54dfcd1bf_1600x600.png"><div><img src="/images/blog/ai-marketing-attribution-v-prerequisite-data-quality-1.jpeg" alt="" width="auto" height="auto" loading="auto"></div></a></figure><p><em>Image: Example of the type of persona data found in different systems</em></p><ul><li><strong>Correlation is often mistaken for causation</strong></li><li><strong>Journeys get oversimplified</strong> -everyone wants to know “but what is the one thing that really brought this deal?”</li><li><strong>External factors distort observed paths</strong> - pricing, competition, timing</li><li><strong>True incrementality still requires experimentation</strong></li></ul><p>So leaders settle for “good enough” models they don’t trust (because they need something for Finance), while actually running on instinct.</p><h2><strong>III. What’s Actually Changed with AI</strong></h2><p>Three fundamental shifts:</p><h3><strong>1. Unstructured context is now capturable</strong></h3><p>Conversation intelligence extracts signals from calls, emails, and meetings. The “why” behind a demo request often lives in buyer language, not UTM parameters.</p><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!YAMR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7d318a26-7602-4c6b-a815-7a758fbcd843_1600x1374.png"><div><img src="/images/blog/ai-marketing-attribution-1-unstructured-context-now.jpeg" alt="" width="auto" height="auto" loading="auto"></div></a></figure><p><em>Image: Example of how an LLM can extract signals from unstructured data.</em></p><h3><strong>2. Analysis that was too expensive is now feasible</strong></h3><p>Questions like “what sequence of touches typically precedes a closed-won enterprise deal?” have always been theoretically answerable. The problem was the work required: manually reconstructing deal timelines, normalizing across systems to recover signals buried inside unstructured data, and accounting for duplicate or missing touchpoints.</p><p>For most teams, the insight wasn’t worth the effort. But thanks to AI, that math has changed.</p><h3><strong>3. We moved from data scarcity to data abundance</strong></h3><p>The context exists across calls, emails, CRM, marketing automation, web behavior, and chat. The hard part is stitching it into a coherent, trustworthy account story.</p><h3><strong>The key reframe:</strong></h3><p>Static rules like “credit goes to sales unless there was a marketing event within 7 days” aren’t stupid, they have been necessary compromises. When the cost of answering more nuanced questions exceeded their value, compression was rational.</p><p>But that’s no longer the case.</p><h2><strong>IV. A Different Approach: Questions Instead of Models</strong></h2><p><strong>The AI paradigm shift:</strong> AI has enabled teams to stop forcing deals into attribution models and start answering specific questions about each deal. Then aggregate those answers into insights and recommendations.
1670</p><p>Attribution has always been greyscale—forcing nuanced reality into a few buckets. What’s now possible is answering “what worked” questions in full color, deal by deal, then aggregating patterns.</p><h3><strong>The questions you can now answer:</strong></h3><p><strong>What actually activated this deal?</strong> Example: “The inflection point was a partner referral to the CFO, followed by an internal forward chain we wouldn’t have seen in CRM.”</p><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!NgZy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5c84453-4c93-492c-bc08-0037165d4ca0_1600x793.png"><div><img src="/images/blog/ai-marketing-attribution-questions-can-now-answer-1.png" alt="" width="auto" height="auto" loading="auto"></div></a></figure><p><em>Image: Example how AI can make connections between structured and unstructured data to understand the deal story.</em></p><p><strong>What role did each channel play at each stage?</strong> Example: “Paid search drove initial awareness, but the webinar attendance correlated with deals moving from Stage 2 to Stage 3.”</p><p>One of our customers found that a third of their revenue in 2025 came from 3rd party referrals that did not show up in any other attribution models.</p><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!xkjw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95faa58-3d61-43c3-96e2-6689dc10d99f_1600x983.png"><div><img src="/images/blog/ai-marketing-attribution-questions-can-now-answer-2.png" alt="" width="auto" height="auto" loading="auto"></div></a></figure><p><em>Image: Example of results from Upside deep research agents looking for specific channel influence on deals .</em></p><p><strong>What sequences lead to new opportunities?</strong> Example: “Deals that start with content engagement + SDR outreach convert at 2x the rate of cold outbound alone.”</p><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!fJsJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fffbbc058-35b9-4a9e-96d7-4b314c697e0e_1600x491.png"><div><img src="/images/blog/ai-marketing-attribution-questions-can-now-answer-3.png" alt="" width="auto" height="auto" loading="auto"></div></a></figure><p><em>Image: Example of GTM motions detected by Upside AI Deep Research agents analyzing a set of deals.</em></p><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!SQpu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4cd44710-8663-4955-b3d5-db8c436a66e9_1600x431.png"><div><img src="/images/blog/ai-marketing-attribution-questions-can-now-answer-4.png" alt="" width="auto" height="auto" loading="auto"></div></a></figure><p><em>Image: Example of GTM channel progression detected by Upside AI Deep Research agents analyzing a set of deals.</em></p><p><strong>Who are the real buying personas, and which ones do AEs consistently miss?</strong> Example: “Technical evaluators appear in 80% of closed-won deals but are added as contact roles in only 30%.”</p><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!c4yv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc213099e-2b58-4e19-8c10-b205f757f6b5_1600x626.png"><div><img src="/images/blog/ai-marketing-attribution-questions-can-now-answer-5.png" alt="" width="auto" height="auto" loading="auto"></div></a></figure><p><em>Image: Example of persona presence detected in buying groups (beyond contact roles in Salesforce) by Upside and impact on win rates.</em></p><h2><strong>V. The Prerequisite: Data Quality</strong></h2><p><strong>The critical caveat:</strong> AI is only as good as its data.</p><p>Wrong campaign dates, missing statuses, incomplete records. Without careful guidance, mess like this causes AI to reach wrong conclusions just as it would a human. Garbage in, garbage out.</p><p>In my experience, the prerequisite for AI-powered deal analysis is a data layer that:</p><ul><li>Resolves identities across systems</li><li>Reconstructs timelines from fragmented touchpoints</li><li>De-duplicates and heals messy GTM data</li></ul><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!R_PQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c30f613-81b1-45c5-a568-b3f54dfcd1bf_1600x600.png"><div><img src="/images/blog/ai-marketing-attribution-v-prerequisite-data-quality-1.jpeg" alt="" width="auto" height="auto" loading="auto"></div></a></figure><p><em>Image: Example of the type of persona data found in different systems needed to be merged into one identity.</em></p><p>That’s what my team has been building for the past two years. But the principle applies regardless of tooling: if your underlying data is scattered and incomplete, you’ll just get bad answers more quickly. Even AI can’t perform miracles.</p><p><strong>AI also needs a way to be checked AND check itself.</strong> While AI is getting better, it still makes mistakes and needs a way to be debugged. Any analytics and data tool using AI needs a debug console—a way that a human can check the results.</p><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!By15!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0538082-6c0a-43b5-af38-ae2e93ad1486_1600x789.png"><div><img src="/images/blog/ai-marketing-attribution-v-prerequisite-data-quality-2.png" alt="" width="auto" height="auto" loading="auto"></div></a></figure><p><em>Image: Visual representation of a deal with filters and citations for AI insights.</em></p><h2><strong>VI. What This Looks Like in Practice</strong></h2><p><strong>Custom, smart insights for every org: </strong>Traditional rules-based models often get it wrong. But you can ask AI to understand what type of influence a campaign actually had on an opportunity, and whether it was the first meaningful interaction with the buying group. AI does this much better than rules-based systems because it won’t get bogged down by edge cases, like someone visiting the website during an event before the attendee list was uploaded, which would make direct traffic look like the first touch.</p><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!iXUP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19c31f72-6e71-4c21-9fe0-8d21a9caa29c_1600x1014.png"><div><img src="/images/blog/ai-marketing-attribution-vi-what-looks-like-1.jpeg" alt="" width="auto" height="auto" loading="auto"></div></a></figure><p><em>Image: Events influence on deals sorted by type of touch in the deal cycle defined by customer.</em></p><p><strong>Faster reporting + hidden signals:</strong> <a href="/case-studies/dscout-driving-confident-growth-with-upside">Another reduced reporting time from 2-3 hours to minutes</a> and identified a 5% pipeline increase from in-person hosted events. This signal was invisible in their previous attribution model.</p><p><strong>Measuring things that were impossible:</strong> AEO influence on pipelines is incredibly hard to measure because people don’t click on links. But in many cases prospects mention how they heard about you on calls or in forms. By combining citation traffic, call mentions, and email threads, Assembled tracked actual AEO influence on the pipeline.</p><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!BH06!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F31f54fa5-df9
16700-4843-876a-cab7204bb541_1600x634.png"><div><img src="/images/blog/ai-marketing-attribution-vi-what-looks-like-2.png" alt="" width="auto" height="auto" loading="auto"></div></a></figure><figure class="w-richtext-figure-type-image " data-rt-type="image" data-rt-align=""><a target="_blank" href="https://substackcdn.com/image/fetch/$s_!2AQ3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54cbb478-781d-48c1-ab8d-e423c60109f7_1600x845.png"><div><img src="/images/blog/ai-marketing-attribution-vi-what-looks-like-3.png" alt="" width="auto" height="auto" loading="auto"></div></a></figure><p><em>Image: AEO analysis for Assembled team.</em></p><h2><strong>VII. How This Applies at Different Stages of Growth</strong></h2><p>This approach requires enough deal volume to see patterns.</p><p><strong>If you’re running a large enough business</strong> (meaningful spend across multiple channels, significant deal volume, consistent GTM investment) then asking “what actually happened in our deals?” is one of the most important questions you can answer.</p><p><strong>But if you’re earlier-stage, the reality is different.</strong> Volumes are lower. Noise is higher. You might do forensic deal analysis and see patterns that don’t generalize yet. That doesn’t mean the approach doesn’t matter. It means how you use it has to evolve with you.</p><p><strong>For smaller teams, the goal isn’t statistical significance—it’s building directional confidence.</strong> You’re looking for patterns: Do deals that involve events close faster? Do certain personas correlate with larger deals? Even without perfect data, that framing matters.</p><p>The mistake smaller companies make isn’t that they can’t do this perfectly. It’s that they don’t do it at all. Or they force everything into last-touch attribution and conclude that nothing except bottom-funnel works.</p><h2><strong>VIII. Conclusion: A New Question</strong></h2><p>The wrong question has always been: <em>“Which attribution model should we use?”</em></p><p>The better question is: <em>“Do we actually know what happened in our deals?”</em></p><p>Attribution doesn’t have to be the starting point anymore. When you begin with reconstructing deal reality—who was involved, what signals mattered, how influence accumulated over time—the “what worked” answers emerge naturally from there.</p><p>And once you can defend those answers to Finance with real evidence, rather than simplified models or gut instinct, the budget conversations change entirely.</p><p>‍</p>',"how-to-build-a-visual-customer-journey-map-with-existing-gtm-data":'<h2 id="">Why is it important to understand the customer journey?</h2><p id="">Every closed deal has a story, but most companies only have clear visibility into the final chapter. There are clear dates for when the deal began and when it was signed, but everything else is often a blur. This is especially true of longer deal cycles in the B2B space, where there are often multiple stakeholders involved throughout the process.&nbsp;</p><p id="">But being able to tell the story of a deal is crucial to understanding what worked, so that your GTM team knows what to repeat to bring more customers in. The questions that often come up around customer journeys include: How did the prospect first hear about you? What sparked their interest enough to take a meeting? Who inside their organization drove the conversation forward? Without answers to these questions, you’re left guessing about what truly influences your pipeline. Or, even worse, relying on a handful of fields in your CRM that attempt to bucket a unique journey into a single source.&nbsp;</p><p id="">Customer journey research fills in that gap. It’s about reconstructing the sequence of meaningful interactions that move a buyer from awareness to action, so you can understand not just <em id="">what</em> happened, but <em id="">why</em> it happened. When done well, it can reveal the real decision-makers, pivotal touchpoints, and unseen forces that shaped the deal into what it was. Once you have clear visibility into this, your team can double down on activities that actually work, and stop wasting time, energy, and resources on those that don’t.&nbsp;</p><p id="">In this post, we’ll break down exactly how to build a complete, data-driven picture of your customer journey, from gathering and cleansing your data to mapping every influential activity, so you can accurately depict the story of any deal.&nbsp;</p><blockquote id=""><em id="">So how do you build one?!</em></blockquote><h2 id="">Make an inventory of your data</h2><p id="">Here’s an organized inventory of where you can usually find the core data for mapping your customer journey, along with the types of details to expect from each source:</p><p id=""><strong id="">CRM</strong></p><ul id=""><li id="">Deal lifecycle: opportunity stage history, open/closed dates, outcomes</li><li id="">Sales engagement data: logged emails, meeting invites, call notes</li><li id="">Accounts &amp; people: companies, leads, and contacts with associated context added by sales</li><li id="">Campaigns: event, webinar, and content touchpoints</li><li id="">Custom objects: any unique company-specific data models (e.g., product usage, contracts)</li></ul><p id=""><strong id="">Marketing Automation</strong></p><ul id=""><li id="">Web activity tied to identifiable individuals (page visits, form fills)</li><li id="">Marketing email activity (sends, opens, clicks)</li><li id="">Campaign participation records (may overlap with CRM campaigns)</li></ul><p id=""><strong id="">Meeting Recording Platforms</strong></p><ul id=""><li id="">Meeting metadata: date, time, duration, attendee lists</li><li id="">Conversation transcripts or summaries</li></ul><p id=""><strong id="">Other Systems &amp; Signals</strong></p><ul id=""><li id="">Any platform that logs customer or prospect actions (e.g., chat tools, community platforms, product analytics)</li><li id="">Actions can be behavioral (downloads, logins) or engagement-based (likes, shares, feedback)</li></ul><h2 id="">Bring all the data to one place</h2><p id="">Once you’ve identified the data points you want to use, consolidate them in a single location. Many companies opt for a data warehouse to make blending and querying easier, but you can start as simply as exporting the relevant records and creating one spreadsheet per account. The goal is to line up activities from different platforms so you can see the full sequence. For example, a prospect might click a LinkedIn ad to visit your website, register for a webinar, and later receive an email from sales. You only see the real story when web traffic, campaign activity, and email history are shown together in chronological order.</p><h2 id="">Annotate and cleanse the data</h2><p id="">Once all your data is in one place, you’ll likely spot inconsistencies, missing fields, or unclear actions that make it harder to tell a clean story. This is where annotation and cleansing come in. At a minimum, every activity should include:</p><ul id=""><li id=""><strong id="">Timestamp</strong>: The exact date and time the activity happened (date alone works if time isn’t available). This lets you accurately place events in sequence.<br><br></li><li id=""><strong id="">Action clarity</strong>: “Event” is not that useful. Did the prospect register for the event, or attend live? Make sure you’re capturing what actually happened, and identifying significant engagement.<br><br></li><li id=""><strong id="">Actor</strong>: Who performed the action? Was it the prospect or your internal team? Sending an email to a prospect is very different than receiving an email from one. <br><br></li><li id=""><strong id="">Context</strong>: How did the action happen? If someone visited a webpage, did they arrive via search, a direct link, a referral, or an email campaign? If they clicked an email link, which email did they engage with?</li></ul><p id="">These details transform raw activity logs into a narrative-ready dataset, albeit one that is likely to be getting unwieldy! But we’ll fix that next…</p><h2 id="">Filter down to people and periods that matter</h2><p id="">To tell a clear, actionable story, you can’t include every action from everyone tied to an account as the real signal will disappear in the noise. Focus only on <strong id="">significant</strong> actions taken by members of the <a href="/glossary/buying-group" id=""><strong id=""><em id="">buying group</em></strong></a>. Identifying that group can be done in a few ways, in order of accuracy:</p><ol id=""><li id=""><strong id="">Build your own buying group</strong>: Use context and activity patterns to assemble it yourself. Typically, this includes anyone who interacts directly with your sales reps, plus others who consistently appear in email threads or meetings. Usually the decision-maker is clear in any deal, and you’ll want to find the people that surround
1670/influence them. <br><br></li><li id=""><strong id="">Trust the CRM data</strong>: Use the contacts your sales reps have linked to opportunities as the buying group. This is the easiest method, but it’s often incomplete as busy reps often miss updating the CRM to add all the accurate buying group members. <br><br></li><li id=""><strong id="">Include everyone in the account</strong>: This is rarely worth it. You’ll drown in excess activity and end up reporting on people who had no real influence on the deal.</li></ol><p id="">With all activities neatly organized by date, you can sort them chronologically and zoom in on only the period relevant to your story. The right window depends on the question you’re trying to answer. Common examples include:</p><ul id=""><li id=""><strong id="">What activated this deal?</strong> From the earliest recorded activity up to the moment a meeting was accepted.<br><br></li><li id=""><strong id="">How did we win this deal?</strong> From the first meeting through contract signature.<br><br></li><li id=""><strong id="">How did we earn this upsell, cross-sell, or expansion?</strong> From the prior contract signature to the subsequent one.<br><br></li><li id=""><strong id="">How did each buying group member first hear about us?</strong> Look for the earliest engagement from each person.<br><br></li></ul><p id="">For this guide, we’ll use <em id="">“What activated this deal?”</em>—the most common scenario when answering, <em id="">“What should we invest more in to bring in more deals?”</em></p><h2 id="">Pick a moment, and look backwards</h2><p id="">Begin at the date/time of the first accepted meeting. Who accepted the calendar invite? Who showed up to the meeting? Those people should be members of your buying group.</p><p id="">Then ask: how did they get there? Usually, there’s an activity immediately preceding the meeting that provides a clue. It could be a sales rep outbounding the prospect, or a call record marked as “answered / meeting booked.” It could also be a marketing interaction that led to sales follow-up.</p><p id="">With true inbound deals, you might see a meeting accepted without ANY rep involvement either through a web chat or a meeting booking link on your site.</p><p id="">Keep going backwards: what made them inclined to take the meeting? Did they interact with your team in the past? Did they consume content that made them aware of your product or service? Maybe you met months ago at a tradeshow and they remembered your brand.</p><p id="">Meeting transcripts can be a goldmine here, as the “how we got here” story they share often surfaces in the first few minutes.</p><p id="">Your end goal is to identify <strong id="">the handful of activities that clearly influenced the journey for members of your buying group</strong>. Include older activities if they were impactful, but lean toward excluding activity that resulted in long gaps of inactivity or low momentum.&nbsp;</p><p id="">‍</p><h2 id="">Assemble the customer journey map</h2><p id="">A meaningful customer journey map for a particular customer includes:</p><ul id=""><li id="">The key stakeholders involved</li><li id="">The touchpoints that made a significant influence on the customer</li><li id="">A chronological timeline</li><li id="">An indicator for aggregate engagement across all members of the buying group. Often this is a line chart overlay that helps viewers understand when velocity picked up/dropped off.&nbsp;</li></ul><h2 id="">Examples</h2><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/customer-journey-map-examples-1.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">This customer journey map shows the five main members of the buying group and their engagement over time, leading up to the sales opportunity in question. It highlights the key events that built awareness among the buying group, as well as the connections between certain members. By mapping interactions chronologically, you can see not just who was involved, but how each person’s path into the deal unfolded.</p><p id="">There’s a clear moment when four out of five members attended the same demo meeting, represented by the horizontal line. Moments like this often signal a tipping point when interest shifts from individual curiosity to a collective evaluation. From here, the conversation typically accelerates, decision-making becomes more coordinated, and momentum builds toward a deal.</p><p id="">‍</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/customer-journey-map-examples-2.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">Here’s another example, this time in a horizontal format. It shows multiple attempts to close the deal before the main opportunity finally took shape in 2025. A map like this makes it clear how long a company has been working to engage an account before a meaningful opportunity emerges.</p><p id="">As is often the case with Account-Based Marketing (ABM) motions, those early touchpoints help build awareness, establish familiarity with your brand, and keep you top of mind so that when the right trigger appears, you’re already part of the conversation. Tracking these interactions over time highlights how persistence and multi-channel engagement can turn long-term pursuits into eventual wins.</p><h2 id="">Account Story tools can help</h2><p id=""><a href="/blog/what-is-forensic-attribution" id="">Forensic attribution platforms</a> make this kind of deep journey analysis possible and Upside was built for exactly this. We pull every relevant touchpoint from your CRM, marketing automation, sales engagement, calendars, and meeting recordings into a single, unified dataset. Then we heal and enrich that data, stitching together the full account view so you can filter out the noise, zoom in on pivotal interactions, and see the real story behind a deal.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/customer-journey-map-account-story-tools-can.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">
1670With Upside’s Account Explorer, you can scan thousands of tracked activities and instantly isolate the moments that actually mattered. If you’d like to learn more about how this works, check out this <a href="/#video" id="">3-minute video</a>!</p><p id="">When you can see the full customer journey, you stop making decisions based on hunches and start operating with precision. Every touchpoint, from a single web visit click to a critical meeting, becomes part of a bigger picture that shows what truly moves deals forward. By connecting the dots across your GTM data, you give your team the power to focus on what works, cut out what doesn’t, and confidently repeat success.</p><p id="">The <strong id="">story of a deal is already hiding in your data</strong>, it just needs to be <strong id="">uncovered </strong>and<strong id=""> told</strong>. With a clear, visual customer journey map, you can share that story in a way that drives alignment, sharpens strategy, and fuels growth.</p>',"how-to-finally-measure-the-impact-of-b2b-events":'<p id="">Events are one of the most powerful marketing tactics in B2B. They bring people together, build trust, and create genuine relationships that no digital ad or automated sequence can replicate. In the age of AI, that human connection has become even more valuable. Buyers want to see faces, shake hands, and make buying decisions based on advice from people they know and trust.</p><p id="">And yet, when CFOs start reviewing performance and ROI, events are almost always the first to be cut. Not because they don’t work - but because their true impact is notoriously hard to prove.</p><h3 id=""><strong id="">Why B2B Events Are So Hard to Measure</strong></h3><p id="">Chatting with a marketing operations customer the other day, I heard a common story - he used to feel dread when the events team would come and ask for reports on their performance. Here are the top four reasons we consistently see events measurement being so hard in enterprise GTM teams:</p><h3 id=""><strong id="">1. Tracking is unreliable.</strong></h3><p id="">Events are messy by nature. People forget to register, attend under a colleague’s name, or drop in because they saw a LinkedIn post that morning. That means there’s often no clean record of their attendance, and the CRM never knows they were there. By the time your sales team follows up, that person’s engagement looks like it came out of nowhere, making it nearly impossible to connect the dots between your event and their interest.</p><h3 id=""><strong id="">2. B2B buying journeys are complicated.</strong></h3><p id="">Enterprise deals are rarely linear, with multiple stakeholders, alternative paths, and long time-horizons. One conversation at a dinner might spark awareness, another touchpoint weeks later might deepen interest, and the actual decision could happen months after that. The human side of influence (who met whom, what sparked trust, how an internal champion formed) is almost impossible to quantify through standard campaign tracking. Attendance data alone can’t tell whether the event actually mattered.</p><h3 id=""><strong id="">3. Dates don’t line up.</strong></h3><p id="">Because so much event follow-up is manual, campaign dates often appear <em id="">after</em> the opportunity is already created in the CRM. Data entry from Marketing could be delayed, and by then, the deal may already be underway. In an attribution model, it now looks like the opportunity came first—flipping cause and effect and erasing the real influence your event had on pipeline creation.</p><h3 id=""><strong id="">4. Buying groups are incomplete.</strong></h3><p id="">Incomplete contact roles are the silent killer of event measurement. In most enterprise deals, influence rarely comes from the people directly tied to the opportunity. It’s often someone adjacent — an influencer who attends your dinner, then goes back to their company and gets the team to request a demo. If that person isn’t part of the buying group in your CRM, their impact disappears completely. You lose the thread between the human connection and the business outcome.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-normal" data-rt-type="image" data-rt-align="normal"><div id=""><img src="/images/blog/b2b-event-attribution-4-buying-groups-incomplete.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h2 id=""><strong id="">Measuring What Was Once Unmeasurable</strong></h2><p id="">While at Branch, I built one of the largest mobile growth communities in the world. We even ran our own conference, Branchout. It was incredible — packed rooms, powerful relationships, and deep brand awareness. But when Alex, my old co-founder and CEO, asked, “Was it worth it?” I didn’t have the data to prove it. That frustration stayed with me.</p><p id="">Now, with Upside, we can finally see those moments clearly. We can connect the dots between a dinner conversation and a deal closed months later, between a hallway intro and a reactivated account. Here is how 
1670we do it.</p><h3 id=""><strong id="">Healing the buying group.</strong></h3><p id="">Our AI automatically detects and merges fragmented identities across systems, uncovering all the people connected to a deal, even if they weren’t tagged in Salesforce. It builds a “healed” buying group, so when an influencer from an event triggers engagement from their teammates, that connection is captured and attributed.</p><h3 id=""><strong id="">Surfacing hidden mentions.</strong></h3><p id="">We also detect event mentions in Salesforce notes, emails, and call transcripts, the types of unstructured data that traditionally were impossible to analyze at an aggregate level. When an AE writes, “Met them at Dreamforce,” or a prospect references your dinner in a follow-up email, Upside extracts that signal and ties it directly to the opportunity. Suddenly, what was invisible becomes measurable evidence of influence.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-normal" data-rt-type="image" data-rt-align="normal"><div id=""><img src="/images/blog/b2b-event-attribution-surfacing-hidden-mentions.jpeg" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h3 id=""><strong id="">AI-powered deep research.</strong></h3><p id="">Our Deep Research engine goes a step further, analyzing every touchpoint, call, transcript or piece of unorganized data in a deal to understand how much an event contributed to awareness, activation, or deal progression. For example, when we worked with one customer, we helped them trace how a single sponsored conference reactivated dormant accounts and accelerated in-cycle opportunities, even though none of those signals existed in their CRM before.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-normal" data-rt-type="image" data-rt-align="normal"><div id=""><img src="/images/blog/b2b-event-attribution-ai-powered-deep-research.jpeg" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h3 id=""><strong id="">Measuring what actually matters.</strong></h3><p id="">Instead of stopping at “leads sourced” or “pipeline influenced,” Upside reports on a richer, more nuanced set of metrics that helps you compare and understand the influence of events on a more nuanced level. Our event impact report includes:</p><ul id=""><li id=""><strong id="">Deal contacts engaged:</strong> attendees who were part of a buying group for any opportunity.</li><li id=""><strong id="">AI Detected Opportunities Activated</strong>:opportunities where AI analysis identified the event’s touchpoints as influential in opportunity activation.</li><li id=""><strong id="">Opportunities influenced:</strong> deals where a buying group member engaged at the event.</li><li id=""><strong id="">Opportunities created post-engagement:</strong> new deals opened after the event, within a set time window.</li><li id=""><strong id="">Opportunities influenced in-cycle:</strong> active deals that progressed after event engagement.</li><li id=""><strong id="">Progressed opportunities:</strong> deals that moved forward in pipeline following event touchpoints.</li><li id=""><strong id="">Accounts activated:</strong> previously untouched accounts that engaged because of the event.</li><li id=""><strong id="">Accounts reactivated:</strong> dormant accounts that reengaged after months of inactivity.</li><li id=""><strong id="">Accounts engaged outside the opportunity cycle:</strong> engagement that happened before or between opportunities — the kind of early influence most systems miss entirely.</li></ul><figure id="" class="w-richtext-figure-type-image w-richtext-align-normal" data-rt-type="image" data-rt-align="normal"><div id=""><img src="/images/blog/b2b-event-attribution-measuring-what-actually-matters.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><h3 id=""><strong id="">Finding the GTM gaps.</strong></h3><p id="">Bringing this more holistic view to events Upside enables teams to understand what works, what doesn’t, and why, so they can invest their time and resources confidently in what actually makes a difference.</p>',"how-to-identify-which-web-content-is-driving-net-new-pipeline-upsells-and-renewals":'<h3 id=""><strong id="">The “Why”</strong></h3><p id="">Every marketing team tracks web analytics — page views, bounce rates, conversions. But few can answer the question that truly matters:<strong id=""> Which parts of our website actually drive revenue growth, and which types of revenue are they influencing?</strong></p><p id="">You might know that your pricing page has high engagement or that your blog drives organic traffic, but can you distinguish whether those visits are fueling <strong id="">net-new pipeline</strong>, <strong id="">renewals</strong>, or <strong id="">upsells</strong>?</p><p id="">If the answer is no, you’re not alone. Most attribution systems were built for simpler GTM motions: when one buyer filled out a form, and one channel got the credit. Today, enterprise deals involve <strong id="">dozens of people, hundreds of touchpoints</strong>, and systems that rarely agree on what happened or when. The result? Analytics that track clicks, not outcomes.</p><p id="">The only way to truly understand what drives revenue is to reconstruct the true sequence of buyer interactions across systems <em id="">and</em> across teams to connect those patterns back to opportunity types. That’s what Upside calls <a href="/blog/what-is-forensic-attribution" id=""><strong id="">Forensic Revenue Intelligence</strong></a>: rebuilding a clean, trustworthy picture of what happened so you can finally see what worked.</p><p id="">Here’s how you can approximate that process, and why companies now use Upside to automate it at scale.</p><h3 id=""><strong id="">1. Take Inventory of Your Data</strong></h3><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center" data-rt-max-width=""><div id=""><img src="/images/blog/web-content-attribution-1-take-inventory-data.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">Before tracing which web pages move which deals, you need to know what data you have and where it lives. Most of it already exists across your GTM stack, just in a scattered and messy pattern.</p><p id="">First, start with a digital scavenger hunt:</p><p id=""><strong id="">CRM Data</strong></p><ul id=""><li id="">Opportunities: type (new, renewal, expansion), stage history, value, owner.</li><li id="">Accounts &amp; contacts: complete buying groups and relationships between people and deals.</li></ul><p id=""><strong id="">Web Analytics / Marketing Automation</strong></p><ul id=""><li id="">Page views and session data.</li><li id="">Form fills, demo requests, gated content.</li><li id="">UTM tags and referral sources.</li></ul><p id=""><strong id="">Product &amp; Customer Systems</strong></p><ul id=""><li id="">Login activity, feature engagement, support tickets (all early renewal or expansion signals).</li></ul><p id=""><strong id="">Other Sources</strong></p><ul id=""><li id="">Calendar invites, meeting notes, email metadata, or call summaries.<br></li></ul><p id="">Your goal isn’t sophistication yet; it’s visibility. Take the time to really understand what’s there before you begin architecting something new.</p><h3 id=""><strong id="">2. Bring the Fragmented Data Together</strong></h3><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/web-content-attribution-2-bring-fragmented-data.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">Once you’ve located your data, align it in a single unified view. If you have a data warehouse, query it there; if not, even a spreadsheet can work as a first pass.</p><p id="">Build a <strong id="">chronological record</strong> of all page activity tied to known accounts. Include:</p><ul id=""><li id="">Account name</li><li id="">Contact (if known)</li><li id="">Page URL or title</li><li id="">Page type (blog, docs, pricing, etc.)</li><li id="">Timestamp</li><li id="">Associated account</li><li id="">Associated opportunity (if applicable)</li></ul><p id="">Patterns will start to emerge. Certain blogs appear before the new pipeline opens, while pricing or product update pages precede renewals. This is the first glimpse of a “storyline” that will tell you how web behavior unfolds before revenue outcomes.</p><h3 id=""><strong id="">3. Annotate and Clean Your Data</strong></h3><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" style="max-width:60%" data-rt-type="image" data-rt-align="center" data-rt-max-width="60%"><div id=""><img src="/images/blog/web-content-attribution-3-annotate-clean-data.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">Raw logs alone won’t get you far. For each page activity, make sure you clean up the data so each touchpoint has</p><ul id=""><li id="">Timestamp: When the visit happened (e.g. 2025-10-12 14:32).</li><li id="">Individual: Who visited (new prospect, customer, or internal user).</li><li id="">Context: How they got there (organic search, email click, paid ad).</li><li id="">Intent: Based on page type. Awareness (blog), evaluation (product page), conversion (pricing).</li></ul><p id="">Cleaning and classifying data is the difference between noise and signal. It’s also the step that breaks most teams because GTM data is notoriously <em id="">inconsistent</em>, <em id="">duplicated</em>, and <em id="">out of sync </em>across systems .</p><p id="">This is why Upside built, and is powered by, a <strong id="">knowledge graph</strong> that automatically reconstructs missing or conflicting signals: deduplicating contacts, aligning timestamps, and recovering lost touchpoints from unstructured data.</p><h3 id=""><strong id="">4. Segment by Opportunity Type</strong></h3><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" style="max-width:60%" data-rt-type="image" data-rt-align="center" data-rt-max-width="60%"><div id=""><img src="/images/blog/web-content-attribution-4-segment-opportunity-type.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">Now, it’s time to connect those page visits to <em id="">deal outcomes</em>. To do that you can pull CRM opportunity and categorize types into three key buckets:</p><ol id=""><li id="">Net-new pipeline: new logos, POCs or first-time deals.</li><li id="">Upsells/expansions: increased ARR or new product lines within existing accounts.</li><li id="">Renewals: continuation of existing contracts.</li></ol><p id="">Match each web visit to an account and determine with which opportunity it aligns. You might use fields like <em id="">Opportunity Created Date</em>, <em id="">Close Date</em>, and <em id="">Account ID</em> to make the connections.</p><p id="">When done well, this segmentation will give you three mini datasets, each representing a distinct motion in your revenue cycle.</p><h3 id=""><strong id="">5. Calculate metrics that help you understand web traffic influence on deals</strong></h3><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" style="max-width:40%" data-rt-type="image" data-rt-align="center" data-rt-max-width="40%"><div id=""><img src="/images/blog/web-content-attribution-5-calculate-metrics-help.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">‍</p><h5 id="">Some of the metrics you should calculate if you have all the data clean and unified in one place include:<br></h5><p id=""><strong id="">Accounts engaged</strong>: Count of accounts where any person associated with that account viewed this page.</p><p id=""><strong id="">People engaged</strong>: Count of people who viewed this page.</p><p id=""><strong id="">Deal contacts engaged</strong>: Count of people who viewed this page and have been in the buying group for any opportunity.&nbsp;</p><p id=""><strong id="">Opportunities influenced</strong>: Count and total amount of opportunities where the web page influenced a member of the buying group.</p><p id=""><strong id="">Won opportunities influenced</strong>: Count and total amount of won opportunities where a member of the buying group was influenced by the web page.</p><p id=""><strong id="">Opportunities created post-engagement</strong>: Count and total amount of opportunities that were created in a specific time window after a member of the buying group viewed the page.</p><p id=""><strong id="">Opportunities influenced in-cycle</strong>: Count and total amount of opportunities influenced by this web page during their active cycle.</p><p id=""><strong id="">Progressed opportunities</strong>: Count and total amount of opportunities that progressed after page view from at least one buying group member.</p><p id=""><strong id="">Accounts activated</strong>: Count of accounts that had no engagement at any time before a person associated with that account viewed this web page.</p><p id=""><strong id="">Accounts reactivated</strong>: Count of accounts that had no engagement for 90 days prior to a person associated with that account viewing this web page.</p><p id=""><strong id="">Accounts engaged outside opportunity cycle</strong>: Count of accounts where all page views happened while no matching opportunity was open.</p><p id="">By comparing and contrasting different webpages on the metrics above and filtering by opportunity type, you can start seeing insights and trends. For example:</p><ul id=""><li id="">Net-new deals might be created after views of specific blog pages, comparison pages, or pricing.</li><li id="">Upsells might be tied to product updates or feature announcements.</li><li id="">Successful renewals could be tied to specific educational content.</li></ul><h3 id=""><strong id="">The Hard Part (and Why It Breaks)</strong></h3><p id="">Doing this manually can be hard, which is why most teams just look at visits and sessions instead. An in-house analysis requires:</p><ul id=""><li id="">Clean buying groups; if the person doing research on the web is missing from the buying group, it’s hard to know what made a difference.</li><li id="">Identity resolution to unify visits across systems and merge identities of people (the visit from a home computer entering their personal email on a form is the same as the person who has been outbounded by an SDR on their work email).</li><li id="">Timestamp alignment to reconstruct event order (the campaign upload date is not always the correct date).</li></ul><p id="">That’s why even the most sophisticated RevOps teams struggle to maintain this over time. Every new tool, campaign, or tracking change can break the analysis. You end up with what Upside calls <strong id="">dashboard whiplash</strong>: impressive charts that no one trusts.</p><h3 id=""><strong id="">The Alternative: Forensic Revenue Intelligence with Upside</strong></h3><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img src="/images/blog/web-content-attribution-alternative-forensic-revenue-intelligence.png" width="auto" height="auto" alt="" loading="auto" id=""></div></figure><p id="">Upside automates everything above, from buying group detection, to people identity resolution, to tying webpage visits to opportunities and accounts. Our AI agents pull data from your CRM, web analytics, marketing automation, and sales systems — then <strong id="">reconstruct a clean, forensic-level timeline</strong> of buyer engagement. The result? Surfacing the <strong id="">patterns that actually drive pipeline, renewals, and upsells</strong>, without spreadsheets, SQL scripts, or guesswork.</p><h3 id=""><strong id="">The Bottom Line</strong></h3><p id="">Your website already tells a story — one of discovery, evaluation, and loyalty. The challenge is that most of that story lives hidden across fragmented systems.</p><p id="">When you can see the complete, causal web-to-revenue journey, you stop guessing what works. You can double down on content that truly drives growth, and stop o
1670ptimizing for clicks that don’t.</p><p id="">Upside makes that visibility automatic, so your team can spend less time cleaning data and more time driving revenue.</p>',"how-to-leverage-utm-tagging-for-better-b2b-attribution":`<p>If your analytics don’t line up with what’s actually happening in your pipeline, start here.<br/>Because the truth is, most attribution problems don’t start with models or dashboards.<br/>They start with messy and inconsistent UTM tags.</p><p>Let’s fix that!</p><h2><strong>So what are UTM Tags?</strong></h2><p>UTM stands for <em>Urchin Tracking Module</em> (Google bought a company called Urchin back in 2005).<br/>They’re the tiny URL parameters you tack onto the end of a link so analytics tools know where a click came from.</p><p>For example, you’ll find several of these in the url below:</p><blockquote>https://upside.tech/?utm_source=linkedin&amp;utm_medium=paid_social&amp;utm_campaign=demo_push&amp;utm_content=carousel1</blockquote><p>When someone clicks that link, Google Analytics (or any analytics platform) reads each of those bits and says, “This visit originated from LinkedIn, through a paid social ad, for the Demo Push campaign, using the Carousel 1 creative.”</p><p>Simple, but also fragile.</p><h2><strong>What Each Parameter Means</strong></h2><p>Here’s the quick cheat sheet:</p><div class="w-embed"><table>
1671  <thead>
1672    <tr>
1673      <th>Parameter</th>
1674      <th>What It Means</th>
1675      <th>Example</th>
1676    </tr>
1677  </thead>
1678  <tbody>
1679    <tr>
1680      <td><strong>utm_source</strong></td>
1681      <td>The platform or vendor sending the traffic</td>
1682      <td>linkedin, hubspot, google</td>
1683    </tr>
1684    <tr>
1685      <td><strong>utm_medium</strong></td>
1686      <td>The marketing channel type</td>
1687      <td>email, paid_social, cpc, event</td>
1688    </tr>
1689    <tr>
1690      <td><strong>utm_campaign</strong></td>
1691      <td>The initiative or offer</td>
1692      <td>demo_push, summer_launch, competitive_takeout</td>
1693    </tr>
1694    <tr>
1695      <td><strong>utm_term</strong></td>
1696      <td>(Optional) Keyword or audience</td>
1697      <td>revops, enterprise_accounts</td>
1698    </tr>
1699    <tr>
1700      <td><strong>utm_content</strong></td>
1701      <td>(Optional) The creative variant</td>
1702      <td>carousel1, subjectline_b</td>
1703    </tr>
1704  </tbody>
1705</table></div><p>Note: Some analytics systems treat the first three (source / medium / campaign) as required for proper attribution.</p><p>Consistency matters here… “LinkedIn” is not the same as “linkedin”. Capitalization, spacing, or varying underscores can fragment your reporting.</p><h2><strong>How to Make Sure You Use Them Correctly</strong></h2><h3>How to use UTM tags correctly</h3><p><strong>1. Define a standard set</strong></p><p>Create one authoritative list of approved values and share it with the broader marketing team to use as a resource. Think of it like a brand style guide for your data.</p><p>Decide upfront how to name platforms (e.g. linkedin not LI), how to label mediums (paid_social not social_paid), and how to format campaigns (product_launch_q1). Picklists are your friend here!</p><p>Periodically review the actual values to ensure everyone is using standard values.</p><p><strong>2. Use a generator</strong></p><p>A common best-practice: build a shared spreadsheet or internal tool where each UTM field is selected from a dropdown/picklist. Then a simple \`CONCATENATE\` formula produces the full tagged URL.</p><p>Benefits: fewer typos, consistent naming, easier grouping in reports.</p><p>Pro tip- if you’re excel-savvy, add some IF’s to make sure that a link will NOT be generated until all four inputs have been provided: the destination, source, medium, and campaign. </p><p><strong>3. Automate when possible</strong></p><p>If you run ads, enable auto-tagging features where available (for example in Google Ads). This reduces manual work and improves consistency.</p><p>But! make sure your manual tagging conventions <em>do not</em> conflict with platform-generated tags.</p><h2><strong>Getting Google Analytics to Read Them Correctly</strong></h2><p>GA4 assigns traffic into “channel” buckets based on source/medium values and internal rules. If a combination doesn’t match known rules, it may land in the <strong>Unassigned</strong> bucket.</p><p>In GA4 you can create <strong>custom channel groups</strong> (via Admin → Data Settings → Channel Groups) to map your custom fields into broader buckets.</p><p>Example:<br/>If you use utm_medium=paid_social, tell GA4 that “paid_social” belongs under the “Paid Social” channel group. Otherwise, all your hard-earned ad clicks will, sadly, sit in an “Unassigned” channel bucket. For reference, here’s <a href="https://support.google.com/analytics/answer/13051316?hl=en#zippy=%2Cin-this-article">Google’s help documentation</a> on how to set this up in your instance. </p><h2><strong>Turning UTM Values Into Actual Reporting Data</strong></h2><p>Once you’ve tagged everything consistently, what do you <em>do</em> with those values?</p><h3>Option 1: Capture UTMs in Your Marketing Automation System</h3><p>Capture UTM parameters when someone submits a form by writing them into custom fields on lead/contact records.<
1705/p><p><strong>Pros:</strong></p><ul role="list"><li>Easy to set up, either powered by triggers/workflows or hidden fields on your forms that read from url parameters or cookie values. <br/><br/></li><li>Easily tie that data into existing reporting including lead, contact, and opportunity reports. <br/><br/></li></ul><p><strong>Cons:</strong></p><ul role="list"><li>Usually you are only able to capture only first or last touch, not the full touch-history.<br/><br/></li><li>The lead/contact record holding the UTM may <em>not</em> be the same one that sales chooses to convert, leaving it up to chance. <br/><br/></li><li>Without write-protection logic, values can be overwritten, making it hard to audit the data for quality and accuracy.</li></ul><h3>Option 2: Proactive touchpoint tracking</h3><p>There are platforms such as Marketo Measure (formerly Bizible) that will log every web visit or click into a persistent model (visit‐level or session‐level data). This way, you can capture all UTM parameters associated with every touchpoint.</p><p><strong>Pros:</strong></p><ul role="list"><li>Individual records for every tagged click<br/><br/></li><li>Better data for multi-touch attribution<br/><br/></li></ul><p><strong>Cons:</strong></p><ul role="list"><li>Requires setup of scripts/pixels<br/><br/></li><li>Retrofitting older data may not be feasible</li></ul><p>‍</p><figure class="w-richtext-align-center w-richtext-figure-type-image"><div><img src="/images/blog/utm-tagging-option-2-proactive-touchpoint.png" loading="lazy" alt=""/></div></figure><h3>Option 3: Full-journey tracking (recommended)</h3><p>If your organization is using a marketing automation platform such as Marketo or HubSpot, you’re already logging web visit data, and you can leverage all that data for attribution. Forensic Attribution Systems like Upside can extract the existing data and build reporting off of the historical values. </p><p><strong>Pros:</strong></p><ul role="list"><li>More accurate influence reporting on pipeline and revenue<br/><br/></li><li>Leverages historical data without needing to recapture visits<br/><br/></li></ul><p><strong>Cons:</strong></p><ul role="list"><li>Data completeness depends on use of UTM parameters historically</li></ul><p>‍</p><p>The result: clean, trustworthy attribution without spreadsheets, overwriting, or manual stitching. In the screenshot below, you can see how Upside can tie UTM-tagged traffic to sales opportunities based on engagement from members of the buying group. As new channels get released (such as ChatGPT citations tagging their traffic as utm_source=chatgpt.com, you can set up rules that retroactively classify the traffic into a custom-tracked channel. </p><figure class="w-richtext-align-center w-richtext-figure-type-image"><div><img src="/images/blog/utm-tagging-option-3-full-journey.png" loading="lazy" alt=""/></div></figure><h2><strong>Final words</strong></h2><p>Strong UTM conventions improve every downstream report and transform disordered data into clarity. If you’re investing in driving web traffic to your website, it’s best practice to be using them consistently.</p><p>They’re the first step toward understanding not just <em>what</em> got clicked, but what actually drove revenue.</p><p>When you’re ready to tie your existing UTM values into pipeline performance, we can show you how Upside does full-journey influence attribution leveraging the UTMs you already have!</p><p>‍</p>`,"the-quest-for-b2b-revenue-attribution-and-intelligence":`<p id=""><em>We've posted an update to this journey, <a href="/blog/two-radical-new-solutions-to-b2b-revenue-attribution">One Year In: Two Radical New Solutions to B2B Revenue Attribution</a>.</em></p><p id="">Once upon a time, “growth at any cost” was an acceptable strategy for B2B companies. Money was cheap, so teams could drive new revenue simply by spending their way to success.</p><p id="">Those days are gone. <strong>Now, it is the age of efficient growth,</strong> and B2B go-to-market leaders need to know what is working so they don’t waste their limited resources.</p><p id="">We believe that the foundation of efficient growth is trustworthy, reliable data. This foundation is transformational for a go-to-market organization, because it enables data-driven decisions and answers questions like “where should I spend an extra $100k next quarter?” or “how can I increase sales pipeline without a bigger budget?” across every dollar spent and every person hired. It’s a transformation we have experienced first-hand: at our previous company, <a href="https://www.branch.io/" id="">Branch</a>, the holistic attribution model we built in-house was such a game-changer that it quickly became the cornerstone for most of our key decisions and optimizations while scaling to over $100m in revenue.</p><p id="">It was only later, when industry peers began to tell us that the insights we were getting sounded better than anything else they’d ever heard of, that we began to realize the model we built at Branch might be something special. <strong id="">With Upside, our mission is to help go-to-market leaders make better decisions by bringing the same game-changing, data-driven perspective to every B2B team in the world.</strong></p><p id="">In the article below, we share many of the best practices we wish we had known when we first started wrestling with these problems, and describe some of the biggest measurement traps we often see teams falling into, including:</p><ol id=""><li id="">Believing that the best way to measure is by identifying a single “source” for each deal.</li><li id="">Relying on the sequence of events to allocate credit across many touchpoints.</li><li id="">Looking at the contributions of each go-to-market team separately.</li><li id="">Using attribution data as a weapon, rather than a feedback loop.</li></ol><p id="">Whether you’ve been struggling to solve your company’s revenue measurement challenge for years, or you have a solution that is already working well, or even if attribution is just something you have strong opinions about, we are passionate about this topic and we would love to hear from you.<strong id=""> </strong><a href="/" id=""><strong id="">Please drop us a note</strong></a><strong id="">!</strong></p><h2 id="">Why is B2B revenue measurement such a tangled mess?</h2><p id="">Branch, the company where we first took on these challenges together, was founded in 2014. The product was deep linking and attribution for mobile apps, and the target customers were large consumer brands. Eight years later, we had scaled the company to over $100 million in revenue (and a valuation of $4 billion), primarily through large, complex deal
1705s with long cycles and multiple buyers.</p><p id="">But partway through that growth curve, <strong id="">we began to miss our quarterly sales pipeline targets.</strong> During a post-mortem meeting to investigate why, the conversation went something like this:</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/b2b-revenue-attribution-b2b-revenue-measurement-such.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">You might be smiling ruefully in commiseration, perhaps remembering similar discussions of your own (and if you’re thinking that we could have solved this pipeline duplication problem by tracking opportunity source, we’d tried that already — we’ll explain why we believe it isn’t the answer in the next section).</p><p id="">As we began trying to understand what had caused us to miss our targets, we discovered many layers of complexity that make measurement challenging. These layers are present in almost every B2B sales process, but they compile together to become increasingly misleading in large enterprise deals with multiple decision makers.</p><h3 id="">Complexity layer 1: there is never just one source for a deal</h3><p id="">One of the most widely-adopted concepts in B2B marketing is the Demand Waterfall, from SiriusDecisions. It has become so deeply embedded across the industry that most readers can likely recite these stages in their sleep:<br><br></p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/b2b-revenue-attribution-complexity-layer-1-there-1.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">Today, almost every system for B2B pipeline measurement is designed to identify<strong id=""> </strong>the one single action that drove each lead to raise their hand (submit a demo request, take a call, etc.). That single action is then reported as “the source of the deal.”</p><h6 id=""><em id="">The idea that any single touchpoint, with any single person, had somehow sourced the entire deal was obviously wrong.</em></h6><p id="">If only it were so easy.</p><p id="">When we talk to go-to-market leaders, they know that their one-source attribution is not correct, but often their hunch is that it’s close enough. The idea of parsing through the mess of everything else that they know helps both source and close a deal is daunting, and it’s hard to find a frame of reference to decide whether it would even be worth the effort. </p><p id="">We’ve found that these one-source models become especially problematic as deals grow bigger and more complicated. At Branch, by the time an opportunity turned into qualified pipeline, we usually saw 5-8 people engaging with us, reading content, attending webinars, replying to outbound emails, receiving a referral from a partner, and so on. Some of these activities clearly mattered more than others,<strong id=""> but the idea that any single touchpoint, with any single person, had somehow sourced the entire deal was obviously wrong.</strong></p><h6 id=""><em id="">It was all of the engagement together that eventually led to results.</em></h6><p id="">To illustrate the issue with one-source attribution, here is a simplistic example showing touchpoints from the early stages of a deal with just three people involved:</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/b2b-revenue-attribution-complexity-layer-1-there-2.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">In this scenario, here’s what is going on behind the scenes to generate these touchpoints:</p><ol id=""><li id="">An SDR is outbounding multiple people.</li><li id="">The decision maker eventually replies to one of those emails, and is invited to attend a dinner. Afterwards, she asks her analyst to research the solution.</li><li id="">The analyst has been ignoring the SDR, but now he reads some content and attends a webinar. </li><li id="">The analyst asks an engineer on another team to take a look too, and they agree a demo would be helpful.</li><li id="">All three people attend the demo, during which the decision maker expresses interest. This results in an opportunity getting created.</li></ol><p id="">What’s the correct way to attribute this deal?</p><ul id=""><li id="">A typical lead-source model would probably give credit to the webinar, because that was what the analyst did right before submitting the demo request.</li><li id="">The SDR team would argue that this is a successful outbound deal, because the SDR sent emails before anything else.</li></ul><p id="">We believe neither of these answers is valid, because with all the data laid out, it’s clear that no single touchpoint got this deal moving — in fact, <strong id="">it was all of the engagement together that eventually led to results.</strong></p><p id="">
1705If you hope to get useful insights about complex deals like this one, you need an attribution model that is sophisticated enough to look beyond one-source reporting.</p><h3 id="">Complexity layer 2: time matters, but touchpoint sequence (usually) doesn’t</h3><p id="">Every go-to-market team can benefit from attribution, but experienced marketers are usually the ones who have spent the most time thinking about it. We hear CMOs mention trying first-touch, last-touch, U-shape, W-shape, J-shape, reverse J-shape, full-path…and they keep going.</p><p id="">The problem with this alphabet soup of models? None of them are designed to acknowledge that some types of touchpoint inherently have more impact on a deal than others. Instead, position-based models like these try to figure out which touchpoints deserve more credit <strong id="">solely based on the sequence of events.</strong></p><h6 id=""><em id="">Demo requests reflect the intent built up over all the previous touchpoints, but they aren’t a meaningful touchpoint of their own.</em></h6><p id="">To illustrate this, let’s look at the touchpoint activity from the early stages of another deal. We’ll use a single person this time, just to keep the example a little simpler:</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/b2b-revenue-attribution-complexity-layer-2-time.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">In this scenario, here’s what is happening to generate these touchpoints:</p><ol id=""><li id="">The lead gets a cold email and initially replies “not interested” or “let’s talk later.”</li><li id="">But then they attend a conference talk about the product, during which they learn more about the value it could bring them.</li><li id="">Next, they do some preliminary research on the website, and submit a demo request.</li><li id="">After a short demo meeting with the sales team, they do some additional research on the website, and then email the salesperson to say they would like to move forward.</li></ol><p id="">How would this activity typically be attributed?</p><ul id=""><li id="">A first-touch model would credit the outbound emails, even though the most they accomplished was some brand awareness.</li><li id="">Last-touch would credit the demo request form (or maybe either the Google search or the product page, if the system is slightly more sophisticated).</li></ul><p id="">But in reality, the conference talk was where this person spent the most time learning about the solution…shouldn’t that show up somewhere? And why should we give credit to the demo request at all? Demo requests reflect the intent built up over all the previous touchpoints, but they aren’t a meaningful touchpoint of their own!</p><p id="">Our opinion: time matters, because something that happened a year ago is less relevant than what happened yesterday. But all of the touchpoints in this example helped move the deal forward, and <strong id="">the sequence of events indicates very little about which ones were more incremental.</strong> </p><p id="">This is why advanced teams have moved beyond position-based multi-touch, into impact-weighted attribution and econometric models. Embracing a non-chronological approach also comes with two wonderful side benefits:</p><ol id=""><li id="">You no longer need to worry about debugging misattribution caused by minor errors in how your systems captured the exact order of events.</li><li id="">“Dark funnel” activities (podcasts, Slack communities, word-of-mouth) are far less disruptive to your measurement. This is because you still see the relative contributions of all the other things that also moved the deal forward, and you can more easily incorporate the answers to self-reported attribution questions like “how did you hear about us?” that don’t come with an exact timestamp.</li></ol><h3 id="">Complexity layer 3: deals are always influenced by more than one team</h3><p id="">When teams are siloed and don’t share a common language of data that helps them work together, there is often a lot of double counting, political finger-pointing, or both. <strong id="">It’s hard to know what worked, and where to invest.</strong></p><p id="">Let’s use a simplified example involving just marketing and sales: historically, B2B attribution has been built on the assumption that there is one buyer going through the journey, and this buyer follows a 
1705stage-based waterfall model. That’s why marketing organizations measure everything by counting leads — which is a metric they can fully control — but it’s also why there is typically a strong divide between marketing and sales:</p><ul id=""><li id=""><strong id="">Marketing “captures the leads” and sends the qualified ones to sales.</strong> The failure mode for this is sales always asking for more leads, but then complaining that the leads they’re getting are not good.</li><li id=""><strong id="">Sales “works the leads” to generate opportunities.</strong> The failure mode for this is marketing thinking that sales simply doesn’t follow through on all the excellent leads they’ve been sent.</li></ul><p id="">The end result is a lot of blame shifted around when pipeline is not up to par.</p><p id="">But in today’s world, almost every large deal is brought together through the efforts of both marketing and sales, at minimum, and often also with the assistance of teams such as partnerships and customer support. And what’s missing from this picture is a holistic understanding of how all of the teams involved are contributing to the thing that really matters: <strong id="">revenue.</strong> </p><p id="">For example, sales and marketing might see a deal like this, in separate silos:</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/b2b-revenue-attribution-complexity-layer-3-deals-1.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">But the full story, as experienced by the customer, is more like this:</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/b2b-revenue-attribution-complexity-layer-3-deals-2.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">At Branch, one of our top sources of new deals was VIP dinners that the marketing team organized. But the people at those dinners were identified and invited by our sales teams. There was simply no way to attribute the resulting opportunities to only sales or marketing — the dinner was important, but so was the 1:1 invitation. <strong id="">Any measurement system that tries to evaluate just a single team in a silo is doomed to produce misleading data from the start.</strong></p><h3 id="">Complexity layer 4: attribution is just one piece of the puzzle</h3><p id="">Finally, one of the biggest issues with most attribution systems today isn’t about the data itself; it’s with how the data is used. Time and time again, we have seen examples of attribution being used to say “look what a good job I did!” instead of “what should I do next?” or “what changes should I make to improve?”</p><p id="">In other words, attribution is being misused as a weapon by leaders to assert their worth, rather than as data to inform a feedback loop that helps the business succeed.</p><p id="">Better attribution models and insights can go a long way, but attribution data must be viewed through the lens of what it can do to drive revenue, ROI, and efficiency metrics like the company’s <a href="https://www.wallstreetprep.com/knowledge/saas-magic-number/" id="">magic number</a>.</p><h2 id="">What does it take to untangle the mess of B2B revenue measurement?</h2><p id=""><a href="https://en.wikipedia.org/wiki/All_models_are_wrong" id="">All models are wrong, but some are useful</a>. This gets at one of the fundamental challenges for any measurement solution: the real world has so many variables that it’s impossible to identify true cause and effect. </p><h6 id=""><em id="">Customers don’t remember everything that influenced them either, so there is huge value to measuring the recipe that led to a successful outcome.</em></h6><p id="">Some B2B thought leaders have begun talking about why attribution has become a fool’s errand, due to the growth of unattributable “dark funnel” activity (podcasts, Slack communities, social media interactions, and so on). In their view, the real solution is to give up on attribution models and instead simply ask customers “
1705how did you hear about us?”</p><p id=""><strong id="">We don’t agree that attribution is dead. </strong>Data from asking customers (also known as self-reported attribution) is absolutely something that should be incorporated into a model, but it shouldn’t be the only source of data because it’s incomplete; <strong id="">customers don’t remember everything that influenced them either, </strong>so there is huge value to measuring the recipe that led to a successful outcome.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/b2b-revenue-attribution-what-does-take-untangle.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">In other words, imperfect data is far better than none at all, and every step up the attribution maturity curve will improve the answers to questions like “where should I spend an extra $100k next quarter?” or “how can I increase sales pipeline without a bigger budget?”. This requires balancing two objectives that are often in opposition to each other:</p><ol id=""><li id=""><strong id="">Include as many inputs as possible. </strong>For an attribution model to generate meaningful results, it must capture a high percentage of the raw touchpoints across every team and every channel.</li><li id=""><strong id="">Produce simple outputs. </strong>For a measurement system to have a lasting impact, it must not be a black box or a massive, arcane dashboard that only a few specially-trained analysts can make sense of. </li></ol><p id="">After chipping away at the problem of B2B revenue measurement for many years, here are some of the best practices we’ve learned along the way:</p><ol id=""><li id="">Consider everyone involved in a deal, not just the individual leads.</li><li id="">Bring together all customer touchpoints, from every go-to-market team.</li><li id="">Start from an objective baseline, like “minutes of engagement,” to compare different types of touchpoints.</li><li id="">Apply a time-decay to give less weight to touchpoints that happened long before the conversion.</li><li id="">Use personas as a multiplier to allocate more weight to decision makers.</li><li id="">Look at attribution data as a diagnostic, not a target.</li><li id="">Be OK with using different models to answer different questions.</li><li id="">Don't stop at attribution, because ROl is much better.</li><li id="">Make data actionable for everyone on the team.</li></ol><p id="">In the section below, we’ll explore each of these areas in more detail.</p><h3 id="">Consider everyone involved in a deal, not just the individual leads</h3><p id="">When your customers’ buying committees contain multiple people, you won’t get a clear picture of what makes your deals progress by running attribution on the activity done by just one of them. You need to consider the touchpoints of everyone involved.</p><p id="">At the level of practical implementation, there are two ways we’ve seen teams do to this, each with pros and cons:</p><ol id=""><li id=""><strong id="">Opportunity contact roles. </strong>In theory, contact role relationships set in the CRM should be the simplest approach to figure out who is important on a deal. But this often fails in practice, because it has an unavoidable dependency on AEs adding contact roles for everyone they interact with. We’ve found maintaining that level of CRM hygiene to be a losing battle. </li><li id=""><strong id="">Account-level attribution.</strong> Unlike contact roles, contact-to-account mapping is often automated and quite reliable. Using the activity of every contact mapped to an account solves the CRM hygiene challenge, but comes with the risk of too much noise, especially when accounts are so big that there are multiple business units with distinct deal cycles active at the same time. And in CRMs that maintain a distinction between “leads” and “contacts” (like Salesforce), there is a risk of missing relevant touchpoints from people who have not yet been converted.</li></ol><p id="">We think both of these methods lead to unreliable data. Instead, we recommend an approach that gives the best of both worlds: use contact roles, and detect additional contact roles automatically (such as whenever new people attend meetings or join email threads about an in-progress deal).</p><h3 id="">Bring together all customer touchpoints, from every go-to-market team</h3><p id="">By breaking down the data silos between teams like marketing, sales, partnerships, SDRs, and customer success, you can make sure that you are looking at your whole go-to-market presence holistically. After we did this at Branch, we noticed our entire organization working together far more collaboratively — in fact, we eventually did an analysis that showed deal sizes went up when more teams were involved.</p><p id="">Data centralization is essentially just a problem of extract, transform, and load (<a href="https://en.wikipedia.org/wiki/Extract,_transform,_load" target="_blank" id="">ETL</a>). We’ve seen some companies use a dedicated vendor, and others that simply pipe everything back into Salesforce. How you do it is less important, though vendor consolidation is worth considering since this is usually commoditized functionality.</p><h3 id="">Find an objective baseline and use it to create a touchpoint weighting schema</h3><p id="">Bringing data together across teams is just the first step. You still need to DO something with it. That is 
1705where we’ve seen many teams get stuck, because turning raw data into attribution insights requires addressing something that is always contentious: <strong id="">you’ll need to create a common language across these touchpoints so they can be compared.</strong></p><p id="">Some customer interactions clearly do more to move a deal forward than others. The challenge is agreeing which ones, and by how much — without some sort of ground truth, this is a political fight just waiting to happen. With position-based models (first-touch, last-touch, W-shape, and so on) off the table, there are three main options:</p><ol id=""><li id=""><strong id="">Impact-weighted.</strong> This involves defining a relative “size” for each type of touchpoint, and then using those scores as the baseline for allocating credit.</li><li id=""><strong id="">Econometrics. </strong>Incrementality studies and media mix models have been around for decades, and can give a statistical answer about what is driving results. The challenge with econometric techniques is they’re typically slow (weeks or months for each report), and difficult to use for tactical decisions because of how abstract their outputs are.</li><li id=""><strong id="">Data-driven</strong>. So-called “data-driven attribution” models are based on machine learning algorithms. They’re more tactically useful than econometric analyses, but they’re best suited to specific channels with large quantities of similar-looking activities (for example, digital marketing for consumer brands). Data-driven models are also incredibly dark black boxes, and we have yet to meet a leader who fully understands or trusts their output.</li></ol><p id="">For B2B revenue attribution, we believe impact-weighted models are the current state of the art. A simplified example might look something like this:</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/b2b-revenue-attribution-find-objective-baseline-use-1.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">Then, use these weighted scores to generate metrics like “weighted pipeline” and “weighted revenue” based on the full story of the deal across everyone involved:</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/b2b-revenue-attribution-find-objective-baseline-use-2.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id=""><strong id="">Yes, agreeing on the “size” scores for each touchpoint type in an impact-weighted attribution model is hard.</strong> It’s probably the most contentious step in the whole process, because everyone will come with a different opinion. The impact-weighted model we used at Branch was anchored to the average amount of time a prospect spent with each activity, which provided an objective starting point, and we had a cross-functional group of leaders we called “the weighting council” that was tasked with iterating and refining these scores as we learned more and tried new things.</p><p id="">Fortunately, there are several approaches on the horizon to make impact-weighted scores more accurate and less subjective:</p><ol id=""><li id=""><strong id="">Deep assessment using AI.</strong> With the proliferation of LLMs, it will soon be possible to make an even more nuanced assessment of each touchpoint’s impact. For example, scores can be refined based on how someone replied to an email, or how engaged they were in a Zoom meeting or webinar.</li><li id=""><strong id="">Using an econometric model for calibration. </strong>Even if a media mix model is challenging to use for everyday decisions, it can provide a very useful checkpoint for weighting refinements. For example, you might get a recommendation that sounds something like this: “based on a statistical analysis of your deals last quarter, it appears your current weightings schema might be under-estimating the impact of your webinars, but slightly over-crediting conferences.”</li><li id=""><strong id="">Incorporating cross-company benchmarks.</strong> All of this can be made more accurate when models are trained on a larger dataset.</li></ol><h3 id="">Apply a time decay</h3><p id="">Something that just happened yesterday holds more weight in someone’s mind than something that happened months ago, and should therefore receive more attribution credit in an active deal cycle, even if both touchpoints are otherwise equivalent.</p><p id="">In our opinion, this is important but it isn’t worth over-thinking. We recommend starting with a fixed time window prior to opportunity creation (probably in the range of 12-18 months, depending on the average length of your deal cycles), and then applying a linear time decay on top of all the touchpoints within that window.</p><h3 id="">Use personas as a multiplier</h3><p id="">This one is easy: not every customer contact involved in an opportunity has equal influence on the outcome. An executive decision maker has more sway on a deal than a 
1705junior analyst doing research, which means your attribution model should allow different weighting multipliers for each persona on the deal.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/b2b-revenue-attribution-use-personas-multiplier.png" width="auto" height="auto" loading="auto" id=""></div></figure><h3 id="">Look at attribution data as a diagnostic, not a target</h3><p id=""><a href="https://en.wikipedia.org/wiki/Goodhart%27s_law" target="_blank" id="">Goodhart’s law</a> says “when a measure becomes a target, it ceases to be a good measure.” This definitely applies to revenue attribution.</p><p id="">One thing we learned early on: <strong id="">don’t tie individual contributor compensation to cross-team attribution metrics. </strong>This will seem like a seductively logical path, but you must keep in mind that as a leader, you have a strong incentive to do what is best for the business. Cross-functional initiatives (for example, SDRs inviting prospects to marketing-hosted VIP dinners) are often some of the most effective programs you can run, but not everyone on your team has the same level of context that you do.</p><p id="">In other words, take care to avoid creating a dynamic where ICs are hesitant to collaborate with others because their own numbers could go down.</p><h3 id="">Be OK with using different models to answer different questions</h3><p id="">While we said this once already, it’s worth repeating: <a href="https://en.wikipedia.org/wiki/All_models_are_wrong" target="_blank" id="">all models are wrong, but some are useful</a>. In our opinion, a cross-team, impact-weighted multi-touch model is the best option for answering questions like “what do we need to do to get more revenue?” This is a question most boards and investors care about, so it’s a great one to ask. </p><p id="">But sometimes you need answers to more tactical questions like “what is most effective at booking us initial meetings?”. In that situation, a “breakthrough touchpoint report” (an improved version of the infamous “original source” model) might still be your best bet.</p><p id="">Ultimately, there is no single attribution model that can answer every question. You’ll make better decisions if you get comfortable with using the right model for the right task.</p><h3 id="">Don’t stop at attribution, because ROI is much better</h3><p id="">In general, most sales and marketing activities “work” at some level. The question is, do they work well enough to continue investing? The way to answer this question is with an ROI report.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/b2b-revenue-attribution-don-t-stop-attribution.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">At Branch, our ROI calculations included both direct campaign costs and estimated people costs, which involved estimating the amount of time spent to execute each activity.</p><p id="">We found that the more difficult challenge was training everyone on the team to view results through the lens of ROI, rather than raw outcome metrics. This is a cultural change that has to start from the top with go-to-market leadership, and must prevail through both good times and bad. </p><h3 id="">Make data actionable for everyone on the team</h3><p id="">B2B attribution is valuable to help a go-to-market organization understand what worked, but the real power comes from going beyond passive reporting.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/b2b-revenue-attribution-make-data-actionable-everyone.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">If you know what has helped close deals in the past, <strong id="">you can equip every person on the team with insight about the best step to take next for each deal. </strong>For example, once you know the types of people who are positively influenced by webinars, you can automatically create lists for your SDR team to invite to the next one.</p><p id="">The power of generating recommendations based on cross-team insights is that you can make higher-level decisions, and allocate budget and resources even more intelligently to get the best possible outcome. </p><h2 id="">Takeaway: B2B attribution IS achievable, and worth the effort!</h2><p id="">B2B revenue measurement is a giant mess, but <strong id="">we don’t agree with those in the industry who argue that attribution is no longer worth the effort. </strong>With the end of “growth at any cost,” and increasing scrutiny on efficie
1705nt go-to-market motions, game-changing measurement is possible. Using reliable data to get the full picture of your growth engine is one of the best things you can do to scale your business.</p><p id="">Here are just a few of the decisions our holistic attribution model helped us make at Branch:</p><ul id=""><li id=""><strong id="">Replacing conferences with VIP dinners.</strong> Our model supported what the marketing team had suspected for a long time: most of the conferences we were sponsoring were never worth it for us. However, small group dinners with a mixture of prospects and existing customers were hugely successful. And despite appearing expensive on a per-event basis, the ROI analysis convinced our finance team to get on board with scaling that program up.</li><li id=""><strong id="">Cutting paid promotion. </strong>We eliminated almost all spending on paid acquisition, including content syndication. Even though we saw a moderate volume of net new leads through these channels, the cost was extremely high and the leads we captured were low-quality and rarely led to opportunities.</li><li id=""><strong id="">Executive events. </strong>We hosted an all-expenses-paid, multi-day event in Hawaii for customers and prospects. Despite rave reviews from attendees and from our own teams, our data showed that single-day events in local cities were a more cost-effective way to get the same results. And the model also helped the team responsible for these events decide who to invite, without needing to constantly bother sales reps for nominations.</li><li id=""><strong id="">How many SDRs to hire, and which ones were consistently underperforming. </strong>While we warned earlier about using cross-team metrics to determine compensation, they can be extremely helpful as an input when comparing the results of people in equivalent roles. Our model helped us understand when we needed to hire additional SDRs in a given region, and which individuals were not a strong fit for their roles. </li><li id=""><strong id="">Identifying high performing outbound messaging</strong>. By comparing the weighted pipeline per outbound email sent by the SDR team, we were able to surface creative strategies that opened doors at target companies, then subsequently roll them out to the whole team.</li></ul>`,"two-radical-new-solutions-to-b2b-revenue-attribution":'<p id="">A year ago, we set out to help B2B go-to-market teams make better decisions by building <a href="/blog/the-quest-for-b2b-revenue-attribution-and-intelligence" id="">the best multi-touch attribution model in the world</a>.<strong id=""> We failed. </strong>But that turned out to be a good thing.</p><p id="">The reasons why we failed were both surprising and illuminating. Across all of our conversations, for every industry and persona, we keep hearing the same thing:<strong id=""> it doesn’t matter how advanced a team’s attribution solution is today — no one is ever HAPPY with it. </strong>Attribution is simply a necessary evil in order to keep the trains running on time.</p><p id="">Even Upside’s best-in-the-world multi-touch model became just the least-bad option, and we noticed <strong id="">it still wasn’t enough to help go-to-market teams with their most important questions:</strong></p><ul id=""><li id="">“What really happened in our deals?”</li><li id="">“What worked?”</li><li id="">“How much did it cost us to acquire this customer?”</li><li id="">“Where should we spend an extra $100k next quarter?”</li><li id="">“What is not performing, and what can I cut to make space for new initiatives?”</li><li id="">“How can we increase our pipeline without a bigger budget?”</li><li id="">“Which half of our GTM spend is actually driving results?”</li></ul><p id="">These are the questions our customers need to answer for their board meetings, and to close more lucrative deals, but these aren’t the insights that come out of any attribution model that exists today.</p><h6 id=""><em id="">You can’t answer “what worked” if you don’t know what happened. </em></h6><p id="">After working with our design partners for the past year, <strong id="">we know what’s missing: you can’t answer “what worked” if you don’t know what happened. </strong>Relying on better sales rep hygiene, or even more rigorous list import guidelines for marketing managers cannot be the solution. But we’ve discovered that you CAN find game-changing insights that help you make decisions…if you find a way to consider the full story of what happened, as experienced by your customers. </p><h2 id="">The future of attribution doesn’t look like its past</h2><p id="">For the past six months, we’ve been researching two ground-breaking solutions to the problem of B2B measurement:</p><ol id=""><li id=""><strong id="">A radical improvement to data recovery and healing. </strong>Next-generation attribution must be built on next-generation data, because what’s captured in Salesforce or HubSpot simply isn’t good enough for this level of quantitative analysis. And this isn’t something you can do in a spreadsheet or a Looker dashboard either — getting it right involves using the latest in AI and graph theory to extract all the buried signals in your raw data. </li><li id=""><strong id="">Deal story analysis powered by AI agents. </strong>With careful training, a team of AI agents can replicate the investigative rigor of expert data analysts to unlock insights from your data — even when it is poorly-structured chaos that can’t support quantitative analysis — and make astoundingly perceptive qualitative assessments about the nuanced drivers behind conversions. This isn’t just uploading a Salesforce export into ChatGPT and asking questions, because you need the AI to follow the same forensic process that an experienced data analyst would use.</li></ol><p id="">Neither of these approaches would have been technically feasible even a year ago, but state-of-the-art is moving quickly and we’ve already seen outstanding results from both. In this article, we will break down how they work, and why we believe this is the future of B2B revenue attribution and intelligence<strong id="">.</strong></p><p id="">And whether you’ve been struggling to solve your company’s revenue measurement challenge for years, or you have a solution that is already working well, or even if attribution is just something you have strong opinions about, we are passionate about this topic and we would love to hear from you. <a href="/" id=""><strong id="">Please drop us a note</strong></a>!</p><h2 id="">Why attribution fails today: messy data, subjective weightings, and “accurately” measuring the wrong things</h2><p id="">The attribution model we spent most of last year testing was based on an in-house tool we created while at <a href="https://branch.io/" id="">Branch</a>, which had helped us scale that company to over $100 million in revenue (and a valuation of $4 billion), primarily through complex enterprise deals with long cycles and large buying committees.</p><p id="">It was an impact-weighted attribution model, and it worked as designed — that wasn’t the issue. 
1705Viewed through the frame of traditional B2B attribution, our results were more accurate and more sensitive than anything else out there. But if you spend time trying to build a multi-touch attribution model, you’ll eventually run into at least one of these brick walls:</p><h3 id="">Problem 1: Messy data is kryptonite to trustworthy insights</h3><p id=""><strong id="">B2B enterprise data is always a disaster. </strong>Attribution is a garbage-in-garbage-out problem, and teams seem almost perversely proud to tell us how screwed up their data is! </p><ul id=""><li id="">Sales reps and marketing managers log and structure touchpoints in ways that help their workflows, not the way customers actually interact with the company (for example, adding people to campaigns days after an event happened).</li><li id="">People are busy with their day jobs, so even benign requests, such as for AEs to add important people to their deals as contact roles, becomes a distracting and distasteful chore.</li><li id="">Email is the lowest common denominator of any B2B go-to-market motion, which means it contains a goldmine of useful signals. But email tracking is a cemetery of ambition — tools like Gong still struggle to dedupe the same customer reply in three different AE inboxes, or extract quoted email messages buried deep in a forwarded email chain.</li><li id="">Every time team leadership changes, or the company upgrades to a more capable marketing automation platform, or someone is tasked to “clean up the campaign list,” data goes missing and classification guidelines get updated. The result is campaigns logged multiple times in different systems, channel values changing every year, and the same prospect appearing as multiple contacts with different email addresses.</li></ul><p id="">Here’s an example of how easily this messy data problem can lead you astray:</p><p id=""><strong id="">What your systems captured:</strong></p><ol id=""><li id="">Sean M, a prospect, registered for an event but didn’t show up.</li><li id="">The AE sent an email to him and his CEO. </li><li id="">There was an inbound email 15 days later from a new contact on this account.</li></ol><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-problem-1-messy-data-1.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">To an attribution model, this collection of touchpoints looks like a direct inbound contact and a deal with only the sales team involved. </p><p id=""><strong id="">What actually happened:</strong></p><ol id=""><li id="">Sean M and Edith H were invited to a Warriors Game.</li><li id=""><strong id="">Sean M registered for the Warriors game.</strong></li><li id="">Edith H attended the warriors Game.</li><li id="">Edith H had a conversation about CompanyA with Rob P, the COO.</li><li id=""><strong id="">Dylan followed up with Edith H.</strong></li><li id="">Edith forwarded the email to Jennifer D, the right person at Company A.</li><li id=""><strong id="">Jennifer D sent an email to Dylan expressing interest.</strong></li></ol><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-problem-1-messy-data-2.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">In reality, <strong id="">this deal was probably sparked by a VIP event that included an executive assist from the COO</strong>, with outbound follow-up help from the AE. All of the relevant details exist somewhere in the deal story, they’re just buried and not legible to any attribution model we’ve ever seen. This muddling of deal drivers is a problem for every go-to-market team, but the impact is particularly evident in marketing — marketers rarely get the credit they deserve in bringing deals, and the CMO role is the shortest-tenure C-level role out there.</p><h6 id=""><em id="">Marketers rarely get the credit they deserve in bringing deals, and the CMO role is the shortest-tenure 
1705C-level role out there. </em></h6><h3 id="">Problem 2: There is no objective “right answer” to multi-touch attribution weightings</h3><p id="">Our typical customer has somewhere between 2,000 and 10,000 touchpoints per account. Some of these are clearly more important than others, but it’s nearly impossible — or it at least takes many hours — to look at all of them and untangle what helped close the deal and what was just noise along the way. Is an email from sales worth the same if it happens before deal qualification vs. during the negotiation phase? What about a thought-leadership webinar vs. product content? Should these activities always get the same weighting on every deal, or does it depend? </p><p id="">No human could write enough rules to cover all of these scenarios, and there is a significant risk of the “<a href="https://en.wikipedia.org/wiki/Coastline_paradox" id="">infinite shoreline problem</a>” where more touchpoints are created simply by spending more time to define more rules. But more statistically-rigorous approaches, such as a regression analysis, quickly run out of steam <strong id="">if you can’t feed them clean data about what happened</strong>.</p><h3 id="">Problem 3: Attribution makes it too easy to focus on the wrong questions</h3><p id="">When looking for credit and ways to quantify a team’s performance, the concept of “I was first!” is easy to understand. Everybody from an SDR to the CEO gets how that model works. It’s also obviously incomplete, which leads to plenty of “common-sense suggestions” from everyone involved about how to make things better. This is often what leads to an extended session in the B2B attribution hamster wheel,<strong id=""> and no one is ever happy at the end.</strong></p><p id="">Fortunately, we’re now in <strong id="">the age of efficient growth</strong>, which is inspiring go-to-market leaders to think differently. As one CMO put it to us recently: </p><p id=""><em id="">“I feel like attribution — the way we’ve been talking about it for years — is kind of old-fashioned. Remember how obsessed we used to be with marketing-sourced and SDR-sourced? People just aren’t thinking that way anymore. Now it’s all about pipeline, and how do I understand what’s working and what’s not so I can make better decisions.”</em></p><h2 id="">AI can’t work miracles, but an infinite supply of “interns” sure helps</h2><p id="">Last fall, for one of our design partners, we compiled an audit of their most common opportunity activation reasons. We’re highly-experienced go-to-market leaders with data analysis skills, but this project took us weeks and required laboriously poring through thousands of touchpoints by hand.</p><h6 id=""><em id="">Don’t expect to upload an unstructured dataset into ChatGPT and get good results</em></h6><p id="">Today, our team of AI analysts can run an equivalent “milestone analysis” in about five minutes, and it regularly finds buried influences even expert human analysts might miss. This is very exciting, because we see deal stories as another form of attribution, even if not expressed in dollars and cents. An analyst-generated story essentially provides a shortcut to answering some of our customers’ most important questions without getting entirely stymied by the messy data problem.</p><p id="">Our preferred format generates an opinion about what led up to the milestone, and then supports that opinion with specific citations from the deal story to validate that the AI team hasn’t manufactured evidence out of thin air:</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-comprehensive-mission-control-account-3.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">However, <strong id="">don’t expect to upload an unstructured dataset into ChatGPT and get good results.</strong> Much like training a team of interns, you need to give the AI agent team careful instruction about how to interpret the data it’s being fed. Even the differences between a New Business and an Upsell deal are enough to require additional guidance.</p><p id="">A deal story is also notably different from unbounded “chat with your data” AI experiences, which we think are still universally terrible. Even though this is a common feature request, we see people try them once, get underwhelming (or even hallucinated) results, and never try again. This won’t be the case forever — between technology improvements and end users becoming more familiar with how to interact with AI — but in the meantime, “working together with AI to create a shared asset” (such as one of these deal stories, or to configure a dashboard or add a column to an existing report) is a better paradigm.</p><p id="">The capabilities of AI are advancing rapidly, which means today is the worst these analyses will ever be. But even far more advanced LLMs won’t be the panacea, especially for any kind of quantitative analysis. For these use cases, we still need structured, clean data.</p><h2 id="">The road to true next-generation attribution involves next-generation data</h2><p id="">We believe that the only true solution to the B2B attribution problem is through solving the underlying data problem first. If the dataset you start from is wrong — either because it’s missing records or contains duplicates — it doesn’t matter what quantitative attribution model you put it through. <strong id="">The results will be bad.</strong></p><h6 id=""><em id="">The traditional systems of record (like Salesforce or Marketo) aren’t trustworthy.</em></h6><p id="">All B2B attribution models today are descended from an archaic, legacy data foundation based on lead funnels and designed to work primarily on single-buyer deals. It’s the structure that we all know so well from Salesforce: pre-defined objects like accounts/opportunities/leads/contacts/campaigns, and the static relationships between them: </p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-road-true-next-generation-1.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">This foundation has served us all well enough in the past, and the problem is not with what it captures, but with what it misses. The language of Salesforce simply doesn’t have grammar to handle all the embedded signals when a prospect sends you an email like this:</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-road-true-next-generation-2.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">We know this email is almost too good to be true (lightning does strike sometimes!), but the key insight for attribution purposes is that <strong id="">this prospect is a returning customer.</strong> Now, imagine this email arrives right after a website session with a chatbot conversation:</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-road-true-next-generation-3.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">Any attribution tool based on a traditional data model is going to get this wrong every time — in fact, it will probably send you down the road towards a strategic faceplant, because it’ll tell you that <strong id="">“good deals come from chatbots” </strong>when the truth is that the chatbot simply happened to be the most convenient button on the website for someone with pre-existing high intent.</p><p id="">A next-generation attribution model needs access to these hidden and buried signals.</p><h2 id="">How do you build a next-generation data foundation?</h2><p id="">At Upside, our mission to build a better data foundation for next-gen attribution has forced us to make a big mindshift: the traditional systems of record (like Salesforce or Marketo) aren’t trustworthy. The data inside them is an extremely useful source of fuel, but not a source of truth. </p><p id="">For example:</p><ol id=""><li id="">
1705An AE might not add someone to Salesforce as a contact, <strong id="">but will add them to a calendar meeting.</strong> They might not log the coffee meeting or quick call,<strong id=""> but will send a follow up email after.</strong></li><li id="">Marketing teams might not enter the exact dates for a VIP event, <strong id="">but will add people to campaigns and send invitations with the right date inside.</strong></li></ol><p id="">The goal is not to “clean up” the data coming from these sources — it’s much more transformational: to reconstitute the most-likely-correct version of what happened based on all the signals available.</p><p id="">We’ve been working on this for over a year and still don’t have all the answers, <strong id="">but we’re starting to see breakthrough improvements.</strong> Here’s the outline of how we are approaching the problem now:</p><h3 id="">Step 1: Ingest raw data, and create a dense graph of signals</h3><p id="">Signals exist everywhere. If you’re capturing data, it contains signals that could be useful. Systems like Salesforce and Marketo or HubSpot are the places to start, but more is better.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-step-1-ingest-raw-1.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">ETL tools like Fivetran make this process much easier, because they have prebuilt integrations with most main sources. In practice, we’ve found that we can usually get pretty far with just Salesforce and Marketo/HubSpot because mature go-to-market-organizations tend to already treat Salesforce as their de facto data warehouse: the raw data ends up dumped in there somewhere, even if it isn’t addressable for any sort of meaningful analysis.</p><h6 id=""><em id="">We’re extracting signals not only about the touchpoint itself, but also about all of the “phantom touchpoints” referenced within it (for example, the casual mention in an email of “coffee yesterday”).</em></h6><p id="">At this stage in the process, the goal is not to create the final dataset for reporting because there will be a lot of overlap. We’re extracting signals not only about the record itself, but also about all of the “shadow records” referenced within it (for example, the casual mention in an email of “coffee yesterday” — we call these “phantom touchpoints”). Conceptually, it’s a little like letting bread dough rise, and the output is going to be a giant, extremely messy graph with literally billions of individual “nodes”:</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-step-1-ingest-raw-2.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">This is ultimately a structured data problem, not dissimilar to what a search engine like Google does when crawling the web. We’ve been bootstrapping our work with industry standards like <a href="http://schema.org/" id="">Schema.org</a> and <a href="https://www.w3.org/TR/prov-o/" id="">PROV-O</a>, which provide extensive references for how to map real-world activities into structured data. We’ve also been testing ways to use AI to speed up the mapping of data sources into these schemas.
1705</p><h3 id="">Step 2: Use entity resolution to synthesize a canonical version of what happened</h3><p id="">Once you have a giant, semi-structured soup of overlapping signals, it’s time to distill back into a set of canonical records. Entity resolution is a well-established discipline, and we’ve been researching a variety of techniques to understand which ones give the best results with go-to-market data.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-step-2-use-entity.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">The goal is to create a comprehensive dataset, equivalent to traditional objects like people/accounts/campaigns/touchpoints, but with far fewer missing pieces. In Genesis, our data foundation, we sometimes refer to this as “the blood-brain barrier.” Downstream analytics systems (such as the attribution model) no longer need to deal with the chaos of data in source systems like Salesforce or Marketo because they’re receiving a clean feed of deduplicated, healed data. In the example above, Genesis has correctly identified that the “Mada Seghete” who founded Branch is the same “Mada Seghete” who founded Upside, even though there is no direct link between these records.</p><h2 id="">What you can do with this data</h2><h3 id="">Comprehensive “mission control” for your account stories </h3><p id="">People instinctively distrust black boxes, and want the option to drill into the raw data behind any roll-up number or analysis to confirm it is believable. </p><p id="">One of the first customer-accessible tools we built was an “account story viewer” because it was something we needed ourselves on a daily basis (jumping between Salesforce, Marketo, Gong, and half a dozen other tools to debug an account story gets old, fast).</p><p id="">We’ve talked to a number of teams who built a similar tool in-house (often in a platform like Looker), because nothing comprehensive exists on the market for it today. But these still suffer from the flaws of messy source data, and also inherit all the typical challenges of in-house tooling, including unpleasant UX and frustrating load times with larger datasets.</p><p id="">Some of the key features we’ve needed for this include:</p><h4 id="">A “minimap”</h4><p id="">A “minimap” (like in a video game) that gives a clear visual representation of when interesting things are happening in the account. This includes when opportunities were open and progressing, when new people showed up for the first time, and when the account had velocity (calculated by showing customer engagements against the “bids” coming from teams like sales and marketing). The minimap helps to-go-market teams see where interesting things were happening, and jump straight to that moment for further investigation.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-comprehensive-mission-control-account-1.png" width="auto" height="auto" loading="auto" id=""></div></figure><h4 id="">A chronological log of touchpoints</h4><p id="">A chronological log of touchpoints showing who engaged, in which channel, with which go-to-market team, and so on. This supports multiple filter modes, so you can drill in and understand the impact of every campaign or person on a deal. Once you see what happened, you can re-engineer the most effective thing to do on similar accounts going forward.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-comprehensive-mission-control-account-2.png" width="auto" height="auto" loading="auto" id=""></div></figure><h4 id="">Summaries of “milestone moments”</h4><p id="">Summaries of “milestone moments” to make sure that people don’t miss the forest for the trees about what drove progress in the account. These summaries cite their sources, so that it’s easy to jump back into the full deal story for follow-up investigation.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-comprehe
1705nsive-mission-control-account-3.png" width="auto" height="auto" loading="auto" id=""></div></figure><h4 id="">Deep touchpoint forensics</h4><p id="">Deep touchpoint forensics so that people can dig into all the details in one place without having to jump between different platforms. In our platform, this already includes information like sales email content and web session details, and we are expanding it to cover additional data types like call transcripts, marketing email content, and chatbot conversations. This dramatically simplifies the task of finding all the hidden handoffs that happen in a typical enterprise deal cycle.<br><br></p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-comprehensive-mission-control-account-4.png" width="auto" height="auto" loading="auto" id=""></div></figure><h3 id="">Campaign and channel scorecard reporting</h3><p id="">Every B2B go-to-market organization needs to report on KPIs for their investments. This is often an exercise in vanity metrics, because real data is so painfully tedious to pull. But with a comprehensive account story for every prospect, it suddenly becomes much easier to generate meaningful insights for each campaign. For example, the number of opportunities activated or progressed after an interaction with that campaign, combined with the ability to drill down to the deal story and check how that activation happened.</p><p id="">With this level of insight consistently available to everyone on the team, it’s much easier to make good decisions without waiting for a QBR or an overloaded BI analyst to pull one-off data reports.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/two-radical-attribution-solutions-campaign-channel-scorecard-reporting.png" width="auto" height="auto" loading="auto" id=""></div></figure><h3 id="">Customer acquisition cost and deal ROI</h3><p id="">Once you have a comprehensive audit of the touchpoints involved in closing a deal, you can attach costs for all of them and estimate how expensive it was to land each customer. <strong id="">These insights help you make decisions about which industries, geographies, and customer tiers are worth pursuing.</strong> We’ve already started running proof-of-concept experiments for this, and expect to start working on it in the near future.</p><h3 id="">Weighted attribution</h3><p id="">We know that assigning credit for pipeline or revenue dollars to specific activities is still an attractive goal for many teams because it enables zero-sum reporting where everything adds up. We’ve continued to monitor the improvement of our original impact-weighted model as the underlying data quality improves, and we’re also researching other approaches to weighting schemas that were not possible within the limitations of a traditional data foundation.<strong id=""> One promising possibility includes a predictive model that allocates credit to each touchpoint based on how much it increases the likelihood of a deal closing.</strong></p><h3 id="">Next-best-action predictions</h3><p id="">This is one of our most common customer requests: after you know what has helped close deals in the past, you can equip every person on the team with insight about the best step to take next for each deal that is open today. This is also one of the most highly-leveraged modeling exercises, which means it’s extremely important to be confident in the stability and quality of data at lower levels first.</p><h2 id="">Takeaway: B2B attribution CAN be great, and it’s worth the effort!</h2><p id="">A year and a half into this journey, we’re more convinced than ever that game-changing measurement is possible, and that using reliable data to get the full picture of your growth engine is one of the best things you can do to scale your business.</p><p id="">We have helped our design partners uncover what drove their largest deals, given insights to C-level execs to inform shifts in their inbound vs. outbound spend, and shown teams which signals truly mean a deal has a high likelihood to close. </p><p id="">We also have a far clearer picture of what it will take to make meaningful recommendations about what to do next, taking into consideration contributions from the whole go-to-market organization, and why traditional approaches to attribution and prediction are continually doomed to failure.</p><p id="">If you’ve been trying to solve this problem for years, somehow never managed to make progress, and are now looking for a more rigorous approach to your GTM insights, we would love to hear from you. Please <a href="/" id=""><strong id="">reach out to us</strong></a> and we’ll be in touch!</p>',"what-is-forensic-attribution":'<h2 id=""><strong id="">TL;DR</strong></h2><p id=""><strong id="">Forensic attribution</strong> is a new way of doing B2B large opportunity and ABM attribution. Instead of using your existing data and applying models to it, a forensic attribution system pulls every signal from different data sources (your CRM, marketing tools, email tracking or meeting video recording, and so on) and recreates what happened to understand what actually worked.</p><h2 id=""><strong id="">Why do we need a new way of doing attribution?</strong></h2><p id="">I recently posted something on LinkedIn about my struggles as a B2B CMO: showing what works and knowing where to spend my budget. The post went viral because every marketing leader from all over the world faces this problem. And the reason is simple: attribution for B2B is broken and needs a new solution. We are proposing forensic revenue attribution as the answer.</p><h2 id=""><strong id="">Why We Need a New Category of Attribution</strong></h2><p id="">Several years ago, I was CMO and a co-founder at Branch. During a board review, I was asked a question every CMO is asked over and over:</p><p id="">“But which of your initiatives actually created revenue? And what can you cut?”</p><p id="">Despite well-designed slides and a working multi-touch attribution model, I could not provide a clear, evidence-based answer. &nbsp;The systems built to measure GTM efforts are broken and antiquated and built for leads, not for the complexity of B2B large enterprise deals.</p><p id="">That experience, while humbling, set me on a path to create what I believe is a more rigorous approach to attribution—one designed for the complexities of B2B sales and buying behavior.</p><h2 id=""><strong id="">Why Traditional Attribution Models Fall Short</strong></h2><h3 id=""><strong id="">1. Incomplete Data Capture</strong></h3><p id="">CRMs and marketing automation tools capture only a fraction of the buyer journey. Informal interactions—executive outreach, Slack conversations, calendar events, partner emails—often go untracked, leaving attribution models to operate on partial data. The current systems also rely too much on humans and humans are fallible. AEs miss adding people to CRMs, marketing teams upload contact to a campaign days after it happened, meetings are not always logged.</p><h3 id=""><strong id="">2. Inadequate Modeling for Complex Journeys</strong></h3><p id="">First-touch and last-touch attribution oversimplify buyer behavior, especially for large deals with over hundreds or even thousands of touchpoints. Even multi-touch models (e.g., U-shaped, W-shaped, time-decay) focus on weighting algorithms rather than reconstructing what actually occurred. These models are blind to the reality of multi-stakeholder buying groups and non-linear sales cycles.</p><h3 id=""><strong id="">3. Metrics Without Strategic Utility</strong></h3><p id="">Attribution dashboards frequently become internal scorecards rather than strategic tools. Marketing, sales, and finance interpret the same data differently, often undermining trust and alignment. Worse, attribution rarely informs real-time decision-making around spend, headcount, or pipeline risk.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/forensic-attribution-3-metrics-without-strategic.png" width="auto" height="auto" loading="auto" id=""></div></figure><h2 id=""><strong id="">What Is Forensic Attribution?</strong></h2><p id=""><strong id="">Forensic attribution</strong> is a methodology using data signals and reconstructive techniques for B2B revenue attribution. It starts by creating a knowledge graph for a company’s GTM data and uses it to read signals across different systems and tools. The next step is to &nbsp;recover unlogged or fragmented touchpoints and reconstruct the buying account’s journey at a multi-person, multi-channel level. Lastly the model uses all the data and applies <strong id="">contextual analysis</strong> to identify what truly influenced pipeline and revenue outcomes.</p><p id="">In contrast to traditional models that apply weighted models like first touch or last touch to existing incomplete data, forensic attribution builds a complete picture by first understanding what happened, then interpreting what mattered.</p><h2 id=""><strong id="">How It Works: Upside’s Forensic Attribution Framework</strong></h2><h3 id=""><strong id="">1. Ingest raw data and unify it</strong></h3><p id="">While many different vendors claim to unify data, much of that unification is bringing data together in one place without much thought, resulting in duplicate contacts, campaigns, accounts and beyond, and <strong id="">making it even harder to get insights</strong>.</p><p id="">A true forensic model like Upside cleans up, deduplicates, and unifies data at the record level, finding ways to resolve and merge even duplicate contacts with different information — like a contact with different emails or titles.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/forensic-attribution-1-ingest-raw-data-1.png" width="auto" height="auto" loading="auto" id=""></div></figure><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/forensic-attribution-1-ingest-raw-data-2.png" width="auto" height="auto" loading="auto" id=""></div></figure><h3 id=""><strong id="">2. Signal Recovery</strong></h3><p id="">Upside connects to your full GTM stack including CRM, marketing automation, email tracking or video recording. This enables recovery of touchpoints that never made it into your CRM, in most cases being the touchpoints that actually drove deals forward.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/forensic-attribution-2-signal-recovery.png" width="auto" height="auto" loading="auto" id=""></div></figure><h3 id=""><strong id="">3. Genesis™ Person and Actions Knowledge Graph</strong></h3><p id="">Recovered signals are cleaned, deduplicated, and organized into a unified graph that links every buyer persona, timestamp, system, and channel. This structure accommodates role changes, buying group dynamics, and cross-functional collaboration within an opportunity.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/forensic-attribution-3-genesis-person-actions-1.png" width="auto" height="auto" loading="auto" id=""></div></figure><p id="">Most organizations have data scattered across various systems, formats, and schemas. Knowledge graphs provide a powerful way to integrate and harmonize this disparate information into a coherent, queryable whole, creating not just a central physical repository, but a normalized single source of truth in a common level of semantic meaning.<br><br></p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/forensic-attribution-3-genesis-person-actions-2.png" width="auto" height="auto" loading="auto" id=""></div></figure><h3 id=""><strong id="">4. Visual representation of the deal that helps detect when momentum inflections happen</strong></h3><p id="">Each opportunity is reconstructed as a chronological journey, highlighting influence inflection points, internal alignment shifts, deal momentum, or deal deceleration, transforming attribution from a model to a story that you can zoom in at any point and understand what happened - who was involved, how did they engage with sales and marketing and in many cases WHY they did it.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/forensic-attribution-4-visual-representation-deal.png" width="auto" height="auto" loading="auto" id=""></div></figure><h3 id=""><strong id="">5. Dragonsight AI™ Analysis of the momentum shifts and clean data to understand what happened</strong></h3><p id="">Our proprietary AI agent acts like a virtual analyst, evaluating causality, velocity shifts, and spend to generate concise, explainable insights, such as “campaign X drove re-engagement with a stalled buyer group” or “executive outreach accelerated deal velocity post-stall” by looking at the clean, enhanced and unified data.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/forensic-attribution-5-dragonsight-ai-analysis.png" width="auto" height="auto" loading="auto" id=""></div></figure><h3 id=""><strong id="">6. Strategic Reporting</strong></h3><p id="">Upside surfaces campaign ROI, rep influence, channel effectiveness, and momentum decay in decision-ready formats for campaign managers, but also leaders including CMOs, RevOps, and CFOs.</p><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/forensic-attribution-6-strategic-reporting.png" width="auto" height="auto" loading="auto" id=""></div></figure><h2 id=""><strong id="">Why This Matters in 2025</strong></h2><ul id=""><li id=""><strong id="">Go-to-market complexity is growing</strong>: Buyers operate across community, peer referrals, partner ecosystems, and AI-driven sequences, most of which aren’t captured in structured Salesforce or HubSpot fields.
1705<br><br></li><li id=""><strong id="">Buying groups have multiplied</strong>: Enterprise deals involve on average 7+ stakeholders, often spanning functions, roles, and geographies.<br><br></li><li id=""><strong id="">Budgets are under scrutiny</strong>: In an era of efficiency, boards and CFOs expect attribution models that can stand up to executive review and audit and won’t allocate budgets without clear ROI.<br><br></li><li id=""><strong id="">AI content saturation demands evidence-based measurement</strong>: Marketing output has increased tenfold with more content, emails and engagement than ever before, making it even harder to understand what actually works. A forensic model can distinguish noise from real influence.<br><br></li></ul><h2 id=""><strong id="">Outcomes: What You Can Do With Forensic Attribution</strong></h2><p id=""><strong id="">Executive Question</strong></p><p id=""><strong id="">Forensic Attribution Insight</strong></p><p id=""><strong id="">Traditional Models</strong></p><p id=""><strong id="">“What should we double down on?”</strong></p><p id="">Channel and campaign ROI linked to closed-won revenue—not just MQLs.</p><p id="">Each weighted model will give different results, the best channels might not get the right credit depending on how weights are assigned.</p><p id=""><strong id="">“Why is this deal stalling?”</strong></p><p id="">Timeline flags missing champions, executive drop-off, or a cold gap in activity.</p><p id="">No way of showing deal level attribution or engagement.</p><p id=""><strong id="">“Where’s the budget waste?”</strong></p><p id="">Cost-per-influence and momentum analysis highlight non-performing spend.</p><p id="">Impossible to tell, every model shows a different result.</p><p id=""><strong id="">“Can we trust the data?”</strong></p><p id="">Yes. Every insight is backed by system-level evidence, traceable to original interactions.</p><p id="">Most insights are a black box.</p><h2 id=""><strong id="">How can you try out forensic attribution with Upside?</strong></h2><ol id=""><li id=""><strong id="">Connect GTM systems</strong> (OAuth-based; minimal configuration) - 1-2 hours</li><li id=""><strong id="">We ingest and prepare your data</strong> (no manual or cleanup data prep) - overnight</li><li id=""><strong id="">Review and map data</strong> - 1-2 hours kickoff meeting</li><li id=""><strong id="">Access dashboards for Marketing, RevOps, and Finance - </strong>after kick-off</li><li id=""><strong id="">Act on insights</strong>: Reallocate spend, recover stalled deals, prove impact - ongoing</li></ol><figure id="" class="w-richtext-figure-type-image w-richtext-align-center" data-rt-type="image" data-rt-align="center"><div id=""><img alt="" src="/images/blog/forensic-attribution-can-try-out-forensic.png" width="auto" height="auto" loading="auto" id=""></div></figure><h2 id=""><strong id="">Conclusion: From Attribution Guesswork to Evidence-Based Growth</strong></h2><p id="">Forensic attribution is not just a model—it’s an operating framework for GTM leadership in modern B2B organizations. It equips teams with the evidence to make confident decisions, eliminate internal misalignment, and unlock real growth.</p><p id="">If you’re ready to move beyond attribution debates and start acting on what truly works, we’d be happy to walk you through it.</p><p id="">👉 <a href="/" id=""><strong id="">Book a demo</strong></a></p>'};function hde(e){const a=e.replace(/<[^>]+>/g,"").trim().split(/\s+/).length;return Math.max(1,Math.ceil(a/200))}function pde(e){const t=new Date(e);return isNaN(t.getTime())?e:t.toLocaleDateString("en-US",{month:"long",day:"numeric",year:"numeric"})}const mde=()=>{const{slug:e}=Ta(),t=I4.find(m=>m.slug===e),a=e?ude[e]:void 0,i=`https://upside.tech/blog/${e}`,r=M.useRef(null),{items:o,html:l,activeId:d,scrollToHeading:u}=dde(a),h=o.length>0;return M.useEffect(()=>{if(!r.current)return;r.current.querySelectorAll(".copy-prompt").forEach(f=>{if(f.querySelector(".copy-btn"))return;const y=document.createElement("button");
1705y.className="copy-btn",y.textContent="Copy prompt",y.addEventListener("click",()=>{const b=f.querySelector("code");b&&navigator.clipboard.writeText(b.textContent||"").then(()=>{y.textContent="Copied!",setTimeout(()=>{y.textContent="Copy prompt"},2e3)})}),f.style.position="relative",f.style.paddingRight="9rem",y.style.cssText="position:absolute;top:0.75rem;right:0.75rem;padding:0.35rem 0.75rem;font-size:0.8rem;font-weight:500;border:1px solid #d2d2d7;border-radius:6px;background:#ffffff;color:#1d1d1f;cursor:pointer;transition:all 0.15s ease;box-shadow:0 1px 3px rgba(0,0,0,0.08);z-index:1;white-space:nowrap;",y.addEventListener("mouseenter",()=>{y.style.background="#f0f0f0"}),y.addEventListener("mouseleave",()=>{y.style.background="#ffffff"}),f.appendChild(y)})},[a]),M.useEffect(()=>{const m=r.current;if(!m)return;let f=document.getElementById("blog-image-lightbox");if(!f){f=document.createElement("div"),f.id="blog-image-lightbox",f.style.cssText="position:fixed;inset:0;z-index:9999;display:none;align-items:center;justify-content:center;background:rgba(0,0,0,0.85);padding:2rem;cursor:zoom-out;";const b=document.createElement("img");b.style.cssText="max-width:90vw;max-height:90vh;object-fit:contain;border-radius:8px;box-shadow:0 10px 40px rgba(0,0,0,0.5);";const x=document.createElement("button");x.setAttribute("aria-label","Close"),x.innerHTML="&times;",x.style.cssText="position:absolute;top:1.25rem;right:1.5rem;width:2.5rem;height:2.5rem;font-size:1.75rem;line-height:1;border:none;border-radius:9999px;background:rgba(255,255,255,0.9);color:#1d1d1f;cursor:pointer;display:flex;align-items:center;justify-content:center;";const k=()=>{f.style.display="none",document.body.style.overflow=""};f.addEventListener("click",v=>{v.target!==b&&k()}),document.addEventListener("keydown",v=>{v.key==="Escape"&&k()}),f.appendChild(b),f.appendChild(x),document.body.appendChild(f)}const y=f.querySelector("img");m.querySelectorAll("img").forEach(b=>{b.dataset.lightbox||(b.dataset.lightbox="true",b.style.cursor="zoom-in",b.addEventListener("click",()=>{y.src=b.currentSrc||b.src,y.alt=b.alt||"",f.style.display="flex",document.body.style.overflow="hidden"}))})},[a]),t?n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:t.title,description:t.description,ogImage:t.image,canonicalUrl:i,jsonLd:{"@context":"https://schema.org","@type":"BlogPosting",headline:t.title,description:t.description,image:mG(t.image),datePublished:new Date(t.date).toISOString(),author:t.author?{"@type":"Person",name:t.author}:{"@type":"Organization",name:"Upside"},publisher:{"@type":"Organization",name:"Upside",url:"https://upside.tech"},mainEntityOfPage:i}}),n.jsx("section",{id:"hero",className:"subpage-hero blog-post-hero-section",children:n.jsx("div",{className:"blog-post-hero",children:n.jsxs("div",{className:"blog-post-hero__container",children:[n.jsxs("div",{className:"w-layout-vflex blog-post-hero__header",children:[n.jsx("div",{className:"w-dyn-list",children:n.jsx("div",{role:"list",className:"w-dyn-items",children:t.topics.map(m=>n.jsx("div",{role:"listitem",className:"w-dyn-item",children:n.jsx("div",{className:"badge",children:m})},m))})}),n.jsx("h1",{className:"heading-xl",children:t.title})]}),n.jsxs("div",{className:"blog-post-hero__content",children:[t.author&&n.jsx("div",{className:"blog-post-hero__item",children:n.jsxs("p",{className:"body-s",children:["By ",t.author]})}),n.jsxs("div",{className:"blog-post-hero__item",children:[n.jsx("img",{loading:"lazy",src:"/images/calendar.svg",alt:""}),n.jsx("p",{className:"body-s",children:pde(t.date)})]}),a&&n.jsxs("div",{className:"blog-post-hero__item",children:[n.jsx("img",{loading:"lazy",src:"/images/hourglass.svg",alt:""}),n.jsxs("p",{className:"body-s",children:[hde(a)," min read"]})]})]})]})})}),n.jsx("div",{className:"container-blog",children:n.jsx("div",{className:"content",children:n.jsxs("div",{className:"blog-reading-layout",children:[n.jsxs("div",{className:"blog-reading-main",children:[n.jsx(kP,{variant:"mobile",url:i,title:t.title,tocItems:o,showToc:h,activeId:d,onNavigate:u}),n.jsxs("div",{className:"article-content article-reading",ref:r,children:[t.image&&n.jsx("img",{src:t.image,alt:t.title,className:"article-lead-image"}),n.jsx("div",{className:"article-surface",children:a?n.jsx("div",{className:"article-content__rich-text w-richtext",dangerouslySetInnerHTML:{__html:l}}):n.jsx("div",{className:"article-content__rich-text w-richtext",children:n.jsx("p",{children:t.description})})}),n.jsx("div",{className:"blog-post-footer",children:n.jsxs(J,{to:"/blog",className:"blog-back-link",children:[n.jsx("span",{"aria-hidden":"true",children:"←"})," Back to all posts"]})})]})]}),n.jsx(kP,{variant:"desktop",url:i,title:t.title,tocItems:o,showToc:h,activeId:d,onNavigate:u})]})})}),n.jsx(MG,{})]}):n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Hr,{title:"Post Not Found",description:"The blog post you're looking for doesn't exist."}),n.jsx("div",{className:"container",children:n.jsx("div",{className:"content",children:n.jsx("section",{className:"section",children:n.jsx(J,{to:"/blog",className:"cta w-button",children:"Back to Blog"})})})})]})},fde=({src:e,alt:t,onClose:a})=>{const i=M.useCallback(r=>{r.key==="Escape"&&a()},[a]);return M.useEffect(()=>{if(!e)return;document.addEventListener("keydown",i);const r=document.body.style.overflow;return document.body.style.overflow="hidden",()=>{document.removeEventListener("keydown",i),document.body.style.overflow=r}},[e,i]),e?Fp.createPortal(n.jsxs("div",{className:"image-lightbox__backdrop",role:"dialog","aria-modal":"true","aria-label":t||"Image preview",onClick:a,children:[n.jsx("button",{type:"button",className:"image-lightbox__close","aria-label":"Close image preview",onClick:a,children:n.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:[n.jsx("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),n.jsx("line",{x1:"6",y1:"6",x2:"18",y2:"18"})]})}),n.jsx("img",{src:e,alt:t,className:"image-lightbox__img",onClick:r=>r.stopPropagation()})]}),document.body):null},gde={"graphite-uncovering-real-channels-behind-inbound-growth":`<div class="case-study-testimonial-section"><div class="w-dyn-list">
1705<div role="list" class="case-study-testimonials-list w-dyn-items"><div role="listitem" class="w-dyn-item"><div class="testimonial-small-container"><div class="testimonial-small-content-wrapper"><div class="testimonial-small-image-wrapper"><img loading="lazy" src="/images/ethan-smith.jpeg" alt="" class="testimonial-small-image"/></div><div class="testimonial-small-quote-title-wrapper"><div class="testimonial-small-quote">“We stopped doing events because we didn’t have data saying they were impactful. With Upside, we can see events are actually a massive flywheel for our business.”</div><div class="testimonial-small-logo-title-wrapper"><div class="testimonial-small-logo_wrapper"><img loading="lazy" src="/images/graphite-logo.jpeg" alt=""/></div><div class="vertical-separator cc-display-none-mobile-l"></div><div class="horizontal-separator cc-testimonials-mobile-xl"></div><div class="testimonial-small-details-wrapper"><p class="body-m cc-color-text-primary">Ethan Smith</p><p class="body-m">CEO &amp; Founder</p></div></div></div></div></div></div></div></div></div><div class="horizontal-separator"></div><div class="case-study-main-content-section"><div class="badge">Metrics</div><div class="margin-bottom-24px"><h2 class="case-study-title">Full-Journey Attribution Revealed the Real Channels Driving Graphite&#x27;s 100% Inbound Revenue</h2></div><div class="case-study-metrics_wrapper"><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1706<path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1707<path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1708<path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1709<path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1710</svg></div></div><p class="paragraph-4">53% of Deals from Referrals</p><div class="div-block-3"></div><p class="paragraph-5">Over half of deals in the past 2 years came from referrals — almost none of which showed up in standard systems</p></div><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1711<path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1712<path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1713<path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1714<path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1715</svg></div></div><p class="paragraph-4">$10M+ Referral Revenue Uncovered</p><div class="div-block-3"></div><p class="paragraph-5">Full-journey attribution traced relationships invisible to traditional CRM tracking</p></div><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1716<path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1717<path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1718<path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1719<path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1720</svg></div></div><p class="paragraph-4">Events Restarted After Data</p><div class="div-block-3"></div><p class="paragraph-5">Graphite had stopped events based on bad attribution data. Upside revealed events were a core growth flywheel</p></div></div></div><div class="case-study-main-content-section"><div class="badge">Highlighted Results</div><div class="case-study-main-content-rich-text w-richtext"><h2>From invisible referrals to a data-driven growth playbook: Upside revealed the hidden engines behind Graphite's revenue.</h2><ul><li><strong>Referrals Quantified for the First Time:</strong> 53% of deals — over $10M — traced to ~20 distinct referrers whose influence was completely invisible in the CRM. Upside looked at emails, call transcripts, and SFDC notes to find every referrer.</li><li><strong>Events Restarted After Data Proved Their Value:</strong> Graphite had stopped events because attribution showed zero impact. Upside revealed events fuel the referral flywheel — the people referring the most deals had attended Graphite events. Events were restarted immediately.</li><li><strong>The "Ethan Channel" Quantified:</strong> Created a dedicated attribution channel for the CEO's thought leadership, confirming his outsized revenue influence while surfacing key-man risk that needs diversification.</li><li><strong>Last-Touch Attribution Debunked:</strong> Traditional models said "send more emails, get more form fills." Upside's full-journey analysis told the opposite story — referrals, events, and thought leadership are the real growth engine.</li><li><strong>8 Lost Deals Recovered:</strong> Identified deals initially closed-lost that came back and closed as won — many through referral relationships that developed over years.</li></ul><figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width: 100%;"><img src="/images/graphite-last-touch-vs-multi-touch.png" loading="lazy" alt="" style="width: 100%;" /></figure></div></div><div class="case-study-main-content-section"><div class="badge">
1720Background</div><div class="case-study-main-content-rich-text w-richtext"><h2>A $15M+ Agency Built Entirely on Inbound — With an Unconventional Playbook</h2><p>Graphite has built $15M+ in revenue entirely through inbound channels — with zero outbound sales, no cold email, a marketing team of 4, and a sales team of 2. Neither salesperson had any sales experience, they moved to sales from practitioners roles. Everyone at the company is a practitioner who also happens to do marketing and sales.</p><p>CEO Ethan Smith's approach to growth defies conventional wisdom at every turn. Where the typical marketing playbook says post daily on LinkedIn, run paid ads, produce content hubs and video shorts — Graphite does almost none of these. Instead, they've built a business on a radically different set of channels: original never-been-done-before research from PhDs, authentic bespoke events with no sales pitches, premium bespoke swag given on special occasions only, and leadership that personally writes everything.</p><p>The results speak for themselves. Graphite works with companies like Notion, Webflow, OpenAI, Netflix, Adobe, and Meta. <strong>53% of their deals in the past two years came from referrals.</strong> A single <a href="https://www.youtube.com/watch?v=iT7kq-R3Gjc">Lenny's Podcast episode</a> directly influenced over $1.5M in closed-won revenue. Ethan's LinkedIn posts — written once a month, maximum length, packed with original research — regularly generate 4,000+ likes.</p><p>But Graphite had a measurement problem. Their unconventional channels — thought leadership, referrals, intimate dinners, premium swag — were largely invisible to traditional marketing attribution.</p></div></div><div class="case-study-main-content-section"><div class="badge">The Challenge</div><div class="case-study-main-content-rich-text w-richtext"><h2>When Traditional Attribution Tells the Wrong Story</h2><p>When Graphite first started working with Upside, the initial attribution reports painted a misleading picture. Traditional last-touch and first-touch models showed only three things driving revenue: <strong>web activity, marketing email, and website forms.</strong> A significant number of deals appeared to have no attribution data at all.</p><p>Under a last-touch model, 100% of the credit goes to whatever happened right before conversion — typically an email or a form fill. The recommendation from this data: <strong>send more people to the website, send more emails, get more people to fill forms.</strong> This is the standard marketing playbook — and it would have been exactly wrong for Graphite.</p><p>The real problem was that Graphite's most powerful channels operate outside the boundaries of what traditional attribution can see:</p><ul><li><strong>Referrals</strong> happen through personal relationships built over years — sometimes a decade — and never through a tracked link</li><li><strong>Events</strong> create influence through authentic connection, not campaign URLs. Guests weren't always added to CRM campaigns</li><li><strong>Thought leadership</strong> drives deals when a CMO hears Ethan on Lenny's Podcast and reaches out on LinkedIn — a touchpoint that never hits a UTM parameter</li><li><strong>Premium swag</strong> (custom graphite mechanical pencils from an English manufacturer) generates enthusiastic responses that correlate with referrals — but lives entirely outside digital tracking</li></ul><p>Worse, acting on the incomplete data nearly led to a strategic mistake. <strong>Graphite stopped doing events</strong> because the numbers didn't show they were working. The data wasn't wrong, the attribution model just couldn't see the impact.</p></div></div><div class="case-study-main-content-section"><div class="badge">The Outcome</div><div class="case-study-main-content-rich-text w-richtext"><h2>Full-Journey Attribution Reveals What Really Drives Revenue</h2><p>Upside connected all of Graphite&#x27;s data sources — Salesforce, HubSpot, Apollo, Fathom call transcripts, RB2B anonymous traffic data — into a unified knowledge graph. Rather than relying on simple first-touch or last-touch credit, Upside used AI to extract missing touchpoints from call transcripts and emails, perform intelligent buying group detection, and recover persona identifications that weren&#x27;t properly tracked in the CRM.</p><figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width: 100%;"><img src="/images/graphite-data-healing-buying-group.png" loading="lazy" alt="" style="width: 100%;" /></figure><h3>1. Referrals: The $10M+ Hidden Engine</h3><p>Upside&#x27;s analysis revealed that <strong>53% of Graphite&#x27;s deals in the past two years came from referrals — and almost none showed up in standard systems.</strong>
1720 Across 40 closed-won deals, referrals directly influenced over $10 million in revenue. These referrals were invisible in Graphite&#x27;s CRM because they happened through personal conversations, dinners, and professional networks rather than tracked links.</p><p>The data uncovered approximately 20 distinct referrers, each contributing one to three deals. These weren&#x27;t transactional referral program participants — they were people whose relationships with Ethan spanned years, sometimes over a decade, before generating the first deal. As Ethan describes it: &quot;We never ask anyone for a referral. Everything is people coming to us and hearing about us from somewhere other than us reaching out to them.&quot;</p><blockquote>&quot;We had no idea how many people were referring deals to us. Upside looked at all of the data and showed us the full picture.&quot; — Ethan Smith, CEO &amp; Founder, Graphite</blockquote><figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width: 100%;"><img src="/images/graphite-referrer-directory.png" loading="lazy" alt="" style="width: 100%;" /></figure><h3>2. Events: From &quot;Not Working&quot; to Core Growth Flywheel</h3><p>This was perhaps the most consequential insight. Events didn&#x27;t show up in first-touch, last-touch, <strong>or even regular multi-touch attribution at all.</strong> Not all attendees were added to CRM campaigns. Traditional models simply could not see their impact. The conclusion seemed clear: events weren&#x27;t driving revenue.</p><p><strong>Graphite stopped doing events based on this data.</strong></p><p>Upside&#x27;s full-journey analysis told a completely different story. By looking through call transcripts and emails, Upside found multiple deals where prospects explicitly mentioned attending a Graphite dinner as a key moment in their decision process. More importantly, when Upside mapped the referral network, a pattern emerged: <strong>the people referring the most deals were often people who had attended Graphite events.</strong> Events weren&#x27;t directly converting attendees into customers — they were fueling the referral engine that drives 53% of Graphite&#x27;s revenue.</p><p>Upside also revealed that <strong>events help Graphite build champions</strong> — people who become long-term advocates. When those champions change jobs, they bring Graphite with them (accounting for 4 additional deals). Events create a compounding flywheel of referrals and champion-building that is invisible to any single-touch attribution model.</p><p>Ethan&#x27;s events are distinctly authentic — he personally cooks everything from farmer&#x27;s market ingredients, makes the cocktails, and hosts in his own garden. There are no salespeople, no pitches. The follow-up email contains a list of attendees, a summary of the conversation, and links to photos — nothing more.</p><p>With this data in hand, Graphite has now <strong>restarted their event program</strong>, armed with a much better understanding of how events create long-term value through the referral and champion flywheel.</p><figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width: 100%;"><img src="/images/graphite-event-influenced-deals.png" loading="lazy" alt="" style="width: 100%;" /></figure><h3>3. External Webinars: Closing Deals, Not Just Building Awareness</h3><p>Traditional attribution often treats content and thought leadership as top-of-funnel awareness channels. Upside&#x27;s analysis revealed something dramatically different for Graphite.</p><figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width: 100%;"><img src="/images/graphite-top-webinars-podcasts.png" loading="lazy" alt="" style="width: 100%;" /></figure><p>What made these webinars effective is the same philosophy Ethan applies everywhere: every single webinar features unique information he hasn&#x27;t shared before, with live demos and practical takeaways rather than static slides.</p><h3>4. Deal Recovery: Pricing Objections That Resolved Themselves</h3><p>Upside uncovered another hidden pattern: <strong>8 deals that were initially closed-lost later came back and closed as won.</strong> Many of these were originally rejected on pricing. The data showed that as Answer Engine Optimization (AEO) became a hot category alongside traditional SEO, the perceived value of Graphite&#x27;s services increased — changing the pricing equation without Graphite having to do anything differently.</p><h3>5. The CEO Channel: Quantifying What Everyone Suspected</h3><p>One of the most distinctive findings was the creation of an &quot;Ethan Smith&quot; channel in the attribution model. Upside&#x27;s analysis confirmed what Graphite already sensed — Ethan&#x27;
1720s personal thought leadership drives a significant portion of revenue. His LinkedIn posts (infrequent, maximum length, packed with original research) outperform most daily posters. His podcast appearances create immediate pipeline. His personal relationships generate referrals.</p><p>This data validated the importance of Ethan&#x27;s role but also surfaced the <strong>key-man risk</strong> — as Ethan himself acknowledges: &quot;I am the Kim Kardashian of answer engine optimization. But we need more Kardashians.&quot; Upside&#x27;s data is now helping Graphite plan how to diversify thought leadership across the team while maintaining the authenticity that makes it effective.</p></div></div><div class="case-study-main-content-section"><div class="badge">What&#x27;s Next</div><div class="case-study-main-content-rich-text w-richtext"><h2>What Ethan Plans to Do Next</h2><p>Armed with Upside's full-journey attribution data, Graphite is doubling down on the channels that actually drive their business:</p><ul><li><strong>Resuming Events:</strong> With better follow-up processes and co-hosting partnerships, knowing events fuel the referral and champion flywheel</li><li><strong>Expanding the Referral Flywheel:</strong> Proactively (but authentically) engaging their top 20+ referrers — starting with sending premium pencil swag</li><li><strong>Diversifying Thought Leadership:</strong> Developing other team members as content creators and subject matter experts to reduce CEO dependency</li><li><strong>Investing in Premium Webinars:</strong> Continuing to create unique content for every external appearance, with live demos and practical takeaways</li><li><strong>Using Upside's MCP Integration:</strong> Querying attribution data directly through Claude for self-serve insights without bottlenecks</li></ul><blockquote>"Finding hidden touchpoints and fixing the data tells a very different story about what we should focus on. We were able to show Graphite channels that aren't just touching deals, but channels that actually drove meaningful engagement." — Mada Seghete, CEO & Founder, Upside</blockquote></div></div></div>`,"syndio-driving-strategic-gtm-decisions-with-upside":`<div class="case-study-testimonial-section"><div class="w-dyn-list"><div role="list" class="case-study-testimonials-list w-dyn-items"><div role="listitem" class="w-dyn-item"><div class="testimonial-small-container"><div class="testimonial-small-content-wrapper"><div class="testimonial-small-image-wrapper"><img loading="lazy" src="/images/amy-wellersdick-testimonial.webp" alt="" class="testimonial-small-image"/></div><div class="testimonial-small-quote-title-wrapper"><div class="testimonial-small-quote">“Self‑serve campaign performance numbers without MOPS tickets.”</div><div class="testimonial-small-logo-title-wrapper"><div class="testimonial-small-logo_wrapper"><img loading="lazy" src="/images/syndio-logo.svg" alt=""/></div><div class="vertical-separator cc-display-none-mobile-l"></div><div class="horizontal-separator cc-testimonials-mobile-xl"></div><div class="testimonial-small-details-wrapper"><p class="body-m cc-color-text-primary">Amy Wellersdick</p><p class="body-m">Director of Marketing Ops</p></div></div></div></div></div></div></div></div></div><div class="horizontal-separator"></div><div class="case-study-main-content-section"><div class="badge">Metrics</div><div class="margin-bottom-24px"><h2 class="case-study-title">Transformative Insights That Removed Bottlenecks and Reshaped Strategic Decision-Making</h2></div><div class="case-study-metrics_wrapper"><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1721<path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1722<path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1723<path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1724<path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1725</svg></div></div><p class="paragraph-4">100% Elimination of Data Bottlenecks</p><div class="div-block-3"></div><p class="paragraph-5">Program managers shifted from relying on Ops for reports to being fully self-sufficient with data, saving significant manual reporting hours.</p></div><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1726<path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1727<path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1728<path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1729<path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1730</svg></div></div><p class="paragraph-4">1 Function Strategically Restructured</p><div class="div-block-3"></div><p class="paragraph-5">Validated the true performance of the ADR team (inbound vs. outbound), leading to a data-backed restructuring of the entire department.</p></div><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1731<path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1732<path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1733<path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1734<path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1735</svg></div></div><p class="paragraph-4">Hidden Revenue Uncovered</p><div class="div-block-3"></div><p class="paragraph-5">Identified critical revenue influence from events and channels (like LinkedIn) that traditional &quot;sourced&quot; models had previously undervalued or missed entirely.</p></div></div></div><div class="case-study-main-content-section"><div class="badge">Highlighted Results</div><div class="case-study-main-content-rich-text w-richtext"><blockquote><strong>Strategic Team Restructuring:</strong> Validated true inbound vs. outbound performance, leading to a data-backed restructuring of the ADR function to optimize efficiency.
1735</blockquote><blockquote><strong>Holistic Event ROI:</strong> Moved beyond &quot;one-touch&quot; attribution to identify events that accelerated in-cycle opportunities, revealing hidden revenue influence and guiding budget allocation for FY26.</blockquote><blockquote><strong>Operational Self-Sufficiency: </strong>Eliminated data bottlenecks by empowering program managers to access their own campaign insights, fostering a culture of self-sufficient, data-driven decision-making.</blockquote></div></div><div class="case-study-main-content-section"><div class="badge">Background</div><div class="case-study-main-content-rich-text w-richtext"><p><strong>GTM Background:</strong> Syndio targets enterprise accounts involving complex, multi-touch sales cycles. The team needed to understand not just what sourced pipeline, but what messaging and channels were resonating with our new ICP. The team had the usual tools: Marketo, Salesforce, and a pile of reports. <strong>What they didn’t have was a trustworthy way to connect all their touchpoints into a coherent picture of how enterprise deals were really created and won.</strong></p></div></div><div class="case-study-main-content-section"><div class="badge">The Challenge</div><div class="case-study-main-content-rich-text w-richtext"><h2>The &quot;One-Touch&quot; Trap and Data Distrust</h2><p>Before Upside, Syndio relied on traditional attribution models (like first-touch or last-touch) within Salesforce and Marketo. While these tools provided data, they failed to capture the complexity of an enterprise sales cycle. &quot;We didn&#x27;t have just one thing that was bringing in an enterprise account,&quot; Amy explains. &quot;They take many different touchpoints.&quot;</p><p>The reliance on a single-touch model created significant blind spots. The team struggled to see the full impact of their efforts—specifically, what was driving account activation, converting them to demos, and nurturing them through the funnel. This lack of visibility led to internal skepticism. When reports were pulled from Salesforce, stakeholders often questioned the data, noting that certain impactful events weren&#x27;t showing up, while others appeared inflated.</p><p>Furthermore, there was a disconnect in understanding the ADR (Account Development Representative) function&#x27;s actual performance. There was a perception that outbound efforts were driving results, but without a unified view of the customer journey, it was difficult to distinguish actual outbound hunting from inbound demand capture.</p></div></div><div class="case-study-main-content-section"><div class="badge">The Outcome</div><div class="case-study-main-content-rich-text w-richtext"><h3>Uncovering the Truth About Outbound</h3><p>One of the most significant impacts of adopting Upside was the clarity it brought to the &quot;Inbound vs. Outbound&quot; debate. Syndio used Upside to analyze the touchpoints of their ADR team. The data revealed a critical insight: much of what was perceived as outbound success was actually the result of ADRs engaging with leads that had already demonstrated intent via marketing channels or events.</p><p>&quot;It helped us validate that what we thought was true was actually true,&quot; Amy notes. &quot;We were just not seeing the impact of the ADR function like we needed to.&quot; This insight empowered leadership to make a difficult but necessary strategic decision: restructuring the ADR function to optimize for efficiency and actual performance. This move, driven by credible data, allowed Syndio to level-set strategically for its next phase of growth.</p><h3>AI-Driven Segmentation &amp; Self-Sufficiency</h3><p>As Syndio pivots to a new solution, they are leveraging Upside’s AI agent to perform complex qualitative analysis on their funnel. The team is now using Upside to view what drives the pipeline on a weekly basis using the milestone analysis. This granularity—previously impossible to track manually—is helping them refine our outreach strategy in real time.</p><p>Culturally, Upside has transformed the marketing team’s relationship with data. Previously, Amy was the bottleneck for all data requests. Now, program managers utilize Upside’s dashboards independently to monitor program success.</p><p>‍</p><h2>What changed for Syndio</h2><p>Across these projects, the real shift wasn’t just prettier charts. It was how Syndio’s teams made decisions.</p><p><strong>
17351. Budget conversations became grounded instead of political.</strong></p><p>When Q4 and FY27 planning rolled around, Amy’s team wasn’t arguing over whose spreadsheet was “more right.” They were walking through Upside dashboards and analyses that tied budget lines directly to inbound vs. outbound performance, CAC by segment, and funnel outcomes.</p><p>That made it far easier to justify big bets—like where to keep investing in events and webinars—and to cut experiments that weren’t paying off, even if they were beloved internally.</p><p><strong>2. Marketing, Sales, and SDRs had a shared view of inbound/outbound.</strong></p><p>The inbound vs. outbound analysis reframed the conversation from “who sourced what” to “how do we work together to activate high-quality opportunities?” For example, the data showed that AEs were leaning on marketing-assisted outbound far more effectively than SDRs, especially in EMEA—fuel for a concrete discussion about training and process, not finger-pointing. </p><p><strong>3. Optimizing Event Spend with Multi-Touch Insight</strong></p><p>Moving into budget planning for the next fiscal year, Syndio needed to decide where to place its &quot;big bets.&quot; Using Upside’s campaign report cards, the team moved beyond simple &quot;sourced&quot; metrics to look at &quot;in-cycle&quot; influence.</p><p>They discovered that certain events, which Salesforce attribution ignored because they didn&#x27;t <em>source</em> the deal, were critical in accelerating existing opportunities. &quot;That brought us a different list of events,&quot; Amy says. By seeing how events influenced revenue and pipeline velocity, Syndio was able to confidently cut underperforming programs (such as specific roundtables in the EU) and double down on the events that actually moved the needle.</p><p><strong>4. The team became more self-sufficient with data.</strong></p><p>Once the core dashboards were live, Amy noticed a behavioral shift: marketers and RevOps leaders were logging into Upside on their own, using the campaign and channel views to evaluate performance and plan their programs—without waiting for a special analysis deck. That freed Amy from being the bottleneck and nudged the whole org toward more data-driven decisions.</p><p>&quot;The biggest shift I saw is that once we launched that... they were way more self-sufficient with data,&quot; Amy concludes. &quot;It saved time on my end, and they became more data-driven in their decision-making.&quot;</p><p><strong>5. Upside became a strategic partner, not just a tool.</strong></p><p>When asked to summarize the value of Upside, Amy didn’t talk about a specific metric. She talked about partnership:</p><p>“The value we find is that we have a strong partner to help us make data-driven decisions. We trust what you’re doing, and you’re doing it in innovative ways we just haven’t seen other startups do yet.” </p><p>That trust matters, especially as Syndio continues to evolve its AI-native product and go-to-market motion. With a shared data foundation, the team can ask harder questions—like how “compliance-mindset” leads behave versus those responding to the new Syndi-led messaging—and expect to get meaningful, timely answers. </p></div></div><div class="case-study-main-content-section w-condition-invisible"><div class="badge w-dyn-bind-empty"></div><div class="case-study-main-content-rich-text w-dyn-bind-empty w-richtext"></div></div></div>`,"dscout-driving-confident-growth-with-upside":`<div class="case-study-testimonial-section"><div class="w-dyn-list"><div role="list" class="case-study-testimonials-list w-dyn-items"><div role="listitem" class="w-dyn-item"><div class="testimonial-small-container"><div class="testimonial-small-content-wrapper"><div class="testimonial-small-image-wrapper"><img loading="lazy" src="/images/kate-johnson.jpeg" alt="" class="testimonial-small-image"/></div><div class="testimonial-small-quote-title-wrapper"><div class="testimonial-small-quote">&quot;One thing that stood out to me was how quickly we were able to get started. It took us 5 months and 100s of hours of our MOPS person&#x27;
1735s time to stand up another measurement provider at a previous company.&quot;</div><div class="testimonial-small-logo-title-wrapper"><div class="testimonial-small-logo_wrapper"><img loading="lazy" src="/images/dscout-logo-dark.svg" alt=""/></div><div class="vertical-separator cc-display-none-mobile-l"></div><div class="horizontal-separator cc-testimonials-mobile-xl"></div><div class="testimonial-small-details-wrapper"><p class="body-m cc-color-text-primary">Kate Johnson</p><p class="body-m">CMO</p></div></div></div></div></div></div><div role="listitem" class="w-dyn-item"><div class="testimonial-small-container"><div class="testimonial-small-content-wrapper"><div class="testimonial-small-image-wrapper"><img loading="lazy" src="/images/charlie-flanagan.jpg" alt="" class="testimonial-small-image"/></div><div class="testimonial-small-quote-title-wrapper"><div class="testimonial-small-quote">&quot;What used to take 2-3 hours I can now do in a few clicks, and it&#x27;s made me a smarter operations person than I&#x27;ve ever been in my career.&quot;</div><div class="testimonial-small-logo-title-wrapper"><div class="testimonial-small-logo_wrapper"><img loading="lazy" src="/images/logo-dscout.svg" alt=""/></div><div class="vertical-separator cc-display-none-mobile-l"></div><div class="horizontal-separator cc-testimonials-mobile-xl"></div><div class="testimonial-small-details-wrapper"><p class="body-m cc-color-text-primary">Charlie Flanagan</p><p class="body-m">Head of GTM Ops</p></div></div></div></div></div></div></div></div></div><div class="horizontal-separator"></div><div class="case-study-main-content-section"><div class="badge">Metrics</div><div class="margin-bottom-24px"><h2 class="case-study-title">Transformative Insights That Removed Bottlenecks and Reshaped Strategic Decision-Making</h2></div><div class="case-study-metrics_wrapper"><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1736<path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1737<path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1738<path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1739<path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1740</svg></div></div><p class="paragraph-4">95% Time Saved on Reporting Results</p><div class="div-block-3"></div><p class="paragraph-5">Complex analysis that previously took 2-3 hours of manual spreadsheet work can now be generated in minutes with a few clicks.</p></div><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1741<path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1742<path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1743<path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1744<path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1745</svg></div></div><p class="paragraph-4">5% Increase in Pipeline from In-Person Hosted Events</p><div class="div-block-3"></div><p class="paragraph-5">Based on strategy shifts from Upside, in the first quarter alone.</p></div><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
1746<path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1747<path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1748<path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1749<path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1750</svg></div></div><p class="paragraph-4">100s of Hours Saved on Onboarding the Platform and Pulling Data Reports</p><div class="div-block-3"></div><p class="paragraph-5">Other tools in previous jobs took 100+ hours and 5mo to onboard vs 1-2 hours for Upside and 24hrs from signing to a live dashboard.</p></div></div></div><div class="case-study-main-content-section"><div class="badge">Highlighted Results</div><div class="case-study-main-content-rich-text w-richtext"><h2>From scattered spreadsheets to GTM-wide clarity: quicker reports, sharper insights, better ROI.</h2><ul role="list"><li><strong>Unified GTM Insights:</strong> Built a centralized, enhanced dataset across the entire organization, delivering fast, accurate insights with minimal manual effort.</li><li>Fast time to Insights: Kate Johnson’s experience with other vendors was 5 months and 100s of hours of our MOPS person&#x27;
1750s time to stand up, so Upside’s ability to be functional in less than a day from contract signing was a huge win for the team.</li><li><strong>Time Efficiency Gains:</strong> What used to take hours of spreadsheet work now takes mere minutes – <strong>reporting that once took 2–3 hours can be done in a few clicks</strong>, enabling the team to share insights proactively without adding analyst headcount.</li><li><strong>Culture shift toward data-driven decision-making:</strong> With newfound trust in the data, the organization now expects detailed pipeline metrics in every report, reflecting a <strong>culture shift </strong>across marketing and sales.  <br/><ul role="list"><li>“Our GTM leaders have faith in the accuracy and cleanliness of our data — now they expect a level of insight.”</li></ul></li><li><strong>Strategic Event Optimization:</strong> Revealed that &quot;Co-Lab Connection&quot; happy hours yielded higher ROI and more diverse pipeline than expensive invite-only dinners, prompting a strategic reallocation of budget.</li><li><strong>Sales Enablement via Account Intelligence:</strong> Deployed &quot;Account Report Cards&quot; to give new account directors an instant, comprehensive view of their territory, drastically reducing ramp time and improving account handover.</li><li><strong>Cultural Shift to Data Trust:</strong> Transformed internal skepticism into confidence; leadership now expects and relies on detailed pipeline influence metrics for every major decision.</li></ul></div></div><div class="case-study-main-content-section"><div class="badge">Background</div><div class="case-study-main-content-rich-text w-richtext"><h2>Dscout scaled its multi-touch GTM and ran into a complex attribution puzzle.</h2><p><strong>About Dscout:</strong> Dscout is a leading experience research platform that empowers organizations to conduct flexible, human-centered user research. From diary studies to live interviews, Dscout helps product teams and UX researchers capture in-context insights to build better experiences. Backed by a $70 million Series C, Dscout has rapidly scaled to serve hundreds of innovative enterprise companies.</p><p><strong>The Challenge:</strong> As Dscout sells into the enterprise, their sales cycle is increasingly complex, involving multiple stakeholders and touchpoints. The marketing team runs a sophisticated mix of webinars, digital campaigns, and field events, but lacked a unified way to measure impact.</p><p>&quot;We faced a classic B2B puzzle,&quot; explains Charlie Flanagan. &quot;We had detailed campaign data in Salesforce, but turning that data into a story was incredibly manual.&quot;</p><p>Answering a simple question—like the ROI of a specific field event—required exporting reports to spreadsheets, manually deduplicating rows, and running complex calculations to separate new business from expansion. This process was slow, prone to error, and led to a lack of trust in attribution data across the organization.</p></div></div><div class="case-study-main-content-section"><div class="badge">The Outcome</div><div class="case-study-main-content-rich-text w-richtext"><h3>From Hours to Clicks: Speed &amp; Accuracy</h3><p>Adopting Upside transformed Dscout’s analytics from a manual chore into a strategic advantage. The platform plugged directly into their CRM, automatically unifying touchpoints and deduplicating data.</p><p>&quot;The impact was immediate,&quot; says Charlie. &quot;What used to take me hours of spreadsheet wrangling now takes minutes.&quot; With interactive dashboards, the team can now slice data by region, persona, or campaign type on the fly. This speed didn&#x27;t just save time; it democratized data access. Instead of waiting for analyst reports, stakeholders could see &quot;beautiful tiles&quot; of accurate data, fostering a new level of trust in marketing’s influence.</p><h3>Strategic Pivots: The &quot;Happy Hour&quot; Insight</h3><p>With trusted data, Dscout began testing long-held assumptions. The team compared their exclusive, high-cost executive dinners against larger, more casual &quot;Collab Connection&quot; happy hours.</p><p>Upside’s analysis revealed a clear winner: the inclusive happy hours were driving substantially more pipeline and reaching a more diverse set of prospects than the intimate dinners. Armed with this proof, the marketing team confidently reallocated budget toward these high-ROI formats and prioritized key hubs like San Francisco and New York, where the data showed the strongest traction.</p><p>Upside didn’t just speed up reporting; it enabled <strong>data-driven course corrections</strong> in Dscout’s go-to-market strategy.</p><p><strong>Having these on-demand insights “definitely is a much more helpful way of putting a number to [our strategies]…we can even compare, like, do we have better luck in New York vs. Minneapolis…is it worth going back to Minneapolis next year?”</strong></p><p><em>“This level of granularity was simply not feasible before.”</em></p><h3>Empowering Sales with the Account Report Card</h3><p>Beyond marketing attribution, Dscout utilized Upside’s Insight Engineering offering to empower their sales team during a critical transition. With several new account directors joining and territories shifting, leadership needed a way to get reps familiar with their new books of business immediately.</p><p>Charlie worked with the Upside team to deploy a <strong>Account Report Card</strong> (Account Dossier), a customized unified view that provided sales reps with instant intelligence on their accounts:</p><ul role="list"><li><strong>Engagement History:</strong> Who is engaging, and with what content?</li><li><strong>Buying Signals:</strong> Recent contract discussions and renewal dates.</li><li><strong>Competitive Landscape:</strong> Identification of competitors currently entrenched in the account.</li></ul><p>&quot;If you try to do that through Salesforce reports, it&#x27;s clunky,&quot; Charlie notes. &quot;The dossier showed us everything in one view.&quot;</p><p>This deep research capability also highlighted &quot;false pipeline&quot;
1750—deals that looked active but had low engagement. Analysis showed that Dscout only won ~6% of deals with fewer than three contacts involved. The Account Report Card flagged these single-threaded deals early, allowing managers to coach reps on multi-threading before the opportunity was lost.</p><h3>A Partnership, Not Just a Platform</h3><p>Ultimately, the shift to Upside was cultural. Data is no longer viewed with caution; it is the foundation of planning. &quot;People are spoiled now,&quot; Charlie jokes. &quot;They just expect this level of insight.&quot; By moving from intuition to evidence, Dscout has aligned their sales and marketing teams around a single source of truth, driving confident growth in a complex market.</p></div></div><div class="case-study-main-content-section w-condition-invisible"><div class="badge w-dyn-bind-empty"></div><div class="case-study-main-content-rich-text w-dyn-bind-empty w-richtext"></div></div><div class="case-study-main-content-section w-condition-invisible"><div class="badge w-dyn-bind-empty"></div><div class="case-study-main-content-rich-text w-dyn-bind-empty w-richtext"></div></div></div>`,"assembled-from-attribution-guesswork-to-pipeline-surge":`<div class="case-study-testimonial-section"><div class="w-dyn-list"><div role="list" class="case-study-testimonials-list w-dyn-items"><div role="listitem" class="w-dyn-item"><div class="testimonial-small-container"><div class="testimonial-small-content-wrapper"><div class="testimonial-small-image-wrapper"><img loading="lazy" src="/images/lindsey-marymont.png" alt="Lindsey Marymont" class="testimonial-small-image"/></div><div class="testimonial-small-quote-title-wrapper"><div class="testimonial-small-quote">“I've been in marketing for 10+ years, and I've never been able to get a clear picture of the buyer journey. But with Upside, we are able to see a complete milestone analysis with data pulled from Gong we wouldn't ever be able to see in Salesforce.”</div><div class="testimonial-small-logo-title-wrapper"><div class="testimonial-small-logo_wrapper"><a href="https://www.assembled.com/" target="_blank" rel="noopener noreferrer"><img loading="lazy" src="/images/assembled-logo-black.png" alt="Assembled"/></a></div><div class="vertical-separator cc-display-none-mobile-l"></div><div class="horizontal-separator cc-testimonials-mobile-xl"></div><div class="testimonial-small-details-wrapper"><p class="body-m cc-color-text-primary"><a href="https://www.linkedin.com/in/lindseymarymont/" target="_blank" rel="noopener noreferrer" style="color: inherit; text-decoration: underline;">Lindsey Marymont</a></p><p class="body-m">Head of Demand Generation</p></div></div></div></div></div></div></div></div></div><div class="horizontal-separator"></div><div class="case-study-main-content-section"><div class="badge">Metrics</div><div class="margin-bottom-24px"><h2 class="case-study-title">The Data Hidden in Plain Sight</h2></div><div class="case-study-metrics_wrapper"><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></div></div><p class="paragraph-4">30k+ Hidden Contacts Discovered</p><div class="div-block-3"></div><p class="paragraph-5">Upside found over 30,000 people (~14% of total contacts) who joined Assembled's calls and influenced buying decisions but never appeared in Salesforce or HubSpot.</p></div><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1750<path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></div></div><p class="paragraph-4">37k+ Hidden Touchpoints Uncovered</p><div class="div-block-3"></div><p class="paragraph-5">Upside revealed over 37,000 interactions from Gong recordings, demos, discovery calls, and check-ins that were never logged as activities in any CRM.</p></div><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></div></div><p class="paragraph-4">2x More Accurate Pipeline Data via MCP</p><div class="div-block-3"></div><p class="paragraph-5">When Assembled connected Upside's MCP to their AI tool (Dust), pipeline queries returned roughly twice the completeness and accuracy compared to querying Salesforce directly.</p></div></div></div><div class="case-study-main-content-section"><div class="badge">Highlighted Results</div><div class="case-study-main-content-rich-text w-richtext"><h2>Upside gave Assembled data-driven clarity that reshaped channel strategy, redirected budget, and surfaced a hidden growth engine.</h2><ul role="list"><li><strong>True Event Impact Uncovered:</strong> Upside confirmed that events drove ~20x more pipeline per opportunity than other sources such as paid advertising. Lindsey used this data to repurpose ad strategies as amplification and invest heavily in events — a decision she couldn't have justified without it.</li><li><strong>AEO Win Rate Lift of +12.6 Percentage Points:</strong> Buyers who discovered Assembled through AI engines like ChatGPT and Claude closed at a measurably higher rate. After months of investing in AEO efforts, Upside was the only tool that could surface this signal and validate this investment.</li><li><strong>Full Buyer Journey Visible for the First Time:</strong> Milestone analysis pulled Gong call data, meeting touchpoints, and email threads into a single view, replacing hours of manual attribution done in spreadsheets.</li><li><strong>Executive Use Case:</strong> The exec team reviews pipeline weekly and relies on Upside data to reveal opportunity analysis and deal sourcing.</li><li><strong>Immediate MCP Adoption Creates Team Alignment:</strong> With over 2,300 MCP calls in just the first week, Assembled's AI workflows are fueling the team to have conversations about what the data is revealing instead of spending time validating the data.</li></ul></div></div><div class="case-study-main-content-section"><div class="badge">Background</div><div class="case-study-main-content-rich-text w-richtext"><h2>A Product Built on Support-First Principles</h2><p>Assembled has been powering the highest caliber support teams since its inception in 2018. Starting with core workforce management, they found a true need for modern solutions to legacy problems — helping teams with scheduling agents, forecasting support ticket volume, and providing real-time adjustments for things like agents calling out sick or surging support requests from a product bug or meme stock virality (that really happened).</p><p>As the first true omni-channel workforce provider, teams running Assembled could manage support across phone, chat, email, and emerging channels like social and text. Later Assembled built solutions for outsourced supp
1750ort teams, providing solutions like Vendor Management so customers could manage in-house support as well as productivity and volume of outsourced call centers.</p><p>Today, those innovative support-first principles have led to the only solution on the market that helps CX leaders manage human agents, AI agents, and outsourced BPOs to provide the best support possible. For many teams this means a small support team of 10 is able to do what would require 50 or more agents previously.</p><p>With a GTM team spanning 9 SDRs, 7 marketers, and 13 AEs across enterprise and mid-market, Assembled is at the forefront of the AI revolution. They compete against native AI-agent players on one side and legacy workforce management incumbents on the other. They're the only solution that combines both.</p></div></div><div class="case-study-main-content-section"><div class="badge">The Challenge</div><div class="case-study-main-content-rich-text w-richtext"><h2>Assembled's Attribution Draws Misleading Conclusions</h2><p>As Assembled transitioned from a strictly software business to a multi-product AI offering, they needed a way to understand how to land and grow customers for their emerging tech. Many potential customers were quick to buy into the latest AI support provider but didn't launch formal evaluations. Or equally common, teams were evaluating AI for support and were finding options in unconventional ways. Assembled needed to understand the new way of buying and stay top of mind for CX leaders.</p><blockquote>"The challenge we were trying to solve was essentially annual planning, getting a good sense of where our pipeline was coming from, where to double down as we were thinking about budget allocation for the year ahead."</blockquote><p>The team's tech stack included 6sense, Salesforce, HubSpot, Gong, and Default among others, but none of these tools talked to each other meaningfully. When a big deal came in, figuring out how it started meant manually piecing together call transcripts, Gong recordings, Salesforce fields, and email threads.</p><blockquote>"I had to piece together Gong calls, transcripts, Salesforce … and most of it just lived in the rep's head. I was constantly asking, 'hey, how did this come to us?' as we were uncovering buying patterns for a new product."</blockquote><p>Their first-touch attribution model, run through Salesforce, had fundamental limitations: it only captured the first marketing touch, couldn't connect Gong call data to deals, and left entire channels like events and AI discovery unmeasured.</p><h3>Finding the Right Partner</h3><p>Before choosing Upside, Assembled also evaluated other solutions such as HockeyStack.</p><blockquote>"HockeyStack had the visualization but not the data. They weren't willing to work with us throughout the evaluation, they just did demos. Upside did a full pilot with our actual data. And the setup was made so easy for us. Data integrity was the most important thing, and we needed to validate that above everything else."</blockquote></div></div><div class="case-study-main-content-section"><div class="badge">The Outcome</div><div class="case-study-main-content-rich-text w-richtext"><h2>Multi-Touch Attribution That Actually Works with Imperfect Data</h2><p>After careful evaluation, Assembled chose Upside.</p><blockquote>"The fact that Upside could work with imperfect data was the selling point. We knew our data wasn't clean. Getting all the Gong transcripts and everything else into a single milestone view — that was something I've never seen before."</blockquote><p>With Upside, Assembled can now see the complete influence picture across 16 distinct channels and 4.9 million touchpoints, with no manual exports and no battles with reps to log activities.</p><blockquote>"Instead of nagging reps to log things in Salesforce and connect their email, Upside just did it for us."</blockquote><h3><strong>Aha Moment #1: The Buyer Journey, Finally Visible</strong></h3><p>The milestone analysis was the feature that changed everything for Lindsey.</p><blockquote>“I've been in marketing for 10+ years, and I've never been able to get a clear picture of the buyer journey. I've spent entire quarters trying to export data and build it in spreadsheets, but all you get is campaign data. With Upside, we got a milestone analysis that pulled in Gong data and surfaced things that weren't in Salesforce.”</blockquote><h3><strong>Aha Moment #2: Activation After the Event</strong></h3><p>This was Lindsey's sleeper favorite — a metric that exists nowhere else.</p><blockquote>"It is possible to use datestamps to see when leads came in vs. when they converted, but it's not easy. Especially if you use Salesforce campaigns as a parking lot for list imports — what actually makes leads convert isn't reflected in the data. Being able to see the progression after a campaign touchpoint was a big deal, especially for events and other offline activity sources. That timestamp is nearly impossible to get in a Salesforce report. And this metric doesn't exist anywhere else."</blockquote><h3><strong>Aha Moment #3: Uncovering the Events Truth</strong></h3><p>The data revealed something the team had suspected but couldn't prove. Events, despite influencing fewer raw opportunities than email or meetings, drove the highest pipeline of any channel.</p><blockquote>"I had the data to make the case: double down on events. We were meeting all the right people and able to engage them live with a demo and discovery of their specific use cases. These conversations lasted 
1750well beyond the event and often led to intros with buyers. With Upside we could see the impact these conversations were having on our bottom line and made the case to invest more in events and even hire a second events marketer."</blockquote><h2>Discovering a Hidden Channel: AI Engine Optimization (AEO)</h2><p>One of the most novel findings: buyers were using AI chatbots to discover and evaluate Assembled but it was extremely hard to quantify. With Upside, they proved the value. A study across 521 opportunities, combining Gong call recordings, UTM citation traffic, and Salesforce notes revealed an AEO attribution goldmine:</p><figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width:100%;margin:2rem 0;"><div style="background:#F5F7FA;border-radius:14px;padding:24px;text-align:center;"><p style="font-weight:600;font-size:14px;margin-bottom:16px;color:#1b1f1c;">AEO Discovery Method</p><svg viewBox="0 0 560 300" width="100%" style="max-width:520px;display:block;margin:0 auto;" xmlns="http://www.w3.org/2000/svg"><circle cx="195" cy="150" r="130" fill="#2d6a4f" fill-opacity="0.1" stroke="#2d6a4f" stroke-width="1.5"/><circle cx="375" cy="150" r="100" fill="#347BD1" fill-opacity="0.1" stroke="#347BD1" stroke-width="1.5"/><text x="185" y="115" text-anchor="middle" font-size="13" font-weight="600" fill="#2d6a4f">Call Mentions</text><text x="185" y="155" text-anchor="middle" font-size="42" font-weight="800" fill="#1b1f1c">78%</text><text x="185" y="195" text-anchor="middle" font-size="11" fill="#5f6563">Gong recordings with</text><text x="185" y="210" text-anchor="middle" font-size="11" fill="#5f6563">AI tool mentions</text><text x="385" y="120" text-anchor="middle" font-size="13" font-weight="600" fill="#347BD1">Citation Traffic</text><text x="385" y="158" text-anchor="middle" font-size="34" font-weight="800" fill="#1b1f1c">22%</text><text x="385" y="192" text-anchor="middle" font-size="11" fill="#5f6563">LLM UTM / referral</text><text x="295" y="148" text-anchor="middle" font-size="20" font-weight="700" fill="#1b1f1c">0%</text><text x="295" y="166" text-anchor="middle" font-size="10" fill="#5f6563">overlap</text></svg><p style="font-size:12px;color:#5f6563;margin-top:12px;">No overlap between discovery methods — call mentions and citation traffic were entirely separate paths.</p></div></figure><p>The win rate told the real story: AEO-influenced opportunities closed at a <strong>12.6 percentage point higher rate</strong> than non-AEO opportunities. Buyers who used AI to discover Assembled were more qualified and more likely to buy.</p><blockquote>"Honestly, I found you by going on ChatGPT. I was like, 'what's the best WFM platform?' And then you guys came up and that's how I foun
1750d you guys." — Assembled prospect</blockquote><blockquote>"As AI-driven discovery started to pick up, Upside helped us see it on the back end — being able to actually track that was really exciting."</blockquote><figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width:100%;margin:2rem 0;"><div style="background:#F5F7FA;border-radius:14px;padding:24px;text-align:center;"><p style="font-weight:600;font-size:14px;margin-bottom:4px;color:#1b1f1c;">What Buyers Were Searching For Using AI Tools</p><p style="font-size:11px;color:#5f6563;margin-bottom:16px;">% of 22 AEO-influenced opportunities · Buyers often searched for multiple themes</p><svg viewBox="0 0 520 220" width="100%" style="max-width:500px;" xmlns="http://www.w3.org/2000/svg"><text x="150" y="28" text-anchor="end" font-size="12" font-weight="500" fill="#1b1f1c">WFM Tool Discovery</text><rect x="158" y="14" width="296" height="22" rx="4" fill="#2d6a4f" fill-opacity="0.8"/><text x="462" y="29" text-anchor="start" font-size="11" font-weight="700" fill="#1b1f1c">77%</text><text x="498" y="29" text-anchor="start" font-size="10" fill="#b0b5ad">(17)</text><text x="150" y="68" text-anchor="end" font-size="12" font-weight="500" fill="#1b1f1c">Vendor Comparison</text><rect x="158" y="54" width="192" height="22" rx="4" fill="#2d6a4f" fill-opacity="0.65"/><text x="358" y="69" text-anchor="start" font-size="11" font-weight="700" fill="#1b1f1c">50%</text><text x="390" y="69" text-anchor="start" font-size="10" fill="#b0b5ad">(11)</text><text x="150" y="108" text-anchor="end" font-size="12" font-weight="500" fill="#1b1f1c">Integration Research</text><rect x="158" y="94" width="104" height="22" rx="4" fill="#2d6a4f" fill-opacity="0.5"/><text x="270" y="109" text-anchor="start" font-size="11" font-weight="700" fill="#1b1f1c">27%</text><text x="302" y="109" text-anchor="start" font-size="10" fill="#b0b5ad">(6)</text><text x="150" y="148" text-anchor="end" font-size="12" font-weight="500" fill="#1b1f1c">Capability Matching</text><rect x="158" y="134" width="88" height="22" rx="4" fill="#2d6a4f" fill-opacity="0.35"/><text x="254" y="149" text-anchor="start" font-size="11" font-weight="700" fill="#1b1f1c">23%</text><text x="286" y="149" text-anchor="start" font-size="10" fill="#b0b5ad">(5)</text><text x="150" y="188" text-anchor="end" font-size="12" font-weight="500" fill="#1b1f1c">Pricing Research</text><rect x="158" y="174" width="35" height="22" rx="4" fill="#2d6a4f" fill-opacity="0.22"/><text x="201" y="189" text-anchor="start" font-size="11" font-weight="700" fill="#1b1f1c">9%</text><text x="225" y="189" text-anchor="start" font-size="10" fill="#b0b5ad">(2)</text></svg></div></figure><h2>From Dashboard to AI-Native Workflow: The MCP Story</h2><p>Before Upside, Assembled's internal AI tool (Dust) queried Salesforce and HubSpot directly. When they connected the Upside MCP, the impact was immediate: pipeline queries returned roughly 2x the accuracy and completeness compared to Salesforce. In the first week alone, Dust made over 2,300 MCP calls, used by the CEO, marketing team, and ops.</p><blockquote>"Things that used to take me hours to pull, I'm getting them in Upside in minutes. Instead of having to pick what questions to ask based on how long it will take to get a verifiable answer, with a quick MCP search, I'm uncovering issues I didn't even know existed."</blockquote><p>Today, the executive team runs every major opportunity through Upside each week, checking pipeline trends, deal sources, and channel influence before key decisions.</p><blockquote>"The executive team uses Upside every week. We look at pipeline week-over-week, find the major opportunities on everyone's radar, run them through Upside, and figure out how they came to us and what's happening with them."</blockquote></div></div><div class="case-study-main-content-section"><div class="badge">What's Next</div><div class="case-study-main-content-rich-text w-richtext"><h2>A Partnership That Keeps Delivering</h2><p>With clear data validating their channel bets and a weekly executive rhythm built around Upside, Assembled 
1750is now expanding how they use the platform:</p><ul role="list"><li><strong>Deeper event investment optimization</strong> informed by milestone data and post-event activation rates</li><li><strong>Broader MCP adoption</strong> across more of the marketing and ops teams</li><li><strong>Salesforce automation via connected MCPs</strong> to reduce manual data entry</li><li><strong>AEO content investment</strong> guided by the win rate data Upside surfaces</li></ul><blockquote>"The partnership matters as much as the product. It wasn't 'the trial's over, bye.' You're still here with us. Hosting events, fostering networking, and genuinely caring about our business — that's hugely important to who you do business with."</blockquote></div></div></div>`,"comply-from-unfiltered-salesforce-data-to-marketing-intelligence":'<div class="case-study-testimonial-section"><div class="w-dyn-list"><div role="list" class="case-study-testimonials-list w-dyn-items"><div role="listitem" class="w-dyn-item"><div class="testimonial-small-container"><div class="testimonial-small-content-wrapper"><div class="testimonial-small-image-wrapper"><img loading="lazy" src="/images/wendy-werve.png" alt="Wendy Werve" class="testimonial-small-image"/></div><div class="testimonial-small-quote-title-wrapper"><div class="testimonial-small-quote">“You don’t even know how far ahead of the curve we are in marketing with what we’re doing using Upside.”</div><div class="testimonial-small-logo-title-wrapper"><div class="testimonial-small-logo_wrapper"><img loading="lazy" src="/images/comply-logo.png" alt="Comply"/></div><div class="vertical-separator cc-display-none-mobile-l"></div><div class="horizontal-separator cc-testimonials-mobile-xl"></div><div class="testimonial-small-details-wrapper"><p class="body-m cc-color-text-primary"><a href="https://www.linkedin.com/in/wendy-werve/" target="_blank" rel="noopener noreferrer" style="color: inherit; text-decoration: underline;">Wendy Werve</a></p><p class="body-m">CMO, Comply</p></div></div></div></div></div></div><div role="listitem" class="w-dyn-item"><div class="testimonial-small-container"><div class="testimonial-small-content-wrapper"><div class="testimonial-small-image-wrapper"><img loading="lazy" src="/images/carl-gunlefinger.png" alt="Carl Gunlefinger" class="testimonial-small-image"/></div><div class="testimonial-small-quote-title-wrapper"><div class="testimonial-small-quote">“I haven’t seen a single case where I followed the data trail and found something wrong. I’ve stopped checking.”</div><div class="testimonial-small-logo-title-wrapper"><div class="testimonial-small-logo_wrapper"><img loading="lazy" src="/images/comply-logo.png" alt="Comply"/></div><div class="vertical-separator cc-display-none-mobile-l"></div><div class="horizontal-separator cc-testimonials-mobile-xl"></div><div class="testimonial-small-details-wrapper"><p class="body-m cc-color-text-primary"><a href="https://www.linkedin.com/in/carlgunlefinger/" target="_blank" rel="noopener noreferrer" style="color: inherit; text-decoration: underline;">Carl Gunlefinger</a></p><p class="body-m">Senior Marketing Operations Manager</p></div></div></div></div></div></div></div></div></div><div class="horizontal-separator"></div><div class="case-study-main-content-section"><div class="badge">Metrics</div><div class="margin-bottom-24px"><h2 class="case-study-title">The Data Hidden in Plain Sight</h2></div><div class="case-study-metrics_wrapper"><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1750<path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></div></div><p class="paragraph-4">27.5M+ Touchpoints Unified Across 20+ Channels</p><div class="div-block-3"></div><p class="paragraph-5">Unified emails, calls, web, meetings, webinars, events, and downloads across 356K+ contacts and 72K+ accounts.</p></div><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></div></div><p class="paragraph-4">18 Active Users Across Marketing, Sales Ops &amp; Product Marketing</p><div class="div-block-3"></div><p class="paragraph-5">Self-serve analytics adopted by digital marketers, product marketers, sales ops, and leadership within weeks.</p></div><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></div></div><p class="paragraph-4">3,592 AI Milestone Analyses on Live Opportunities</p><div class="div-block-3"></div><p class="paragraph-5">Automatic attribution insights on every open and recently won opportunity, impossible to generate manually.</p></div></div></div><div class="case-study-main-content-section"><div class="badge">Highlighted Results</div><div class="case-study-main-content-rich-text w-richtext"><h2>Upside replaced guesswork with self-serve, data-driven confidence.</h2><ul role="list"><li><strong>AI Adoption and Custom Miniapps via MCP:</strong> Analytics dashboards built in minutes instead of weeks.</li><li><strong>Content Strategy Transformed:</strong> 11,500+ campaigns sortable by downstream engagement in seconds.</li><li><strong>Event Investment Validated:</strong> Doubling down on events, backed by pipeline-influenced data.</li><li><strong>Digital Spend Optimized:</strong> Paid channels evaluated on actual pipeline, not intuition.</li><li><strong>Self-Serve Reporting:</strong> 18 people across GTM look up any campaign in seconds, no custom reports.</li><li><strong>Salesforce Migration De-risked:</strong> New instance stood up in days, caught gaps the migration missed.</li></ul></div></div><div class="case-study-main-content-section"><div class="badge">The CMO Perspective</div><div class="case-study-main-content-rich-text w-richtext"><h2>Why &ldquo;Pinball Marketing&rdquo; Demands Better Data</h2><p>Comply CMO Wendy Werve wants to kill the funnel. Her philosophy is &ldquo;pinball marketing&rdquo; — a signal-driven, AI-first model where marketers are in charge of the flippers, not the ball.</p><blockquote>“A sales rep will say, ‘the deal came in this way.’ We go in and say, ‘actually, they pinballed their way through.’ No two journeys are exactly the same. It’s like a snowflake.”<span class="quote-attribution">Wendy Werve · CMO, Comply</span></blockquote><p>Pinball marketing demands real-time visibility into every touchpoint. That mandate landed on Senior Marketing Operations Manager Carl Gunlefinger.</p></div></div><div class="case-study-main-content-section"><div class="badge">The Challenge</div><div class="case-study-main-content-rich-text w-richtext"><h2>No Standardized Way to Measure What Was Working</h2><p>When Carl joined in October 2024, he walked into two overlapping problems. Marketing had no standardized way to measure campaign performance. And Comply was mid-Salesforce re-implementation — a migration that left 60%+ of 30,000+ historical opportunities without contact roles.</p><blockquote>“There wasn’t any standardization to say, ‘I had a piece of content and here’s how it performed downstream.’”<span class="quote-attribution">Carl Gunlefinger</span></blockquote><p>
1750Carl needed a system that could work with imperfect data and still tell the CMO which campaigns to fund. Comply had evaluated other vendors. Upside was the one that didn’t flinch.</p></div></div><div class="case-study-main-content-section"><div class="badge">The Outcome</div><div class="case-study-main-content-rich-text w-richtext"><h2>Trusted Data Model That Powers Insights and AI Workflows</h2><p>Within days, Upside stood up Comply’s new Salesforce instance, mapped the migrated historical data, and caught attribution gaps the migration had missed.</p><blockquote>“You guys were the easiest vendor to work with and the quickest to debug problems. Upside ended up being a critical tool in figuring out where things had gone not quite as intended during the migration.”<span class="quote-attribution">Carl Gunlefinger</span></blockquote><h3><strong>Aha Moment #1:</strong> Instantly Seeing What Content Matters</h3><p>Once Upside was live, the first thing that clicked was speed. Across 11,500+ campaigns, what used to require custom Salesforce reports became a 30-second task.</p><blockquote>“All I had to do was go into a view, select a filter, sort by engagements, and I can see at the top: this is what people care about right now.”<span class="quote-attribution">Carl Gunlefinger</span></blockquote><p>For a team creating content across six sales segments, that instant read rewrote how the content calendar gets built.</p><h3><strong>Aha Moment #2:</strong> Seeing the Full Multi-Touch Picture</h3><p>Speed was just the entry point. Once the team started digging into accounts and opportunities, the real story showed up: Comply’s deals don’t close from one touchpoint. In Upside’s account explorer, the scale became obvious — and the whole team got hooked.</p><blockquote>“We are like kids in a candy shop digging into accounts and opportunities.”<span class="quote-attribution"><a href="https://www.linkedin.com/in/wendy-werve/" target="_blank" rel="noopener noreferrer" style="color: inherit; text-decoration: underline;">Wendy Werve</a> · CMO, Comply</span></blockquote><p>For Carl, the implication was bigger than curiosity:</p><blockquote>“There are some opportunities that just have hundreds and hundreds of touchpoints. Being able to quickly see the map of that has been huge.”<span class="quote-attribution">Carl Gunlefinger</span></blockquote><h3><strong>Aha Moment #3:</strong> Data You Can Actually Trust</h3><p>Scale is only useful if you can trust what you’re seeing. Carl used to verify everything, cross-checking IDs and timestamps. Not anymore.</p><blockquote>“I’m not doing that following-the-trail thing anymore. I just know you guys have this all built right.”<span class="quote-attribution">Carl Gunlefinger</span></blockquote><p>That trust freed the team to chase surprising patterns — like content downloads, which the org had long undervalued but, in Upside, showed a remarkably high conversion rate to pipeline.</p><blockquote>“The organization hadn’t really considered content downloads as solid for moving things into an opportunity stage. In Upside, they actually have a very high conversion rate.”<span class="quote-attribution">Wendy Werve · CMO, Comply</span></blockquote><h3><strong>Aha Moment #4:</strong> Complex AI-Powered Analysis via the MCP</h3><p>If trusted data was the foundation, the MCP was the unlock.</p><blockquote>“Honestly, the first time I found a huge use case for AI for me. A tool that has the data organized, and I can query it thinking the way I think.”<span class="quote-attribution">Carl Gunlefinger</span></blockquote><p>In a recent GTM Engineers webinar, Carl showcased three miniapps built in minutes via the MCP:</p><ul role="list"><li><strong>Paid Search Impact Dashboard</strong> — 6 tabs, keyword-level pipeline attribution, built in 30 minutes.</li><li><strong>Webinar Performance</strong> — 126 webinars, 25,623 registrations, 1,723 opps influenced, 813 won, with Salesforce attendance statuses auto-mapped.</li><li><strong>Single-Deal Replication Playbook</strong> — 390+ touchpoints on one deal stitched into a repeatable playbook.</li></ul><figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width:100%;margin:1.75rem 0;"><div><img loading="lazy" src="/images/comply-paid-search-keywords.png" alt="Carl’s Paid Search Impact miniapp — keyword-level pipeline attribution with influenced pipeline, won deals, views, and average days to opportunity" style="width:100%;height:auto;border-radius:12px;"/></div><figcaption style="font-size:12px;color:#5f6563;margin-top:8px;text-align:center;">
1750Miniapp 1 — Paid Search Impact: every keyword tied to influenced pipeline, won deals, and time-to-opportunity.</figcaption></figure><figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width:100%;margin:1.75rem 0;"><div><img loading="lazy" src="/images/comply-webinar-performance.png" alt="Carl’s Webinar Performance Dashboard — 126 webinars, 25,623 registrations, 1,723 opps influenced, 813 won" style="width:100%;height:auto;border-radius:12px;"/></div><figcaption style="font-size:12px;color:#5f6563;margin-top:8px;text-align:center;">Miniapp 2 — Webinar Performance: 126 webinars, 25,623 registrations, 1,723 opps influenced, 813 won. Salesforce attendance statuses auto-mapped by the MCP.</figcaption></figure><figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width:100%;margin:1.75rem 0;"><div><img loading="lazy" src="/images/comply-single-deal-playbook.png" alt="Carl’s Single-Deal Replication Playbook — 390+ touchpoints across 5 channels on one deal stitched into a repeatable timeline" style="width:100%;height:auto;border-radius:12px;"/></div><figcaption style="font-size:12px;color:#5f6563;margin-top:8px;text-align:center;">Miniapp 3 — Single-Deal Replication Playbook: 390+ touchpoints on one deal, turned into a replicable sales playbook.</figcaption></figure><blockquote>“Literally from idea to preview publication, probably 30 minutes.”<span class="quote-attribution">Carl Gunlefinger</span></blockquote><p>Next up: a 36-dimension pipeline roll-forward report for Comply’s CFO. The appetite across the company is outpacing one person.</p><h3>From One User to 18: The Self-Serve Moment</h3><p>What started as Carl’s tool now serves 18 people across Sales Ops, Product Marketing, Digital Marketing, and Leadership — all self-serve, zero custom reports. Adoption was accelerated by a team-wide commitment to pipeline as the only scoreboard that mattered.</p><blockquote>“Our team is 100% KPI’d on pipeline. MQLs are a participation trophy. It didn’t make it into pipeline? It didn’t matter.”<span class="quote-attribution">Wendy Werve · CMO, Comply</span></blockquote><p>That focus pairs with Wendy’s AI-first operating philosophy — one she was pushing long before most peers:</p><blockquote>“AI today can do the ‘ING’ of marketing. Get in and be the chief market officer — understand the signals, be first to respond.”<span class="quote-attribution">Wendy Werve · CMO, Comply</span></blockquote><h3>Decisions Driven by Data</h3><p>The real impact isn’t dashboards — it’s decisions. Events, content, and paid channels are now funded (or cut) based on actual pipeline.</p><blockquote>“The biggest thing we’ve decided is where to invest in content and which events to attend. Upside is how we justify it.”<span class="quote-attribution">Carl Gunlefinger</span></blockquote></div></div><div class="case-study-main-content-section"><div class="badge">What’s Next</div><div class="case-study-main-content-rich-text w-richtext"><h2>A Partnership That Keeps Expanding</h2><p>Carl is already extending Upside’s MCP into tools for sales and finance — AI-generated sales toolkits, win-back kits, and the CFO pipeline report. Wendy sees that expansion as vindication of an early bet:</p><blockquote>“The smartest decisions I have ever made is partnering with folks early on. Where you’ve gone is leaps and bounds beyond what I could have even articulated.”<span class="quote-attribution">Wendy Werve · CMO, Comply</span></blockquote><p>Carl puts the recommendation more plainly:</p><blockquote>“Would I recommend Upside? Yes. Simple gives you a lot, and simple is not easy. Plus, you guys are great partners to work with.”<span class="quote-attribution">Carl Gunlefinger · Senior Marketing Operations Manager, Comply</span></blockquote></div></div><div class="case-study-main-content-section"><div class="badge">Featured In</div><div class="case-study-main-content-rich-text w-richtext"><ul role="list"><li><strong>Blog:</strong> <a href="https://aigtm.engineer/p/how-three-marketing-leaders-are-becoming" target="_blank" rel="noopener noreferrer">“How Three Marketing Leaders Are Becoming GTM Engineers With AI”</a> (aigtm.engineer) — Carl’s miniapps featured alongside ServiceTitan and Dscout.</li></ul></div></div></div>',"cresta-from-attribution-to-ai-deep-research":'<div class="case-study-testimonial-section"><div class="w-dyn-list">
1750<div role="list" class="case-study-testimonials-list w-dyn-items"><div role="listitem" class="w-dyn-item"><div class="testimonial-small-container"><div class="testimonial-small-content-wrapper"><div class="testimonial-small-image-wrapper"><img loading="lazy" src="/images/stephen-daniels.jpg" alt="" class="testimonial-small-image"/></div><div class="testimonial-small-quote-title-wrapper"><div class="testimonial-small-quote">“Real life is messy. Enterprise cycles are messy. Upside accurately reflects that messy reality, which I think is rare and was impossible before.”</div><div class="testimonial-small-logo-title-wrapper"><div class="testimonial-small-logo_wrapper"><img loading="lazy" src="/images/cresta-black.svg" alt=""/></div><div class="vertical-separator cc-display-none-mobile-l"></div><div class="horizontal-separator cc-testimonials-mobile-xl"></div><div class="testimonial-small-details-wrapper"><p class="body-m cc-color-text-primary"><a href="https://www.linkedin.com/in/stephenhdaniels" target="_blank" rel="noopener noreferrer" style="color: inherit; text-decoration: underline;">Stephen Daniels</a></p><p class="body-m">VP, GTM &amp; Strategic Operations</p></div></div></div></div></div></div><div role="listitem" class="w-dyn-item"><div class="testimonial-small-container"><div class="testimonial-small-content-wrapper"><div class="testimonial-small-image-wrapper"><img loading="lazy" src="/images/ted-ranney.jpg" alt="" class="testimonial-small-image"/></div><div class="testimonial-small-quote-title-wrapper"><div class="testimonial-small-quote">“Just going to Upside and saying, ‘can you help me analyze what’s making implementations work better or worse?’ has been a massive improvement for my mental health.”</div><div class="testimonial-small-logo-title-wrapper"><div class="testimonial-small-logo_wrapper"><img loading="lazy" src="/images/cresta-black.svg" alt=""/></div><div class="vertical-separator cc-display-none-mobile-l"></div><div class="horizontal-separator cc-testimonials-mobile-xl"></div><div class="testimonial-small-details-wrapper"><p class="body-m cc-color-text-primary"><a href="https://www.linkedin.com/in/ted-ranney-2053352a" target="_blank" rel="noopener noreferrer" style="color: inherit; text-decoration: underline;">Ted Ranney</a></p><p class="body-m">Head of GTM Analytics</p></div></div></div></div></div></div></div></div></div><div class="horizontal-separator"></div><div class="case-study-main-content-section"><div class="badge">Metrics</div><div class="margin-bottom-24px"><h2 class="case-study-title">Deep Research Replaced Weeks of Manual Analysis with Insight at Every QBR</h2></div><div class="case-study-metrics_wrapper"><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></div></div><p class="paragraph-4">Weeks of Gong Analysis → Under a Day</p><div class="div-block-3"></div><p class="paragraph-5">Deep research that previously took contractors or staff weeks of Gong-transcript review now completes in under a day, freeing a small GTM ops team to act on insights instead of gathering them.</p></div><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
1750<path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></div></div><p class="paragraph-4">Every Deal Scored for Messaging Adherence</p><div class="div-block-3"></div><p class="paragraph-5">Upside scores every closed deal against PMM-defined messaging, fueling AE coaching, win-rate analysis, and a feedback loop back to product marketing.</p></div><div class="case-study-metrics-card"><div class="case-study-metrics-card-icon_wrapper"><div class="w-embed"><svg display="block" width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M19.25 12C19.25 16.0041 16.0041 19.25 12 19.25C7.99594 19.25 4.75 16.0041 4.75 12C4.75 7.99594 7.99594 4.75 12 4.75C16.0041 4.75 19.25 7.99594 19.25 12Z" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M14.25 8.75H11.375C10.4775 8.75 9.75 9.47754 9.75 10.375C9.75 11.2725 10.4775 12 11.375 12H12.625C13.5225 12 14.25 12.7275 14.25 13.625C14.25 14.5225 13.5225 15.25 12.625 15.25H9.75" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 7.75V8.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/><path d="M12 15.75V16.25" stroke="#509A79" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg></div></div><p class="paragraph-4">Persona-Level Insight Reshaped Churn Strategy</p><div class="div-block-3"></div><p class="paragraph-5">Sentiment analysis showed champions almost universally loved Cresta even on churned deals. The gap was with economic buyers, and the finding drove a leadership-level push to engage CFOs.</p></div></div></div><div class="horizontal-separator"></div><div class="case-study-main-content-section"><div class="badge">Highlighted Results</div><div class="case-study-main-content-rich-text w-richtext"><h2>Upside replaced manual transcript work with strategic, AI-driven insight.</h2><ul role="list"><li><strong>From Weeks of Transcript Review to Same-Day Insight:</strong> Deep transcript analysis that once consumed weeks of an ops hire’s time now runs in under a day.</li><li><strong>Deal Reality, Reconstructed in Natural Language:</strong> Milestone analysis turns messy multi-month enterprise cycles into plain-language deal stories that capture SDR follow-up, conference touches, and buying-committee dynamics that were previously invisible.</li><li><strong>Messaging Validation, Coaching, and PMM Feedback in One Pass:</strong> Every deal is scored for adherence to PMM messaging, surfacing AEs to coach, validating which messages convert, and signaling when the playbook itself needs to change.</li><li><strong>Champion vs. Economic-Buyer Sentiment, Quantified:</strong> Persona-level churn analysis exposed an invisible economic-buyer gap that became a leadership-level priority.</li><li><strong>The Spine of Every QBR:</strong> Upside deep research is now integral to Cresta’s Quarterly Business Reviews, replacing pivot-table guesswork with narratives that explain root causes.</li></ul></div></div><div class="case-study-main-content-section"><div class="badge">Background</div><div class="case-study-main-content-rich-text w-richtext"><h2>The Ops Bench Behind Cresta’s Enterprise Deals</h2><p><em>How a two-person operations and analytics team turned messy enterprise deal data into the strategic insight behind every Cresta QBR.</em></p><p>Cresta is one of Upside’s earliest design partners, and the relationship has evolved alongside both companies from the start. Cresta builds the unified platform for human and AI agents in customer experience, serving Fortune 500 contact center operators including Cox Communications, United Airlines, Intuit, and CVS.</p><p>Behind the scenes, Stephen Daniels (VP, GTM &amp; Strategic Operations) and Ted Ranney (Head of GTM Analytics) lead a small, high-leverage operations and analytics team that supports some of the messiest, longest, most multi-stakeholder enterprise cycles in B2B SaaS. Stephen brought Upside in as one of its earliest design partners, drawing on five years he’d spent at a mobile-app attribution company before joining Cresta.</p><blockquote>“We’re very early customers of Upside, so the problem set’s changed over time. Originally it was solving more of an attribution problem, trying to solve what was actually driving deals.”<span class="quote-attribution">
1750Stephen Daniels</span></blockquote></div></div><div class="case-study-main-content-section"><div class="badge">The Challenge</div><div class="case-study-main-content-rich-text w-richtext"><h2>Pivot Tables Don’t Explain Why Deals Win or Lose</h2><p>The deeper bottleneck for Cresta’s GTM team wasn’t access to data. It was the depth pivot tables couldn’t reach: a two-to-three-person ops team can’t manually mine call transcripts for the insights leadership actually wants, and structured reports don’t explain <em>why</em> deals move the way they do.</p><blockquote>“I can make a million pivot tables. I can see the number of days in S2 to S3 is improving slightly. Great. Why is that happening? But a lot of the time it requires another deeper level of understanding.”<span class="quote-attribution">Ted Ranney</span></blockquote><p>Enterprise cycles compound the problem. Cresta’s deals are long, with multiple buying committees, complex sourcing, and lots of start-stops. Manually reading call after call to understand what was making implementations move faster or slower wasn’t sustainable.</p></div></div><div class="case-study-main-content-section"><div class="badge">Finding the Right Partner</div><div class="case-study-main-content-rich-text w-richtext"><h2>Not Just an AI Platform, but a Data Therapist</h2><p>As one of Upside’s first design partners, Cresta has helped shape the platform since the early days. The partnership runs on call transcripts from Gong, structured deal data, and constant back-and-forth between the Cresta ops bench and the Upside team.</p><blockquote>“Working with Upside’s not just working with a technology company. It’s like working with a therapist, a data consultant, a friend, and then many rungs down the list, working with an AI company. They’ve been some of the best partners I’ve worked with.”<span class="quote-attribution">Stephen Daniels</span></blockquote></div></div><div class="case-study-main-content-section"><div class="badge">The Outcome</div><div class="case-study-main-content-rich-text w-richtext"><h2>Deep Research as the Engine of Every QBR</h2><p>Cresta now uses Upside as the analytical engine behind its Quarterly Business Reviews and most consequential GTM decisions. Four use cases stand out: milestone analysis, messaging adherence, implementation sentiment, and churn drivers. Each replaces a manual workflow with a durable source of insight.</p><h3>1. Milestone Analysis: Messy Enterprise Cycles, Told as a Story</h3><p>The first feature Cresta worked with Upside on, and still one of the most heavily used. Milestone analysis takes a deal’s full activity history (calls, emails, conferences, SDR touches, internal notes) and reconstructs the deal as a plain-language narrative.</p><blockquote>“An SDR called this person. They hung up, they called two times later, they went to a conference, they stopped by the booth. To get a very concise story in natural language of how that thing happened was the killer thing for Upside.”<span class="quote-attribution">Stephen Daniels</span></blockquote><figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width:100%;margin:1.75rem 0;"><div><img loading="lazy" src="/images/account-touchpoint-timeline.png" alt="Upside account timeline reconstructs a deal narrative from emails, calls, conferences, and CRM activity" style="width:100%;height:auto;border-radius:12px;"/></div><figcaption style="font-size:12px;color:#5f6563;margin-top:8px;text-align:center;">Upside reconstructs enterprise deal narratives from scattered activity (emails, conferences, internal notes, call transcripts) into the kind of plain-language milestone story Stephen describes above.</figcaption></figure><h3>2. Messaging Adherence: Which AEs Followed the Playbook, and Did It Win?</h3><p>Ted worked with Cresta’s product marketing team to codify the specific messages AEs should be using, then asked Upside to analyze every closed deal for adherence, at the level of “this person followed it to extreme accuracy” versus “this person didn’t follow it at all.”</p><p>The output drives three different decisions:</p><ul role="list"><li><strong>Validate the messaging:</strong> Does following the PMM playbook actually correlate with higher win rates?</li><li><strong>Coach the AEs:</strong> Which reps consistently aren’t using messages that convert, and which behaviors should anchor 1:1 coaching?</li><li><strong>Update the messaging:</strong> If adherence has no effect on win rate, the playbook itself needs to be rewritten by PMM.</li></ul><blockquote>“Upside being able to go into every single deal that’s in there and say, yes, this person followed it to an extreme accuracy, or this person didn’t follow it at all. There’s so many decisions you can make out of that.”<span class="quote-attribution">Ted Ranney</span></blockquote><h3>3. Implementation Sentiment: From Hours of Replay to Automatic Analysis</h3><p>When Ted joined Cresta, his first assignment was to figure out what made customer implementations move faster or slower.</p><blockquote>“I remember my first two or three weeks on the job, they wanted me to analyze what was making certain deployments move faster or slower. Watching Gong call after Gong call, I don’t know how many hours I spent. It was a heck of a way to start, and that was painful. Being able to move from that to just going to Upside and saying, ‘can you help me analyze what’s making implementations work better or worse?’ was a massive improvement for my mental health.”<span class="quote-attribution">Ted Ranney</span></blockquote><p>Now implementation sentiment, slowdown signals, and at-risk deployments surface automatically. The analytics team can act on findings instead of spending hours producing them.</p><h3>4. Churn Drivers: Champion Love, Economic-Buyer Gap</h3><p>Cresta’s most consequential Upside-driven insight came out of a QBR-cycle churn anal
1750ysis. Like most teams, Cresta had been relying on churn-reason picklists filled in by the AE and CSM. The data was useful but shallow.</p><p>Stephen asked Upside to look deeper. Across churned and downgraded deals, what did different personas actually think of Cresta? The analysis split into two layers: how champions perceived the product and team, and how economic buyers (the people signing the check) viewed it.</p><p>The finding was stark. Champions almost universally loved Cresta, even on deals that ultimately churned. The real gap was at the economic-buyer level: CFOs and equivalents who didn’t see the ROI the way daily users did.</p><figure class="w-richtext-figure-type-image w-richtext-align-fullwidth" style="max-width:65%;margin:1.75rem auto;"><div><img loading="lazy" src="/images/persona-resolution.png" alt="Upside persona resolution — buying-group roles identified across champions and economic buyers" style="width:100%;height:auto;border-radius:12px;"/></div><figcaption style="font-size:12px;color:#5f6563;margin-top:8px;text-align:center;">Persona resolution maps which roles touched a deal and how each persona engages with the product. It’s the same foundation behind Cresta’s champion-vs-economic-buyer churn finding.</figcaption></figure><blockquote>“It’s hard to interpret for someone like a CFO who may not understand the ROI as well as the actual users of the product do. A big takeaway is how do we connect to those financial leaders who think about ROI in a slightly different way?”<span class="quote-attribution">Stephen Daniels</span></blockquote><p>That insight became a leadership-level assignment for Customer Success and Sales: build a deliberate motion for engaging and educating economic buyers throughout the deal cycle and customer lifecycle.</p></div></div><div class="case-study-main-content-section"><div class="badge">What’s Next</div><div class="case-study-main-content-rich-text w-richtext"><h2>From Quarterly Analysis to Always-On Workflows</h2><p>Cresta is doubling down on the deep research motion. Upside now anchors its Quarterly Business Reviews and most consequential GTM decisions, from messaging reviews to churn analysis to deployment insights. Mini-apps are extending those analyses further, putting always-on deal-level intelligence in the hands of more of the team rather than the analytics function alone.</p><blockquote>“We owe a lot to how we think about leveraging AI in our data analysis and understanding the business. I don’t think we’d be where we are today or have the expertise we have today without the partnership.”<span class="quote-attribution">Stephen Daniels</span></blockquote></div></div>'},yde={"graphite-uncovering-real-channels-behind-inbound-growth":'<div class="case-study-logo_wrapper"><img src="/images/graphite-logo.jpeg" loading="lazy" alt=""/></div><div class="case-study-info-content_wrapper"><div class="case-study-info-content-section"><p class="case-study-info-title">About</p><p class="case-study-info-content">Graphite is a research-driven digital growth agency specializing in SEO and Answer Engine Optimization (AEO). They do original research to inform strategy and help build growth programs for leading technology companies like Notion, Webflow, Rippling, Masterclass, OpenAI, Netflix, Adobe, and Meta.</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Industry</p><p class="case-study-info-content">Digital Marketing &amp; Growth Agency</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Company size</p><p class="case-study-info-content">200+ employees</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Headquarters</p><p class="case-study-info-content">San Francisco, California</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Founded</p><p class="case-study-info-content">2015</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Specialties</p><p class="case-study-info-content">Search Engine Optimization, Answer Engine Optimization, Content Strategy, Original Research, Growth Marketing</p></div></div>',"syndio-driving-strategic-gtm-decisions-with-upside":`<div class="case-study-logo_wrapper"><img src="/images/logo-syndio.png" loading="lazy" alt=""/></div><div class="case-study-info-content_wrapper"><div class="case-study-info-content-section"><p class="case-study-info-title">About</p><p class="case-study-info-content">Syndio is the industry pioneer in Decision Intelligence for Pay. Built on nearly a decade of proprietary compensation insights, Syndio helps global organizations make smarter pay decisions that win talent while protecting internal equity and controlling costs. Using Syndi, the company&#x27;s first AI-native solution, teams get precise, instant pay recommendations embedded in their workflows. More than 350 leading companies rely on Syndio&#x27;s solutions to guide compensation decisions for over 10 million employees across 100 countries.</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Industry</p><p class="case-study-info-content">Software Development</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Company size</p><p class="case-study-info-content">51-200 employees
1751155 associated members</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Headquarters</p><p class="case-study-info-content">Seattle, Washington</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Founded</p><p class="case-study-info-content">2016</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Specialties</p><p class="case-study-info-content">HR Analytics, Pay Analytics, Equity Tech, Pay Equity, Compensation Software, AI for HR, and Decision Intelligence for Pay</p></div></div>`,"dscout-driving-confident-growth-with-upside":`<div class="case-study-logo_wrapper"><img src="/images/logo-dscout.svg" loading="lazy" alt=""/></div><div class="case-study-info-content_wrapper"><div class="case-study-info-content-section"><p class="case-study-info-title">About</p><p class="case-study-info-content">Dscout is a flexible Experience Research Platform for capturing in-context insights from high-quality participants. Leading brands use Dscout to test ideas, iterate quickly, collaborate, and build confidently.</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Industry</p><p class="case-study-info-content">Software Development</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Company size</p><p class="case-study-info-content">201-500 employees
1752278 associated members</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Headquarters</p><p class="case-study-info-content">Chicago, IL</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Founded</p><p class="case-study-info-content">2011</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Specialties</p><p class="case-study-info-content">mobile research, in-context research, qualitative research, remote research, experience research, usability testing, diary studies, participant management, participant recruiting, live interviews, and AI analysis</p></div></div>`,"assembled-from-attribution-guesswork-to-pipeline-surge":'<div class="case-study-logo_wrapper"><img src="/images/assembled-logo-black.png" loading="lazy" alt="Assembled"/></div><div class="case-study-info-content_wrapper"><div class="case-study-info-content-section"><p class="case-study-info-title">About</p><p class="case-study-info-content">
1752Assembled is the AI platform for customer support providing autonomous AI agents and AI-powered workforce management built for modern customer support teams. Founded in 2018, Assembled is the support automation for teams at Autodesk, Canva, Carta, Clear and Hubspot and is the only platform combining the power of AI agents with human workforce management.</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Industry</p><p class="case-study-info-content">Software Development / Customer Support Operations</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Company size</p><p class="case-study-info-content">51–200 employees</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Headquarters</p><p class="case-study-info-content">San Francisco, California</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Founded</p><p class="case-study-info-content">2018</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">GTM Team</p><p class="case-study-info-content">9 SDRs, 7 marketers, 13 AEs across enterprise and mid-market</p></div></div>',"comply-from-unfiltered-salesforce-data-to-marketing-intelligence":'<div class="case-study-logo_wrapper"><img src="/images/comply-logo.png" loading="lazy" alt="Comply"/></div><div class="case-study-info-content_wrapper"><div class="case-study-info-content-section"><p class="case-study-info-title">About</p><p class="case-study-info-content">Comply is a leading AI and SaaS provider of compliance technology and consulting for financial services, serving 5,000+ firms globally across SEC, FINRA, and FCA compliance. Built through strategic acquisitions, Comply unifies multiple compliance technologies under one brand.</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Industry</p><p class="case-study-info-content">Financial Services / RegTech</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Company size</p><p class="case-study-info-content">~350 employees</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Headquarters</p><p class="case-study-info-content">New York, NY</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">GTM Team</p><p class="case-study-info-content">14 marketers supporting 6 sales teams</p></div></div>',"cresta-from-attribution-to-ai-deep-research":'<div class="case-study-logo_wrapper"><img src="/images/cresta-black.svg" loading="lazy" alt="Cresta"/></div><div class="case-study-info-content_wrapper"><div class="case-study-info-content-section"><p class="case-study-info-title">About</p><p class="case-study-info-content">Cresta is the unified platform for human agents and AI agents, transforming customer experience for Fortune 500 contact centers. Customers include Cox Communications, United Airlines, Intuit, and CVS.</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Industry</p><p class="case-study-info-content">Customer Experience / AI for Contact Centers</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Company size</p><p class="case-study-info-content">500+ employees</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Headquarters</p><p class="case-study-info-content">San Francisco, California</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Founded</p><p class="case-study-info-content">2017</p></div><div class="case-study-info-content-section"><p class="case-study-info-title">Specialties</p><p class="case-study-info-content">AI Agents, Agent Assist, Conversation Intelligence, Quality Management Automation, Contact Center AI</p></div></div>'},bde=`
1753.csd-page { background: #fafafa; }
1754.csd-header {
1755  max-width: 1296px;
1756  margin: 0 auto;
1757  padding: clamp(2rem, 5vw, 3.5rem) clamp(1.25rem, 5vw, 4rem);
1758  text-align: center;
1759}
1760.csd-breadcrumb {
1761  font-size: 0.85rem;
1762  color: #5a777d;
1763  display: flex;
1764  gap: 0.4rem;
1765  justify-content: center;
1766  align-items: center;
1767}
1768.csd-breadcrumb a { color: #5a777d; text-decoration: none; }
1769.csd-breadcrumb a:hover { color: #0c1e20; }
1770.csd-breadcrumb span { color: #b7c2bc; }
1771.csd-lockup {
1772  display: flex;
1773  align-items: center;
1774  justify-content: center;
1775  gap: 1rem;
1776  margin: 1.4rem 0 1.6rem;
1777}
1778.csd-lockup .csd-upside { height: 22px; width: auto; color: #0c1e20; }
1779.csd-lockup .csd-x { color: #b7c2bc; font-size: 0.95rem; }
1780.csd-lockup .csd-colo { height: 26px; width: auto; object-fit: contain; }
1781.csd-title {
1782  max-width: 840px;
1783  margin: 0 auto;
1784  color: #0c1e20;
1785  font-size: clamp(1.9rem, 4vw, 2.85rem);
1786  line-height: 1.12;
1787  font-weight: 600;
1788  letter-spacing: -0.02em;
1789}
1790.csd-quote {
1791  max-width: 860px;
1792  margin: 0 auto;
1793  padding: clamp(2.5rem, 5vw, 3.5rem) clamp(1.25rem, 5vw, 2rem);
1794  text-align: center;
1795}
1796.csd-quote blockquote {
1797  margin: 0;
1798  font-size: clamp(1.15rem, 2.2vw, 1.5rem);
1799  line-height: 1.45;
1800  color: #0c1e20;
1801  font-weight: 500;
1802}
1803.csd-quote-attr { margin-top: 1.1rem; font-size: 0.9rem; color: #5a777d; }
1804.csd-quote-attr strong { color: #0c1e20; font-weight: 600; }
1805
1806/* Sidebar demo card. The injected info-panel HTML is wrapped in a
1807 * display:contents div so its sections stay direct flex children of the
1808 * sticky panel, preserving the 2rem gap; this card is the last child. */
1809.csd-info-inner { display: contents; }
1810.case-study-info-panel .case-study-logo_wrapper { display: none; }
1811.csd-demo-card {
1812  background: #eef4f0;
1813  border: 1px solid #dbe7e0;
1814  border-radius: 16px;
1815  padding: 1.6rem;
1816  display: flex;
1817  flex-direction: column;
1818  align-items: flex-start;
1819  gap: 0.75rem;
1820}
1821.csd-demo-mark {
1822  width: 40px;
1823  height: 40px;
1824  border-radius: 10px;
1825  background: #509a79;
1826  color: #fff;
1827  display: flex;
1828  align-items: center;
1829  justify-content: center;
1830}
1831.csd-demo-card h3 { margin: 0; font-size: 1.05rem; font-weight: 600; color: #0c1e20; }
1832.csd-demo-card p { margin: 0; font-size: 0.9rem; line-height: 1.5; color: #5a777d; }
1833.csd-demo-card .cta { margin-top: 0.4rem; }
1834
1835/* Share row under the main content. */
1836.csd-share {
1837  display: flex;
1838  align-items: center;
1839  gap: 1rem;
1840  padding-top: 1.75rem;
1841  border-top: 1px solid #e6ebe7;
1842}
1843.csd-share-label { font-weight: 600; color: #0c1e20; font-size: 0.9rem; }
1844.csd-share a { color: #5a777d; display: inline-flex; }
1845.csd-share a:hover { color: #0c1e20; }
1846
1847/* Related studies. */
1848.csd-related { max-width: 1296px; margin: 0 auto; padding: clamp(3rem, 6vw, 5rem) clamp(1.25rem, 5vw, 4rem); }
1849.csd-related-eyebrow {
1850  font-size: 0.72rem;
1851  letter-spacing: 0.08em;
1852  text-transform: uppercase;
1853  color: #509a79;
1854  font-weight: 600;
1855  margin: 0 0 1rem;
1856}
1857.csd-related-head {
1858  display: grid;
1859  grid-template-columns: 1fr 1fr;
1860  gap: 2rem;
1861  align-items: end;
1862}
1863.csd-related-head h2 { margin: 0; font-size: clamp(1.6rem, 3vw, 2.2rem); font-weight: 600; color: #0c1e20; letter-spacing: -0.02em; }
1864.csd-related-head p { margin: 0; font-size: 0.98rem; line-height: 1.6; color: #5a777d; }
1865.csd-related-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 1.5rem; margin-top: 2.5rem; }
1866.csd-card { display: flex; flex-direction: column; text-decoration: none; }
1867.csd-card-img {
1868  width: 100%;
1869  aspect-ratio: 16 / 10;
1870  object-fit: cover;
1871  border-radius: 12px;
1872  background: #eef1f3;
1873}
1874.csd-card-tag {
1875  margin: 1rem 0 0.55rem;
1876  font-size: 0.68rem;
1877  letter-spacing: 0.06em;
1878  text-transform: uppercase;
1879  color: #509a79;
1880  font-weight: 600;
1881}
1882.csd-card-title { color: #0c1e20; font-size: 1.05rem; font-weight: 600; line-height: 1.3; }
1883.csd-card-more { margin-top: 0.85rem; display: inline-flex; align-items: center; gap: 0.35rem; color: #509a79; font-weight: 600; font-size: 0.9rem; }
1884.csd-card:hover .csd-card-title { color: #509a79; }
1885
1886/* Neutral final CTA band. */
1887.csd-cta {
1888  border-top: 1px solid #e6ebe7;
1889  border-bottom: 1px solid #e6ebe7;
1890  background: #fafafa;
1891  text-align: center;
1892  padding: clamp(3.5rem, 7vw, 5.5rem) clamp(1.25rem, 5vw, 4rem);
1893}
1894.csd-cta-mark {
1895  width: 44px;
1896  height: 44px;
1897  border-radius: 11px;
1898  background: #509a79;
1899  color: #fff;
1900  display: inline-flex;
1901  align-items: center;
1902  justify-content: center;
1903  margin: 0 auto;
1904}
1905.csd-cta h2 { color: #0c1e20; font-size: clamp(1.6rem, 3vw, 2.2rem); font-weight: 600; margin: 1.1rem 0 0.75rem; letter-spacing: -0.02em; }
1906.csd-cta p { color: #5a777d; max-width: 560px; margin: 0 auto 2rem; line-height: 1.6; }
1907.csd-cta-actions { display: flex; gap: 0.75rem; justify-content: center; flex-wrap: wrap; }
1908
1909@media (max-width: 767px) {
1910  .csd-related-head { grid-template-columns: 1fr; }
1911  .csd-related-grid { grid-template-columns: 1fr; }
1912}
1913`,vde=()=>{const{slug:e}=Ta(),t=Y0.find(k=>
1913k.slug===e),a=M.useRef(null),[i,r]=M.useState(null);if(M.useEffect(()=>{const k=a.current;if(!k)return;const v=Array.from(k.querySelectorAll("figure.w-richtext-figure-type-image")),j=[];for(const T of v){const A=T.querySelector("img");if(!A)continue;T.classList.add("case-study-figure--zoomable");const C=()=>{r({src:A.currentSrc||A.src,alt:A.alt||""})};A.addEventListener("click",C),j.push(()=>A.removeEventListener("click",C))}return()=>{j.forEach(T=>T())}},[e]),!t)return n.jsxs(Qe,{navVariant:"light",children:[n.jsx("section",{id:"hero",style:{position:"relative",marginTop:"-65px",background:"#fafafa",borderBottom:"1px solid #eaeeea",overflow:"hidden"},children:n.jsxs("div",{style:{maxWidth:840,margin:"0 auto",padding:"148px 40px 84px",textAlign:"center"},children:[n.jsx("h1",{style:{margin:0,fontSize:"clamp(34px, 6vw, 62px)",lineHeight:1.04,fontWeight:600,color:"#1b1f1c",letterSpacing:"-0.03em",maxWidth:"760px",marginInline:"auto",textWrap:"balance"},children:"Not Found"}),n.jsx("p",{style:{margin:"24px auto 0",fontSize:"19px",lineHeight:1.6,color:"#5f6563",maxWidth:"600px",textWrap:"pretty"},children:"The case study you're looking for doesn't exist."})]})}),n.jsx("div",{className:"container",children:n.jsx("div",{className:"content",children:n.jsx("section",{className:"section",children:n.jsx(J,{to:"/customers",className:"cta w-button",children:"Back to Customers"})})})})]});const o=e?gde[e]:void 0,l=e?yde[e]:void 0,d=`https://upside.tech/case-studies/${e}`,u=t.title.split(":")[0].trim(),h=t.companyLogo.includes("graphite"),m=t.quoteId?bG(t.quoteId):void 0,f=t.wideQuote?{text:t.wideQuote.text,author:t.wideQuote.author,authorTitle:t.wideQuote.authorTitle}:m?{text:m.quote,author:m.name,authorTitle:m.title}:void 0,y=Y0.filter(k=>k.slug!==e&&!k.hidden).slice(0,3),b=encodeURIComponent(d),x=encodeURIComponent(t.title);return n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:t.title,description:t.description,ogImage:t.ogImage,canonicalUrl:d}),n.jsx("style",{children:bde}),n.jsxs("div",{className:"csd-page",children:[n.jsxs("header",{className:"csd-header",children:[n.jsxs("nav",{className:"csd-breadcrumb","aria-label":"Breadcrumb",children:[n.jsx(J,{to:"/customers",children:"Case Studies"}),n.jsx("span",{children:"/"}),n.jsx("span",{style:{color:"#0c1e20"},children:u})]}),n.jsxs("div",{className:"csd-lockup",children:[n.jsx(au,{className:"csd-upside"}),n.jsx("span",{className:"csd-x",children:"×"}),n.jsx("img",{className:"csd-colo",src:t.companyLogo,alt:u,loading:"lazy",style:h?{filter:"brightness(0)"}:void 0})]}),n.jsx("h1",{className:"csd-title",children:t.title})]}),f&&n.jsxs("div",{className:"csd-quote",children:[n.jsxs("blockquote",{children:["“",f.text,"”"]}),f.author&&n.jsxs("p",{className:"csd-quote-attr",children:[n.jsx("strong",{children:f.author}),f.authorTitle?`, ${f.authorTitle}`:""]})]}),n.jsx("div",{className:"container _w-sticky",children:n.jsx("div",{className:"content",children:n.jsxs("div",{className:"case-study-layout_grid",children:[n.jsxs("div",{className:"case-study-info-panel",children:[l?n.jsx("div",{className:"csd-info-inner",dangerouslySetInnerHTML:{__html:l}}):n.jsx("div",{className:"case-study-logo_wrapper",children:n.jsx("img",{src:t.companyLogo,loading:"lazy",alt:u})}),n.jsxs("div",{className:"csd-demo-card",children:[n.jsx("span",{className:"csd-demo-mark",children:n.jsx(L0,{size:20})}),n.jsx("h3",{children:"See it for yourself"}),n.jsx("p",{children:"Book a demo and see a live, customer-specific account rebuilt into the complete record every GTM team can trust."}),n.jsx(J,{to:Wt,className:"cta w-button",children:"Request demo"})]})]}),n.jsxs("div",{ref:a,className:"case-study-main-content_wrapper",children:[t.youtubeEmbedId&&n.jsx("div",{className:"w-embed-youtubevideo",style:{paddingTop:"56.17%",position:"relative",width:"100%",borderRadius:12,overflow:"hidden"},children:n.jsx("iframe",{src:`https://www.youtube.com/embed/${t.youtubeEmbedId}?rel=0&controls=1&autoplay=0&mute=0&start=0`,frameBorder:"0",style:{position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"auto"},allow:"autoplay; encrypted-media",allowFullScreen:!0,title:t.title})}),o?n.jsx("div",{style:{display:"contents"},dangerouslySetInnerHTML:{__html:o}}):n.jsx("div",{className:"case-study-main-content-section",children:n.jsx("p",{className:"body-m",children:"Full case study content coming soon."})}),n.jsxs("div",{className:"csd-share",children:[n.jsx("span",{className:"csd-share-label",children:"Share"}),n.jsx("a",{href:`https://www.facebook.com/sharer/sharer.php?u=${b}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on Facebook",children:n.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"
1913currentColor","aria-hidden":"true",children:n.jsx("path",{d:"M14 13.5h2.5l1-4H14v-2c0-1.03 0-2 2-2h1.5V2.14c-.326-.043-1.557-.14-2.857-.14C11.928 2 10 3.657 10 6.7v2.8H7v4h3V22h4v-8.5Z"})})}),n.jsx("a",{href:`https://twitter.com/intent/tweet?url=${b}&text=${x}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on X",children:n.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:n.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.231 5.45-6.231Zm-1.161 17.52h1.833L7.084 4.126H5.117L17.083 19.77Z"})})}),n.jsx("a",{href:`https://www.linkedin.com/sharing/share-offsite/?url=${b}`,target:"_blank",rel:"noopener noreferrer","aria-label":"Share on LinkedIn",children:n.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor","aria-hidden":"true",children:n.jsx("path",{d:"M20.45 20.45h-3.56v-5.57c0-1.33-.02-3.04-1.85-3.04-1.85 0-2.13 1.44-2.13 2.94v5.67H9.35V9h3.42v1.56h.05c.48-.9 1.64-1.85 3.37-1.85 3.6 0 4.27 2.37 4.27 5.46v6.28ZM5.34 7.43a2.06 2.06 0 1 1 0-4.13 2.06 2.06 0 0 1 0 4.13ZM7.12 20.45H3.55V9h3.57v11.45ZM22.22 0H1.77C.79 0 0 .77 0 1.73v20.54C0 23.22.79 24 1.77 24h20.45c.98 0 1.78-.78 1.78-1.73V1.73C24 .77 23.2 0 22.22 0Z"})})})]})]})]})})}),y.length>0&&n.jsxs("section",{className:"csd-related",children:[n.jsx("p",{className:"csd-related-eyebrow",children:"Case Studies"}),n.jsxs("div",{className:"csd-related-head",children:[n.jsx("h2",{children:"Explore more customer success stories."}),n.jsx("p",{children:"Explore more stories from GTM teams using Upside to recover hidden context, answer revenue questions faster, and make more confident strategic decisions."})]}),n.jsx("div",{className:"csd-related-grid",children:y.map(k=>n.jsxs(J,{to:`/case-studies/${k.slug}`,className:"csd-card",children:[n.jsx("img",{className:"csd-card-img",src:k.activeBgImage??k.featuredImage,alt:k.title.split(":")[0].trim(),loading:"lazy",style:{objectPosition:k.activeBgPosition??"center"}}),n.jsx("span",{className:"csd-card-tag",children:k.theme}),n.jsx("span",{className:"csd-card-title",children:k.title}),n.jsxs("span",{className:"csd-card-more",children:["Read more ",n.jsx(vy,{size:15})]})]},k.slug))})]}),n.jsxs("section",{className:"csd-cta",children:[n.jsx("span",{className:"csd-cta-mark",children:n.jsx(L0,{size:22})}),n.jsx("h2",{children:"Build your GTM on data you can trust."}),n.jsx("p",{children:"Book a demo and see what your team can build, automate, and finally answer once your GTM data is something you trust."}),n.jsxs("div",{className:"csd-cta-actions",children:[n.jsx(J,{to:Wt,className:"cta w-button",children:"Request demo"}),n.jsx(J,{to:"/platform",className:"cta cc-secondary w-button",children:"Explore the platform →"})]})]})]}),n.jsx(fde,{src:(i==null?void 0:i.src)??null,alt:(i==null?void 0:i.alt)??"",onClose:()=>r(null)})]})},xde=()=>n.jsx("section",{id:"hero",style:{position:"relative",marginTop:"-65px",background:Pe.bgSoft,borderBottom:`1px solid ${Pe.border}`,overflow:"hidden"},children:n.jsxs("div",{style:{maxWidth:840,margin:"0 auto",padding:"148px 40px 84px",textAlign:"center"},children:[n.jsx("div",{style:{fontSize:"12px",fontWeight:500,letterSpacing:"0.14em",textTransform:"uppercase",color:Pe.greenSoft},children:"Customers"}),n.jsx("h1",{style:{margin:"20px auto 0",fontSize:"clamp(34px, 6vw, 62px)",fontWeight:600,letterSpacing:"-0.03em",lineHeight:1.04,color:Pe.text,maxWidth:"760px",textWrap:"balance"},children:"How modern GTM teams turn messy data into revenue."}),n.jsx("p",{style:{fontSize:"19px",lineHeight:1.6,color:Pe.muted,margin:"24px auto 0",maxWidth:"600px",textWrap:"pretty"},children:"Across every industry, every motion, and every messy data stack."})]})});function RG(e){const t=e.split("-")[0].toLowerCase();return oa.find(a=>a.name.toLowerCase()===t)}function wde(e){const t=RG(e);return t!=null&&t.src.endsWith(".svg")?t.src:void 0}const S0="#509A79",kde="#3f8266",jde="rgba(255,255,255,0.65)",C0=320,Sde=460,A0=16,Cde=420,Ade=5,CP="vtc-styles",AP=`
1914.vtc-row {
1915  display: flex;
1916  gap: ${A0}px;
1917  overflow-x: auto;
1918  overflow-y: hidden;
1919  scroll-snap-type: x mandatory;
1920  scroll-behavior: smooth;
1921  scrollbar-width: none;
1922  padding: 8px 4px 24px;
1923  margin: 0 -4px;
1924}
1925.vtc-row::-webkit-scrollbar { display: none; }
1926
1927.vtc-grid {
1928  display: grid;
1929  grid-template-columns: repeat(var(--vtc-grid-cols, 3), minmax(0, ${Cde}px));
1930  gap: ${A0}px;
1931  justify-content: center;
1932  padding: 8px 4px 24px;
1933}
1934
1935.vtc-hero-wrap {
1936  display: flex;
1937  justify-content: center;
1938  padding: 8px 4px 24px;
1939}
1940
1941.vtc-card {
1942  position: relative;
1943  flex: 0 0 ${C0}px;
1944  height: ${Sde}px;
1945  border-radius: 18px;
1946  overflow: hidden;
1947  scroll-snap-align: start;
1948  background: #161b1c;
1949  border: 0;
1950  padding: 0;
1951  cursor: pointer;
1952  color: #fff;
1953  text-align: left;
1954  font: inherit;
1955  isolation: isolate;
1956  transition: transform 220ms cubic-bezier(0.22,1,0.36,1);
1957}
1958/* In grid mode the card fills its grid track instead of a fixed flex basis. */
1959.vtc-grid .vtc-card { flex: 1 1 auto; width: 100%; }
1960.vtc-card:hover { transform: translateY(-2px); }
1961.vtc-card:focus-visible {
1962  outline: 2px solid ${S0};
1963  outline-offset: 3px;
1964}
1965
1966.vtc-card__bg {
1967  position: absolute;
1968  inset: 0;
1969  background-size: cover;
1970  background-position: center top;
1971  z-index: 0;
1972  transition: transform 600ms cubic-bezier(0.22,1,0.36,1), filter 220ms ease;
1973}
1974.vtc-card:hover .vtc-card__bg {
1975  transform: scale(1.04);
1976  filter: brightness(0.78);
1977}
1978
1979.vtc-card__veil {
1980  position: absolute;
1981  inset: 0;
1982  background: linear-gradient(
1983    180deg,
1984    rgba(12,30,32,0.05) 0%,
1985    rgba(12,30,32,0.05) 40%,
1986    rgba(12,30,32,0.55) 70%,
1987    rgba(12,30,32,0.92) 100%
1988  );
1989  z-index: 1;
1990  pointer-events: none;
1991}
1992
1993.vtc-card__logo {
1994  position: absolute;
1995  top: 18px;
1996  left: 18px;
1997  height: 24px;
1998  max-width: 130px;
1999  z-index: 3;
2000  opacity: 0.95;
2001  object-fit: contain;
2002}
2003/* For case studies whose only logo is a dark-on-white raster (e.g. Graphite's
2004 * JPEG), fall back to brightness(0) invert(1). For SVGs that already ship
2005 * with fill="white", we don't filter at all. */
2006.vtc-card__logo[data-needs-invert="true"] {
2007  filter: brightness(0) invert(1);
2008}
2009
2010.vtc-card__body {
2011  position: absolute;
2012  left: 0;
2013  right: 0;
2014  bottom: 0;
2015  padding: 22px;
2016  z-index: 3;
2017  display: flex;
2018  flex-direction: column;
2019  gap: 10px;
2020}
2021
2022.vtc-card__quote {
2023  margin: 0;
2024  font-size: 1.02rem;
2025  line-height: 1.35;
2026  font-weight: 500;
2027  color: #fff;
2028  display: -webkit-box;
2029  -webkit-line-clamp: 3;
2030  -webkit-box-orient: vertical;
2031  overflow: hidden;
2032}
2033
2034.vtc-card__person {
2035  display: flex;
2036  flex-direction: column;
2037  gap: 2px;
2038}
2039
2040.vtc-card__person-name {
2041  font-size: 0.92rem;
2042  font-weight: 600;
2043  color: #fff;
2044}
2045
2046.vtc-card__person-title {
2047  font-size: 0.8rem;
2048  color: ${jde};
2049}
2050
2051.vtc-card__play {
2052  position: absolute;
2053  inset: 0;
2054  display: flex;
2055  align-items: center;
2056  justify-content: center;
2057  z-index: 4;
2058  opacity: 0;
2059  transition: opacity 220ms ease;
2060  pointer-events: none;
2061}
2062.vtc-card:hover .vtc-card__play,
2063.vtc-card:focus-visible .vtc-card__play {
2064  opacity: 1;
2065}
2066
2067.vtc-card__play-pill {
2068  display: inline-flex;
2069  align-items: center;
2070  gap: 10px;
2071  background: ${S0};
2072  color: #fff;
2073  padding: 12px 22px;
2074  border-radius: 999px;
2075  font-size: 0.85rem;
2076  font-weight: 700;
2077  letter-spacing: 0.12em;
2078  text-transform: uppercase;
2079  box-shadow: 0 10px 30px rgba(0,0,0,0.45);
2080  transform: scale(0.94);
2081  transition: transform 220ms cubic-bezier(0.22,1,0.36,1), background 160ms ease;
2082}
2083.vtc-card:hover .vtc-card__play-pill { transform: scale(1); background: ${kde}; }
2084
2085/* Hero variant: one flagship card split into image + dedicated quote panel.
2086 * Used when we only have a single video so the section doesn't read as a
2087 * lonely card adrift in a wide frame. */
2088.vtc-card--hero {
2089  flex: 0 0 auto;
2090  width: min(960px, 100%);
2091  height: 480px;
2092  display: grid;
2093  grid-template-columns: 1.15fr 1fr;
2094}
2095.vtc-card--hero .vtc-card__media {
2096  position: relative;
2097  overflow: hidden;
2098}
2099.vtc-card--hero .vtc-card__bg,
2100.vtc-card--hero .vtc-card__veil,
2101.vtc-card--hero .vtc-card__logo,
2102.vtc-card--hero .vtc-card__play {
2103  /* The hero's image-side overlays live inside .vtc-card__media, not the
2104   * whole card, so they stay confined to the left column. */
2105}
2106.vtc-card--hero .vtc-card__veil {
2107  background: linear-gradient(
2108    180deg,
2109    rgba(12,30,32,0.0) 0%,
2110    rgba(12,30,32,0.0) 55%,
2111    rgba(12,30,32,0.55) 100%
2112  );
2113}
2114.vtc-card--hero .vtc-card__body {
2115  position: relative;
2116  inset: auto;
2117  padding: 36px 36px 32px;
2118  background: #161b1c;
2119  justify-content: center;
2120  gap: 18px;
2121}
2122.vtc-card--hero .vtc-card__quote {
2123  font-size: 1.25rem;
2124  line-height: 1.45;
2125  -webkit-line-clamp: 6;
2126}
2127.vtc-card--hero .vtc-card__person-name { font-size: 1rem; }
2128.vtc-card--hero .vtc-card__person-title { font-size: 0.86rem; }
2129
2130.vtc-arrow {
2131  display: inline-flex;
2132  align-items: center;
2133  justify-content: center;
2134  width: 42px;
2135  height: 42px;
2136  border-radius: 999px;
2137  background: #ffffff;
2138  border: 1px solid rgba(27,31,28,0.12);
2139  color: #1b1f1c;
2140  cursor: pointer;
2141  transition: background 160ms ease, border-color 160ms ease, transform 160ms ease, opacity 160ms ease;
2142  box-shadow: 0 1px 2px rgba(27,31,28,0.04);
2143}
2144.vtc-arrow:hover { background: #fafafa; border-color: rgba(27,31,28,0.22); }
2145.vtc-arrow:disabled { opacity: 0.4; cursor: default; }
2146.vtc-arrow:focus-visible { outline: 2px solid ${S0}; outline-offset: 3px; }
2147
2148@media (max-width: 720px) {
2149  .vtc-arrows { display: none !important; }
2150  /* On mobile, every layout collapses to a single horizontally-scrollable column. */
2151  .vtc-grid {
2152    display: flex;
2153    gap: ${A0}px;
2154    overflow-x: auto;
2155    scroll-snap-type: x mandatory;
2156    scroll-behavior: smooth;
2157    scrollbar-width: none;
2158  }
2159  .vtc-grid::-webkit-scrollbar { display: none; }
2160  .vtc-grid .vtc-card {
2161    flex: 0 0 ${C0}px;
2162    width: ${C0}px;
2163    scroll-snap-align: start;
2164  }
2165  .vtc-card--hero {
2166    grid-template-columns: 1fr;
2167    height: auto;
2168    width: 100%;
2169  }
2170  .vtc-card--hero .vtc-card__media { height: 280px; }
2171}
2172`;function Tde(){if(typeof document>"u")return;let e=document.getElementById(CP);e||(e=document.createElement("style"),e.id=CP,document.head.appendChild(e)),e.textContent!==AP&&(e.textContent=AP)}const _de=()=>n.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none","aria-hidden":!0,children:n.jsx("path",{d:"M15 6L9 12L15 18",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})}),Mde=()=>n.jsx("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none","aria-hidden":!0,children:n.jsx("path",{d:"M9 6L15 12L9 18",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})}),Xj=({caseStudy:e,onClick:t,variant:a="standard"})=>{const i=e.videoPresenter,r=(i==null?void 0:i.name)??e.featuredName,o=(i==null?void 0:i.title)??e.featuredTitle,l=(i==null?void 0:i.image)??e.featuredImage,d=(i==null?void 0:i.quoteId)??e.quoteId,u=d?DM[d]:void 0,h=RG(e.slug),m=wde(e.slug),f=m??e.companyLogo,y=h?Math.max(24,h.height):24,b=18-Math.max(0,(y-24)/2),x=n.jsx("div",{className:"vtc-card__bg",style:{backgroundImage:`url("${l}")`}}),k=n.jsx("div",{className:"vtc-card__veil"}),v=n.jsx("img",{src:f,alt:"",loading:"lazy",className:"vtc-card__logo","data-needs-invert":m?void 0:"true",style:{height:y,top:b}}),j=n.jsx("div",{className:"vtc-card__play",children:n.jsxs("span",{className:"vtc-card__play-pill",children:[n.jsx("svg",{width:"12",height:"12",viewBox:"0 0 12 12",fill:"none","aria-hidden":!0,children:n.jsx("path",{d:"M2.5 1.5L10 6L2.5 10.5V1.5Z",fill:"currentColor"})}),"Play"]})});return a==="hero"?n.jsxs("button",{type:"button",className:"vtc-card vtc-card--hero",onClick:t,"aria-label":`Play video: ${e.videoTitle??e.title}`,children:[n.jsxs("div",{className:"vtc-card__media",children:[x,k,v,j]}),n.jsxs("div",{className:"vtc-card__body",children:[u&&n.jsxs("p",{className:"vtc-card__quote",children:["“",u.quote,"”"]}),n.jsxs("div",{className:"vtc-card__person",children:[n.jsx("span",{className:"vtc-card__person-name",children:r}),n.jsx("span",{className:"vtc-card__person-title",children:o})]})]})]}):n.jsxs("button",{type:"button",className:"vtc-card",onClick:t,"aria-label":`Play video: ${e.videoTitle??e.title}`,children:[x,k,v,j,n.jsxs("div",{className:"vtc-card__body",children:[u&&n.jsxs("p",{className:"vtc-card__quote",children:["“",u.quote,"”"]}),n.jsxs("div",{className:"vtc-card__person",children:[n.jsx("span",{className:"vtc-card__person-name",children:r}),n.jsx("span",{className:"vtc-card__person-title",children:o})]})]})]})},Ede=({items:e,onOpen:t})=>{const a=M.useRef(null),[i,r]=M.useState(!1),[o,l]=M.useState(!1),d=e.length===1?"hero":e.length<Ade?"grid":"carousel";if(M.useEffect(()=>{Tde()},[]),M.useEffect(()=>{if(d!=="carousel")return;const m=a.current;if(!m)return;const f=()=>{r(m.scrollLeft>4),l(m.scrollLeft+m.clientWidth<m.scrollWidth-4)};f(),m.addEventListener("scroll",f,{passive:!0});const y=new ResizeObserver(f);return y.observe(m),()=>{m.removeEventListener("scroll",f),y.disconnect()}},[e.length,d]),e.length===0)return null;const u=m=>{const f=a.current;f&&f.scrollBy({left:m*(C0+A0),behavior:"smooth"})},h=d==="carousel";return n.jsx("section",{style:{padding:"4rem 1.5rem 4rem"},children:n.jsxs("div",{style:{maxWidth:1240,margin:"0 auto"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"flex-end",justifyContent:"space-between",marginBottom:"2.25rem",gap:16},children:[n.jsxs("header",{style:{maxWidth:760},children:[n.jsx("p",{style:{margin:"0 0 0.75rem",fontSize:"0.78rem",fontWeight:700,letterSpacing:"0.14em",textTransform:"uppercase",color:S0},children:"Watch"}),n.jsx("h2",{style:{margin:0,color:"#1b1f1c",fontSize:"clamp(1.8rem, 3vw, 2.6rem)",fontWeight:600,letterSpacing:"-0.02em",lineHeight:1.15},children:"Hear it straight from the teams."}),n.jsx("p",{style:{margin:"0.75rem 0 0",color:"#5f6563",fontSize:"1.05rem",lineHeight:1.45},children:"Short videos from customers on how they leverage Upside."})]}),h&&n.jsxs("div",{className:"vtc-arrows",style:{display:"flex",gap:8},children:[n.jsx("button",{type:"button",className:"vtc-arrow",onClick:()=>u(-1),disabled:!i,"aria-label":"Scroll testimonials left",children:n.jsx(_de,{})}),n.jsx("button",{type:"button",className:"vtc-arrow",onClick:()=>u(1),disabled:!o,"aria-label":"Scroll testimonials right",children:n.jsx(Mde,{})})]})]}),d==="hero"&&n.jsx("div",{className:"vtc-hero-wrap",children:n.jsx(Xj,{caseStudy:e[0],onClick:()=>t(0),variant:"hero"})}),d==="grid"&&n.jsx("div",{className:"vtc-grid",style:{"--vtc-grid-cols":e.length},children:e.map((m,f)=>n.jsx(Xj,{caseStudy:m,onClick:()=>t(f)},m.slug))}
2172),d==="carousel"&&n.jsx("div",{className:"vtc-row",ref:a,children:e.map((m,f)=>n.jsx(Xj,{caseStudy:m,onClick:()=>t(f)},m.slug))})]})})};function Rde(e){var a;const t=e.split("-")[0].toLowerCase();return(a=oa.find(i=>i.name.toLowerCase()===t&&i.src.endsWith(".svg")))==null?void 0:a.src}const zv="#509A79",Nde="rgba(80,154,121,0.55)",Ode="rgba(80,154,121,0.18)",Pde="rgba(255,255,255,0.62)",TP="vlb-styles",Ide=`
2173.vlb-overlay {
2174  position: fixed;
2175  inset: 0;
2176  z-index: 10000;
2177  display: flex;
2178  align-items: center;
2179  justify-content: center;
2180  background: rgba(6, 12, 13, 0.93);
2181  backdrop-filter: blur(6px);
2182  -webkit-backdrop-filter: blur(6px);
2183  animation: vlb-fade-in 200ms ease-out;
2184  padding: 28px 24px;
2185}
2186
2187@keyframes vlb-fade-in {
2188  from { opacity: 0; }
2189  to { opacity: 1; }
2190}
2191@keyframes vlb-content-in {
2192  from { opacity: 0; transform: scale(0.985) translateY(8px); }
2193  to { opacity: 1; transform: scale(1) translateY(0); }
2194}
2195
2196.vlb-content {
2197  width: 100%;
2198  max-width: 1180px;
2199  display: grid;
2200  grid-template-columns: minmax(0, 1.85fr) minmax(0, 1fr);
2201  gap: 18px;
2202  position: relative;
2203  animation: vlb-content-in 240ms cubic-bezier(0.22,1,0.36,1);
2204}
2205
2206.vlb-close {
2207  position: absolute;
2208  top: -42px;
2209  right: 0;
2210  background: rgba(255,255,255,0.08);
2211  border: 1px solid rgba(255,255,255,0.18);
2212  color: #fff;
2213  width: 36px;
2214  height: 36px;
2215  border-radius: 999px;
2216  font-size: 18px;
2217  line-height: 1;
2218  cursor: pointer;
2219  display: inline-flex;
2220  align-items: center;
2221  justify-content: center;
2222  transition: background 160ms ease, border-color 160ms ease;
2223}
2224.vlb-close:hover { background: rgba(255,255,255,0.16); border-color: rgba(255,255,255,0.32); }
2225.vlb-close:focus-visible { outline: 2px solid ${zv}; outline-offset: 3px; }
2226
2227.vlb-title {
2228  position: absolute;
2229  top: -42px;
2230  left: 0;
2231  display: flex;
2232  align-items: center;
2233  gap: 12px;
2234  color: rgba(255,255,255,0.85);
2235  font-size: 0.92rem;
2236  font-weight: 500;
2237  max-width: calc(100% - 60px);
2238  min-width: 0;
2239}
2240.vlb-title__logo {
2241  height: 22px;
2242  max-width: 110px;
2243  opacity: 0.85;
2244  object-fit: contain;
2245  flex: 0 0 auto;
2246}
2247.vlb-title__logo[data-needs-invert="true"] { filter: brightness(0) invert(1); }
2248.vlb-title__text {
2249  white-space: nowrap;
2250  overflow: hidden;
2251  text-overflow: ellipsis;
2252  min-width: 0;
2253}
2254
2255.vlb-player {
2256  position: relative;
2257  aspect-ratio: 16 / 9;
2258  background: #000;
2259  border-radius: 14px;
2260  overflow: hidden;
2261}
2262.vlb-player iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; }
2263
2264.vlb-rail {
2265  background: rgba(255,255,255,0.04);
2266  border: 1px solid rgba(255,255,255,0.10);
2267  border-radius: 14px;
2268  display: flex;
2269  flex-direction: column;
2270  min-height: 0;
2271}
2272.vlb-rail__header {
2273  display: flex;
2274  align-items: center;
2275  justify-content: space-between;
2276  padding: 16px 18px 8px;
2277  font-size: 0.72rem;
2278  font-weight: 700;
2279  letter-spacing: 0.14em;
2280  text-transform: uppercase;
2281  color: rgba(255,255,255,0.55);
2282}
2283.vlb-rail__list {
2284  display: flex;
2285  flex-direction: column;
2286  padding: 6px 8px 10px;
2287  gap: 4px;
2288  overflow-y: auto;
2289  flex: 1;
2290}
2291
2292.vlb-moment {
2293  display: flex;
2294  gap: 12px;
2295  align-items: flex-start;
2296  width: 100%;
2297  text-align: left;
2298  background: transparent;
2299  border: 0;
2300  border-left: 2px solid transparent;
2301  padding: 11px 12px;
2302  border-radius: 10px;
2303  cursor: pointer;
2304  font: inherit;
2305  color: #fff;
2306  transition: background 160ms ease, border-color 160ms ease;
2307}
2308.vlb-moment:hover {
2309  background: rgba(255,255,255,0.07);
2310}
2311.vlb-moment:focus-visible { outline: 2px solid ${zv}; outline-offset: 2px; }
2312.vlb-moment[data-active="true"] {
2313  background: ${Ode};
2314  border-left-color: ${Nde};
2315}
2316.vlb-moment[data-active="true"] .vlb-moment__time {
2317  background: ${zv};
2318  color: #fff;
2319}
2320.vlb-moment__time {
2321  flex: 0 0 auto;
2322  background: rgba(255,255,255,0.08);
2323  color: #fff;
2324  font-variant-numeric: tabular-nums;
2325  font-size: 0.74rem;
2326  font-weight: 700;
2327  padding: 4px 8px;
2328  border-radius: 6px;
2329  margin-top: 1px;
2330  transition: background 160ms ease, color 160ms ease;
2331}
2332.vlb-moment__label {
2333  font-size: 0.92rem;
2334  line-height: 1.4;
2335}
2336
2337.vlb-footer {
2338  grid-column: 1 / -1;
2339  display: flex;
2340  align-items: center;
2341  justify-content: flex-end;
2342  gap: 12px;
2343  margin-top: 6px;
2344  color: ${Pde};
2345  font-size: 0.85rem;
2346}
2347.vlb-footer__more {
2348  display: inline-flex;
2349  align-items: center;
2350  gap: 8px;
2351  background: transparent;
2352  border: 1px solid rgba(255,255,255,0.18);
2353  color: #fff;
2354  padding: 8px 14px;
2355  border-radius: 999px;
2356  font: inherit;
2357  font-weight: 600;
2358  cursor: pointer;
2359  transition: background 160ms ease, border-color 160ms ease;
2360}
2361.vlb-footer__more:hover { background: rgba(255,255,255,0.08); border-color: rgba(255,255,255,0.32); }
2362.vlb-footer__more:focus-visible { outline: 2px solid ${zv}; outline-offset: 3px; }
2363
2364@media (max-width: 900px) {
2365  .vlb-content {
2366    grid-template-columns: 1fr;
2367    max-width: 720px;
2368  }
2369  .vlb-rail { max-height: 320px; }
2370  .vlb-title { font-size: 0.84rem; }
2371}
2372`;function Dde(){if(typeof document>"u"||document.getElementById(TP))return;const e=document.createElement("style");e.id=TP,e.textContent=Ide,document.head.appendChild(e)}function Wde(e){const t=Math.floor(e/60),a=Math.floor(e%60);return`${t}:${a.toString().padStart(2,"0")}`}function Qj(e,t,a=[]){!e||!e.contentWindow||e.contentWindow.postMessage(JSON.stringify({event:"command",func:t,args:a}),"*")}const zde=({items:e,index:t,onIndexChange:a,onClose:i})=>{const r=M.useRef(null),o=M.useRef(null),[l,d]=M.useState(0),[u,h]=M.useState(!1),m=e[t];if(M.useEffect(()=>{Dde(),h(!0)},[]),M.useEffect(()=>{const j=document.body.style.overflow;document.body.style.overflow="hidden";const T=A=>{A.key==="Escape"&&i(),A.key==="ArrowRight"&&e.length>1&&a((t+1)%e.length),A.key==="ArrowLeft"&&e.length>1&&a((t-1+e.length)%e.length)};return window.addEventListener("keydown",T),()=>{document.body.style.overflow=j,window.removeEventListener("keydown",T)}},[t,e.length,i,a]),M.useEffect(()=>{if(!(m!=null&&m.youtubeEmbedId))return;d(0);const j=window.setTimeout(()=>{const A=r.current;A!=null&&A.contentWindow&&A.contentWindow.postMessage(JSON.stringify({event:"listening",id:1,channel:"widget"}),"*")},600),T=A=>{var C;if(typeof A.data=="string"&&!(A.origin!=="https://www.youtube.com"&&A.origin!=="https://www.youtube-nocookie.com"))try{const _=JSON.parse(A.data);_.event==="infoDelivery"&&typeof((C=_==null?void 0:_.info)==null?void 0:C.currentTime)=="number"&&d(_.info.currentTime)}catch{}};return window.addEventListener("message",T),o.current=window.setInterval(()=>{Qj(r.current,"getCurrentTime")},800),()=>{window.clearTimeout(j),o.current&&window.clearInterval(o.current),window.removeEventListener("message",T)}},[m==null?void 0:m.youtubeEmbedId]),!u||!m)return null;const f=j=>{Qj(r.current,"seekTo",[j.timestamp,!0]),Qj(r.current,"playVideo")},y=()=>{e.length<=1||a((t+1)%e.length)},b=m.videoSnippets??[];let x=-1;for(let j=0;j<b.length;j+=1)b[j].timestamp<=l+.25&&(x=j);const k=`https://www.youtube.com/embed/${m.youtubeEmbedId}?enablejsapi=1&rel=0&modestbranding=1&playsinline=1&autoplay=1`,v=n.jsx("div",{className:"vlb-overlay",onClick:i,role:"dialog","aria-modal":"true","aria-label":m.videoTitle??m.title,children:n.jsxs("div",{className:"vlb-content",onClick:j=>j.stopPropagation(),children:[n.jsxs("div",{className:"vlb-title",children:[(()=>{const j=Rde(m.slug);return n.jsx("img",{src:j??m.companyLogo,alt:"",className:"vlb-title__logo","data-needs-invert":j?void 0:"true"})})(),n.jsx("span",{className:"vlb-title__text",children:m.videoTitle??m.title})]}),n.jsx("button",{type:"button",className:"vlb-close",onClick:i,"aria-label":"Close video",children:"✕"}),n.jsx("div",{className:"vlb-player",children:n.jsx("iframe",{ref:r,src:k,title:m.videoTitle??m.title,allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",allowFullScreen:!0},m.youtubeEmbedId)}),n.jsxs("aside",{className:"vlb-rail","aria-label":"Video moments",children:[n.jsxs("div",{className:"vlb-rail__header",children:[n.jsx("span",{children:"Moments"}),n.jsx("span",{style:{color:"rgba(255,255,255,0.4)",fontWeight:600,letterSpacing:0},children:b.length})]}),n.jsx("div",{className:"vlb-rail__list",children:b.map((j,T)=>n.jsxs("button",{type:"button",className:"vlb-moment","data-active":T===x,onClick:()=>f(j),children:[n.jsx("span",{className:"vlb-moment__time",children:Wde(j.timestamp)}),n.jsx("span",{className:"vlb-moment__label",children:j.label})]},`${j.timestamp}-${T}`))})]}),e.length>1&&n.jsxs("div",{className:"vlb-footer",children:[n.jsxs("span",{children:[t+1," / ",e.length]}),n.jsxs("button",{type:"button",className:"vlb-footer__more",onClick:y,children:["More videos",n.jsx("span",{"aria-hidden":!0,
2372children:"→"})]})]})]})});return Fp.createPortal(v,document.body)},Lde="#509A79",_P="cls-styles",MP=`
2373.cls-marquee {
2374  position: relative;
2375  overflow: hidden;
2376  padding: 1.5rem 0;
2377  mask-image: linear-gradient(90deg, transparent 0%, black 6%, black 94%, transparent 100%);
2378  -webkit-mask-image: linear-gradient(90deg, transparent 0%, black 6%, black 94%, transparent 100%);
2379}
2380.cls-track {
2381  display: flex;
2382  width: max-content;
2383  align-items: center;
2384  gap: 4.5rem;
2385  padding-right: 4.5rem;
2386  animation: cls-scroll 38s linear infinite;
2387  will-change: transform;
2388}
2389.cls-marquee:hover .cls-track,
2390.cls-marquee:focus-within .cls-track {
2391  animation-play-state: paused;
2392}
2393@keyframes cls-scroll {
2394  from { transform: translateX(0); }
2395  to { transform: translateX(-50%); }
2396}
2397@media (prefers-reduced-motion: reduce) {
2398  .cls-track { animation: none; }
2399}
2400
2401.cls-item {
2402  display: inline-flex;
2403  flex-direction: column;
2404  align-items: center;
2405  gap: 10px;
2406  flex-shrink: 0;
2407}
2408/* Fixed-height slot so logos with different intrinsic heights (Comply at
2409 * 44px vs the wordmarks at ~22px) don't push their link to a different
2410 * vertical position. With a uniform slot, every "Watch video" / "Read
2411 * case study" sits on the same baseline across the marquee. */
2412.cls-logo-slot {
2413  height: 46px;
2414  display: flex;
2415  align-items: center;
2416  justify-content: center;
2417}
2418.cls-logo {
2419  width: auto;
2420  object-fit: contain;
2421  filter: brightness(0) invert(1);
2422  opacity: 0.85;
2423  transition: opacity 160ms ease;
2424}
2425.cls-item:hover .cls-logo { opacity: 1; }
2426
2427.cls-watch,
2428.cls-readcs {
2429  display: inline-flex;
2430  align-items: center;
2431  gap: 4px;
2432  font-size: 0.72rem;
2433  font-weight: 600;
2434  letter-spacing: 0.04em;
2435  color: rgba(255,255,255,0.75);
2436  background: none;
2437  border: 0;
2438  padding: 0;
2439  cursor: pointer;
2440  text-transform: none;
2441  font-family: inherit;
2442  text-decoration: none;
2443  transition: color 160ms ease;
2444}
2445.cls-watch:hover,
2446.cls-readcs:hover { color: #ffffff; }
2447.cls-watch:focus-visible,
2448.cls-readcs:focus-visible { outline: 2px solid ${Lde}; outline-offset: 3px; border-radius: 2px; }
2449.cls-watch__arrow,
2450.cls-readcs__arrow { display: inline-block; transition: transform 160ms ease; }
2451.cls-watch:hover .cls-watch__arrow,
2452.cls-readcs:hover .cls-readcs__arrow { transform: translateX(2px); }
2453
2454/* Reserve vertical space for the link slots so every item lines up
2455 * regardless of whether it has a video, a case study, both, or neither. */
2456.cls-link-slot { min-height: 14px; display: block; }
2457`;function Ude(){if(typeof document>"u")return;let e=document.getElementById(_P);e||(e=document.createElement("style"),e.id=_P,document.head.appendChild(e)),e.textContent!==MP&&(e.textContent=MP)}const Bde=({videoActions:e={},caseStudyHrefs:t={}})=>{M.useEffect(()=>{Ude()},[]);const a=[...oa,...oa];return n.jsx("section",{style:{padding:"3rem 1.5rem 3.25rem",background:"#2d6a4f"},"aria-label":"Customer logos",children:n.jsxs("div",{style:{maxWidth:1240,margin:"0 auto"},children:[n.jsx("p",{style:{margin:"0 0 1.25rem",fontSize:"0.78rem",fontWeight:700,letterSpacing:"0.14em",textTransform:"uppercase",color:"rgba(255,255,255,0.7)"},children:"Trusted by the best"}),n.jsx("div",{className:"cls-marquee",children:n.jsx("div",{className:"cls-track",children:a.map((i,r)=>{const o=r>=oa.length,l=e[i.name],d=t[i.name];let u;return l?u=n.jsxs("button",{type:"button",className:"cls-watch",onClick:l,"aria-label":`Watch ${i.name} video`,"aria-hidden":o||void 0,tabIndex:o?-1:0,children:["Watch video",n.jsx("span",{className:"cls-watch__arrow","aria-hidden":!0,children:"→"})]}):d?u=n.jsxs(J,{to:d,className:"cls-readcs","aria-label":`Read ${i.name} case study`,"aria-hidden":o||void 0,tabIndex:o?-1:0,children:["Read case study",n.jsx("span",{className:"cls-readcs__arrow","aria-hidden":!0,children:"→"})]}):u=n.jsx("span",{className:"cls-link-slot","aria-hidden":!0}),n.jsxs("div",{className:"cls-item",children:[n.jsx("div",{className:"cls-logo-slot",children:n.jsx("img",{src:i.src,alt:o?"":`${i.name} is an Upside Customer`,"aria-hidden":o||void 0,loading:"lazy",className:"cls-logo",style:{height:i.height}})}),u]},`${i.name}-${r}`)})})})]})})};function Zu(e,t){var a;return((a=oa.find(i=>i.name.toLowerCase()===e))==null?void 0:a.src)??t}const EP="csg-styles",RP=`
2458/* Design-system tokens used by the Ledger grid (from tokens.css). Scoped
2459 * to the section so they can't leak into the rest of the page. */
2460.d1-section {
2461  --signal-300: #8DBBA2;
2462  --signal-500: #509A79;
2463  --signal-600: #3F8265;
2464  --signal-700: #316851;
2465  --ledger-800: #15292C;
2466  --ledger-900: #0C1E20;
2467  /* Site card white — cells read as the same stock as every other card. */
2468  --surface-0: #FFFFFF;
2469  --surface-100: #EDF0F4;
2470  --surface-white: #fafafa;
2471  --fg-1: #0C1E20;
2472  --fg-2: #1E3539;
2473  --fg-3: #3E5C62;
2474  --fg-4: #5A777D;
2475  --border-2: rgba(12, 30, 32, 0.14);
2476  --font-primary: 'Geist', system-ui, sans-serif;
2477  --font-secondary: 'Geist', system-ui, -apple-system, 'Segoe UI', sans-serif;
2478  --font-mono: ui-monospace, 'SF Mono', 'JetBrains Mono', Menlo, monospace;
2479  --radius-pill: 999px;
2480  --ease-standard: cubic-bezier(0.2, 0, 0, 1);
2481  --dur-base: 200ms;
2482  --dur-slow: 320ms;
2483}
2484
2485/* Flat site canvas — the same surface the case-study detail pages put
2486 * their cards on, so the section reads as part of the site rather than
2487 * a separate print artifact. */
2488.d1-section {
2489  background: #fafafa;
2490  padding: 100px 40px 108px;
2491  color: var(--fg-1);
2492  font-family: var(--font-secondary);
2493  position: relative;
2494}
2495.d1-wrap { max-width: 1240px; margin: 0 auto; }
2496
2497/* ---------- Header ---------- */
2498.d1-eyebrow {
2499  display: inline-flex; align-items: center; gap: 11px;
2500  font-size: 12px; font-weight: 600; letter-spacing: 0.16em;
2501  text-transform: uppercase; color: var(--signal-700);
2502  margin: 0 0 22px; white-space: nowrap;
2503}
2504.d1-eyebrow::before {
2505  content: ""; width: 24px; height: 1px; background: var(--signal-500);
2506}
2507.d1-head {
2508  display: grid; grid-template-columns: 1.4fr 1fr; gap: 48px;
2509  align-items: end; margin-bottom: 46px;
2510}
2511.d1-title {
2512  margin: 0; font-family: var(--font-primary); font-weight: 600;
2513  font-size: clamp(30px, 3.4vw, 47px); line-height: 1.06;
2514  letter-spacing: -0.026em; color: var(--ledger-900); text-wrap: balance;
2515}
2516.d1-sub {
2517  margin: 0; font-size: 16.5px; line-height: 1.58; color: var(--fg-3);
2518  padding-bottom: 5px; text-wrap: pretty;
2519}
2520/* ---------- Grid — hairline seams revealed through a 1px gap ---------- */
2521.d1-grid {
2522  display: grid;
2523  grid-template-columns: repeat(3, 1fr);
2524  grid-auto-rows: minmax(200px, auto);
2525  gap: 1px;
2526  background: var(--border-2);
2527  border: 1px solid var(--border-2);
2528  /* Container chrome matches the rest of the site: the global corner
2529   * token (32px desktop, scaling down with the site's breakpoints) and
2530   * the soft ambient card shadow used on light containers. */
2531  border-radius: var(--_corner-radii---l, 32px);
2532  overflow: hidden;
2533  position: relative;
2534  box-shadow: 0 4px 24px #96a3b514;
2535  /* inner radius for the four corner cells: container radius minu
2535s its
2536   * 1px border, so cells nest flush and the hover ring (an inset
2537   * box-shadow, which follows border-radius) traces the rounded corner
2538   * instead of being clipped by overflow: hidden */
2539  --cell-corner: calc(var(--_corner-radii---l, 32px) - 1px);
2540}
2541
2542.d1-cell {
2543  position: relative; min-width: 0;
2544  display: flex; flex-direction: column;
2545  background: var(--surface-0);
2546  padding: 28px 30px 26px;
2547  text-decoration: none; color: inherit;
2548  transition: background var(--dur-base) var(--ease-standard), box-shadow var(--dur-base) var(--ease-standard);
2549  overflow: hidden;
2550}
2551.d1-cell:focus-visible { outline: 2px solid var(--signal-500); outline-offset: -2px; }
2552
2553/* smooth handoff for the hover state */
2554.d1-quote, .d1-headline, .d1-stat__v, .d1-stat__l, .d1-cat,
2555.d1-attr, .d1-attr b, .d1-person b, .d1-person span, .d1-logo,
2556.d1-foot, .d1-quote .mk, .d1-motif, .d1-motif path, .d1-motif circle {
2557  transition: color var(--dur-base) var(--ease-standard),
2558              fill var(--dur-base) var(--ease-standard),
2559              stroke var(--dur-base) var(--ease-standard),
2560              border-color var(--dur-base) var(--ease-standard),
2561              background var(--dur-base) var(--ease-standard),
2562              opacity var(--dur-base) var(--ease-standard),
2563              transform var(--dur-slow) var(--ease-standard);
2564}
2565
2566/* hover: the entry becomes "active" — soft signal wash, green frame & accents (CTA stays dark) */
2567.d1-cell:not(.a-cta):hover {
2568  background: #E8F2EC;
2569  box-shadow: inset 0 0 0 1.5px rgba(80,154,121,0.5);
2570}
2571.d1-cell:not(.a-cta):hover .d1-cat { color: var(--signal-700); }
2572.d1-cell:not(.a-cta):hover .d1-foot { border-top-color: rgba(80,154,121,0.4); }
2573.d1-cell:not(.a-cta):hover .d1-motif { opacity: 1; --cr-ink: var(--signal-600); }
2574.d1-cell:not(.a-cta):hover .m-graphite path,
2575.d1-cell:not(.a-cta):hover .m-graphite circle[stroke] { stroke: var(--signal-600); }
2576.d1-cell:not(.a-cta):hover .m-graphite circle:not([stroke]) { fill: var(--signal-600); }
2577
2578.a-cresta { grid-column: 1 / 3; grid-row: 1 / 3; padding: 34px 36px 30px; }
2579.a-cresta::before {
2580  content: ""; position: absolute; inset: 0; z-index: 0; pointer-events: none;
2581  background-image: radial-gradient(circle, rgba(80,154,121,0.17) 1px, transparent 1.6px);
2582  background-size: 16px 16px;
2583  -webkit-mask-image: radial-gradient(135% 135% at 100% 0%, #000 0%, rgba(0,0,0,0.3) 32%, transparent 62%);
2584          mask-image: radial-gradient(135% 135% at 100% 0%, #000 0%, rgba(0,0,0,0.3) 32%, transparent 62%);
2585  opacity: 0.6;
2586}
2587.a-comply { grid-column: 3; grid-row: 1; }
2588.a-syndio { grid-column: 3; grid-row: 2; }
2589.a-assembled { grid-column: 1; grid-row: 3; }
2590.a-graphite { grid-column: 2 / 4; grid-row: 3; }
2591.a-dscout { grid-column: 1 / 3; grid-row: 4; }
2592.a-cta { grid-column: 3; grid-row: 4; }
2593
2594/* corner cells follow the container's rounded corners */
2595.a-cresta { border-top-left-radius: var(--cell-corner); }
2596.a-comply { border-top-right-radius: var(--cell-corner); }
2597.a-dscout { border-bottom-left-radius: var(--cell-corner); }
2598.a-cta { border-bottom-right-radius: var(--cell-corner); }
2599
2600/* ---------- Cell chrome: logo + index ---------- */
2601.d1-top {
2602  display: flex; align-items: center; justify-content: space-between;
2603  gap: 16px; margin-bottom: 16px; position: relative; z-index: 2;
2604}
2605.d1-brand { display: flex; align-items: center; gap: 12px; min-width: 0; }
2606.d1-logo { display: block; width: auto; object-fit: contain; object-position: left center; }
2607.d1-logo--svg { filter: brightness(0); opacity: 0.85; height: 17px; }
2608.d1-logo--comply { filter: grayscale(1) brightness(0); opacity: 0.85; height: 30px; margin: -7px 0; }
2609
2610/* ---------- Category eyebrow (every cell — the "ledger" label) ---------- */
2611.d1-cat {
2612  font-size: 10.5px; font-weight: 600; letter-spacing: 0.13em;
2613  text-transform: uppercase; color: var(--signal-700); margin: 0 0 14px;
2614  position: relative; z-index: 2;
2615}
2616
2617/* ---------- Quote ---------- */
2618.d1-quote {
2619  /* border/padding reset: the site's global blockquote style adds a left
2620   * bar that the Ledger design doesn't have. */
2621  margin: 0; border: 0; padding: 0;
2622  font-family: var(--font-primary); font-weight: 400;
2623  line-height: 1.42; letter-spacing: -0.014em; color: var(--ledger-900);
2624  text-wrap: pretty; position: relative; z-index: 2;
2625  text-indent: -0.42em;
2626}
2627.d1-quote .mk { color: var(--signal-500); font-weight: 500; }
2628.a-syndio .d1-quote, .a-assembled .d1-quote { font-size: 17.5px; }
2629.a-cresta .d1-quote { font-size: 26px; line-height: 1.34; max-width: 21ch; }
2630.a-graphite .d1-quote { font-size: 19px; max-width: 30ch; }
2631
2632/* spacer that pushes footer down inside featured cells */
2633.d1-spacer { flex: 1 1 auto; min-height: 18px; }
2634
2635/* ---------- Footer row (featured cells): stat | person ---------- */
2636.d1-foot {
2637  display: flex; align-items: flex-end; justify-content: space-between;
2638  gap: 24px; padding-top: 18px; margin-top: 4px;
2639  border-top: 1px solid var(--border-2); position: relative; z-index: 2;
2640}
2641.d1-stat__v {
2642  font-family: var(--font-primary); font-weight: 600; line-height: 0.98;
2643  letter-spacing: -0.03em; color: var(--ledger-900);
2644  font-variant-numeric: tabular-nums;
2645}
2646.d1-stat__l { margin: 9px 0 0; font-size: 12px; line-height: 1.4; color: var(--fg-3); max-width: 30ch; }
2647.a-cresta .d1-stat__v { font-size: 33px; }
2648.a-graphite .d1-stat__v, .a-dscout .d1-stat__v { font-size: 44px; }
2649.a-comply .d1-stat__v { font-size: 43px; }
2650
2651.d1-person { display: flex; align-items: center; gap: 12px; min-width: max-content; }
2652.d1-by-row { display: flex; align-items: center; gap: 11px; margin: 16px 0 0; position: relative; z-index: 2; }
2653.d1-by { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
2654.d1-by b { font-size: 13px; font-weight: 600; color: var(--ledger-900); letter-spacing: -0.005em; }
2655.d1-by span { font-size: 11.5px; line-height: 1.35; color: var(--fg-4); }
2656.d1-av {
2657  width: 40px; height: 40px; border-radius: 50%; object-fit: cover; object-position: center top;
2658  flex: none; background: var(--surface-100); box-shadow: 0 0 0 1px var(--border-2);
2659  transition: box-shadow var(--dur-base) var(--ease-standard);
2660  /* one editorial grade across six different photo sources */
2661  filter: saturate(0.82) contrast(1.03);
2662}
2663.d1-av--sm { width: 36px; height: 36px; }
2664.a-cresta .d1-av { width: 46px; height: 46px; }
2665.d1-cell:not(.a-cta):hover .d1-av { box-shadow: 0 0 0 1px rgba(80,154,121,0.55); }
2666
2667/* attribution for plain quote / stat cells */
2668.d1-attr { margin: 16px 0 0; font-size: 12px; line-height: 1.45; color: var(--fg-3); position: relative; z-index: 2; }
2669.d1-attr b { font-weight: 600; color: var(--ledger-900); }
2670
2671.d1-headline {
2672  margin: 0; font-family: var(--font-primary); font-weight: 500;
2673  font-size: 21px; line-height: 1.3; letter-spacing: -0.015em;
2674  color: var(--ledger-900); max-width: 21ch; text-wrap: pretty;
2675  position: relative; z-index: 2;
2676}
2677
2678/* ---------- Dark closing cell — opens the demo form ---------- */
2679.d1-cta__logo { display: block; height: 22px; width: auto; color: var(--surface-white); }
2680.a-cta {
2681  background: var(--ledger-900); justify-content: space-between; cursor: pointer;
2682  /* button reset: same look as before, now a real <button> */
2683  appearance: none; border: 0; font: inherit; text-align: left;
2684}
2685.d1-cta__lead {
2686  font-family: var(--font-primary); font-weight: 500; font-size: 21px;
2687  line-height: 1.26; letter-spacing: -0.015em; color: var(--surface-white);
2688  margin: 0; max-width: 13ch; position: relative; z-index: 2;
2689}
2690.d1-cta__link {
2691  display: inline-flex; align-items: center; gap: 9px;
2692  font-size: 13px; font-weight: 600; color: var(--signal-300);
2693  letter-spacing: 0.005em; position: relative; z-index: 2;
2694}
2695
2696/* ---------- Schematic motifs ---------- */
2697.d1-motif { position: absolute; pointer-events: none; z-index: 1; --cr-ink: var(--signal-500); }
2698.m-cresta { right: 30px; bottom: 152px; width: 192px; opacity: 0.9; }
2699.m-graphite { right: 28px; bottom: 122px; width: 96px; opacity: 0.9; }
2700.m-dscout { right: 30px; bottom: 120px; width: 138px; opacity: 0.9; }
2701.m-cta { right: 24px; top: 26px; width: 88px; opacity: 0.6; }
2702.a-cresta:hover .m-cresta { transform: translateX(5px); }
2703.a-graphite:hover .m-graphite { transform: rotate(21deg); }
2704.a-dscout:hover .m-dscout { transform: translate(4px, -4px); }
2705
2706/* hover completion: the story arrives — Cresta's resolved signal lands
2707 * on a node, Dscout's result node pops. Motion-gated below. */
2708.cr-tip, .ds-tip { transform-box: fill-box; transform-origin: center; }
2709.cr-tip { opacity: 0; }
2710
2711/* the detail people only notice when they notice it */
2712.d1-section ::selection { background: rgba(80, 154, 121, 0.22); }
2713
2714/* ---------- Calm entrance: visible by default, gentle one-shot reveal ---------- */
2715@media (prefers-reduced-motion: no-preference) {
2716  .d1-grid.is-armed .d1-cell { animation: d1-rise 0.6s var(--ease-standard) both; animation-delay: calc(var(--d, 0) * 55ms); }
2717  /* schematics draw on once their card is in view */
2718  .d1-grid.is-armed .cr-draw { animation: d1-draw 0.95s var(--ease-standard) both; animation-delay: 0.18s; }
2719  .d1-grid.is-armed .ds-draw { animation: d1-draw 0.95s var(--ease-standard) both; animation-delay: calc(0.12s + var(--d, 0) * 55ms); }
2720  .d1-grid.is-armed .m-cresta circle:not(.cr-tip) { animation: d1-fade 0.5s var(--ease-standard) both; animation-delay: 0.9s; }
2721  .d1-grid.is-armed .m-dscout circle { animation: d1-fade 0.5s var(--ease-standard) both; animation-delay: calc(0.85s + var(--d, 0) * 55ms); }
2722  .d1-grid.is-armed .m-graphite { animation: d1-fade 0.7s var(--ease-standard) both; animation-delay: calc(0.2s + var(--d, 0) * 55ms); }
2723  /* hover completion pulses */
2724  .a-cresta:hover .cr-tip { animation: d1-ping 0.45s var(--ease-standard) both; }
2725  .a-dscout:hover .ds-tip { animation: d1-pop 0.45s var(--ease-standard) both; }
2726}
2727@keyframes d1-ping {
2728  0%   { opacity: 0; transform: scale(0.3); }
2729  60%  { opacity: 1; transform: scale(1.35); }
2730  100% { opacity: 1; transform: scale(1); }
2731}
2732@keyframes d1-pop {
2733  0%   { transform: scale(1); }
2734  50%  { transform: scale(1.45); }
2735  100% { transform: scale(1); }
2736}
2737@keyframes d1-rise {
2738  from { opacity: 0; transform: translateY(10px); }
2739  to   { opacity: 1; transform: none; }
2740}
2741@keyframes d1-draw {
2742  from { stroke-dasharray: 1; stroke-dashoffset: 1; }
2743  to   { stroke-dasharray: 1; stroke-dashoffset: 0; }
2744}
2745@keyframes d1-fade { from { opacity: 0; } to { opacity: 1; } }
2746
2747@media (max-width: 820px) {
2748  .d1-head { grid-template-columns: 1fr; align-items: start; gap: 14px; }
2749  .d1-grid { grid-template-columns: 1fr 1fr; }
2750  .a-cresta { grid-column: 1 / 3; grid-row: 1; }
2751  .a-comply { grid-column: 1; grid-row: 2; }
2752  .a-syndio { grid-column: 2; grid-row: 2; }
2753  .a-graphite { grid-column: 1 / 3; grid-row: 3; }
2754  .a-assembled { grid-column: 1 / 3; grid-row: 4; }
2755  .a-dscout { grid-column: 1 / 3; grid-row: 5; }
2756  .a-cta { grid-column: 1 / 3; grid-row: 6; }
2757  .m-cresta { display: none; }
2758  /* corner cells move: Cresta and the CTA span full rows top and bottom */
2759  .a-cresta { border-top-right-radius: var(--cell-corner); }
2760  .a-cta { border-bottom-left-radius: var(--cell-corner); }
2761  .a-comply { border-top-right-radius: 0; }
2762  .a-dscout { border-bottom-left-radius: 0; }
2763}
2764@media (max-width: 540px) {
2765  .d1-section { padding: 64px 18px 72px; }
2766  .d1-grid { grid-template-columns: 1fr; }
2767  .a-cresta, .a-comply, .a-syndio, .a-assembled, .a-graphite, .a-dscout, .a-cta {
2768    grid-column: 1; grid-row: auto;
2769  }
2770  .d1-foot { flex-direction: column; align-items: flex-start; gap: 14px; }
2771  .d1-person { text-align: left; }
2772}
2773`;function qde(){if(typeof document>"u")return;let e=document.getElementById(EP);e||(e=document.createElement("style"),e.id=EP,document.head.appendChild(e)),e.textContent!==RP&&(e.textContent=RP)}const NP="M6 28 L7 25.34 L8 22.88 L9 20.73 L10 18.96 L11 17.65 L12 16.83 L13 16.52 L14 16.72 L15 17.41 L16 18.53 L17 20.02 L18 21.81 L19 23.8 L20 25.89 L21 28 L22 30.03 L23 31.88 L24 33.5 L25 34.81 L26 35.77 L27 36.35 L28 36.55 L29 36.36 L30 35.82 L31 34.96 L32 33.84 L33 32.51 L34 31.05 L35 29.52 L36 28 L37 26.55 L38 25.24 L39 24.12 L40 23.22 L41 22.58 L42 22.21 L43 22.12 L44 22.29 L45 22.69 L46 23.31 L47 24.1 L48 25.01 L49 26 L50 27.01 L51 28 L52 28.93 L53 29.75 L54 30.44 L55 30.97 L56 31.33 L57 31.51 L58 31.53 L59 31.38 L60 31.1 L61 30.7 L62 30.21 L63 29.67 L64 29.1 L65 28.53 L66 28 L67 27.52 L68 27.11 L69 26.79 L70 26.57 L71 26.44 L72 26.4 L73 26.44 L74 26.55 L75 26.72 L76 26.93 L77 27.16 L78 27.4 L79 27.62 L80 27.83 L81 28 L82 28.13 L83 28.22 L84 28.27 L85 28.29 L86 28.27 L87 28.23 L88 28.18 L166 28 M156.5 21.5 L166 28 L156.5 34.5",Ui=e=>({stopColor:"var(--cr-ink, #509A79)",stopOpacity:e}),$de=()=>n.jsxs("svg",{className:"d1-motif m-cresta",viewBox:"0 0 190 56",fill:"none","aria-hidden":"true",children:[n.jsxs("defs",{children:[n.jsxs("linearGradient",{id:"crThin",x1:"6",y1:"0",x2:"166",y2:"0",gradientUnits:"userSpaceOnUse",children:[n.jsx("stop",{offset:"0",style:Ui(.14)}),n.jsx("stop",{offset:"0.4",style:Ui(.34)}),n.jsx("stop",{offset:"0.72",style:Ui(.82)}),n.jsx("stop",{offset:"1",style:Ui(1)})]}),n.jsxs("linearGradient",{id:"crThick",x1:"6",y1:"0",x2:"166",y2:"0",gradientUnits:"userSpaceOnUse",children:[n.jsx("stop",{offset:"0",style:Ui(0)}),n.jsx("stop",{offset:"0.42",style:Ui(0)}),n.jsx("stop",{offset:"0.72",style:Ui(.5)}),n.jsx("stop",{offset:"1",style:Ui(1)})]})]}),n.jsx("circle",{cx:"6",cy:"28",r:"2.2",fill:"none",style:{stroke:"var(--cr-ink, #509A79)"},strokeWidth:"1.3",opacity:"0.5"}
2773),n.jsx("path",{d:NP,stroke:"url(#crThick)",strokeWidth:"2.7",pathLength:1,className:"cr-draw",strokeLinecap:"round",strokeLinejoin:"round"}),n.jsx("path",{d:NP,stroke:"url(#crThin)",strokeWidth:"1.35",pathLength:1,className:"cr-draw",strokeLinecap:"round",strokeLinejoin:"round"}),n.jsx("circle",{className:"cr-tip",cx:"166",cy:"28",r:"3.2",style:{fill:"var(--cr-ink, #509A79)"}})]}),Fde=()=>n.jsxs("svg",{className:"d1-motif m-graphite",viewBox:"0 0 100 100",fill:"none","aria-hidden":"true",children:[n.jsx("path",{d:"M79.54 55.21 A30 30 0 0 1 45.82 79.71",stroke:"#509A79",strokeWidth:"1.6",strokeLinecap:"round",opacity:"0.55"}),n.jsx("path",{d:"M30.72 72.98 A30 30 0 0 1 26.36 31.53",stroke:"#509A79",strokeWidth:"1.6",strokeLinecap:"round",opacity:"0.55"}),n.jsx("path",{d:"M39.74 21.81 A30 30 0 0 1 77.82 38.76",stroke:"#509A79",strokeWidth:"1.6",strokeLinecap:"round",opacity:"0.55"}),n.jsx("path",{d:"M51.63 83.62 L45.82 79.71 L52.48 77.54",stroke:"#509A79",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",opacity:"0.95"}),n.jsx("path",{d:"M20.07 34.6 L26.36 31.53 L24.9 38.38",stroke:"#509A79",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",opacity:"0.95"}),n.jsx("path",{d:"M78.3 31.78 L77.82 38.76 L72.61 34.08",stroke:"#509A79",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round",opacity:"0.95"}),n.jsx("circle",{cx:"50",cy:"50",r:"8",fill:"none",stroke:"#509A79",strokeWidth:"1.5",opacity:"0.45"}),n.jsx("circle",{cx:"50",cy:"50",r:"3",fill:"#509A79"})]}),Gde=()=>n.jsxs("svg",{className:"d1-motif m-dscout",viewBox:"0 0 150 66",fill:"none","aria-hidden":"true",children:[n.jsx("defs",{children:n.jsxs("linearGradient",{id:"dsRamp",x1:"16",y1:"54",x2:"116",y2:"10",gradientUnits:"userSpaceOnUse",children:[n.jsx("stop",{offset:"0",style:Ui(.2)}),n.jsx("stop",{offset:"0.45",style:Ui(.45)}),n.jsx("stop",{offset:"0.78",style:Ui(.85)}),n.jsx("stop",{offset:"1",style:Ui(1)})]})}),n.jsx("path",{d:"M8 56 H142",style:{stroke:"var(--cr-ink, #509A79)"},strokeWidth:"1.4",strokeLinecap:"round",opacity:"0.22"}),n.jsx("path",{d:"M16 54 H41 V43 H66 V32 H91 V21 H116 V10",stroke:"url(#dsRamp)",strokeWidth:"1.9",pathLength:1,className:"ds-draw",strokeLinecap:"round",strokeLinejoin:"round"}),n.jsx("circle",{cx:"41",cy:"43",r:"2",fill:"none",stroke:"url(#dsRamp)",strokeWidth:"1.5"}),n.jsx("circle",{cx:"66",cy:"32",r:"2",fill:"none",stroke:"url(#dsRamp)",strokeWidth:"1.5"}),n.jsx("circle",{cx:"91",cy:"21",r:"2",fill:"none",stroke:"url(#dsRamp)",strokeWidth:"1.5"}),n.jsx("circle",{className:"ds-tip",cx:"116",cy:"10",r:"3.1",style:{fill:"var(--cr-ink, #509A79)"}})]}),Hde=()=>n.jsxs("svg",{className:"d1-motif m-cta",viewBox:"0 0 100 100",fill:"none","aria-hidden":"true",children:[n.jsxs("g",{stroke:"#8DBBA2",strokeWidth:"1.4",children:[n.jsx("line",{x1:"22",y1:"30",x2:"62",y2:"20"}),n.jsx("line",{x1:"62",y1:"20",x2:"78",y2:"54"}),n.jsx("line",{x1:"78",y1:"54",x2:"40",y2:"70"}),n.jsx("line",{x1:"40",y1:"70",x2:"22",y2:"30"}),n.jsx("line",{x1:"62",y1:"20",x2:"40",y2:"70"})]}),n.jsxs("g",{fill:"#8DBBA2",children:[n.jsx("circle",{cx:"22",cy:"30",r:"3.2"}),n.jsx("circle",{cx:"62",cy:"20",r:"3.2"}),n.jsx("circle",{cx:"78",cy:"54",r:"3.2"}),n.jsx("circle",{cx:"40",cy:"70",r:"3.2"})]})]}),Lv=({children:e})=>n.jsxs("blockquote",{className:"d1-quote",children:[n.jsx("span",{className:"mk",children:"“"}),e,n.jsx("span",{className:"mk",children:"”"})]}),Ju=({img:e,name:t,title:a,small:i,row:r})=>n.jsxs("div",{className:r?"d1-by-row":"d1-person",children:[n.jsx("img",{className:`d1-av${i?" d1-av--sm":""}`,src:e,alt:t,loading:"lazy"}),n.jsxs("div",{className:"d1-by",children:[n.jsx("b",{children:t}),n.jsx("span",{children:a})]})]}),Yde=({items:e})=>{typeof document<"u"&&qde();const t=M.useRef(null);M.useEffect(()=>{const i=t.current;if(!i||window.matchMedia("(prefers-reduced-motion: reduce)").matches||!("IntersectionObserver"in window))return;const r=new IntersectionObserver((o,l)=>{o.forEach(d=>{d.isIntersecting&&(i.classList.add("is-armed"),l.disconnect())})},{threshold:.04});return r.observe(i),()=>r.disconnect()},[]);const a=i=>{const r=e.find(o=>o.slug.startsWith(i));return r?`/case-studies/${r.slug}`:"/customers"};return n.jsx("section",{id:"customer-case-studies",className:"d1-section",children:n.jsxs("div",{className:"d1-wrap",children:[n.jsx("p",{className:"d1-eyebrow",children:"Customer stories"}),n.jsxs("div",{className:"d1-head",children:[n.jsx("h2",{className:"d1-title",children:"These teams turn messy GTM data into compounding pipeline."}),n.jsx("p",{className:"d1-sub",children:"See how operators build, iterate, and scale revenue with Upside."})]}),n.jsxs("div",{className:"d1-grid",ref:t,children:[n.jsxs(J,{className:"d1-cell a-cresta",to:a("cresta"),style:{"--d":0},children:[n.jsx("div",{className:"d1-top",children:n.jsx("div",{className:"d1-brand",children:n.jsx("img",{className:"d1-logo d1-logo--svg",src:Zu("cresta","/images/cresta-black.svg"),alt:"Cresta is an Upside Customer",style:{height:22}})})}),n.jsx("p",{className:"d1-cat",children:"Deep research · Enterprise sales"}),n.jsx(Lv,{children:"Real life is messy. Enterprise cycles are messy. Upside reflects that messy reality, which is rare and was impossible before."}),n.jsx("div",{className:"d1-spacer"}),n.jsx($de,{}),n.jsxs("div",{className:"d1-foot",children:[n.jsxs("div",{className:"d1-stat",children:[n.jsx("div",{className:"d1-stat__v",children:"Weeks → 1 day"}),n.jsx("p",{className:"d1-stat__l",children:"Manual transcript review collapsed into deep research"})]}),n.jsx(Ju,{img:"/images/stephen-daniels.jpg",name:"Stephen Daniels",title:"VP, GTM & Strategic Operations"})]})]}),n.jsxs(J,{className:"d1-cell a-comply",to:a("comply"),style:{"--d":1},children:[n.jsx("div",{className:"d1-top",children:n.jsx("div",{className:"d1-brand",children:n.jsx("img",{className:"d1-logo d1-logo--comply",src:Zu("comply","/images/comply-logo.png"),alt:"Comply"})})}),n.jsx("p",{className:"d1-cat",children:"Self-serve attribution"}),n.jsxs("div",{className:"d1-stat",children:[n.jsx("div",{className:"d1-stat__v",children:"27.5M+"}),n.jsx("p",{className:"d1-stat__l",children:"Touchpoints unified into one trusted ledger"})]}),n.jsx(Ju,{img:"/images/carl-gunlefinger.png",name:"Carl Gunlefinger",title:"Sr. Marketing Operations Manager",small:!0,row:!0})]}),n.jsxs(J,{className:"d1-cell a-syndio",to:a("syndio"),style:{"--d":2},children:[n.jsx("div",{className:"d1-top",children:n.jsx("div",{className:"d1-brand",children:n.jsx("img",{className:"d1-logo d1-logo--svg",src:Zu("syndio"),alt:"Syndio is an Upside Customer",style:{height:23}})})}),n.jsx("p",{className:"d1-cat",children:"Self-serve reporting"}),n.jsx(Lv,{children:"Self-serve campaign performance numbers, without MOPS tickets."}),n.jsx(Ju,{img:"/images/amy-wellersdick.jpg",name:"Amy Wellersdick",title:"Director of Marketing Ops",small:!0,row:!0})]}),n.jsxs(J,{className:"d1-cell a-assembled",to:a("assembled"),style:{"--d":3},children:[n.jsx("div",{className:"d1-top",children:n.jsx("div",{className:"d1-brand",children:n.jsx("img",{className:"d1-logo d1-logo--svg",src:Zu("assembled","/images/assembled-logo-black.png"),alt:"Assembled 
2773is an Upside Customer",style:{height:21}})})}),n.jsx("p",{className:"d1-cat",children:"AI-driven discovery"}),n.jsx(Lv,{children:"As AI-driven discovery picked up, Upside helped us see it on the back end. Being able to track that was really exciting."}),n.jsx(Ju,{img:"/images/lindsey-marymont.png",name:"Lindsey Marymont",title:"Head of Demand Generation",small:!0,row:!0})]}),n.jsxs(J,{className:"d1-cell a-graphite",to:a("graphite"),style:{"--d":4},children:[n.jsx("div",{className:"d1-top",children:n.jsx("div",{className:"d1-brand",children:n.jsx("img",{className:"d1-logo d1-logo--svg",src:Zu("graphite","/images/graphite_logo_upside_customer.svg"),alt:"Graphite is an Upside Customer",style:{height:18}})})}),n.jsx("p",{className:"d1-cat",children:"Events flywheel"}),n.jsx(Lv,{children:"We stopped doing events because we had no data they were impactful. With Upside, events are a massive flywheel for the business."}),n.jsx(Fde,{}),n.jsx("div",{className:"d1-spacer"}),n.jsxs("div",{className:"d1-foot",children:[n.jsxs("div",{className:"d1-stat",children:[n.jsx("div",{className:"d1-stat__v",children:"$10M+"}),n.jsx("p",{className:"d1-stat__l",children:"Hidden referral revenue uncovered"})]}),n.jsx(Ju,{img:"/images/ethan-smith.jpg",name:"Ethan Smith",title:"CEO & Founder"})]})]}),n.jsxs(J,{className:"d1-cell a-dscout",to:a("dscout"),style:{"--d":5},children:[n.jsx("div",{className:"d1-top",children:n.jsx("div",{className:"d1-brand",children:n.jsx("img",{className:"d1-logo d1-logo--svg",src:Zu("dscout"),alt:"dscout is an Upside Customer",style:{height:20}})})}),n.jsx("p",{className:"d1-cat",children:"Onboarding & reporting"}),n.jsx("p",{className:"d1-headline",children:"How Dscout drives confident growth on unified GTM insight."}),n.jsx(Gde,{}),n.jsx("div",{className:"d1-spacer"}),n.jsxs("div",{className:"d1-foot",children:[n.jsxs("div",{className:"d1-stat",children:[n.jsx("div",{className:"d1-stat__v",children:"100s of hrs"}),n.jsx("p",{className:"d1-stat__l",children:"Saved on onboarding and reporting"})]}),n.jsx(Ju,{img:"/images/kate-johnson.jpg",name:"Kate Johnson",title:"Chief Marketing Officer"})]})]}),n.jsxs(J,{to:Wt,className:"d1-cell a-cta",style:{"--d":6},children:[n.jsx("div",{className:"d1-top",children:n.jsx(au,{className:"d1-cta__logo"})}),n.jsx(Hde,{}),n.jsx("div",{className:"d1-spacer"}),n.jsx("p",{className:"d1-cta__lead",children:"See it for yourself."}),n.jsx("span",{className:"d1-cta__link",children:"Request a demo"})]})]})]})})},Vde=()=>{const e=M.useMemo(()=>Y0.filter(l=>!l.hidden),[]),t=M.useMemo(()=>e.filter(l=>{var d;return l.youtubeEmbedId&&(((d=l.videoSnippets)==null?void 0:d.length)??0)>0}),[e]),[a,i]=M.useState(null),r=M.useMemo(()=>{const l={};return t.forEach((d,u)=>{const h=d.slug.split("-")[0].toLowerCase(),m=oa.find(f=>f.name.toLowerCase()===h);m&&(l[m.name]=()=>i(u))}),l},[t]),o=M.useMemo(()=>{const l={};return e.forEach(d=>{const u=d.slug.split("-")[0].toLowerCase(),h=oa.find(m=>m.name.toLowerCase()===u);h&&(l[h.name]=`/case-studies/${d.slug}`)}),l},[e]);return n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"Customers",description:"See how modern B2B teams use Upside to uncover hidden pipeline, jump to the moments that won the deal, and turn messy go-to-market data into compounding revenue.",ogImage:"/images/og-customers.png",canonicalUrl:"https://upside.tech/customers"}),n.jsxs("div",{style:{background:"#ffffff",color:"#1b1f1c"},children:[n.jsx(xde,{}),n.jsx(Ede,{items:t,onOpen:i}),n.jsx(Bde,{videoActions:r,caseStudyHrefs:o}),n.jsx(Yde,{items:e})]}),a!=null&&n.jsx(zde,{items:t,index:a,onIndexChange:i,onClose:()=>i(null)})]})},Kde="/og/glossary-hub.png";function Xde(e){return`/og/glossary/${e}.png`}const t1=[{slug:"b2b-marketing-attribution",term:"B2B Marketing Attribution",cluster:"attribution-strategy",seoTitle:"What Is B2B Marketing Attribution?",definition:"The practice of connecting B2B marketing activities to pipeline, revenue, and deal velocity — across buying committees, long sales cycles, and channels your analytics only partially capture."},{slug:"revenue-attribution",term:"Revenue Attribution",cluster:"attribution-strategy",seoTitle:"What Is Revenue Attribution?",definition:"The practice of assigning credit for pipeline and closed-won revenue to the touchpoints that influenced a deal. It looks beyond first/last touch for the primary deal contact and considers the full buying journey across marketing, sales, and partners."},{slug:"pipeline-attribution",term:"Pipeline Attribution",cluster:"attribution-strategy",seoTitle:"What Is Pipeline Attribution?",definition:"A measurement approach that connects marketing and GTM touchpoints to open opportunities — crediting what created or influenced pipeline, not just what happened immediately before a deal closed."},{slug:"go-to-market-attribution",term:"Go-to-Market Attribution",cluster:"attribution-strategy",seoTitle:"What Is Go-to-Market Attribution?",definition:"A cross-functional attribution view that assigns credit across marketing, sales, partnerships, and customer success touchpoints that influence revenue outcomes — not just marketing-sourced leads."},{slug:"closed-deal-attribution",term:"Closed-Deal Attribution",cluster:"attribution-strategy",seoTitle:"What Is Closed-Deal Attribution?",definition:"Attribution measured at the closed-won (or closed-lost) event — distributing credit for booked revenue across the touchpoints that preceded the signature, rather than stopping at MQL or opportunity creation."},{slug:"forensic-attribution",term:"Forensic Attribution",cluster:"attribution-strategy",definition:"A methodology that reconstructs the full customer journey from raw signals across multiple data sources, rather than relying solely on pre-captured CRM data. Forensic attribution infers missing touchpoints and builds a complete picture of what actually influenced a deal."},{slug:"dark-funnel",term:"Dark Funnel",cluster:"attribution-strategy",seoTitle:"What Is the Dark Funnel?",definition:"The collection of buyer activities and influences that happen outside the reach of traditional tracking and analytics tools. This includes word-of-mouth referrals, private community discussions, podcast mentions, peer conversations, and other channels where intent is formed but never captured in your CRM."},{slug:"self-reported-attribution",term:"Self-Reported Attribution",cluster:"attribution-strategy",definition:"A qualitative attribution method where prospects are asked directly how they heard about your company, typically through a form field like 'How did you hear about us?' It captures signals from the dark funnel that system-based tracking cannot see, but is subject to recall bias and inconsistency."},{slug:"zero-sum-attribution",term:"Zero-Sum Attribution",cluster:"attribution-strategy",definition:"An attribution approach where every dollar of pipeline or revenue must be assigned to exactly one source or channel, so that all credit 'squares' to the total. While intuitive, zero-sum models force teams into competition over credit and often misrepresent how B2B deals actually close."},{slug:"campaign-influence",term:"Campaign Influence",cluster:"attribution-strategy",definition:"A measurement framework that connects marketing campaigns to the pipeline and revenue they helped generate, regardless of whether the campaign was the original source of the lead. Campaign influence models track which campaign members later appeared on opportunities."},{slug:"sourced-pipeline",term:"Sourced Pipeline",cluster:"attribution-strategy",definition:"Pipeline that is directly attributed to a specific team, channel, or campaign as the originating source of the opportunity. In most B2B organizations, sourced pipeline is distinguished from influenced pipeline."},{slug:"influence-window",term:"Influence Window",cluster:"attribution-strategy",definition:"The configurable time period used to determine whether a marketing or sales touchpoint is considered relevant to a given opportunity. Also called a lookback window, this parameter is one of the most consequential settings in any attribution system."},{slug:"multi-touch-attribution",term:"Multi-Touch Attribution",cluster:"attribution-models",seoTitle:"What Is Multi-Touch Attribution?",definition:"An attribution methodology that distributes credit for pipeline or revenue across multiple touchpoints in the buyer journey, rather than assigning it all to a single interaction. Models range from simple rule-based approaches to advanced AI-driven systems."},{slug:"first-touch-attribution",term:"First-Touch Attribution",cluster:"attribution-models",definition:"An attribution model that assigns 100% of the credit for a deal or opportunity to the very first interaction a prospect has with your brand. Simple to implement but often misleading in complex B2B sales cycles."},{slug:"last-touch-attribution",term:"Last-Touch Attribution",cluster:"attribution-models",seoTitle:"Last-Touch Attribution: Definition & Limits",definition:"An attribution model that assigns 100% of the credit for a deal or conversion event to the final interaction before a conversion event. Like first-touch, it oversimplifies multi-stakeholder B2B journeys."},{slug:"u-shaped-attribution-model",term:"U-Shaped Attribution Model",cluster:"attribution-models",seoTitle:"U-Shaped Attribution Model (Position-Based)",definition:"A position-based multi-touch model that gives the greatest credit to the first and last touchpoints in a journey (typically 40% each), with the remaining credit split evenly across middle interactions."},{slug:"w-shaped-attribution-model",term:"W-Shaped Attribution Model",cluster:"attribution-models",seoTitle:"W
2773-Shaped Attribution Model for B2B",definition:"A multi-touch attribution model that assigns heavy credit to three funnel milestones — first touch, lead creation, and opportunity creation — with lighter credit spread across nurturing touchpoints in between."},{slug:"linear-attribution",term:"Linear Attribution",cluster:"attribution-models",seoTitle:"Linear Attribution Model Explained",definition:"A multi-touch attribution model that distributes credit equally across every recorded touchpoint in the buyer journey. Simple and transparent, but treats a brief page view the same as a high-intent executive meeting."},{slug:"impact-weighted-attribution-model",term:"Impact-Weighted Attribution Model",cluster:"attribution-models",seoTitle:"Weighted Attribution Model for Marketing",definition:"An attribution approach that assigns credit to touchpoints based on their actual impact on deal outcomes, rather than using arbitrary rules like first-touch or last-touch. Impact-weighted models use statistical methods to determine which activities truly moved the needle."},{slug:"account-story",term:"Account Story",cluster:"buyer-journey",definition:"A chronological, context-rich narrative of every interaction and touchpoint associated with an account, from first engagement through close (and beyond). Unlike a simple activity log, an account story connects the dots across teams and tools."},{slug:"account-journey",term:"Account Journey",cluster:"buyer-journey",seoTitle:"What Is an Account Journey in B2B?",definition:"The account-level path a buying committee takes from initial problem awareness through evaluation and purchase — including touchpoints from every stakeholder, not just the contact who filled out a form."},{slug:"buying-group",term:"Buying Group",cluster:"buyer-journey",definition:"The collection of individuals at a target account who are involved in a purchasing decision. In B2B, deals are rarely driven by a single person — buying groups typically include champions, influencers, decision-makers, and gatekeepers across multiple departments."},{slug:"touchpoint",term:"Touchpoint",cluster:"buyer-journey",definition:"Any interaction between a prospect/customer and your organization — including website visits, emails, meetings, events, content downloads, ads, and more. Comprehensive touchpoint recovery is essential for accurate attribution."},{slug:"identity-resolution",term:"Identity Resolution",cluster:"buyer-journey",seoTitle:"What Is Identity Resolution?",definition:"The process of matching and merging fragmented person records across multiple GTM systems into a single, unified profile — so the same human isn't counted as three different leads across Salesforce, HubSpot, and Gong."},{slug:"cac-customer-acquisition-cost-for-b2b",term:"CAC (Customer Acquisition Cost)",cluster:"gtm-metrics",definition:"The total cost of acquiring a new customer, including all sales and marketing expenses. In B2B, CAC calculations must account for long sales cycles, multi-touch attribution, and the involvement of multiple teams."},{slug:"cac-payback-period",term:"CAC Payback Period",cluster:"gtm-metrics",definition:"The number of months it takes for a customer to generate enough gross margin to cover the cost of acquiring them. This metric is critical for understanding unit economics and making informed investment decisions."},{slug:"pipeline-velocity",term:"Pipeline Velocity",cluster:"gtm-metrics",definition:"A composite metric that measures how quickly qualified opportunities move through the sales pipeline and convert to revenue. It factors in opportunity count, average deal size, win rate, and sales cycle length."},{slug:"miniapp",term:"Miniapp",cluster:"platform-gtm-engineering",seoTitle:"What Is a Miniapp?",definition:"A small, self-contained application created by an AI coding agent from a natural-language prompt, delivered as a standalone file or hosted on a platform and often wired to live data sources."}];function Qde(e){const t=e.seoTitle??e.term;return t.includes("GTM Glossary")?t:`${t} | GTM Glossary`}const NG=[{id:"attribution-models",title:"Attribution models",description:"Rule-based frameworks for distributing credit across touchpoints — from single-touch to multi-touch and impact-weighted approaches."},{id:"attribution-strategy",title:"Attribution strategy",description:"How teams connect marketing and GTM activity to pipeline, revenue, and buying behavior — including what systems can and cannot see."},{id:"buyer-journey",title:"Buyer journey & accounts",description:"Account-level narratives, buying groups, and the touchpoints that shape complex B2B decisions."},{id:"gtm-metrics",title:"GTM metrics",description:"Core revenue and efficie
2773ncy metrics that attribution and pipeline reporting depend on."},{id:"platform-gtm-engineering",title:"Platform & GTM engineering",description:"How GTM teams turn analysis into durable tools: built on live data, versioned, and shared across the org."}],Zde={"b2b-marketing-attribution":["revenue-attribution","multi-touch-attribution","buying-group","dark-funnel","pipeline-attribution"],"revenue-attribution":["b2b-marketing-attribution","multi-touch-attribution","closed-deal-attribution","pipeline-attribution","forensic-attribution"],"multi-touch-attribution":["u-shaped-attribution-model","w-shaped-attribution-model","linear-attribution","first-touch-attribution","last-touch-attribution"],"account-story":["account-journey","touchpoint","buying-group","campaign-influence"],"account-journey":["account-story","buying-group","touchpoint","dark-funnel"],"identity-resolution":["buying-group","touchpoint","account-story","revenue-attribution"],"pipeline-attribution":["revenue-attribution","sourced-pipeline","campaign-influence","closed-deal-attribution"],"go-to-market-attribution":["revenue-attribution","b2b-marketing-attribution","multi-touch-attribution","pipeline-attribution"],"closed-deal-attribution":["revenue-attribution","pipeline-attribution","last-touch-attribution","multi-touch-attribution"],"impact-weighted-attribution-model":["multi-touch-attribution","forensic-attribution","zero-sum-attribution","revenue-attribution"],"forensic-attribution":["impact-weighted-attribution-model","dark-funnel","self-reported-attribution","revenue-attribution"],"campaign-influence":["sourced-pipeline","influence-window","pipeline-attribution","account-story"],"sourced-pipeline":["campaign-influence","pipeline-attribution","influence-window","revenue-attribution"],miniapp:["account-story","revenue-attribution","forensic-attribution","pipeline-attribution"]},Jde=()=>new Map(t1.map(e=>[e.slug,e]));function eue(e){return NG.find(t=>t.id===e)}function OG(e){return t1.filter(t=>t.cluster===e)}function tue(e,t=4){const a=Jde(),i=Zde[e];if(i!=null&&i.length)return i.map(o=>a.get(o)).filter(o=>!!o).slice(0,t);const r=a.get(e);return r?t1.filter(o=>o.cluster===r.cluster&&o.slug!==e).slice(0,t):[]}const nue=()=>n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"GTM Glossary | B2B Attribution & Go-to-Market Terms",description:"Clear definitions for B2B marketing attribution, multi-touch models, buying groups, pipeline metrics, platform concepts like miniapps, and the GTM vocabulary that shapes revenue reporting.",ogImage:Kde,canonicalUrl:"https://upside.tech/glossary"}),n.jsx(Hr,{eyebrow:"Glossary",title:"GTM Glossary",description:"Practical definitions for attribution models, buyer journey concepts, platform tools like miniapps, and the metrics modern GTM teams use to connect activity to revenue."}),n.jsx("div",{className:"container",children:n.jsx("div",{className:"content",children:n.jsx("section",{className:"section",children:NG.map(e=>{const t=OG(e.id);return n.jsxs("div",{className:"glossary-cluster",id:e.id,children:[n.jsxs("div",{className:"glossary-cluster__header",children:[n.jsx("h2",{className:"glossary-cluster__title",children:e.title}),n.jsx("p",{className:"glossary-cluster__description",children:e.description})]}),n.jsx("div",{className:"glossary-grid",children:t.map(a=>n.jsxs(J,{to:`/glossary/${a.slug}`,className:"glossary-card",children:[n.jsx("h3",{className:"glossary-card__title",children:a.term}),n.jsx("p",{className:"glossary-card__definition",children:a.definition}),n.jsx("span",{className:"glossary-card__link",children:"Read more →"})]},a.slug))})]},e.id)})})})})]}),aue=({slug:e})=>{const t=tue(e);return t.length===0?null:n.jsxs("aside",{className:"glossary-related","aria-label":"Related glossary terms",children:[n.jsx("h2",{className:"glossary-related__title",children:"Related terms"}),n.jsx("ul",{className:"glossary-related__list",children:t.map(a=>n.jsx("li",{children:n.jsx(J,{to:`/glossary/${a.slug}`,className:"glossary-related__link",children:a.term})},a.slug))})]})},iue={"account-story":'<p>An <em>Account Story </em>is a chronological visual narrative of all go-to-market interactions associated with a single account over time. Account stories make it easy to identify how different stakeholders have engaged through various touchpoints, which include web page visits, email interactions, content consumption, and other sales and marketing activities. They also indicate correlations with sales data, such as opportunities being opened, lost, or won, as well as key milestones through the customer&#x27;s lifecycle. </p><h2>How Account Stories work</h2><p>In B2B, purchase decisions are typically associated with buying groups over longer sales cycles. In these scenarios, it&#x27;s crucial to understand the <em>Account Story.</em> Since there may be thousands of individual touchpoints across all contacts within an account, account story tools help collect, organize, and present these touchpoints in a usable manner. Advanced account story tools typically offer:</p><ul role="list"><li><strong>Ability to filter touchpoints to only buying group members on a particular deal</strong></li><li><strong>
2773Ability to filter touchpoints to one category/channel of activity</strong></li><li><strong>Functionality to search touchpoints contextually </strong></li><li><strong>Visual indicators that take the analyst directly to the moment of interest in the buying journey</strong></li></ul><p>The Account Story narrative is the foundation for multi-touch attribution modeling, as well as measuring the impact of account-based marketing. These help data-driven marketers and sales leaders assess the effectiveness of their strategies at the account level.</p><h2>Components of an Account Story</h2><ul role="list"><li><strong>Chronological interactions</strong>: A timeline of touchpoints, including activities directed to and received from the prospect/customer. </li><li><strong>Account contacts</strong>: A full list of all contacts with activity within the account, as well as periods of high engagement. </li><li><strong>Buying group members</strong>: A clear way to separate account contacts that are relevant to deals from those who are not. </li><li><strong>Channel categorization</strong>: Each touchpoint should be classified into higher level categories, such as email, web, advertising, or meetings. </li><li><strong>Buying signals</strong>: Fluctuations in activity suggest buying intent and/or sales readiness. </li></ul><h2>Business applications</h2><ul role="list"><li><strong>Campaign optimization</strong>: Identify which channels, messages, and plays resonate best for different roles within an account. </li><li><strong>Retrospective analyses</strong>: After a notable deal closes, teams can use Account Stories to tell the story of the deal internally, either to recreate positive outcomes or learn from negative outcomes.  </li><li><strong>Sales visibility</strong>: Enable sales teams with context on past engagement to tailor outreach strategy effectively.</li><li><strong>Enhanced forecasting</strong>: Use engagement patterns to predict which accounts are most likely to convert, as well as identifying if deals need to be adjusted to a different sales stage. </li></ul><p>‍</p>',"buying-group":`<p>A buying group is the collection of people who collectively evaluate, influence, and decide on a purchase within an organization. In B2B sales, especially enterprise deals, each opportunity has its own buying group, often involving multiple departments and roles, from executives and technical evaluators to procurement and finance. In Salesforce, buying group members are often designated as "opportunity contact roles." </p><p>For accurate attribution and measurement, it's critical to identify the true buying group for each deal. Doing so helps filter out irrelevant account noise, focus resources on those who actually shape the decision, and improve attribution accuracy in multi-touch, multi-person sales cycles.</p><h3>Typical Roles in a Buying Group</h3><p><strong>1. Champion (Advocate)</strong><br/>This is your internal ally, the evangelist who believes in your solution and persuades others to come along.</p><p><strong>2. Decision-Maker</strong><br/>The person with the final say, usually the person who will sign the agreement or grant their budget for the deal. </p><p><strong>3. Influencer</strong><br/>These may be analysts, subject-matter experts, IT folks, or external voices whose opinions carry weight. </p><p><strong>4. User or Champion</strong><br/>End users test the product, uncover usability concerns, and give feedback, often becoming internal advocates if the product meets their needs. They can also become blockers/challengers (see below)! </p><p><strong>5. Blocker (Challenger)</strong><br/>This role represents internal skepticism, those who point out risks, compliance issues, or procedural friction. </p><p><strong>6. Executive Sponsor</strong><br/>High-level figures, often not actively present until later in the deal. They ensure strategic alignment, unblock roadblocks, and help get buy-in from the top.</p><p>‍</p>`,"cac-customer-acquisition-cost-for-b2b":`<h4>What is the definition of CAC?</h4><p>CAC, or Customer Acquisition Cost, refers to the total dollar amount a company spends to acquire a new customer. This includes not only the cost of onboarding and servicing, but also every outbound marketing and sales effort that c
2773ontributes to the deal being closed.</p><h4>Why does CAC matter?</h4><p>As a leader, understanding your CAC is key to evaluating the efficiency and profitability of your growth strategy. It provides insight into how much you're spending to grow your customer base, and whether that spend is yielding truly sustainable returns.</p><h4>CAC Analysis</h4><p>CAC analysis compares the total marketing and sales spend against the number of customers acquired in a given time period. This process can help leaders in marketing, sales, and RevOps make smarter decisions about <a href="https://www.upside.tech/#how-it-works">where to allocate budget and resources</a> in the future.</p><h4>Key factors that can influence CAC:</h4><ul role="list"><li>Ad spend</li><li>Deal size / average purchase value</li><li>Research and development costs</li><li>Sales team compensation and tools</li><li>Marketing operations and software</li><li>(and more, depending on your GTM model)</li></ul>`,"cac-payback-period":`<h4>What is a CAC Payback Period?</h4><p>A CAC Payback Period is the period of time it takes a company to offset the <a href="https://www.upside.tech/glossary/cac-customer-acquisition-cost-for-b2b">Customer Acquisition Cost</a> of one of their deals. In other words, it is the break-even point for acquiring a customer.</p><h4>Why do CAC Payback Periods matter?</h4><p>The CAC Payback Period is a key indicator of a company's growth-engine efficiency. A shorter period signifies a sustainable business model with consistent profitability. However, a longer one may highlight inefficiencies - either in acquisition strategy, pricing model, onboarding process, or customer value.</p><h4>General guidelines for interpreting a CAC Payback Period:</h4><p>While benchmarks vary across industries and business models, here are general guidelines for SaaS companies:</p><ul role="list"><li>Around 12 months: Generally considered strong, especially for mid-market or enterprise-focused SaaS.</li><li>7 to 9 months: Indicates highly efficient customer acquisition and monetization.</li><li>Less than 6 months: Typically achieved by companies with strong product-market fit and operational streamlining.</li></ul><p>It's important to interpret CAC Payback Period in context, factoring in customer lifetime value (LTV), retention rates, contract structures (monthly vs. annual), and internal profitability targets.</p>`,"forensic-attribution":`<p>Forensic attribution is the process of discovering what actually happened in a deal between two explicitly documented touchpoints. Instead of solely relying on CRM entries, forensic attribution analyzes the digital breadcrumbs left behind in a deal. It parses things like email sentiment changes, sales call transcripts, outbound marketing email content, and even chatbot conversations. By accessing and analyzing these micro-interactions, the real story for why a deal moved forward (or stalled) becomes apparent.</p><h4><strong>Why This Matters Today</strong></h4><ul role="list"><li>Go-to-market complexity is growing: Buyers operate across community, peer referrals, partner ecosystems, and AI-driven sequences, most of which aren't captured in structured Salesforce or HubSpot fields.<br/><br/></li><li>Buying groups have multiplied: Enterprise deals involve on average 7+ stakeholders, often spanning functions, roles, and geographies.<br/><br/></li><li>Budgets are under scrutiny: In an era of efficiency, boards and CFOs expect attribution models that can stand up to executive review and audit and won't allocate budgets without clear ROI.<br/><br/></li><li>AI content saturation demands evidence-based measurement: Marketing output has increased tenfold with more content, emails and engagement than ever before, making it even harder to understand what actually works. A forensic model can distinguish noise from real influence.</li></ul><h4><a href="https://www.upside.tech/blog/what-is-forensic-attribution"><strong>What You Can Do With Forensic Attribution</strong></a></h4><p><strong>"What should we double down on?"</strong></p><p>Channel and campaign ROI linked to closed-won revenue, not just MQLs.</p><p>Each weighted model will give different results, the best channels might not get the right credit depending on how weights are assigned.</p><p><strong>"Why is this deal stalling?"</strong></p><p>Timeline flags missing champions, executive drop-off, or a cold gap in activity.</p><p>No way of showing deal level attribution or engagement.</p><p><strong>"Where's the budget waste?"</strong></p><p>Cost-per-influence and momentum analysis highlight non-performing spend.</p><p>Impossible to tell, every model shows a different result.</p><p><strong>"Can we trust the data?"</strong></p><p>Yes. Every insight is backed by system-level evidence, traceable to original interactions.</p><p>Most insights are a black box.</p><h4>And much more...</h4><p>For a lighter version of the same idea, read <a href="/resources/how-to-attract-a-dragon">How To Attract A Dragon</a>. Uppy walking Mina through the clues is forensic attribution in picture-book form.</p>`,"impact-weighted-attribution-model":`<p>An <strong>impact-weighted attribution model</strong> is a multi-touch measurement approach that allocates credit for pipeline or revenue based on <strong>the relative "size" (i.e., business impact) of each touchpoint</strong>
2773, rather than its chronological position in the journey. By weighting interactions on factors such as engagement time, persona influence, and recency, it can offer a more realistic picture of what actually moved a complex B2B deal forward.</p><h2>How Impact-weighted Attribution Models work</h2><ul role="list"><li><strong>Assign "size" scores to touchpoint types</strong>:  e.g., a 60-minute product demo outweighs a 3-second page view. This approach factors in the average minutes of engagement as a baseline for defining the weight. The weightings can be refined and agreed-upon through a cross-functional "weighting council." </li><li><strong>Apply multipliers for buyer personas</strong>: executive decision-makers receive more weight than influencers.</li><li><strong>Include linear time-decay</strong>: recent interactions get slightly higher credit, while still preserving earlier context. </li><li><strong>Consider every team's activity</strong>: marketing, sales, partnerships, SDR, CS, etc., are analyzed together to avoid double counting or political finger-pointing. </li><li><strong>Stay transparent &amp; adjustable</strong>: because the weightings are explicit (not a black box), leaders can debate, calibrate with econometric studies, or benchmark across companies.</li></ul><h2>Business applications</h2><ul role="list"><li><strong>Weighted pipeline &amp; weighted revenue</strong>: replaces simplistic first/last-touch metrics with a roll-up that reflects the <em>full</em> story of the deal.</li><li><strong>Channel &amp; campaign optimization</strong>: reveals which programs consistently earn higher weighted impact, guiding budget re-allocation.</li><li><strong>Cross-team alignment</strong>:  because credit is shared proportionally, marketing, sales, and partnerships see how <em>combined</em> efforts drive outcomes, reducing finger-pointing.</li><li><strong>Forecasting &amp; resource planning</strong>:  historical impact scores help predict which open deals need more executive air-cover vs. additional nurture.</li><li><strong>Benchmarking &amp; iteration</strong>: organizations can compare their weights to industry peers or econometric calibration to keep the model objective.</li></ul><h3>Why it matters</h3><p>Traditional position-based models (first-, last-, W-shape, etc.) assume <em>sequence</em> determines importance. In real B2B journeys, <strong>some touches inherently matter more than others</strong>, regardless of order. Impact-weighted attribution is one approach that can capture that nuance, giving GTM teams the trustworthy insight they need to decide <em>where to spend the next dollar</em> or <em>which tactics to cut</em>. </p>`,"revenue-attribution":'<p>Revenue attribution is the practice of assigning credit for pipeline and closed-won revenue to the touchpoints that influenced a deal. It looks beyond first/last touch for the primary deal contact and instead considers the full buying journey across marketing, sales, and partners, for every member of the <a href="/glossary/buying-group">buying group</a>.</p><h2>How to build a revenue attribution model</h2><ul role="list"><li>Capture signals across systems: ad interactions, website visits, emails sent and received across both sales and marketing, events, sales meetings, sales calls, and partner activity.</li><li>Resolve identities and unify records to the account and buying group.</li><li>Reconstruct the journey into a time-ordered timeline of buyer activity and team outreach.</li><li>Apply an attribution approach (rule-based or data-driven) to distribute credit tied to pipeline and revenue.</li><li>Keep it auditable with evidence from the underlying interactions and validate with experiments where possible.</li></ul><h2>Business applications</h2><ul role="list"><li>Channel and campaign ROI tied to revenue for budget allocation.</li><li>Deal diagnostics: what activated an opportunity, what accelerated it, what stalled it.</li><li>Board-ready narratives with traceable evidence.</li><li>Cross-team alignment by showing how marketing, sales, and partners contributed to outcomes.</li></ul><p>Note: To assign a specific revenue or pipeline value to each activity, you must apply a weighting model. These weightings can easily become a point of contention among GTM leaders if not agreed upon in advance, which can undermine trust in the results. Before implementing any weighting, align with GTM leadership on the methodology and assumptions to ensure consistency and buy-in.</p>',touchpoint:`<p>A <strong>touchpoint</strong> is a record of an interaction between a prospective or current customer and your brand. In B2B attribution, each touchpoint serves as an individual data signal that helps track how marketing, sales, and partnership activities contribute to pipeline and revenue.</p><h2>What makes a touchpoint?</h2><p>Touchpoints have a few essential attributes that must be true, albeit may not all be available in the data. </p><ul role="list"><li><strong>What happened</strong>: The nature of the interaction (perhaps clicking an ad on LinkedIn, engaging with a social post, visiting a web page, opening an email, or RSVP&#x27;ing to an event invitation)</li><li><strong>When it happened</strong>: A specific time that it occurred. </li><li><strong>Who it happened to</strong>: Who experienced this touchpoint?</li><li><strong>Where it happened</strong>: The channel or environment (was it online, in a webinar platform, in person, or at a conference?)</li></ul><p>Note: It&#x27;s often helpful to categorize all touchpoints as &quot;in&quot; vs &quot;out&quot;, separating the touchpoints that indicate customer activity from the activity of the company attempting to engage.  </p><h2>How touchpoints relate to attribution</h2><p>Touchpoints are the raw inputs of attribution. When stitched together, they are the building blocks of <a href="/glossary/account-story">account stories</a>. Legacy position-based attribution models will select a touchpoint based on the position it falls in the buying journey. Modern attribution systems will traverse all touchpoints for context and use them as clues to understand what really sourced a milestone of interest. Savvy marketers know that collecting touchpoints comprehensively can help them:</p><ul role="list"><li>Understand the effectiveness of each campaign or channel</li><li>Attribute influence to specific marketing activities</li><li>Optimize strategies based on actual buyer behavior</li></ul><h2>How to handle missing touchpoints</h2><p>In larger B2B organizations, missing touchpoints are common, often due to measurement gaps, system migrations, or simply poor data hygiene. These gaps can distort the understanding of the customer journey and the broader account story. Modern attribution platforms can forensically reconstruct touchpoints by drawing on contextual clues and affilliated data. For example, if an account executive's email record reads, "Thanks for c
2773oming to our office yesterday," but the meeting record is absent, an AI-driven attribution model can confidently infer that a meeting occurred the day before the email was sent and backfill that touchpoint for attribution and tracking purposes.</p><h2>Practical applications</h2><p>Touchpoints are leveraged by:</p><ul role="list"><li><strong>Attribution tools</strong> to assign pipeline or revenue credit</li><li><strong>Marketing dashboards</strong> to visualize engagement trends</li></ul><p>They're also the foundation of multi-touch timelines, lead scoring models, and marketing ROI reporting.</p><p>‍</p>`,"zero-sum-attribution":`<p><strong>Zero-sum attribution</strong> is a measurement approach where every dollar of pipeline or revenue must be assigned to exactly one source, channel, or team, so that all credit "squares" to the total. In a zero-sum model, if marketing gets credit for a deal, sales loses that same credit, and vice versa. Every dollar attributed to one function is a dollar taken from another.</p><h2>How zero-sum attribution works</h2><p>In a zero-sum framework, you take a closed deal and distribute 100% of its value across the touchpoints or teams that contributed. The constraint is that the sum of all credit must equal the deal value exactly, no more, no less. This means:</p><ul role="list"><li><strong>Every dollar must go somewhere</strong>: Each unit of revenue is assigned to a specific source, whether that's a marketing campaign, an SDR sequence, or a sales meeting.</li><li><strong>Credit is finite</strong>: If one team gains attribution credit, another team loses it by the same amount.</li><li><strong>It must balance</strong>: The total attributed revenue across all sources equals the actual revenue - nothing is double-counted, nothing is left unassigned.</li></ul><h2>Why teams use zero-sum attribution</h2><ul role="list"><li><strong>Financial accountability</strong>: It maps cleanly to budgets and P&amp;L reporting since every dollar is accounted for exactly once.</li><li><strong>Executive simplicity</strong>: Board decks and CFO reviews often demand a clear answer to "where did this revenue come from?"</li><li><strong>ROI calculations</strong>: When each dollar is assigned to one source, calculating return on investment per channel becomes straightforward.</li></ul><h2>The problem with zero-sum attribution</h2><p>While zero-sum models are intuitive, they fundamentally misrepresent how B2B deals actually close. In reality, deals are influenced by multiple teams working together: a marketing webinar warms up a prospect, an SDR books the meeting, and an AE closes the deal. Forcing this into a zero-sum framework creates several problems:</p><ul role="list"><li><strong>Teams fight over credit instead of collaborating</strong>: When one team's gain is another's loss, attribution becomes a political exercise rather than a strategic one. As one GTM leader put it, "It's always been so painful having those discussions because you are fighting for credit, when really you should be working together."</li><li><strong>It distorts investment decisions</strong>: Channels that are easier to track (like paid search) absorb credit from harder-to-measure activities (like brand, events, or partner influence), leading to misallocated budgets.</li><li><strong>It ignores how buying groups work</strong>: In enterprise B2B, <a href="/glossary/buying-group">buying groups</a> of 7+ stakeholders engage across dozens of <a href="/glossary/touchpoint">touchpoints</a>. Reducing this to a single source flattens the complexity of the real journey.</li><li><strong>It punishes collaboration</strong>: The best deals often involve tight coordination between marketing, sales, SDRs, and partnerships. A zero-sum model penalizes exactly this kind of teamwork.</li></ul><h2>Alternatives to zero-sum attribution</h2><p>Modern attribution approaches recognize that B2B revenue is not zero-sum - multiple teams and activities genuinely contribute to the same outcome. These alternatives include:</p><ul role="list"><li><strong><a href="/glossary/impact-weighted-attribution-model">Impact-weighted attribution</a></strong>: Assigns credit based on the relative impact of each touchpoint, where the total credited can exceed 100% of the deal value to reflect shared contribution.</li><li><strong><a href="/glossary/forensic-attribution">Forensic attribution</a></strong>: Reconstructs the full deal story from raw signals to understand <em>why</em> a deal moved forward, rather than simply dividing up credit.</li><li><strong>Influence-based models</strong>
2773: Track which activities influenced a deal without requiring that credit sums to a fixed total - everyone who contributed gets recognized.</li></ul><h2>When zero-sum attribution makes sense</h2><p>Despite its limitations, zero-sum attribution can still be useful in specific contexts:</p><ul role="list"><li><strong>Board-level financial reporting</strong>: When you need revenue to tie cleanly to cost centers.</li><li><strong>Simple GTM motions</strong>: Product-led growth or single-channel businesses where the buyer journey is genuinely linear.</li><li><strong>As one lens among many</strong>: Used alongside non-zero-sum models, it can provide a complementary financial view, as long as it's not the only model driving decisions.</li></ul><p>The key insight is that having only one model, especially a zero-sum one, forces artificial constraints on how teams understand their impact. The most effective GTM organizations use multiple attribution lenses and focus on what the data reveals about buyer behavior, not on who gets credit.</p>`,"first-touch-attribution":`<p><strong>First-touch attribution</strong> is an attribution model that assigns 100% of the credit for a deal or opportunity to the very first recorded interaction a prospect has with your brand. If a buyer first clicked a Google ad, then attended a webinar, then had a sales call, the Google ad gets all the credit.</p><h2>How first-touch attribution works</h2><p>The model is straightforward: look at the earliest touchpoint in the buyer's journey and assign full pipeline or revenue credit to that source. In practice, this usually means pulling the "lead source" or "original source" field from your CRM.</p><ul role="list"><li><strong>Single point of credit</strong>: Only one interaction receives attribution, regardless of how many touchpoints followed.</li><li><strong>Easy to implement</strong>: Most CRMs capture a lead source field by default, making first-touch one of the simplest models to deploy.</li><li><strong>Answers "what started this?"</strong>: It focuses entirely on demand generation and top-of-funnel awareness.</li></ul><h2>Why teams use first-touch attribution</h2><ul role="list"><li><strong>Top-of-funnel measurement</strong>: It highlights which channels are best at generating initial awareness and bringing new prospects into the pipeline.</li><li><strong>Simplicity</strong>: No weighting logic, no multi-touch modeling, no complex data requirements.</li><li><strong>Budget justification for awareness programs</strong>: Brand campaigns, content marketing, and events that spark initial interest get clear credit.</li></ul><h2>The limitations of first-touch attribution</h2><p>In B2B sales cycles that span months and involve multiple stakeholders, first-touch attribution has significant blind spots:</p><ul role="list"><li><strong>It ignores everything after the first click</strong>: The webinar that educated the champion, the case study that convinced the CFO, the sales demo that closed the deal - none of these get any credit.</li><li><strong>It over-credits top-of-funnel channels</strong>
2773: Paid search and social ads often capture the first touch, even when the real driver was a peer referral or community discussion that happened before the click.</li><li><strong>It can't see the <a href="/glossary/dark-funnel">dark funnel</a></strong>: Many first interactions happen in places your analytics can't track, like a podcast mention, a Slack community thread, or a conversation at a dinner. The "first touch" your system records may not be the actual first touch.</li><li><strong>It misrepresents <a href="/glossary/buying-group">buying group</a> dynamics</strong>: Different stakeholders in the same deal often discover your brand through different channels. First-touch only captures one person's entry point.</li></ul><h2>When first-touch attribution makes sense</h2><ul role="list"><li><strong>As one lens among many</strong>: Understanding what channels generate initial awareness is valuable, as long as it's not the only model you use.</li><li><strong>Early-stage companies</strong>: When your GTM motion is simple and the sales cycle is short, first-touch can be a reasonable starting point.</li><li><strong>Paired with <a href="/glossary/last-touch-attribution">last-touch</a> or <a href="/glossary/multi-touch-attribution">multi-touch</a></strong>: Comparing first-touch results against other models reveals where credit shifts, which is often more insightful than any single model alone.</li></ul><p>The bottom line: first-touch attribution tells you where the story began, but in B2B, knowing the beginning is only useful if you also understand the middle and the end.</p>`,"last-touch-attribution":`<p><strong>Last-touch attribution</strong> is an attribution model that assigns 100% of the credit for a deal or conversion event to the final interaction before that event occurred. If a buyer attended a webinar, read a case study, and then booked a demo after receiving an SDR email, the SDR email gets all the credit.</p><h2>How last-touch attribution works</h2><p>The model looks at the last recorded touchpoint before a defined conversion event, such as an opportunity being created, a deal moving to a new stage, or a deal closing. That single interaction receives full credit for the outcome.</p><ul role="list"><li><strong>Single point of credit</strong>: Only the final interaction before conversion is recognized.</li><li><strong>Conversion-focused</strong>: It prioritizes the activities closest to the moment of decision.</li><li><strong>Easy to implement</strong>: Like <a href="/glossary/first-touch-attribution">first-touch</a>, it requires minimal data infrastructure since most CRMs track the last activity before a stage change.</li></ul><h2>Why teams use last-touch attribution</h2><ul role="list"><li><strong>Sales-friendly</strong>: It naturally credits the activities that sales teams control, like demos, proposals, and closing calls.</li><li><strong>Bottom-of-funnel optimization</strong>: It highlights which tactics are most effective at converting warm prospects into customers.</li><li><strong>Straightforward ROI</strong>: When every deal maps to one closing activity, calculating cost-per-acquisition by channel is simple.</li></ul><h2>The limitations of last-touch attribution</h2><p>Last-touch attribution has the inverse problem of first-touch: it ignores everything that built the relationship up to the point of conversion.</p><ul role="list"><li><strong>It under-credits marketing and awareness</strong>: The brand campaign that put you on the buyer's radar, the content that educated the champion, the event where the executive sponsor first engaged - none of these receive credit.</li><li><strong>It over-credits closers</strong>: In conversations with GTM leaders, a common frustration is that "the AE gets all the credit for a deal that marketing nurtured for six months." Last-touch reinforces this dynamic.</li><li><strong>It creates misaligned incentives</strong>: When only closing activities get credit, teams underinvest in the awareness and nurture programs that fill the top of the funnel.</li><li><strong>It misses multi-stakeholder complexity</strong>: In enterprise deals with <a href="/glossary/buying-group">buying groups</a> of 7+ people, the "last touch" may have been a legal review or procurement call, not the interaction that actually won the deal.</li></ul><h2>When last-touch attribution makes sense</h2><ul role="list"><li><strong>Short sales cycles</strong>: For transactional or product-led motions where the journey from awareness to purchase is brief, last-touch can be a reasonable approximation.</li><li><strong>Conversion rate optimization</strong>: If your specific goal is to improve the final step of the funnel, last-touch shows you which tactics close.</li><li><strong>Paired with other models</strong>: Comparing <a href="/glossary/first-touch-attribution">first-touch</a> and last-touch results side by side reveals how credit shifts between awareness and closing activities, which often sparks the most productive GTM discussions.</li></ul><p>The pattern across B2B teams we've spoken with is clear: most start with first-touch or last-touch because it's easy, then realize they need a more complete picture. Last-touch tells you what crossed the finish line, but not what got the runner to the starting blocks.<
2773/p><p>Want the same problem in a story instead of a model? Read <a href="/resources/how-to-attract-a-dragon">How To Attract A Dragon</a>, a picture book about why the villager who walked the deal through the door is rarely the whole journey.</p>`,"multi-touch-attribution":`<p><strong>Multi-touch attribution (MTA)</strong> is an attribution methodology that distributes credit for pipeline or revenue across multiple <a href="/glossary/touchpoint">touchpoints</a> in the buyer journey, rather than giving it all to a single interaction. The goal is to recognize that B2B deals are influenced by many activities across marketing, sales, and partnerships.</p><h2>Common multi-touch attribution models</h2><p>Multi-touch attribution comes in many forms, ranging from simple rule-based approaches to advanced data-driven systems:</p><ul role="list"><li><strong>Linear</strong>: Distributes credit equally across all touchpoints. Simple but treats a 3-second page view the same as a 60-minute executive briefing. See <a href="/glossary/linear-attribution">linear attribution</a>.</li><li><strong>U-shaped (position-based)</strong>: Gives extra credit to the first and last touchpoints (typically 40% each), with the remaining 20% spread across the middle. See <a href="/glossary/u-shaped-attribution-model">U-shaped attribution</a>.</li><li><strong>W-shaped</strong>: Adds a third emphasis point, usually the lead creation or opportunity creation moment. See <a href="/glossary/w-shaped-attribution-model">W-shaped attribution</a>.</li><li><strong>Time-decay</strong>: Gives progressively more credit to touchpoints closer to the conversion event. Assumes recent interactions are more influential.</li><li><strong><a href="/glossary/impact-weighted-attribution-model">Impact-weighted</a></strong>: Assigns credit based on the estimated business impact of each touchpoint, factoring in engagement depth, persona influence, and recency.</li><li><strong>Data-driven / algorithmic</strong>: Uses statistical methods or AI to determine which touchpoints actually correlate with positive outcomes, rather than relying on predetermined rules.</li></ul><h2>Why teams adopt multi-touch attribution</h2><p>The shift from single-touch to multi-touch is driven by a simple reality: B2B deals don't happen because of one interaction. Across recent conversations with GTM leaders, the pattern is consistent:</p><ul role="list"><li><strong>Complex buying journeys</strong>: Enterprise deals involve multiple stakeholders engaging across dozens of channels over months. A single-touch model can't capture this.</li><li><strong>Cross-team collaboration</strong>: Marketing, sales, SDRs, and partnerships all contribute. Multi-touch gives each team visibility into their impact.</li><li><strong>Better budget decisions</strong>: When you can see which combination of activities drives results, you can allocate budget more intelligently.</li></ul><h2>The challenges of multi-touch attribution</h2><p>Multi-touch is a step forward from single-touch, but it introduces its own complexities:</p><ul role="list"><li><strong>Data quality requirements</strong>: MTA is only as good as the touchpoints it can see. If your systems don't capture meetings, partner interactions, or <a href="/glossary/dark-funnel">dark funnel</a> activity, the model has blind spots.</li><li><strong>Rule-based models are still arbitrary</strong>: Choosing a U-shape over a W-shape is a judgment call, and different rules produce different results. Teams often debate which model to trust.</li><li><strong>Complexity breeds skepticism</strong>: When the model is hard to explain, stakeholders question the results. As one marketing leader noted, "We built a custom multi-touch model but nobody really trusts the numbers."</li><li><strong><a href="/glossary/zero-sum-attribution">Zero-sum constraints</a></strong>: Many MTA implementations still require credit to sum to 100% of the deal value, which creates the same competitive dynamics as single-touch models.</li></ul><h2>Moving beyond rule-based MTA</h2><p>The most sophisticated GTM organizations are evolving past static, rule-based multi-touch models toward approaches that:</p><ul role="list"><li>Use AI to weight touchpoints based on observed impact rather than predetermined rules</li><li>Incorporate <a href="/glossary/forensic-attribution">forensic attribution</a> to recover missing touchpoints and reconstruct the full journey</li><li>Apply <a href="/glossary/self-reported-attribution">self-reported attribution</a> alongside system-tracked data for a more complete picture</li><li>Focus on actionable insights ("what should we do differently?") rather than credit allocation ("who gets the points?")</li></ul><p>Multi-touch attribution is the right direction of travel. The question is whether your implementation captures enough of the journey, and weights it accurately enough, to actually change decisions.</p>`,"dark-funnel":`<p>The <strong>dark funnel</strong> refers to all the buyer activities and influences that happen outside the reach of your tracking and analytics tools. These are the interactions that shape purchasing decisions but never show up in your CRM, marketing automation platform, or web analytics.</p><h2>What happens in the dark funnel</h2><p>Before a prospect ever fills out a form or clicks a tracked link, they've often already formed opinions about your product. The dark funnel includes:</p><ul role="list"><li><strong>Word-of-mouth referrals</strong>: A peer at another company recommends your product over coffee or on a call. No click, no form fill, no record.</li><li><strong>Private community discussions</strong>: Slack groups, Discord servers, private LinkedIn groups, and industry forums where your product is discussed (or dismissed) without your knowledge.</li><li><strong>Podcast and video mentions</strong>: A thought leader mentions your category or product on a podcast. The listener doesn't click a link - they just Google your name tw
2773o weeks later.</li><li><strong>Analyst and advisor conversations</strong>: Buyers consult trusted advisors, analysts, or board members who influence the shortlist before any formal engagement begins.</li><li><strong>Internal champion advocacy</strong>: Someone who used your product at a previous company brings it to their new organization. The entire evaluation was shaped by past experience that lives outside your systems.</li><li><strong>Social media browsing</strong>: A buyer reads your CEO's LinkedIn post, screenshots it, and shares it in an internal Slack channel. You see the impression but never the downstream influence.</li></ul><h2>Why the dark funnel matters for attribution</h2><p>Traditional attribution models can only work with data they can see. When a prospect's first tracked interaction is a Google search for your brand name, <a href="/glossary/first-touch-attribution">first-touch attribution</a> credits Google. But the real catalyst might have been a conference conversation three months earlier that no system recorded.</p><p>This creates a systematic bias in attribution:</p><ul role="list"><li><strong>Trackable channels get over-credited</strong>: Paid search, email, and web content absorb credit that belongs to untrackable activities.</li><li><strong>Brand and community investments get under-credited</strong>: The activities that build trust and shape perception in the dark funnel rarely receive attribution credit, even though they often drive the highest-quality pipeline.</li><li><strong>Budget decisions get distorted</strong>: If your attribution model can't see the dark funnel, you'll systematically underinvest in the channels that operate there.</li></ul><h2>How teams address the dark funnel</h2><ul role="list"><li><strong><a href="/glossary/self-reported-attribution">Self-reported attribution</a></strong>: Adding "How did you hear about us?" fields to forms captures signals that system-based tracking misses. It's imperfect, but it's often the only window into the dark funnel.</li><li><strong><a href="/glossary/forensic-attribution">Forensic attribution</a></strong>: Analyzing email content, meeting transcripts, and other unstructured data can surface references to dark funnel activities, like a prospect mentioning "my friend at Company X told me about you."</li><li><strong>Qualitative deal reviews</strong>: Structured win/loss interviews that specifically probe for dark funnel influences.</li><li><strong>Correlation analysis</strong>: Looking at how brand awareness spend or community investment correlates with inbound pipeline over time, even without direct touchpoint tracking.</li></ul><h2>The bottom line</h2><p>The dark funnel isn't a problem to solve - it's a reality to account for. B2B buying is inherently social and relationship-driven, and a significant portion of the journey will always happen beyond your analytics. The best GTM teams design their measurement systems to acknowledge and incorporate dark funnel signals, rather than pretending that only tracked interactions matter.</p>`,"self-reported-attribution":`<p><strong>Self-reported attribution (SRA)</strong> is a qualitative attribution method where prospects are asked directly how they first heard about your company. This is typically captured through a free-text or dropdown form field like "How did you hear about us?" at key conversion points, such as demo requests, sign-ups, or contact forms.</p><h2>How self-reported attribution works</h2><p>The approach is simple: at the moment a prospect converts, ask them what prompted their interest. Common implementations include:</p><ul role="list"><li><strong>Free-text field</strong>: "How did you hear about us?" with an open response. Captures the richest data but requires manual categorization.</li><li><strong>Dropdown menu</strong>: Pre-defined options like "Referral," "Podcast," "Event," "Search," etc. Easier to analyze but constrains responses.</li><li><strong>Combination</strong>: A dropdown with an "Other - please specify" option. Balances structure with flexibility.</li></ul><h2>Why self-reported attribution matters</h2><p>Self-reported attribution captures something that system-based tracking fundamentally cannot: the <a href="/glossary/dark-funnel">dark funnel</a>. When a prospect says "my VP mentioned you at our last leadership meeting" or "I heard your CEO on a podcast," that's information no analytics platform would ever record.</p><ul role="list"><li><strong>Surfaces invisible channels</strong>: Word-of-mouth, peer referrals, community discussions, podcast mentions, and other untrackable sources only become visible through self-reporting.</li><li><strong>Captures the "real" first touch</strong>: System-tracked <a href="/glossary/first-touch-attribution">first-touch</a> data often records a Google search or direct website visit, when the actual catalyst was an offline conversation weeks earlier.</li><li><strong>Validates or challenges system data</strong>: Comparing self-reported sources against system-tracked attribution reveals where your analytics are accurate and where they're misleading.</li></ul><h2>
2773The limitations of self-reported attribution</h2><p>While SRA provides unique signal, it has well-known shortcomings:</p><ul role="list"><li><strong>Recall bias</strong>: Prospects often remember the most recent or most memorable interaction, not necessarily the one that actually sparked their interest.</li><li><strong>Inconsistency</strong>: Without clear options, responses vary widely. "Google," "internet search," and "online" might all refer to the same channel.</li><li><strong>Low completion rates</strong>: If the field is optional (or the form is long), many prospects skip it entirely.</li><li><strong>Single-channel framing</strong>: Asking "how did you hear about us" implies a single source, when in reality, most B2B buyers encounter your brand through multiple channels before converting.</li></ul><h2>Best practices for self-reported attribution</h2><ul role="list"><li><strong>Make the field required</strong>: Optional fields get skipped. If the data matters, require it.</li><li><strong>Use a dropdown plus free-text</strong>: Offer common options for easy analysis, with a free-text fallback for responses that don't fit.</li><li><strong>Place it at high-intent moments</strong>: Demo request forms and trial sign-ups yield higher-quality responses than newsletter subscriptions.</li><li><strong>Pair it with system data</strong>: Self-reported attribution is most powerful when used alongside <a href="/glossary/multi-touch-attribution">multi-touch attribution</a> and <a href="/glossary/forensic-attribution">forensic attribution</a>, giving you both the human narrative and the digital trail.</li><li><strong>Review responses regularly</strong>: Categorize free-text responses monthly to spot emerging channels and trends.</li></ul><p>Self-reported attribution won't give you a complete picture on its own. But combined with system-tracked data, it provides the missing context that makes the difference between a directionally useful attribution model and one that actually reflects how buyers find you.</p>`,"identity-resolution":`<p><strong>Identity resolution</strong> (also called <em>persona resolution</em>) is the process of matching and merging fragmented person records across multiple go-to-market systems into a single, unified profile. In B2B, the same individual often exists as separate records in your CRM, marketing automation platform, email system, and call recording tool — sometimes under slightly different names, email addresses, or job titles. Identity resolution stitches these fragments together so every touchpoint is correctly attributed to the right person and account.</p><h2>Why identity resolution matters for GTM</h2><p>Without identity resolution, your data is fundamentally broken in ways that cascade through every downstream analysis:</p><ul role="list"><li><strong>Inflated contact counts</strong>: The same person counted three times across three systems makes your "engaged contacts" metric meaningless.</li><li><strong>Incomplete <a href="/glossary/buying-group">buying groups</a></strong>: If a key stakeholder's email interactions live in one system and their meeting activity in another, you can't see their full engagement — and they may not appear in the buying group at all.</li><li><strong>Broken attribution</strong>: <a href="/glossary/multi-touch-attribution">Multi-touch attribution</a> requires a unified journey. If one person's touchpoints are split across three records, the journey is fragmented and attribution is inaccurate.</li><li><strong>Wasted outreach</strong>: Sales reps reaching out to what they think are three separate contacts are actually emailing the same person three times.</li></ul><h2>How identity resolution works</h2><p>Modern identity resolution systems typically operate in layers:</p><ul role="list"><li><strong>Deterministic matching</strong>: Exact matches on email address, phone number, or unique identifiers across systems. High confidence but limited coverage.</li><li><strong>Probabilistic matching</strong>: Fuzzy matching on name variants, company domains, job titles, and behavioral patterns. Broader coverage but requires confidence scoring.</li><li><strong>Contextual inference</strong>: Parsing email threads, meeting invites, and call transcripts to discover people who participated in interactions but don't have their own CRM records. For example, extracting CC'd email addresses or identifying speakers in a call recording.</li></ul><h2>Identity resolution vs. data deduplication</h2><p>Deduplication merges duplicate records within a <em>single</em> system. Identity resolution is broader — it unifies records <em>across</em> systems, connecting the Salesforce contact, the HubSpot lead, the Gong call participant, and the email correspondent into one coherent person record. Deduplication is a subset of the larger identity resolution challenge.</p><h2>Business applications</h2><ul role="list"><li><strong>
2773Accurate <a href="/glossary/revenue-attribution">revenue attribution</a></strong>: Every touchpoint correctly linked to the right person and account.</li><li><strong>Complete buying group assembly</strong>: Discover hidden stakeholders who participated in emails and meetings but lack formal CRM records.</li><li><strong>Clean reporting</strong>: Engagement metrics, pipeline reports, and campaign analytics that reflect reality, not data fragmentation.</li><li><strong>Efficient sales outreach</strong>: Reps see one unified view of each prospect's activity across all channels.</li></ul><p>Identity resolution is a foundational capability — without it, every other GTM analysis is built on unreliable data.</p>`,"pipeline-velocity":`<p><strong>Pipeline velocity</strong> is a composite metric that measures how quickly qualified opportunities move through the sales pipeline and convert to revenue. It combines four variables into a single figure that represents the dollar throughput of your revenue engine per unit of time.</p><h2>The pipeline velocity formula</h2><p>Pipeline Velocity = (Number of Opportunities × Average Deal Size × Win Rate) ÷ Average Sales Cycle Length</p><p>The result is typically expressed as dollars per day — a single number that captures the overall health and momentum of your pipeline.</p><h2>Why pipeline velocity matters</h2><p>Pipeline velocity is valuable because it's a <em>compound</em> metric. Improving any one of its four inputs improves the overall number, but more importantly, it forces GTM leaders to think about the interactions between these variables:</p><ul role="list"><li><strong>More opportunities</strong> increase velocity — but only if they're qualified. Flooding the pipeline with low-quality deals can actually decrease velocity by dragging down win rate and increasing cycle length.</li><li><strong>Larger deal sizes</strong> increase velocity — but enterprise deals often come with longer sales cycles that partially offset the gain.</li><li><strong>Higher win rates</strong> are the most efficient lever — they improve velocity without adding volume or extending timelines.</li><li><strong>Shorter sales cycles</strong> directly accelerate throughput, but cutting corners on the buying process can reduce win rates.</li></ul><h2>How teams use pipeline velocity</h2><ul role="list"><li><strong>Segment comparison</strong>: Compare velocity across segments (enterprise vs. mid-market), regions, or product lines to identify where the engine runs fastest.</li><li><strong>Campaign impact analysis</strong>: Measure whether specific <a href="/glossary/campaign-influence">campaigns</a> or channels produce deals that move faster through the pipeline.</li><li><strong>Forecasting</strong>: Use historical velocity to predict revenue output from current pipeline coverage.</li><li><strong>Trend analysis</strong>: Track velocity over time to detect whether GTM changes are improving or degrading overall efficiency.</li></ul><h2>Common pitfalls</h2><ul role="list"><li><strong>Averages can mislead</strong>: A blended velocity number can mask issues. Your enterprise segment may be slowing down while SMB accelerates, and the average looks flat.</li><li><strong>Pipeline quality matters</strong>: Velocity calculated on poorly qualified pipeline produces a meaningless number. Garbage in, garbage out.</li><li><strong>Win rate definitions vary</strong>: Make sure you're consistent about whether win rate is calculated against all created opportunities or only those that reached a certain stage.</li></ul><p>Pipeline velocity gives GTM leaders a single metric to track the overall efficiency of their revenue engine — but it's most useful when decomposed into its four components and analyzed by segment.</p>`,"influence-window":`<p>An <strong>influence window</strong> (also called a <em>lookback window</em>) is the configurable time period used in attribution to determine whether a <a href="/glossary/touchpoint">touchpoint</a> is considered relevant to a given opportunity or conversion event. If a marketing or sales interaction falls within the influence window — for example, within 90 days before an opportunity was created — it receives attribution credit. If it falls outside that window, it's excluded from the analysis.</p><h2>Why the influence window matters</h2><p>The influence window is one of the most consequential settings in any attribution system, and also one of the most debated. Set it too short and you miss the early-stage activities that planted the seed. Set it too long and you attribute credit to interactions so distant they likely had no real impact on the deal.</p><ul role="list"><li><strong>Too narrow (e.g., 30 days)</strong>: Favors bottom-of-funnel activities like demos and late-stage emails. Top-of-funnel brand and awareness campaigns get systematically excluded, even when they were the reason the prospect entered the funnel in the first place.</li><li><strong>Too wide (e.g., 365 days)</strong>: Includes so many touchpoints that the signal-to-noise ratio degrades. A webinar attended 11 months ago probably didn't influence today's purchase decision.</li><li><strong>Common default (90 days)</strong>
2773: Many attribution platforms default to a 90-day window, which is a reasonable starting point for mid-market B2B sales cycles but should be calibrated to your actual data.</li></ul><h2>How to set your influence window</h2><ul role="list"><li><strong>Start with your sales cycle</strong>: Your influence window should roughly match the length of your average sales cycle. If deals take 6 months to close, a 30-day window will miss most of the journey.</li><li><strong>Differentiate by motion</strong>: Some organizations use different windows for different use cases — a shorter window for "<a href="/glossary/sourced-pipeline">sourced</a>" attribution (e.g., 30 days) and a longer one for "<a href="/glossary/campaign-influence">influenced</a>" attribution (e.g., 90-180 days).</li><li><strong>Test sensitivity</strong>: Run your attribution model with different window lengths and see how much the results change. If the output shifts dramatically between 60 and 90 days, your conclusions depend heavily on this one parameter — which is a red flag.</li><li><strong>Document and align</strong>: Whatever window you choose, make sure GTM leadership agrees on it. Changing the window mid-quarter will change your numbers and erode trust.</li></ul><h2>Influence windows and campaign influence</h2><p>In Salesforce-native campaign influence models, the influence window determines which campaign memberships are connected to opportunities. A contact who became a campaign member within the window gets their campaign linked to the opportunity; contacts outside the window are excluded. This directly impacts which campaigns receive pipeline and revenue credit.</p><p>The influence window is not a set-and-forget configuration. As your sales motion evolves — moving upmarket, adding new channels, or changing your go-to-market strategy — your window should be revisited to ensure it still accurately reflects how your buyers actually buy.</p>`,"campaign-influence":`<p><strong>Campaign influence</strong> is a measurement framework that connects marketing campaigns to the pipeline and revenue they helped generate, regardless of whether the campaign was the original source of the lead. Unlike simple lead-source tracking, campaign influence recognizes that multiple campaigns typically touch a deal before it closes, and attempts to quantify each campaign's contribution.</p><h2>How campaign influence works</h2><p>At its core, campaign influence answers a simple question: <em>which campaigns touched the people involved in this deal, and when?</em></p><ul role="list"><li><strong>Campaign membership</strong>: A person becomes a member of a campaign (by attending a webinar, downloading content, visiting a booth, etc.).</li><li><strong>Opportunity association</strong>: That person is later associated with an opportunity — either as a contact role or through account-level matching.</li><li><strong><a href="/glossary/influence-window">Influence window</a> filtering</strong>: If the campaign membership date falls within the defined influence window relative to the opportunity, the campaign receives credit.</li><li><strong>Credit allocation</strong>: Depending on the model, credit is distributed across all qualifying campaigns — evenly, by recency, by role, or by custom weighting.</li></ul><h2>Sourced vs. influenced</h2><p>Most B2B organizations distinguish between two types of campaign credit:</p><ul role="list"><li><strong><a href="/glossary/sourced-pipeline">Sourced pipeline</a></strong>: The campaign is credited with <em>creating</em> the opportunity. This usually means the campaign was the first marketing touch before the opportunity was opened, within a tight window (e.g., 30 days).</li><li><strong>Influenced pipeline</strong>: The campaign touched someone involved in the deal, but wasn't the originating source. The touchpoint happened within the broader <a href="/glossary/influence-window">influence window</a> (e.g., 90 days).</li></ul><p>This distinction matters because it determines how marketing teams think about the purpose of their programs — some campaigns are designed to generate new pipeline, others to accelerate or support existing deals.</p><h2>Why campaign influence is hard to get right</h2><ul role="list"><li><strong>Incomplete buying groups</strong>: If your CRM doesn't capture all the people involved in a deal, their campaign interactions are invisible to influence tracking. <a href="/glossary/identity-resolution">Identity resolution</a> and <a href="/glossary/buying-group">buying group</a> assembly are prerequisites for accurate campaign influence.</li><li><strong>Missing touchpoints</strong>: Not all campaign interactions are captured. A prospect who attended your event but wasn't scanned has no campaign membership record.</li><li><strong>Window sensitivity</strong>: Small changes to the influence window can dramatically change which campaigns receive credit, making results feel arbitrary.</li><li><strong>Double-counting</strong>: Without a <a href="/glossary/zero-sum-attribution">zero-sum</a> or normalized model, the sum of campaign influence can far exceed actual pipeline, making it hard to use for budget decisions.</li></ul><h2>Business applications</h2><ul role="list"><li><strong>Campaign ROI</strong>: Compare spend against influenced pipeline and revenue to identify your highest-performing programs.</li><li><strong>Program mix optimization</strong>: Understand which types of campaigns (events, content, webinars, ads) consistently appear on won deals.</li><li><strong>Cross-team alignment</strong>: Give sales visibility into which marketing programs touched their deals, building trust between teams.</li><li><strong>Budget planning</strong>: Use historical influence data to forecast the pipeline impact of planned campaigns.</li></ul>`,"sourced-pipeline":`<p><strong>Sourced pipeline</strong> refers to pipeline (and ultimately revenue) that is directly attributed to a specific team, channel, or campaign as the <em>originating</em> source of the opportunity. When a deal is "marketing sourced," it means a marketing activity is credited 
2773with creating the opportunity — as opposed to merely influencing or accelerating it.</p><h2>Sourced vs. influenced: the critical distinction</h2><p>In most B2B organizations, pipeline is categorized into two buckets:</p><ul role="list"><li><strong>Sourced</strong>: The activity or team that is credited with generating the opportunity. This typically requires the touchpoint to have occurred within a narrow window (e.g., 30 days) before the opportunity was created, and for it to be the first meaningful marketing interaction.</li><li><strong>Influenced</strong>: The activity touched someone involved in the deal but wasn't the originating source. Influenced pipeline uses a broader <a href="/glossary/influence-window">influence window</a> (e.g., 90-180 days) and acknowledges the multi-touch nature of B2B buying.</li></ul><p>This distinction has real consequences: it determines which team gets credit, which programs receive investment, and how marketing and sales leadership evaluate their performance.</p><h2>Why sourced pipeline is contentious</h2><ul role="list"><li><strong>Oversimplification</strong>: In complex B2B deals with dozens of <a href="/glossary/touchpoint">touchpoints</a> and multiple <a href="/glossary/buying-group">buying group</a> members, reducing the origin to a single source misrepresents how the opportunity actually came to exist.</li><li><strong>Definition disagreements</strong>: What counts as "sourced"? Is it the first touch? The last touch before opportunity creation? The campaign with the most engaged contacts? Different definitions yield different results.</li><li><strong>Team competition</strong>: When sourced pipeline is tied to team quotas and compensation, marketing and sales often compete over credit rather than collaborating on outcomes.</li><li><strong>Window sensitivity</strong>: A deal "sourced" by marketing with a 30-day window might be "sales sourced" with a 14-d
2773ay window. The choice of window is often more political than analytical.</li></ul><h2>How to think about sourced pipeline more effectively</h2><ul role="list"><li><strong>Use alongside influenced</strong>: Sourced tells you where the opportunity originated. <a href="/glossary/campaign-influence">Influenced</a> tells you what helped it progress. Both perspectives are needed for complete understanding.</li><li><strong>Align on definitions</strong>: Before reporting on sourced pipeline, ensure marketing, sales, and executive leadership agree on the rules — what window, which touches qualify, and how edge cases are handled.</li><li><strong>Consider <a href="/glossary/forensic-attribution">forensic attribution</a></strong>: Rather than relying on rigid sourcing rules, forensic methods reconstruct the actual origin story of each deal, often revealing that the "source" was more nuanced than any rule-based model can capture.</li></ul><p>Sourced pipeline remains a useful and widely used metric, but it's most valuable when treated as one lens among several — not as the definitive answer to "who gets credit."</p>`,"b2b-marketing-attribution":'<p><strong>B2B marketing attribution</strong> is the discipline of connecting marketing programs to commercial outcomes — qualified pipeline, influenced opportunities, closed-won revenue, and the speed at which deals move — in markets where buying is a group activity, cycles run for months, and a large share of influence happens off the record.</p><h2>How B2B marketing attribution differs from B2C</h2><p>Consumer attribution often optimizes for a single buyer and a short path to purchase. B2B is structurally different:</p><ul role="list"><li><strong>Buying committees, not solo buyers</strong>: Enterprise deals routinely involve six or more stakeholders with different roles and timelines. Attribution that stops at the contact who filled out a form misses most of the committee.</li><li><strong>Long sales cycles</strong>: When deals take six to eighteen months, default 30- or 90-day lookback windows exclude the early touches that shaped the shortlist.</li><li><strong>The <a href="/glossary/dark-funnel">dark funnel</a></strong>: Peer recommendations, private Slack threads, analyst conversations, and event hallway chats influence decisions without ever becoming a tracked click.</li><li><strong>Account-level reality</strong>: The unit that buys is the account. Effective B2B attribution rolls up touchpoints across every engaged contact at that company.</li></ul><h2>What B2B marketing attribution should measure</h2><p>Teams use attribution to answer different questions at different altitudes. Common outcome events include:</p><ul role="list"><li><strong><a href="/glossary/pipeline-attribution">Pipeline attribution</a></strong> — which programs created or influenced open opportunities?</li><li><strong><a href="/glossary/revenue-attribution">Revenue attribution</a></strong> — which touchpoints preceded closed-won dollars?</li><li><strong><a href="/glossary/campaign-influence">Campaign influence</a></strong> — which campaigns touched people on deals, regardless of who sourced the opp?</li><li><strong>Velocity and efficiency</strong> — do certain channels correlate with faster progression or higher win rates?</li></ul><p>Align on which outcome you are attributing before debating models. Pipeline and revenue attribution answer different planning questions.</p><h2>Common B2B attribution models</h2><p>Most mature teams graduate from single-touch reporting to <a href="/glossary/multi-touch-attribution">multi-touch attribution</a>. Rule-based starting points include:</p><ul role="list"><li><a href="/glossary/linear-attribution">Linear</a> — equal credit to every touch; transparent baseline.</li><li><a href="/glossary/u-shaped-attribution-model">U-shaped</a> — emphasizes journey start and conversion moments.</li><li><a href="/glossary/w-shaped-attribution-model">W-shaped</a> — adds opportunity creation as a third anchor for marketing-to-sales handoffs.</li><li><a href="/glossary/impact-weighted-attribution-model">Impact-weighted</a> or data-driven — weights touchpoints by observed influence rather than position alone.</li></ul><h2>Where B2B marketing attribution breaks down</h2><ul role="list"><li><strong>Fragmented identity</strong>: Without <a href="/glossary/identity-resolution">identity resolution</a>, the same person appears as multiple records and journeys split apart.</li><li><strong>Missing touchpoints</strong>: CRM logs capture what reps remembered to enter — not every email, meeting attendee, or partner introduction.</li><li><strong>Political zero-sum reporting</strong>: <a href="/glossary/zero-sum-attribution">Zero-sum</a> credit splits turn attribution into a budget fight instead of a learning exercise.</li><li><strong>Overconfidence in any one model</strong>: Every model is a lens. Directionally useful beats falsely precise.</li></ul><p>Strong B2B marketing attribution pairs system-tracked data with <a href="/glossary/self-reported-attribution">self-reported</a> and qualitative deal reviews, and treats the <a href="/glossary/account-journey">account journey</a> — not a single lead record — as the unit of analysis.</p>',"pipeline-attribution":'<p><strong>Pipeline attribution</strong> connects marketing and GTM touchpoints to <em>open opportunities</em> — crediting what created or influenced pipeline before a deal closes. It answers a different question than <a href="/glossary/revenue-attribution">revenue attribution</a>, which waits for booked dollars.</p><h2>Pipeline attribution vs. revenue attribution</h2><ul role="list"><li><strong>Pipeline attribution</strong> measures influence on opportunity creation and progression. It is forward-looking: which programs are filling the funnel right now?</li><li><strong>Revenue attribution</strong> measures influence on closed-won (or closed-lost) outcomes. It is backward-looking: which programs actually correlated with deals that signed?</li></ul><p>Healthy GTM teams track both. Pipeline attribution informs near-term budget shifts; revenue attribution validates whether those shifts produced dollars months later.</p><h2>How pipeline attribution works</h2><p>At a high level, pipeline attribution:</p><ol role="list"><li>Captures <a href="/glossary/touchpoint">touchpoints</a> across marketing, sales development, and partner channels.</li><li>Associates those touches with accounts and opportunities in the CRM.</li><li>Applies an <a href="/glossary/influence-window">influence window</a> and model rules to decide which touches count.</li><li>Rolls credit up to channels, campaigns, and content themes.</li></ol><p>In B2B, this only works when touchpoints are aggregated at the account level across the full <a href="/glossary/buying-group">buying group</a>, not just the primary contact on the opportunity.</p><h2>Sourced vs. influenced pipeline</h2><p>Two labels appear in almost every pipeline attribution report:</p><ul role="list"><li><strong><a href="/glossary/sourced-pipeline">Sourced pipeline</a></strong>
2773 — marketing (or another team) is credited with originating the opportunity, usually within a tight pre-creation window.</li><li><strong>Influenced pipeline</strong> — marketing touched someone on the deal but did not originate it. Often measured via <a href="/glossary/campaign-influence">campaign influence</a> with a broader window.</li></ul><p>Executives sometimes conflate these in one dashboard slide. That is how two teams end up arguing from the same chart.</p><h2>Why pipeline attribution is hard in B2B</h2><ul role="list"><li><strong>Long cycles</strong>: Touches that mattered at the start of evaluation may fall outside short lookback windows.</li><li><strong>Incomplete CRM activity</strong>: Sales conversations and partner intros rarely log as neatly as ad clicks.</li><li><strong>Committee dynamics</strong>: The champion who attends your webinar may not be the economic buyer who signs.</li></ul><p>Pipeline attribution improves when teams invest in data hygiene, agree on stage definitions (MQL, SQL, opportunity), and complement models with <a href="/glossary/forensic-attribution">forensic reconstruction</a> of high-value deals.</p>',"go-to-market-attribution":'<p><strong>Go-to-market (GTM) attribution</strong> assigns credit across the full revenue motion — marketing, sales development, account executives, partnerships, and customer success — for outcomes like pipeline creation, deal acceleration, retention, and expansion. It is broader than marketing attribution, which typically stops at lead or opportunity creation.</p><h2>GTM attribution vs. marketing attribution</h2><ul role="list"><li><strong>Marketing attribution</strong> focuses on demand programs: ads, content, events, nurture, and brand. The conversion event is often an MQL or meeting booked.</li><li><strong>GTM attribution</strong> follows the deal. It includes discovery calls, demos, proposals, onboarding, and expansion plays — any touch that plausibly moved revenue.</li></ul><p>When only marketing is measured, sales-led and partner-sourced motions look artificially efficient. When GTM attribution is shared, budget and headcount conversations start from the same timeline.</p><h2>What GTM attribution measures</h2><p>Common outcome events in a GTM attribution framework:</p><ul role="list"><li>Qualified pipeline and <a href="/glossary/pipeline-attribution">pipeline influenced</a></li><li>Closed-won and <a href="/glossary/closed-deal-attribution">closed-deal</a> revenue</li><li>Renewal and expansion revenue</li><li>Cycle time and stage conversion rates</li></ul><p>RevOps-led implementations usually standardize interaction types (ad click, outbound email, meeting held, QBR completed) and eligibility rules before picking a model.</p><h2>Models used in GTM attribution</h2><p>Teams often layer models by question:</p><ul role="list"><li><a href="/glossary/first-touch-attribution">First-touch</a> for top-of-funnel channel mix</li><li><a href="/glossary/last-touch-attribution">Last-touch</a> for conversion triggers</li><li><a href="/glossary/multi-touch-attribution">Multi-touch</a> (linear, <a href="/glossary/u-shaped-attribution-model">U-shaped</a>, or <a href="/glossary/w-shaped-attribution-model">W-shaped</a>) for full-journey reporting</li><li><a href="/glossary/impact-weighted-attribution-model">Impact-weighted</a> or custom weighting when leadership wants explicit, debatable rules</li></ul><h2>Prerequisites for credible GTM attribution</h2><ul role="list"><li><strong>Shared definitions</strong> across marketing, sales, and finance for sourced vs. influenced, and for when an opportunity counts.</li><li><strong>Account-centric data</strong> with <a href="/glossary/identity-resolution">identity resolution</a> so SDR emails, AE calls, and marketing nurtures stitch into one <a href="/glossary/account-story">account story</a>.</li><li><strong>Honest limits</strong> — <a href="/glossary/dark-funnel">dark funnel</a> influence will never fully appear in a dashboard.</li></ul><p>GTM attribution succeeds when it becomes a decision framework for channel mix and alignment, not a scoreboard for fighting over credit.</p>',"closed-deal-attribution":'<p><strong>Closed-deal attribution</strong> distributes credit for <em>
2773booked revenue</em> — closed-won or, in some frameworks, closed-lost — across the touchpoints that preceded the signature. It is a specific application of <a href="/glossary/revenue-attribution">revenue attribution</a> where the conversion event is the deal close, not an earlier funnel stage.</p><h2>Closed-deal attribution vs. funnel-stage attribution</h2><p>Many teams first attribute to MQL creation or opportunity creation because those events happen sooner and produce more data points. Closed-deal attribution waits for the outcome leadership actually funds: dollars.</p><ul role="list"><li><strong>Earlier-stage attribution</strong> helps optimize top- and mid-funnel programs in near real time.</li><li><strong>Closed-deal attribution</strong> validates whether those programs correlated with revenue — often quarters later.</li></ul><p>Using only early-stage attribution can over-invest in volume metrics. Using only closed-deal attribution starves awareness programs whose impact shows up long before a form fill.</p><h2>How closed-deal attribution works</h2><ol role="list"><li>Define the revenue event (closed-won ARR, TCV, or margin — pick one and stick with it).</li><li>Reconstruct the <a href="/glossary/account-journey">account journey</a> of eligible <a href="/glossary/touchpoint">touchpoints</a> within your lookback window.</li><li>Apply a model — <a href="/glossary/last-touch-attribution">last-touch</a>, <a href="/glossary/linear-attribution">linear</a>, <a href="/glossary/w-shaped-attribution-model">W-shaped</a>, or custom weighting.</li><li>Aggregate credited revenue by channel, campaign, and content theme.</li></ol><p>In B2B, the lookback window should reflect your median sales cycle. A 90-day window on a nine-month enterprise motion will systematically under-credit top-of-funnel work.</p><h2>Common pitfalls</h2><ul role="list"><li><strong>Last-touch bias</strong>: The final demo or procurement call gets 100% credit while six months of nurture disappears.</li><li><strong>Missing stakeholders</strong>: Attribution tied to the opportunity owner misses touches from other <a href="/glossary/buying-group">buying group</a> members.</li><li><strong>Survivorship bias</strong>: Studying only wins ignores programs that influenced losses or accelerated competitive evaluations.</li></ul><p>Closed-deal attribution is most actionable when paired with <a href="/glossary/pipeline-attribution">pipeline attribution</a> and periodic win/loss reviews that capture <a href="/glossary/self-reported-attribution">self-reported</a> influences no model logged.</p>',"u-shaped-attribution-model":'<p>The <strong>U-shaped attribution model</strong> (also called <em>position-based attribution</em>) is a multi-touch framework that assigns the largest share of credit to the first and last touchpoints in a journey, with the remainder spread across middle interactions. The most common split is <strong>40% to first touch, 40% to last touch, and 20% divided evenly</strong> among everything in between.</p><h2>How U-shaped attribution distributes credit</h2><p>Example: a prospect has five touchpoints before converting — paid search ad, blog post, webinar, nurture email, and pricing-page visit. Under classic U-shaped weighting:</p><ul role="list"><li>Paid search (first): 40%</li><li>Blog and webinar (middle): 10% each</li><li>Nurture email (middle): 10%</li><li>Pricing page (last): 40%</li></ul><p>If there are more middle touches, the 20% middle pool is divided equally — ten middle touches would receive 2% each.</p><h2>U-shaped vs. other position-based variants</h2><p>In B2B funnels, some teams adapt the anchors:</p><ul role="list"><li><strong>Classic U-shaped</strong>: first touch + last touch before conversion.</li><li><strong>Lead-creation variant</strong>: first touch + the touch that created the lead or MQL, with 20% for nurture in between — common when marketing optimizes for lead volume.</li></ul><p>Document which anchors you use. Changing definitions mid-quarter changes the story without changing performance.</p><h2>When U-shaped attribution fits</h2><ul role="list"><li><strong>Multi-channel journeys</strong> where you need credit for both discovery and conversion.</li><li><strong>Teams graduating from single-touch</strong> without jumping straight to complex custom models.</li><li><strong>Shorter B2B cycles</strong> (roughly sub-90 days) where last-touch still reflects a meaningful conversion moment.</li></ul><h2>Limitations</h2><ul role="list"><li><strong>Middle touches can look negligible</strong> on long journeys with dozens of interactions.</li><li><strong>Arbitrary weights</strong>: 40/40/20 is a convention, not a law of buyer behavior.</li><li><strong>Misses opportunity creation</strong>: For sales-led motions, the handoff from marketing-qualified to sales-qualified may matter more than the last touch — which is why many B2B teams prefer the <a href="/glossary/w-shaped-attribution-model">W-shaped model</a>.</li></ul><p>U-shaped attribution works best as one lens in a <a href="/glossary/multi-touch-attribution">multi-touch</a>
2773 portfolio — compared alongside <a href="/glossary/linear-attribution">linear</a> and <a href="/glossary/first-touch-attribution">first-touch</a> views to see how credit shifts.</p>',"w-shaped-attribution-model":'<p>The <strong>W-shaped attribution model</strong> is a multi-touch framework designed for B2B funnels with distinct stage gates. It assigns heavy credit to <strong>three milestones</strong> — typically first touch, lead creation, and opportunity creation — with lighter credit spread across nurturing touchpoints between those peaks.</p><h2>Standard W-shaped credit distribution</h2><p>The most common implementation allocates:</p><ul role="list"><li><strong>30% to first touch</strong> — what created awareness</li><li><strong>30% to lead creation</strong> — what converted anonymous interest into a known contact or MQL</li><li><strong>30% to opportunity creation</strong> — what moved the contact into active pipeline (often the marketing-to-sales handoff)</li><li><strong>10% shared across all other touches</strong> — nurture emails, retargeting, content, events, and sales activity between milestones</li></ul><p>Some organizations anchor the third peak on closed-won instead of opportunity creation. That variant blurs into full-path revenue models. Pick one third anchor and document it.</p><h2>Why B2B teams use W-shaped attribution</h2><p>B2B buying has three structurally different kinds of work embedded in the journey:</p><ul role="list"><li>Awareness and demand creation</li><li>Lead qualification and nurture</li><li>Sales acceptance and pipeline creation</li></ul><p>Single-touch and simple U-shaped models under-credit the opportunity-creation moment — where marketing influence and sales effort overlap. W-shaped makes that handoff visible in reporting.</p><h2>W-shaped vs. U-shaped</h2><ul role="list"><li><strong><a href="/glossary/u-shaped-attribution-model">U-shaped</a></strong> emphasizes two peaks (usually first and last, or first and lead creation).</li><li><strong>W-shaped</strong> adds opportunity creation as a third peak — better aligned to CRM stages in mid-market and enterprise SaaS.</li></ul><h2>Requirements and limitations</h2><ul role="list"><li><strong>Clean stage timestamps</strong> in your CRM for lead and opportunity creation. Fuzzy stage logic produces fuzzy attribution.</li><li><strong>Only 10% for middle nurture</strong> can under-represent long content journeys — pair with qualitative deal reviews.</li><li><strong>Not a substitute for account-level analysis</strong>: roll touches up across the <a href="/glossary/buying-group">buying group</a> and <a href="/glossary/account-journey">account journey</a>.</li></ul><p>W-shaped attribution is a practical operational model for <a href="/glossary/b2b-marketing-attribution">B2B marketing attribution</a> when you have defined MQL/SQL gates and want reporting both marketing and sales can audit.</p>',"linear-attribution":`<p><strong>Linear attribution</strong> is a multi-touch model that divides credit <em>equally</em> across every recorded touchpoint in the buyer journey. If ten interactions precede a conversion, each receives 10% of the credit. If five interactions, each receives 20%.</p><h2>How linear attribution works</h2><p>The formula is straightforward:</p><p><strong>Credit per touchpoint = 1 ÷ number of touchpoints</strong></p><p>Applied to a closed deal, each touchpoint receives an equal share of pipeline or revenue credit. There is no weighting by position, persona, or recency — only participation in the journey counts.</p><h2>Why teams choose linear attribution</h2><ul role="list"><li><strong>Transparency</strong>: Stakeholders can explain the math in one sentence.</li><li><strong>Neutral baseline</strong>: Useful when moving from <a href="/glossary/first-touch-attribution">first-touch</a> or <a href="/glossary/last-touch-attribution">last-touch</a> reporting to multi-touch for the first time.</li><li><strong>Full-funnel visibility</strong>: Channels that assist but rarely close — organic content, community, early events — finally appear on the scoreboard.</li><li><strong>Long B2B cycles</strong>: When many touches genuinely contribute over months, equal credit can be more honest than giving 100% to the last meeting.</li></ul><h2>Limitations of linear attribution</h2><ul role="list"><li><strong>Equal weight is rarely true</strong>: A three-second banner impression is not equivalent to a 60-minute executive briefing.</li><li><strong>Touchpoint inflation</strong>: More logged activities dilute everyone's share — incentivizing noisy logging unless governance exists.</li><li><strong>Still blind to the dark funnel</strong>: Untracked influence remains invisible regardless of model.</li></ul><p>Linear attribution is best treated as a baseline inside a broader <a href="/glossary/multi-touch-attribution">multi-touch</a> practice — compared against <a href="/glossary/u-shaped-attribution-model">U-shaped</a>, <a href="/glossary/w-shaped-attribution-model">W-shaped</a>, or <a href="/glossary/impact-weighted-attribution-model">impact-weighted</a> models to stress-test budget decisions.</p><h2>When to graduate beyond linear</h2><p>Consider weighted models when:</p><ul role="list"><li>Leadership asks which touches <em>mattered most</em>, not just which touches occurred.</li><li>Sales cycles include clear milestone events worth anchoring (W-shaped).</li><li>You have enough closed deals to validate custom weights against outcomes.</li></ul>`,"account-journey":`<p>An <strong>account journey</strong> is the account-level path a buying committee takes from first problem awareness through evaluation, purchase, and (often) expansion — including every stakeholder's interactions, not just the contact who became a lead in your CRM.</p><h2>Account journey vs. contact journey</h2><p>Most MAP and CRM defaults track individuals. B2B purchases are decided by groups. Mapping only the champion's clicks misses:</p><ul role="list"><li>The technical evaluator who read your docs but never filled a form</li><li>The economic buyer who joined only for the final business case</li><li>Procurement and legal touches that appear late but veto deals</li></ul><p>Account journey mapping rolls individual <a href="/glossary/touchpoint">touchpoints</a> up to the company, aligned with the <a href="/glossary/buying-group">buying group</a> involved in a specific opportunity.</p><h2>Account journey vs. account story</h2><ul role="list"><li><strong><a href="/glossary/account-story">Account story</a></strong> is the operational timeline — what happened, when, across channels and team
2773s.</li><li><strong>Account journey</strong> is the interpretive map — which stages the account moved through, which roles were engaged, and where momentum stalled.</li></ul><p>Teams need both: the story for forensic detail, the journey map for pattern recognition across deals.</p><h2>Typical stages in a B2B account journey</h2><p>Stage names vary by company, but most maps include:</p><ol role="list"><li><strong>Problem recognition</strong> — the account acknowledges a gap (often invisible to vendors).</li><li><strong>Solution education</strong> — category research, peer recommendations, <a href="/glossary/dark-funnel">dark funnel</a> influence.</li><li><strong>Active evaluation</strong> — demos, pilots, security review, multi-stakeholder meetings.</li><li><strong>Decision and procurement</strong> — business case, legal, signature.</li><li><strong>Onboarding and expansion</strong> — adoption, renewal, upsell motions.</li></ol><h2>Why account journey mapping improves attribution</h2><ul role="list"><li>Reveals <strong>coverage gaps</strong> — stages where no content or sales motion exists for a key role.</li><li>Surfaces <strong>committee dynamics</strong> that single-contact <a href="/glossary/multi-touch-attribution">multi-touch models</a> flatten.</li><li>Connects marketing programs to <a href="/glossary/pipeline-attribution">pipeline</a> movement by stage, not just by last click.</li></ul><p>Account journey work depends on <a href="/glossary/identity-resolution">identity resolution</a> and consistent CRM hygiene. Without them, the map is a well-formatted guess.</p>`,miniapp:`<p>A <strong>miniapp</strong> is a small, self-contained application produced by an AI coding agent from a natural-language prompt. Unlike a full software product, a miniapp is scoped to one job: a report with filters, a calculator, a tracker, or a lightweight dashboard view. The builder describes what they need; the agent writes the application logic, interface, and any data connections.</p><h2>Standalone file vs. hosted platform</h2><p>Miniapps commonly ship in one of two forms:</p><ul role="list"><li><strong>Standalone file:</strong> A single HTML file (often with embedded JavaScript) that runs locally or is shared as a link. Useful for quick prototypes or fixed snapshots, but usually disconnected from live data unless someone refreshes or re-exports manually.</li><li><strong>Hosted on a platform:</strong> The app runs inside a product environment with managed hosting, versioning, permissions, and SDK access to live APIs or warehouses. The platform handles deployment, sandboxing, and data plumbing; the builder supplies the logic.</li></ul><h2>Live data and team use</h2><p>When hosted, miniapps are often wired to live data feeds: SQL against a warehouse, CRM queries, or other APIs on each load so the view reflects current state rather than a stale export. Mature implementations add versioning, roll-back, and scoped sharing so a one-off prototype can become a durable team asset.</p><h2>Miniapps in GTM and analytics</h2><p>Go-to-market and analytics teams use miniapps for work that does not justify a formal engineering project: channel breakdowns, campaign trackers, <a href="/glossary/revenue-attribution">attribution</a> explorers, and deal post-mortem views. The pattern replaces analyst-queue requests and one-off spreadsheets with a reusable app on shared data. See <a href="/glossary/account-story">account story</a> and <a href="/glossary/forensic-attribution">forensic attribution</a> for the kinds of questions teams often turn into miniapps.</p><h2>Upside miniapps</h2><p>Upside is one implementation of the miniapp pattern for GTM teams. On Upside, miniapps live in the dashboard, query healed GTM data live through the Miniapp SDK, and are built and published from Claude, Cursor, or Upside's hosted agent over MCP. <a href="/platform/miniapps">Learn how Upside miniapps work →</a></p>`},rue=()=>{const{slug:e}=Ta(),t=t1.find(l=>l.slug===e);if(!t)return n.jsxs(Qe,{navVariant:"light",children:[n.jsx("section",{id:"hero",className:"subpage-hero subpage-hero--glossary",children:n.jsx("div",{className:"blog-post-hero",children:n.jsx("div",{className:"blog-post-hero__container",children:n.jsxs("div",{className:"w-layout-vflex blog-post-hero__header blog-post-hero__header--glossary",children:[n.jsx("nav",{className:"glossary-term-breadcrumb","aria-label":"Breadcrumb",children:n.jsx(J,{to:"/glossary",children:"GTM Glossary"})}),n.jsx("h1",{className:"heading-xl",children:"Term Not Found"}),n.jsx("p",{className:"body-l glossary-term-not-found",children:"The glossary term you're looking for doesn't exist."})]})})})}),n.jsx("div",{className:"container-blog",children:n.jsx("div",{className:"content",children:n.jsx("section",{className:"section",children:n.jsx(J,{to:"/glossary",className:"cta w-button",children:"Back to Glossary"})})})})]});const a=e?iue[e]:void 0,i=`https://upside.tech/glossary/${e}`,r=eue(t.cluster),o=OG(t.cluster).filter(l=>l.slug!==e);return n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:Qde(t),description:t.definition,ogImage:Xde(e),canonicalUrl:i,jsonLd:{"@context":"https://schema.org","@type":"DefinedTerm",name:t.term,description:t.definition,url:i,inDefinedTermSet:{"@type":"DefinedTermSet",name:"Upside GTM Glossary",url:"https://upside.tech/glossary"}}}),n.jsx("section",{id:"hero",className:"subpage-hero subpage-hero--glossary",children:n.jsx("div",{className:"blog-post-hero",children:n.jsx("div",{className:"blog-post-hero__container",children:n.jsxs("div",{className:"w-layout-vflex blog-post-hero__header blog-post-hero__header--glossary",children:[n.jsxs("nav",{className:"glossary-term-breadcrumb","aria-label":"Breadcrumb",children:[n.jsx(J,{to:"/glossary",children:"GTM Glossary"}),n.jsx("span",{className:"glossary-term-breadcrumb__sep","aria-hidden":"true",children:"/"}),n.jsx(J,{to:`/glossary#${r.id}`,children:r.title})]}),n.jsx("h1",{className:"heading-xl",children:t.term})]})})})}),n.jsx("div",{className:"container-blog",children:n.jsx("div",{className:"content",children:n.jsxs("section",{className:"section glossary-term-layout",children:[n.jsx("div",{className:"glossary-term-main",children:a?n.jsx("div",{className:"article-content__rich-text w-richtext",dangerouslySetInnerHTML:{__html:a}}):n.jsx("div",{style:{maxWidth:"768px",margin:"0 auto"},children:n.jsx("p",{className:"body-l",children:t.definition})})}),n.jsxs("div",{className:"glossary-term-aside",children:[n.jsx(aue,{slug:e}),o.length>0&&n.jsxs("aside",{className:"glossary-related","aria-label":"More in this topic",children:[n.jsxs("h2",{className:"glossary-related__title",children:["More in ",r.title]}),n.jsx("ul",{className:"glossary-related__list",children:o.slice(0,6).map(l=>n.jsx("li",{children:n.jsx(J,{to:`/glossary/${l.slug}`,className:"glossary-related__link",children:l.term})},l.slug))}),n.jsx(J,{to:`/glossary#${r.id}`,className:"glossary-related__hub-link",children:"View all →"})]})]}),n.jsx("div",{className:"glossary-term-footer",children:n.jsx(J,{to:"/glossary",className:"cta cc-secondary w-button",children:"Back to Glossary"})})]})})})]})},xe={ledger:"#0c1e20",surface:"#F5F7FA",signal:"#509a79",text:"#0c1e20",textSoft:"#16302f",muted:"#5f6563",onDark:"#F
27735F7FA",onDarkMuted:"rgba(245,247,250,0.6)",onDarkFaint:"rgba(245,247,250,0.45)",onDarkDim:"rgba(245,247,250,0.3)",border:"rgba(12,30,32,0.1)",hairline:"rgba(12,30,32,0.07)",borderDark:"rgba(245,247,250,0.14)",borderDarkSoft:"rgba(245,247,250,0.12)",title:'"Geist", sans-serif'},PG=({children:e,onDark:t=!1,style:a})=>n.jsx("div",{style:{fontSize:"12px",fontWeight:500,letterSpacing:"0.14em",textTransform:"uppercase",color:t?xe.signal:xe.muted,...a},children:e}),oue=({children:e})=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"10px"},children:[n.jsx("span",{"aria-hidden":"true",style:{width:7,height:7,borderRadius:9999,background:xe.signal,display:"block"}}),n.jsx("span",{style:{fontSize:"11px",fontWeight:600,letterSpacing:"0.14em",textTransform:"uppercase",color:xe.signal},children:e})]}),Vh=({title:e,meta:t,size:a=38})=>n.jsxs("div",{style:{display:"flex",alignItems:"flex-end",justifyContent:"space-between",gap:"32px",paddingBottom:"24px",borderBottom:`1px solid ${xe.hairline}`,flexWrap:"wrap"},children:[n.jsx("h2",{style:{margin:0,fontFamily:xe.title,fontSize:`clamp(26px, 3.4vw, ${a}px)`,fontWeight:500,letterSpacing:"-0.025em",lineHeight:1.15,color:xe.textSoft},children:e}),t&&n.jsx("div",{style:{fontSize:"14px",color:xe.muted},children:t})]}),V0=({children:e})=>n.jsx("h2",{style:{margin:0,fontFamily:xe.title,fontSize:"15px",fontWeight:600,letterSpacing:"0.12em",textTransform:"uppercase",color:xe.muted},children:e}),IG=({label:e,image:t,meta:a,title:i,footnote:r,cta:o})=>n.jsxs("div",{style:{background:"rgba(245,247,250,0.04)",border:`1px solid ${xe.borderDark}`,borderRadius:14,padding:28,display:"flex",flexDirection:"column",gap:20},children:[n.jsx(oue,{children:e}),t&&n.jsx("div",{className:"er-media",style:{borderRadius:10,background:"#0a181a",width:"fit-content",maxWidth:"100%",margin:"0 auto"},children:n.jsx("img",{src:t,alt:"",style:{display:"block",width:"auto",height:"auto",maxWidth:"100%",maxHeight:260}})}),n.jsxs("div",{children:[n.jsx("div",{style:{fontSize:"13px",color:"rgba(245,247,250,0.55)"},children:a}),n.jsx("h2",{style:{margin:"10px 0 0",fontFamily:xe.title,fontSize:"26px",fontWeight:500,letterSpacing:"-0.02em",lineHeight:1.2,color:xe.onDark},children:i})]}),r&&n.jsx("span",{style:{fontSize:"13px",color:xe.onDarkMuted},children:r}),o]}),DG=({children:e})=>n.jsx("span",{style:{display:"inline-flex",alignItems:"center",height:20,padding:"0 9px",borderRadius:9999,background:"rgba(80,154,121,0.12)",color:"#316851",fontSize:"11px",fontWeight:600,letterSpacing:"0.08em",textTransform:"uppercase",whiteSpace:"nowrap"},children:e}),sue={solid:{background:xe.signal,color:"#fff",border:"1px solid transparent"},outline:{background:"transparent",color:xe.text,border:`1px solid ${xe.border}`},ghost:{background:"rgba(245,247,250,0.08)",color:xe.onDark,border:`1px solid ${xe.borderDark}`}};function vs(e="solid",t=!1){return{display:t?"flex":"inline-flex",alignItems:"center",justifyContent:"center",minHeight:40,padding:"10px 20px",borderRadius:8,fontSize:"14px",fontWeight:500,lineHeight:1.2,textAlign:"center",cursor:"pointer",width:t?"100%":void 0,...sue[e]}}const WG=({title:e,items:t,marker:a="num"})=>!t||t.length===0?null:n.jsxs("div",{children:[n.jsx(V0,{children:e}),n.jsx("div",{style:{display:"flex",flexDirection:"column",marginTop:"24px",borderTop:`1px solid ${xe.border}`},children:t.map(i=>n.jsxs("div",{className:`er-agenda-row er-agenda-row--${a}`,children:[n.jsx("div",{style:{fontFamily:xe.title,fontSize:"15px",color:xe.signal},children:i.label}),n.jsx("div",{style:{fontSize:"17px",lineHeight:1.55,color:xe.text},children:i.text})]},i.label+i.text))})]}),OP="https://prod-assets.sequelvideo.com/uploads/toolkit/sequel.js";function lue(){var a;if(typeof((a=window.Sequel)==null?void 0:a.renderEvent)=="function")return Promise.resolve();let e=document.querySelector(`script[src="${OP}"]`);(e==null?void 0:e.dataset.failed)==="true"&&(e.remove(),e=null),e||(e=document.createElement("script"),e.src=OP,e.async=!0,document.head.appendChild(e));const t=e;return new Promise((i,r)=>{t.addEventListener("load",()=>i(),{once:!0}),t.addEventListener("error",()=>{t.dataset.failed="true",r(new Error("Sequel toolkit failed to load"))},{once:!0})})}const zG=({eventId:e,height:t=620})=>{const a=M.useRef(null);return M.useEffect(()=>{const i=a.current;if(!i)return;const r=document.createElement("div");i.replaceChildren(r);let o=!1;return lue().then(()=>{var l,d;o||(d=(l=window.Sequel)==null?void 0:l.renderEvent)==null||d.call(l,{eventId:e,container:r,height:t})}).catch(l=>{o||console.error("[SequelEmbed]",l)}),()=>{o=!0,r.remove()}},[e,t]),n.jsx("div",{id:"sequel-embed",ref:a})},n1=[{slug:"how-exa-and-comply-improved-roi-of-paid-spend",title:"How Exa and Comply Improved the ROI of their Paid Spend with Upside",date:"September 10, 2026",dateISO:"2026-09-10",time:"10:00 AM PT",startsAt:"2026-09-10T10:00:00-07:00",sequelEventId:"7a035b0e-c4c0-496d-8fd0-648846a3baaf",description:"See how Exa and Comply use Upside to better understand paid campaign performance, uncover what's actually driving pipeline, and make smarter decisions about where to spend. We'll walk through real examples of how their teams turned fragmented campaign data into miniapps for clearer insights and stronger ROI.",descriptionHtml:`See how Exa and Comply use Upside to better understand paid campaign performance, uncover what's actually driving pipeline, and make smarter decisions about where to spend. We'll walk through real examples of how their teams turned fragmented campaign data into <a href="/platform/miniapps">miniapps</a> for clearer insights and stronger ROI.`,blurb:"Turning fragmented campaign data into miniapps for clearer paid ROI.",who:"Exa · Comply · Upside",image:"/images/webinar-exa-comply-paid-spend-roi.png",ogImage:"/images/webinar-exa-comply-paid-spend-roi.png",agenda:[{label:"01",text:"How a paid lead travels from MQL to opportunity, and why that is the strictest of three paid-sourced signals"}
2773,{label:"02",text:"Spend efficiency: spotting degradation as investment climbs, and finding the real threshold before spend turns wasteful"},{label:"03",text:"Which segments respond to which search terms, including why smaller prospects look up the same things enterprise buyers do"},{label:"04",text:"Carrying UTMs across Upside, HubSpot and Salesforce so paid keeps credit when someone converts elsewhere on the site"},{label:"05",text:"Building the miniapp: short prompts, an incremental build rather than one big spec, and asking the data for receipts instead of summaries"}]},{slug:"how-to-solve-attribution-with-ai",title:"How to Solve Attribution with AI",date:"July 23, 2026",dateISO:"2026-07-23",time:"11:00 AM PT",startsAt:"2026-07-23T11:00:00-07:00",sequelEventId:"25db0f80-9792-42fc-8678-9c510ab22ec6",description:"Learn how to solve marketing attribution with AI. See how Upside reconstructs what actually happened across the customer journey from messy GTM data like call transcripts, emails, and CRM notes, and turns it into revenue attribution you can trust.",blurb:"How Upside reconstructs the customer journey from call transcripts, emails and CRM notes.",who:"Upside team",image:"/images/webinar-solve-attribution-with-ai.png",ogImage:"https://upside.tech/images/webinar-solve-attribution-with-ai.png"},{slug:"gtm-engineers-with-ai",title:"How Three Marketing Leaders Are Becoming GTM Engineers With AI",date:"April 9, 2026",dateISO:"2026-04-09",sequelEventId:"28a43794-dca7-4819-962e-72c753367998",description:"Join three marketing leaders from ServiceTitan, Dscout, and Comply as they share how they're using AI to become GTM Engineers — building workflows, automating pipelines, and driving revenue with modern tools.",descriptionHtml:`Join three marketing leaders from <a href="https://www.servicetitan.com" target="_blank" rel="noopener noreferrer">ServiceTitan</a>, <a href="https://dscout.com" target="_blank" rel="noopener noreferrer">Dscout</a>, and <a href="https://comply.com" target="_blank" rel="noopener noreferrer">Comply</a> as they share how they're using AI to become GTM Engineers — building workflows, automating pipelines, and driving revenue with modern tools.`,blurb:"Leaders from ServiceTitan, Dscout and Comply on building workflows and automating pipelines.",who:"ServiceTitan · Dscout · Comply",image:"/images/webinar-gtm-engineers-with-ai.png",ogImage:"https://upside.tech/images/webinar-gtm-engineers-with-ai.png"},{slug:"how-to-automate-five-different-marketing-functions",title:"How To Automate Five Different Marketing Functions",date:"March 25, 2026",dateISO:"2026-03-25",sequelEventId:"47b719ff-820b-4517-9363-72db3872ac0d",description:"Join us for a hands-on webinar where we'll show you how to automate high-impact marketing workflows with AI. Through step-by-step demos, you'll learn how to build systems for ad management, SEO, content creation, case study development, analysis, and website design. We'll also cover how to connect tools and MCPs, create and run skills, and orchestrate them into scalable workflows that go far beyond basic automation.",blurb:"Step-by-step demos for ad management, SEO, content, case studies and website design.",who:"Upside team",image:"/images/webinar-automate-marketing.png",ogImage:"https://upside.tech/images/webinar-automate-marketing.png"},{slug:"upside-x-swyx-how-to-thought-lead-in-the-age-of-ai",title:"Upside x Swyx - How To Thought Lead in the Age of AI",date:"March 12, 2026",dateISO:"2026-03-12",sequelEventId:"962b5789-38cb-45c4-b2f0-796bf25f45cd",description:"Shawn Wang (Swyx) helps foster the Rise of the AI Engineer. Join him and the Upside team for a conversation on thought leadership in the age of AI.",blurb:"Shawn Wang (Swyx) and the Upside team on thought leadership in the age of AI.",who:"Shawn Wang (Swyx)",image:"/images/webinar-swyx-thought-leadership.png",ogImage:"/images/webinar-swyx-thought-leadership.png"},{slug:"upside-x-graphite",title:"Upside x Graphite - How to get to $15M Revenue Completely from Inbound",date:"February 25, 2026",dateISO:"2026-02-25",sequelEventId:"45211356-77fe-4b91-86c4-922da97e75f8",description:"Join Mada Seghete, CEO at Upside and Ethan Smith, AEO expert and CEO of Graphite for a conversation on the unconventional playbook Graphite used to build a fully inbound pipeline—and how they measured what mattered along the way.",blurb:"Mada Seghete (Upside) and Ethan Smith (Graphite) on the unconventional playbook Graphite used to build a fully inbound pipeline.",who:"Upside · Graphite",image:"/images/webinar-gra
2773phite-upside.png",slidesUrl:"/documents/Graphite-x-Upside-Webinar-Slides-Feb-25-2026.pdf",ogImage:"/images/webinar-graphite-upside.png"}],cue=Object.fromEntries(n1.map(e=>[e.slug,e]));function K0(e){return new Date(e.startsAt??`${e.dateISO}T00:00:00`).getTime()}function hh(e,t=new Date){if(e.startsAt)return new Date(e.startsAt)<=t;const a=new Date(t);return a.setHours(0,0,0,0),new Date(`${e.dateISO}T00:00:00`)<=a}function due(e=new Date){return n1.filter(t=>!hh(t,e)).sort((t,a)=>K0(t)-K0(a))}function uue(e=new Date){return n1.filter(t=>hh(t,e)).sort((t,a)=>K0(a)-K0(t))}const LM=[{title:"Codenames Game Night: GTM Edition",date:"September 8, 2026",startISO:"2026-09-08",endISO:"2026-09-08",time:"5:00 – 8:00 PM PT",location:"Latent Space AI Studio, San Francisco, CA",type:"Hosting",url:"https://luma.com/upside-10ng",description:"GTM has developed its own language: pipeline, positioning, attribution, growth. Half the fun is pretending we all mean the same thing. GTM Codenames is a low-stakes, high-opinion game night built around a custom deck of 400 GTM terms. We'll split into teams, give one-word clues, and attempt to connect words like PIPE, TASTE, and SLICE without accidentally sending everyone toward ATTRIBUTION. Expect unexpected connections, friendly competition, and a room full of people who understand why GTM jargon makes an excellent party game. Come solo or bring a fellow GTM friend.",hostedBy:"Upside",hostedByUrl:"https://www.upside.tech",image:"/images/event-gtm-codenames.avif"},{title:"AI in GTM track at the AI Engineer World's Fair",date:"June 29 – July 2, 2026",startISO:"2026-06-29",endISO:"2026-07-02",time:"All day",location:"San Francisco, CA",type:"Speaking",url:"https://www.ai.engineer/worldsfair/2026",description:"We pulled together technical GTM speakers from Clay, Ramp, Cloudflare, Fin, Notion and more. If you build GTM systems, this is for you. Grab the engineer ticket and use UPSIDE1DAYPASS for a heavily discounted pass.",hostedBy:"AI 
2773Engineer",hostedByUrl:"https://www.ai.engineer/",image:"/images/event-ai-engineer-worlds-fair.jpg"},{title:"Show & Tell: AI for GTM @Notion with Baseten, Cognition and Samsara",date:"July 14, 2026",startISO:"2026-07-14",endISO:"2026-07-14",time:"6:00 – 9:00 PM PT",location:"Notion HQ, San Francisco, CA",type:"Hosting",url:"https://luma.com/b8ie1m1s?tk=TGZ1lz",internalSlug:"show-and-tell-ai-for-gtm-notion",description:"A demo-only event for go-to-market teams actually building with AI. No slides. No pitches. No thought leadership. Just 5–6 practitioners opening up their laptops and walking you through the real AI workflows they use at work, every day. Join in person at Notion HQ or via livestream.",hostedBy:"Upside x Notion",hostedByUrl:"https://www.upside.tech",image:"/images/event-show-tell-notion-demos.png"},{title:"Show & Tell: AI for GTM",date:"May 12, 2026",startISO:"2026-05-12",endISO:"2026-05-12",location:"San Francisco, CA",type:"Hosting",url:"https://luma.com/04bg11l5",internalSlug:"show-and-tell-ai-for-gtm",description:"A demo-only event for go-to-market teams actually building with AI. No slides. No pitches. Just practitioners opening up their laptops and walking you through the workflows they've built — the ones they use at work, every day.",hostedBy:"Upside",hostedByUrl:"https://www.upside.tech",image:"/images/event-show-tell-ai-gtm.png"},{title:"HumanX",date:"April 6–9, 2026",startISO:"2026-04-06",endISO:"2026-04-09",location:"San Francisco, CA",type:"Speaking",url:"https://humanx.co",description:'The #1 AI conference. Mad
2773a Seghete, Co-founder & CEO of Upside, is speaking on "How to Market Your AI Tools Successfully" and hosting a roundtable on "How AI is Rewriting Go-to-Market."',hostedBy:"HumanX",hostedByUrl:"https://humanx.co",image:"/images/event-humanx.jpg"},{title:"ChiliPalooza '26",date:"May 6–8, 2026",startISO:"2026-05-06",endISO:"2026-05-08",location:"Santa Ana Pueblo, New Mexico",type:"Sponsoring",url:"https://www.chilipiper.com/chilipalooza",description:"An exclusive 150-person GTM experience where the best leaders meet to build the AI future. Two days of bold conversations on what stays human, what gets automated, and how to lead both.",hostedBy:"Chili Piper",hostedByUrl:"https://www.chilipiper.com",image:"/images/event-chilipalooza.jpg"},{title:"YPO Global Marketing Summit 2026",date:"May 5–7, 2026",startISO:"2026-05-05",endISO:"2026-05-07",location:"San Francisco, CA",type:"Speaking",url:"https://event.ypo.org/event/636b783a-5cd4-48d2-956f-07ffdb818a1a/summary?i=5ANVFvAfYkWtbgseEKzQzA",description:'Future-Proofing Your Brand & Business. Mada Seghete, Co-founder & CEO of Upside, is leading a workshop on "Building Your Marketing Strategy with AI."',hostedBy:"YPO",hostedByUrl:"https://ypo.org",hostedByDescription:"World's largest leadership community of CEOs",image:"/images/event-ypo-summit.jpg"},{title:"RevFest 2026",date:"May 21, 2026",startISO:"2026-05-21",endISO:"2026-05-21",location:"Elsewhere, Brooklyn, NY",type:"Sponsoring",url:"https://revfest.gonimbly.com/",description:"A one-of-a-kind conference celebrating the work of the best RevOps and GTM operators — without all the stuff that makes people hate B2B events.",hostedBy:"Go Nimbly",hostedByUrl:"https://gonimbly.com",image:"/images/event-revfest.png"},{title:"The AI x Marketing Summit, Spring 2026",date:"May 28–29, 2026",startISO:"2026-05-28",endISO:"2026-05-29",location:"San Francisco, CA",type:"Speaking",url:"https://luma.com/ifep44r5",description:"A two-day Promptathon + Summit where marketers become AI-native operators — hands-on workshops, tactical sessions on prompting and automation, and speakers from Writer, Samsara, Webflow, Box, and more. Upside is presenting.",hostedBy:"AI x Marketing",hostedByUrl:"https://luma.com/ifep44r5",hostedByDescription:"The community helping marketers become AI-native",image:"/images/event-ai-x-marketing-summit.jpg"}],hue=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];function LG(e){const[,t,a]=e.split("-");return{month:hue[Number(t)-1]??"",day:a}}function UG(e){return[e.date,e.time,e.location].filter(Boolean).join(" · ")}function BG(e){const t=new Date(e);return t.setHours(0,0,0,0),t}function pue(e=new Date){const t=BG(e);return LM.filter(a=>new Date(`${a.endISO}T00:00:00`)>=t).sort((a,i)=>a.startISO.localeCompare(i.startISO))}function mue(e=new Date){const t=BG(e);return LM.filter(a=>new Date(`${a.endISO}T00:00:00`)<t).sort((a,i)=>i.startISO.localeCompare(a.startISO))}const fue=({webinar:e})=>{const{month:t,day:a}=LG(e.dateISO);return n.jsxs(J,{to:`/webinars/${e.slug}`,className:"er-card er-row",style:{padding:24},children:[n.jsxs("div",{className:"er-row-chip",style:{textAlign:"center",padding:"16px 0",borderRadius:10,background:xe.surface},children:[n.jsx("div",{style:{fontSize:"12px",fontWeight:600,letterSpacing:"0.12em",textTransform:"uppercase",color:xe.signal},children:t}),n.jsx("div",{style:{marginTop:6,fontFamily:xe.title,fontSize:"32px",fontWeight:500,letterSpacing:"-0.02em",lineHeight:1},children:a})]}),n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:10,minWidth:0},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[n.jsx(DG,{children:"Live"}),e.time&&n.jsx("span",{style:{fontSize:"13px",color:xe.muted},children:e.time})]}),n.jsx("h3",{className:"er-clamp2",style:{margin:0,fontFamily:xe.title,fontSize:"26px",fontWeight:500,letterSpacing:"-0.025em",lineHeight:1.2},children:e.title}),n.jsx("div",{style:{fontSize:"14px",lineHeight:1.55,color:xe.muted},children:e.blurb??e.description}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:16,flexWrap:"wrap"},children:[e.who&&n.jsx("span",{style:{fontSize:"13px",color:xe.muted},children:e.who}),n.jsxs("span",{style:{fontSize:"14px",fontWeight:500,color:xe.signal},children:["Register ",n.jsx("span",{className:"er-arrow","aria-hidden":"true",children:"→"})]})]})]}),n.jsx("div",{className:"er-media er-row-media",style:{borderRadius:10},children:n.jsx("img",{src:e.image,alt:"",loading:"lazy",style:{objectFit:"cover"}})})]})},gue=({webinar:e})=>n.jsxs(J,{to:`/webinars/${e.slug}`,className:"er-card",style:{display:"flex",flexDirection:"column",overflow:"hidden"},children:[n.jsx("div",{className:"er-media",style:{aspectRatio:"16 / 9"},children:n.jsx("img",{src:e.image,alt:"",loading:"lazy",style:{objectFit:"contain"}})}),n.jsxs("div",{style:{padding:"28px 28px 30px",display:"flex",flexDirection:"column",gap:16,flex:1},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10},children:[n.jsx("span",{style:{fontSize:"11px",fontWeight:600,letterSpacing:"0.1em",textTransform:"uppercase",color:xe.signal},children:"Replay"}),n.jsx("span",{"aria-hidden":"true",style:{width:3,height:3,borderRadius:9999,background:"rgba(12,30,32,0.2)"}}
2773),n.jsx("span",{style:{fontSize:"13px",color:xe.muted},children:e.date})]}),n.jsx("h3",{className:"er-clamp2",style:{margin:0,fontFamily:xe.title,fontSize:"24px",fontWeight:500,letterSpacing:"-0.02em",lineHeight:1.25},children:e.title}),n.jsx("p",{className:"er-clamp2",style:{margin:0,fontSize:"15px",lineHeight:1.6,color:xe.muted},children:e.blurb??e.description}),n.jsxs("div",{style:{marginTop:"auto",display:"flex",alignItems:"center",justifyContent:"space-between",gap:16,paddingTop:8},children:[n.jsx("span",{style:{fontSize:"13px",color:xe.muted},children:e.who}),n.jsxs("span",{style:{fontSize:"14px",fontWeight:500,color:xe.signal,whiteSpace:"nowrap"},children:["Watch ",n.jsx("span",{className:"er-arrow","aria-hidden":"true",children:"→"})]})]})]})]}),yue=()=>{const e=due(),t=uue(),a=e[0];return n.jsxs(Qe,{navVariant:"dark",children:[n.jsx(Je,{title:"Webinars",description:"Join Upside webinars on revenue attribution, AI workflows, and go-to-market analytics with practical lessons from operators and founders.",canonicalUrl:"https://upside.tech/webinars"}),n.jsxs("div",{className:"er-shell",children:[n.jsx("section",{className:"er-hero",children:n.jsxs("div",{className:"er-wrap er-hero-split",style:{paddingTop:"148px",paddingBottom:"96px"},children:[n.jsxs("div",{children:[n.jsx(PG,{onDark:!0,children:"Webinars"}),n.jsx("h1",{style:{margin:"24px 0 0",fontFamily:xe.title,fontSize:"clamp(38px, 6vw, 76px)",fontWeight:600,letterSpacing:"-0.03em",lineHeight:1.02,color:xe.onDark,textWrap:"balance"},children:"Best practices for revenue intelligence"}),n.jsx("p",{style:{margin:"28px 0 0",maxWidth:520,fontSize:"18px",lineHeight:1.6,color:xe.onDarkMuted,textWrap:"pretty"},children:"Operators from Exa, Graphite, ServiceTitan, Dscout and Comply on attribution, AI workflows and go-to-market analytics. Live sessions, then on-demand the day after."})]}),a&&n.jsx(IG,{label:"Next live session",image:a.image,meta:[a.date,a.time].filter(Boolean).join(" · "),title:a.title,footnote:a.who,cta:n.jsx(J,{to:`/webinars/${a.slug}`,style:vs("solid",!0),children:"Register"})})]})}),e.length>0&&n.jsxs("section",{className:"er-wrap",style:{paddingTop:"88px",paddingBottom:"0"},children:[n.jsx(Vh,{title:"Upcoming"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:20,marginTop:36},children:e.map(i=>n.jsx(fue,{webinar:i},i.slug))})]}),t.length>0&&n.jsxs("section",{className:"er-wrap",style:{paddingTop:"88px",paddingBottom:"0"},children:[n.jsx(Vh,{title:"On demand"}),n.jsx("div",{className:"er-grid-2",style:{marginTop:36},children:t.map(i=>n.jsx(gue,{webinar:i},i.slug))})]}),n.jsx("section",{className:"er-wrap",style:{paddingTop:"96px",paddingBottom:"112px"},children:n.jsxs("div",{style:{background:xe.ledger,borderRadius:28,padding:"clamp(40px, 6vw, 72px) clamp(24px, 5vw, 80px)",display:"flex",flexWrap:"wrap",gap:48,alignItems:"center",justifyContent:"space-between"},children:[n.jsxs("div",{style:{minWidth:0},children:[n.jsx("h2",{style:{margin:0,fontFamily:xe.title,fontSize:"clamp(28px, 4vw, 40px)",fontWeight:500,letterSpacing:"-0.025em",lineHeight:1.1,color:xe.onDark,textWrap:"balance"},children:"The data layer for the age of agentic GTM"}),n.jsx("p",{style:{margin:"18px 0 0",maxWidth:520,fontSize:"17px",lineHeight:1.6,color:xe.onDarkMuted},children:"Upside unifies, structures and enhances your marketing and sales data, so every deal, rep, campaign and channel is one record your team and your agents can work from."})]}),n.jsxs("div",{style:{display:"flex",gap:16,flexWrap:"wrap"},children:[n.jsx(J,{to:Wt,style:vs("solid"),children:"Request Demo"}),n.jsx(J,{to:"/events",style:vs("ghost"),children:"See our events"})]})]})})]})]})},qG=({event:e,className:t,style:a,children:i})=>e.internalSlug?n.jsx(J,{to:`/events/${e.internalSlug}`,className:t,style:a,children:i}):n.jsx("a",{href:e.url,target:"_blank",rel:"noopener noreferrer",className:t,style:a,children:i}),bue=({event:e})=>n.jsxs("span",{children:["Hosted by"," ",e.hostedByUrl?n.jsx("a",{className:"er-above",href:e.hostedByUrl,target:"_blank",rel:"noopener noreferrer",style:{color:"inherit",textDecoration:"underline"},children:e.hostedBy}):e.hostedBy,e.hostedByDescription&&` — ${e.hostedByDescription}`]}),vue=({event:e})=>{const{month:t,day:a}=LG(e.startISO);return n.jsxs("div",{className:"er-card er-card--linked er-row",style:{padding:24},children:[n.jsxs("div",{style:{textAlign:"center",padding:"18px 0",borderRadius:10,background:xe.surface},children:[n.jsx("div",{style:{fontSize:"12px",fontWeight:600,letterSpacing:"0.12em",textTransform:"uppercase",color:xe.signal},children:t}),n.jsx("div",{style:{marginTop:6,fontFamily:xe.title,fontSize:"34px",fontWeight:500,letterSpacing:"-0.02em",lineHeight:1},children:a})]}),n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,minWidth:0},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:10,flexWrap:"wrap"},children:[n.jsx(DG,{children:e.type}),n.jsx("span",{style:{fontSize:"13px",color:xe.muted},children:UG(e)})]}),n.jsx("h3",{className:"er-clamp2",style:{margin:0,fontFamily:xe.title,fontSize:"27px",fontWeight:500,letterSpacing:"-0.025em",lineHeight:1.2},children:n.jsx(qG,{event:e,className:"er-stretch",style:{color:"inherit"},children:e.title})}),n.jsx("p",{className:"er-clamp2",style:{margin:0,fontSize:"15px",lineHeight:1.6,color:xe.muted},children:e.description}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:16,flexWrap:"wrap",fontSize:"13px",color:xe.muted},children:[n.jsx(bue,{event:e}),n.jsxs("span",{style:{color:xe.signal,fontWeight:500,fontSize:"14px"},children:["Learn more ",n.jsx("span",{className:"er-arrow","aria-hidden":"true",children:"→"})]})]})]}),e.image&&n.jsx("div",{className:"er-media er-row-media",style:{borderRadius:10},children:n.jsx("img",{src:e.image,alt:"",loading:"lazy",style:{objectFit:"cover",objectPosition:e.imagePosition??"center"}})})]})},xue=({event:e})=>n.jsxs("div",{className:"er-card--linked",style:{display:"flex",flexDirection:"column",gap:14,color:xe.text},children:[e.image&&n.jsx("div",{className:"er-media",style:{height:176,borderRadius:12},children:n.jsx("img",{src:e.image,alt:"",loading:"lazy",style:{objectFit:"cover",objectPosition:e.imagePosition??"center"}})}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:8},children:[n.jsx("span",{style:{fontSize:"11px",fontWeight:600,letterSpacing:"0.1em",textTransform:"uppercase",color:xe.muted},children:e.type}),n.jsx("span",{"aria-hidden":"true",style:{width:3,height:3,borderRadius:9999,background:"rgba(12,30,32,0.2)"}}
2773),n.jsx("span",{style:{fontSize:"12px",color:xe.muted},children:e.date})]}),n.jsx("div",{className:"er-clamp2",style:{fontFamily:xe.title,fontSize:"18px",fontWeight:500,letterSpacing:"-0.02em",lineHeight:1.3},children:n.jsx(qG,{event:e,className:"er-stretch",style:{color:"inherit"},children:e.title})})]}),wue=()=>{const e=pue(),t=mue(),a=e[0];return n.jsxs(Qe,{navVariant:"dark",children:[n.jsx(Je,{title:"Events",description:"Find Upside at upcoming GTM and revenue intelligence events. See where we're sponsoring, hosting, and attending next.",canonicalUrl:"https://upside.tech/events"}),n.jsxs("div",{className:"er-shell",children:[n.jsx("section",{className:"er-hero",children:n.jsxs("div",{className:"er-wrap er-hero-split",style:{paddingTop:"148px",paddingBottom:"96px"},children:[n.jsxs("div",{children:[n.jsx(PG,{onDark:!0,children:"Events"}),n.jsx("h1",{style:{margin:"24px 0 0",fontFamily:xe.title,fontSize:"clamp(38px, 6vw, 76px)",fontWeight:600,letterSpacing:"-0.03em",lineHeight:1.02,color:xe.onDark,textWrap:"balance"},children:"Find us at these events"}),n.jsx("p",{style:{margin:"28px 0 0",maxWidth:520,fontSize:"18px",lineHeight:1.6,color:xe.onDarkMuted,textWrap:"pretty"},children:"Demo nights we host, conferences we speak at, and the rooms where GTM operators compare notes."})]}),a&&n.jsx(IG,{label:"Next event",image:a.image,meta:UG(a),title:a.title,footnote:`Hosted by ${a.hostedBy}`,cta:a.internalSlug?n.jsx(J,{to:`/events/${a.internalSlug}`,style:vs("solid",!0),children:"Learn more"}):n.jsx("a",{href:a.url,target:"_blank",rel:"noopener noreferrer",style:vs("solid",!0),children:"Learn more"})})]})}),e.length>0&&n.jsxs("section",{className:"er-wrap",style:{paddingTop:"88px",paddingBottom:"0"},children:[n.jsx(Vh,{title:"Upcoming"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:24,marginTop:36},children:e.map(i=>n.jsx(vue,{event:i},i.title))})]}),t.length>0&&n.jsxs("section",{className:"er-wrap",style:{paddingTop:"88px",paddingBottom:"0"},children:[n.jsx(Vh,{title:"Where we've been",size:30}),n.jsx("div",{className:"er-grid-4",style:{marginTop:32},children:t.map(i=>n.jsx(xue,{event:i},i.title))})]}),n.jsx("section",{className:"er-wrap",style:{paddingTop:"88px",paddingBottom:"112px"},children:n.jsxs("div",{style:{background:xe.ledger,borderRadius:28,padding:"clamp(40px, 5vw, 64px) clamp(24px, 5vw, 72px)",display:"flex",flexWrap:"wrap",gap:48,alignItems:"center",justifyContent:"space-between"},children:[n.jsxs("div",{style:{minWidth:0},children:[n.jsx("h2",{style:{margin:0,fontFamily:xe.title,fontSize:"clamp(26px, 4vw, 38px)",fontWeight:500,letterSpacing:"-0.025em",lineHeight:1.1,color:xe.onDark,textWrap:"balance"},children:"The data layer for the age of agentic GTM"}),n.jsx("p",{style:{margin:"16px 0 0",maxWidth:540,fontSize:"17px",lineHeight:1.6,color:xe.onDarkMuted},children:"Upside unifies, structures and enhances your marketing and sales data, so every deal, rep, campaign and channel is one record your team and your agents can work from."})]}),n.jsxs("div",{style:{display:"flex",gap:16,flexWrap:"wrap"},children:[n.jsx(J,{to:Wt,style:vs("solid"),children:"Request Demo"}),n.jsx(J,{to:"/webinars",style:vs("ghost"),children:"See our webinars"})]})]})})]})]})},kue=[{slug:"show-and-tell-ai-for-gtm-notion",title:"Show & Tell: AI for GTM @Notion with Baseten, Cognition and Samsara",shortTitle:"Show & Tell: AI for GTM @Notion",lede:"With Baseten, Cognition and Samsara. In person at Notion HQ, or via livestream.",date:"July 14, 2026",location:"Notion HQ, San Francisco, CA",sequelEventId:"c7ce4377-46d7-4f3a-8615-efa3fac3e864",description:"Show & Tell: AI for GTM is a demo-only event for go-to-market teams actually building with AI. No slides. No pitches. No thought leadership. Just practitioners opening up their laptops and walking you through the workflows they've built — the ones they use at work, every day.",descriptionHtml:"Show &amp; Tell: AI for GTM is a demo-only event for go-to-market teams actually building with AI. No slides. No pitches. No thought leadership. Just practitioners opening up their laptops and walking you through the workflows they've built — the ones they use at work, every day.<br /><br />
2773We're bringing together 5–6 GTM operators and engineers who will each demo a real AI-powered workflow live: how they set it up, why they built it, what it actually does, and what they'd do differently. Expect to see real tools, real data flows, and real results — not a product pitch dressed up as a case study.<br /><br />Join us in person at Notion HQ or tune in via livestream.",hostedBy:"Upside x Notion",hostedByUrl:"https://www.upside.tech",ogImage:"https://upside.tech/images/event-show-tell-notion-demos.png"},{slug:"show-and-tell-ai-for-gtm",title:"Show & Tell: AI for GTM",date:"May 12, 2026",location:"San Francisco, CA",sequelEventId:"c85e1ddb-5126-4b9a-899c-4a3e803e498b",description:"A demo-only event for go-to-market teams actually building with AI. No slides. No pitches. Just practitioners opening up their laptops and walking you through the workflows they've built — the ones they use at work, every day.",hostedBy:"Upside",hostedByUrl:"https://www.upside.tech",ogImage:"https://upside.tech/images/event-show-tell-ai-gtm.png"}],jue=Object.fromEntries(kue.map(e=>[e.slug,e])),Sue=({label:e,value:t})=>n.jsxs("div",{children:[n.jsx("div",{style:{fontSize:"11px",fontWeight:600,letterSpacing:"0.12em",textTransform:"uppercase",color:xe.onDarkFaint},children:e}),n.jsx("div",{style:{marginTop:8,fontSize:"16px",color:xe.onDark},children:t})]}),Cue=()=>{var u;const{slug:e}=Ta(),t=e?jue[e]:void 0;if(!t)return n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Hr,{title:"Event Not Found",description:"The event you're looking for doesn't exist."}),n.jsx("div",{className:"container",children:n.jsx("div",{className:"content",children:n.jsx(J,{to:"/events",className:"cta w-button",children:"Back to Events"})})})]});const a=LM.find(h=>h.internalSlug===e),i=a?new Date(`${a.endISO}T23:59:59`)<new Date:!1,r=!!(a!=null&&a.url)&&!i,o=!!t.sequelEventId,l=r&&o,d=[{label:"Date",value:t.date},...a!=null&&a.time?[{label:"Time",value:a.time}]:[],{label:"Location",value:t.location},...t.hostedBy?[{label:"Hosted by",value:t.hostedByUrl?n.jsx("a",{href:t.hostedByUrl,target:"_blank",rel:"noopener noreferrer",style:{color:"inherit",textDecoration:"underline"},children:t.hostedBy}):t.hostedBy}]:[]];return n.jsxs(Qe,{navVariant:"dark",children:[n.jsx(Je,{title:t.title,description:t.description,ogImage:t.ogImage,canonicalUrl:`https://upside.tech/events/${e}`}),n.jsxs("div",{className:"er-shell",children:[n.jsxs("section",{className:"er-hero",children:[n.jsxs("div",{className:"er-wrap er-hero-media",style:{paddingTop:"140px",paddingBottom:"0"},children:[n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:14,flexWrap:"wrap"},children:[n.jsx(J,{to:"/events",style:{fontSize:"13px",color:"rgba(245,247,250,0.5)"},children:"Events"}),a&&n.jsxs(n.Fragment,{children:[n.jsx("span",{"aria-hidden":"true",style:{color:xe.onDarkDim,fontSize:"13px"},children:"/"}),n.jsx("span",{style:{fontSize:"11px",fontWeight:600,letterSpacing:"0.14em",textTransform:"uppercase",color:xe.signal},children:a.type})]})]}),n.jsx("h1",{style:{margin:"26px 0 0",fontFamily:xe.title,fontSize:"clamp(32px, 5vw, 58px)",fontWeight:600,letterSpacing:"-0.03em",lineHeight:1.05,color:xe.onDark,textWrap:"balance"},children:t.shortTitle??t.title}),t.lede&&n.jsx("p",{style:{margin:"20px 0 0",maxWidth:520,fontSize:"18px",lineHeight:1.6,color:xe.onDarkMuted},children:t.lede})]}),(a==null?void 0:a.image)&&n.jsx("div",{className:"er-media",style:{height:360,borderRadius:14},children:n.jsx("img",{src:a.image,alt:"",style:{objectFit:"cover",objectPosition:a.imagePosition??"center",height:"100%"}})})]}),n.jsx("div",{className:"er-wrap",style:{paddingTop:"56px",paddingBottom:"48px"},children:n.jsx("div",{className:"er-facts",style:{paddingTop:32,borderTop:`1px solid ${xe.borderDarkSoft}`},children:d.map(h=>n.jsx(Sue,{label:h.label,value:h.value},h.label))})})]}),n.jsx("div",{className:"er-wrap",style:{paddingTop:"72px"},children:n.jsx("div",{className:"er-lede",children:t.descriptionHtml?n.jsx("p",{dangerouslySetInnerHTML:{__html:t.descriptionHtml}}):n.jsx("p",{children:t.description})})}),n.jsxs("section",{className:"er-wrap",style:{paddingTop:"72px",paddingBottom:(u=t.agenda)!=null&&u.length?0:"112px"},children:[n.jsx(Vh,{title:i?"This event has ended":"Attend",size:30}),n.jsxs("div",{style:{marginTop:36,display:"flex",flexDirection:"column",gap:40},children:[r&&n.jsxs("div",{children:[l&&n.jsx(V0,{children:"In person"}),n.jsxs("div",{className:"er-card er-attend",style:{marginTop:l?20:0,padding:"32px 36px"},children:[n.jsxs("div",{style:{minWidth:0},children:[n.jsx("div",{style:{fontFamily:xe.title,fontSize:"22px",fontWeight:500,letterSpacing:"-0.02em",lineHeight:1.25,color:xe.text},children:t.location}),n.jsx("div",{style:{marginTop:8,fontSize:"15px",color:xe.muted}
2773,children:[t.date,a==null?void 0:a.time].filter(Boolean).join(" · ")})]}),n.jsx("a",{href:a.url,target:"_blank",rel:"noopener noreferrer",style:{...vs("solid"),minHeight:48,padding:"12px 28px",fontSize:"15px"},children:"Register to attend"})]})]}),o&&n.jsxs("div",{children:[l&&n.jsx(V0,{children:"Or join the livestream"}),n.jsx("div",{style:{width:"100%",textAlign:"center",marginTop:l?20:0},children:n.jsx(zG,{eventId:t.sequelEventId})})]})]})]}),t.agenda&&t.agenda.length>0&&n.jsx("section",{className:"er-wrap",style:{paddingTop:"72px",paddingBottom:"112px"},children:n.jsx(WG,{title:"What to expect",items:t.agenda,marker:"time"})})]})]})},Aue=()=>{const{slug:e}=Ta(),t=e?cue[e]:void 0;if(!t)return n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Hr,{title:"Webinar Not Found",description:"The webinar you're looking for doesn't exist."}),n.jsx("div",{className:"container",children:n.jsx("div",{className:"content",children:n.jsx(J,{to:"/webinars",className:"cta w-button",children:"Back to Webinars"})})})]});const a=hh(t),i=n1.filter(o=>o.slug!==t.slug).sort((o,l)=>Number(hh(l))-Number(hh(o))).slice(0,3),r=[t.date,t.time,t.duration,a?"On demand":"Live + on demand"].filter(Boolean);return n.jsxs(Qe,{navVariant:"dark",children:[n.jsx(Je,{title:t.title,description:t.description,ogImage:t.ogImage,canonicalUrl:`https://upside.tech/webinars/${e}`}),n.jsxs("div",{className:"er-shell",children:[n.jsx("section",{className:"er-hero",children:n.jsxs("div",{className:"er-wrap er-hero-media",style:{paddingTop:"148px",paddingBottom:"72px"},children:[n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:14,flexWrap:"wrap"},children:[n.jsx(J,{to:"/webinars",style:{fontSize:"13px",color:"rgba(245,247,250,0.5)"},children:"Webinars"}),n.jsx("span",{"aria-hidden":"true",style:{color:xe.onDarkDim,fontSize:"13px"},children:"/"}),n.jsx("span",{style:{fontSize:"11px",fontWeight:600,letterSpacing:"0.14em",textTransform:"uppercase",color:xe.signal},children:a?"On demand":`Live · ${t.date.replace(/,\s*\d{4}$/,"")}`})]}),n.jsx("h1",{style:{margin:"28px 0 0",maxWidth:640,fontFamily:xe.title,fontSize:"clamp(32px, 5vw, 56px)",fontWeight:600,letterSpacing:"-0.03em",lineHeight:1.05,color:xe.onDark,textWrap:"balance"},children:t.title}),n.jsx("div",{style:{display:"flex",gap:40,flexWrap:"wrap",marginTop:36,fontSize:"15px",color:xe.onDarkMuted},children:r.map(o=>n.jsx("span",{children:o},o))})]}),n.jsx("div",{className:"er-media",style:{aspectRatio:"16 / 9",borderRadius:14,background:"#0a181a"},children:n.jsx("img",{src:t.image,alt:"",style:{objectFit:"contain"}})})]})}),n.jsx("div",{className:"er-wrap",style:{paddingTop:"72px"},children:n.jsx("div",{className:"er-lede",children:t.descriptionHtml?n.jsx("p",{dangerouslySetInnerHTML:{__html:t.descriptionHtml}}):n.jsx("p",{children:t.description})})}),n.jsxs("section",{className:"er-wrap",style:{paddingTop:"72px"},children:[n.jsx(Vh,{title:a?"Watch the replay":"Save your seat",size:30}),n.jsxs("div",{style:{marginTop:36,display:"flex",flexDirection:"column",alignItems:"center",gap:20},children:[n.jsx("div",{style:{width:"100%",textAlign:"center"},children:n.jsx(zG,{eventId:t.sequelEventId})}),t.slidesUrl&&n.jsx("a",{href:t.slidesUrl,target:"_blank",rel:"noopener noreferrer",style:vs("outline"),children:"Download slides"})]})]}),t.agenda&&t.agenda.length>0&&n.jsx("section",{className:"er-wrap",style:{paddingTop:"72px"},children:n.jsx(WG,{title:"What you'll learn",items:t.agenda,marker:"num"})}),t.speakers&&t.speakers.length>0&&n.jsxs("section",{className:"er-wrap",style:{paddingTop:"72px"},children:[n.jsx(V0,{children:"Speakers"}),n.jsx("div",{className:"er-grid-3",style:{marginTop:24},children:t.speakers.map(o=>n.jsxs("div",{className:"er-card",style:{padding:26,display:"flex",flexDirection:"column",gap:18},children:[o.photo&&n.jsx("img",{src:o.photo,alt:"",loading:"lazy",style:{width:64,height:64,borderRadius:9999,objectFit:"cover",display:"block"}}),n.jsxs("div",{children:[n.jsx("div",{style:{fontFamily:xe.title,fontSize:"19px",fontWeight:500,letterSpacing:"-0.02em",color:xe.text},children:o.name}),n.jsx("div",{style:{marginTop:5,fontSize:"14px",color:xe.muted},children:o.role})]}),n.jsx("p",{style:{margin:0,fontSize:"14px",lineHeight:1.6,color:xe.muted},children:o.bio})]},o.name+o.role))})]}),i.length>0&&n.jsxs("div",{className:"er-wrap",style:{paddingTop:"96px",paddingBottom:"112px"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"flex-end",justifyContent:"space-between",gap:24,flexWrap:"wrap",paddingBottom:20,borderBottom:`1px solid ${xe.border}`},children:[n.jsx("h2",{style:{margin:0,fontFamily:xe.title,fontSize:"clamp(22px, 3vw, 28px)",fontWeight:500,letterSpacing:"-0.02em"},children:"More sessions"}),n.jsxs(J,{to:"/webinars",style:{fontSize:"14px",fontWeight:500,color:xe.signal},children:["All webinars ",n.jsx("span",{"aria-hidden":"true",children:"→"})]})]}),n.jsx("div",{className:"er-grid-3",style:{marginTop:28},children:i.map(o=>n.jsxs(J,{to:`/webinars/${o.slug}`,className:"er-card",style:{display:"flex",flexDirection:"column",overflow:"hidden",boxShadow:"0 1px 2px rgba(12,30,32,0.04)"},children:[n.jsx("div",{className:"er-media",style:{aspectRatio:"16 / 9"},children:n.jsx("img",{src:o.image,alt:"",loading:"lazy",style:{objectFit:"contain"}})}),n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:12,padding:"20px 22px 22px",flex:1},children:[n.jsx("span",{style:{fontSize:"12px",color:xe.muted},children:o.date}),n.jsx("span",{className:"er-clamp3",style:{fontFamily:xe.title,fontSize:"19px",fontWeight:500,letterSpacing:"-0.02em",lineHeight:1.3},children:o.title}),n.jsxs("span",{style:{fontSize:"14px",fontWeight:500,color:xe.signal,marginTop:"auto"},children:[hh(o)?"Watch":"Register"," ",n.jsx("span",{className:"er-arrow","aria-hidden":"true",children:"→"})]})]})]},o.slug))})]})]})]})},$G="/assets/cert-soc2-DqEZs-S8.png",FG="/assets/cert-us-privacy-CZ-o8GsV.png",GG="/assets/cert-gdpr-Cm0XKgUb.png",HG="/assets/cert-csa-star-DLYlIk0-.png",YG="/assets/cert-csa-BV9Co9O5.png",Tue=[{name:"US Data Privacy",description:"Compliant with US state-level data privacy regulations.",icon:FG},{name:"GDPR",description:"Full compliance with the EU General Data Protection Regulation.",icon:GG},{name:"CAIQ STAR Level 1",description:"Cloud Security Alliance STAR self-assessment for cloud security.",icon:HG},{name:"Cloud Security Alliance",description:"Member of CSA, adhering to cloud security best practices.",icon:YG}],_ue=[{icon:one,title:"Built to pass your security review",description:"Designed to pass security reviews with flying colors. A dedicated security program and bi-weekly reviews mean our posture is always improving."},{icon:Uw,title:"Encryption at every layer",description:"Your data is protected in transit and at rest. Every connection, every store, every backup, encrypted by default, no exceptions."},{icon:Lw,title:"Enterprise SSO & SCIM",description:"Connect your identity provider and automate user provisioning. We support any SAML or OIDC provider, so your team can use the tools they already trust."},{icon:sM,title:"Your data never trains AI models",description:"Your data is never used to train generative AI models, including LLMs and foundation models, or to build products for other customers. We only use your data to deliver our services to you."}],Mue=()=>n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"Security at Upside",description:"Review Upside's security posture, certifications, privacy commitments, and trust resources for handling sensitive go-to-market data.",canonicalUrl:"https://upside.tech/security"}),n.jsx(Hr,{eyebrow:"Security",title:"Security at Upside",description:n.jsx(n.Fragment,{children:"At Upside, security isn't an afterthought. It's where we started. We earned SOC 2 Type II certification before we shipped our first product, because go-to-market data is the lifeblood of your organization and the trust you place in us to handle it is something we take seriously."})}),n.jsx("div",{className:"container",children:n.jsxs("div",{className:"content",children:[n.jsxs("section",{id:"principles",className:"section",children:[n.jsxs("div",{className:"section-header",children:[n.jsxs("div",{className:"section-header__content",children:[n.jsx("div",{className:"badge",children:"Our Approach"}),n.jsx("div",{className:"section-header__heading-wrapper",children:n.jsx("h2",{className:"heading-m",children:"Built by veterans of $100M+ organizations."})})]}),n.jsx("div",{className:"section-header__paragraph-wrapper",children:n.jsx("p",{className:"body-m",children:"Our security-first mindset shapes every infrastru
2773cture decision, every integration, and every line of code."})})]}),n.jsx("div",{className:"solution",children:_ue.map(e=>n.jsxs("div",{className:"solution__card",children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx(e.icon,{size:24,style:{color:"var(--_semantic-colors---text--accent)",flexShrink:0}}),n.jsx("h3",{className:"heading-s",children:e.title})]}),n.jsx("p",{className:"body-m",children:e.description})]},e.title))})]}),n.jsxs("section",{id:"certifications",className:"section security-certifications-section",children:[n.jsx("div",{className:"section-header",children:n.jsxs("div",{className:"section-header__content",children:[n.jsx("div",{className:"badge",children:"Compliance"}),n.jsx("div",{className:"section-header__heading-wrapper",children:n.jsx("h2",{className:"heading-m",children:"The proof behind our promise."})})]})}),n.jsxs("div",{className:"security-cert-featured",children:[n.jsx("img",{src:$G,alt:"SOC 2 Type II",className:"security-cert-featured__badge"}),n.jsxs("div",{className:"security-cert-featured__content",children:[n.jsx("h3",{className:"heading-s",children:"SOC 2 Type II"}),n.jsx("p",{className:"body-m",children:"Independently audited controls for the security trust service criteria, verified through continuous monitoring and annual third-party examination."}),n.jsx("a",{href:"https://trust.upside.tech",target:"_blank",rel:"noopener noreferrer",className:"security-cert-card__link",children:"Download report →"})]})]}),n.jsx("div",{className:"security-certifications",children:Tue.map(e=>n.jsxs("div",{className:"security-cert-card",children:[n.jsx("img",{src:e.icon,alt:e.name,className:"security-cert-card__badge"}),n.jsxs("div",{children:[n.jsx("h3",{className:"heading-xs",children:e.name}),n.jsx("p",{className:"body-s",style:{marginTop:"0.25rem"},children:e.description})]})]},e.name))})]}),n.jsx("section",{className:"section",children:n.jsxs("div",{className:"security-trust-cta",children:[n.jsx("h3",{className:"heading-m",style:{color:"var(--_semantic-colors---text--primary)"},children:"Visit our Trust Center for full details on our security posture."}),n.jsx("p",{className:"body-m",children:"Our Trust Center provides real-time visibility into our compliance status, security controls, resources, and subprocessors."}),n.jsxs("a",{href:"https://trust.upside.tech",target:"_blank",rel:"noopener noreferrer",className:"cta w-button",style:{marginTop:"0.5rem",display:"inline-flex",alignItems:"center",gap:"0.5rem",textDecoration:"none"},children:["Visit Trust Center",n.jsx(Dte,{size:16})]})]})}),n.jsx("section",{id:"report",className:"section",children:n.jsxs("div",{className:"security-contact",children:[n.jsx(xy,{size:32,style:{color:"var(--_semantic-colors---text--accent)",flexShrink:0}}),n.jsxs("div",{className:"security-contact__content",children:[n.jsx("h3",{className:"heading-s",children:"Have something to report?"}),n.jsxs("p",{className:"body-m",children:["If you've found a vulnerability or have any other security concern, email us at"," ",n.jsx("a",{href:"mailto:[email protected]",className:"security-contact__link",children:"[email protected]"}),". We review every report and will get back to you quickly."]})]})]})})]})})]}),Eue={"terms-of-service":{title:"Terms of Service",lastUpdated:"October 17, 2024",html:`<h3 id="">Interpretations and Definitions</h3>
2774<h4 id="">Interpretation</h4>
2775<p id="">The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.</p>
2776<h4 id="">Definitions</h4>
2777<p id="">For the purposes of these Terms and Conditions:</p>
2778<ul id="">
2779<li id="">Affiliate means an entity that controls, is controlled by, or is under common control with a party, where "control" means ownership of 50% or more of the shares, equity interest, or other securities entitled to vote for election of directors or other managing authority.</li>
2780<li id="">Country refers to California, United States.</li>
2781<li id="">
2781Company (referred to as either "the Company," "We," "Us," or "Our" in this Agreement) refers to Dragonsight Labs, Inc., 2261 Market Street STE 10412, San Francisco, CA 94114.</li>
2782<li id="">Device means any device that can access the Service, such as a computer, a cellphone, or a digital tablet.</li>
2783<li id="">Feedback means feedback, innovations, or suggestions sent by You regarding the attributes, performance, or features of our Service.</li>
2784<li id="">Service refers to the Website accessible from Upside.tech. In the future, the Service may include other digital products or platforms provided by Dragonsight Labs, Inc., including any tools or applications offered as part of the Company's software-as-a-service (SaaS) offerings.</li>
2785<li id="">Terms and Conditions (also referred to as "Terms") mean these Terms and Conditions that form the entire agreement between You and the Company regarding the use of the Service.</li>
2786<li id="">Third-party Social Media Service means any services or content (including data, information, products, or services) provided by a third party that may be displayed, included, or made available by the Service.</li>
2787<li id="">Website refers to Upside.tech.</li>
2788<li id="">You means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.</li>
2789</ul>
2790<h3 id="">Acknowledgment</h3>
2791<p id="">These are the Terms and Conditions governing the use of this Service and the agreement that operates between You and the Company. These Terms and Conditions set out the rights and obligations of all users regarding the use of the Service.</p>
2792<p id="">Your access to and use of the Service is conditioned on Your acceptance of and compliance with these Terms and Conditions. These Terms and Conditions apply to all visitors, users, and others who access or use the Service.</p>
2793<p id="">By accessing or using the Service, You agree to be bound by these Terms and Conditions. If You disagree with any part of these Terms and Conditions, then You may not access the Service.</p>
2794<p id="">You represent that you are over the age of 18. The Company does not permit those under 18 to use the Service.</p>
2795<p id="">Your access to and use of the Service is also conditioned on Your acceptance of and compliance with the Privacy Policy of the Company. Our Privacy Policy describes Our policies and procedures on the collection, use, and disclosure of Your personal information when You use the Application or the Website and tells You about Your privacy rights and how the law protects You. Please read Our Privacy Policy carefully before using Our Service.</p>
2796<h3 id="">Intellectual Property</h3>
2797<p id="">The Service, including but not limited to the Website, and any future digital platforms or applications, and their original content (excluding Content provided by You or other users), features, and functionality are and will remain the exclusive property of the Company and its licensors.</p>
2798<p id="">The Service is protected by copyright, trademark, and other laws of both the Country and foreign countries.</p>
2799<p id="">Our trademarks and trade dress may not be used in connection with any product or service without the prior written consent of the Company.</p>
2800<h3 id="">Your Feedback to Us</h3>
2801<p id="">You assign all rights, title, and interest in any Feedback You provide the Company. If for any reason such assignment is ineffective, You agree to grant the Company a non-exclusive, perpetual, irrevocable, royalty-free, worldwide right and license to use, reproduce, disclose, sublicense, distribute, modify, and exploit such Feedback without restriction.</p>
2802<h3 id="">Links to Other Websites</h3>
2803<p id="">Our Service may contain links to third-party websites or services that are not owned or c
2803ontrolled by the Company.</p>
2804<p id="">The Company has no control over and assumes no responsibility for the content, privacy policies, or practices of any third-party websites or services. You further acknowledge and agree that the Company shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with the use of or reliance on any such content, goods, or services available on or through any such websites or services.</p>
2805<p id="">We strongly advise You to read the terms and conditions and privacy policies of any third-party websites or services that You visit.</p>
2806<h3 id="">Termination</h3>
2807<p id="">We may terminate or suspend Your access immediately, without prior notice or liability, for any reason whatsoever, including without limitation if You breach these Terms and Conditions.</p>
2808<p id="">Upon termination, Your right to use the Service will cease immediately.</p>
2809<h3 id="">Limitation of Liability</h3>
2810<p id="">For the use of the Website, the entire liability of the Company and any of its suppliers shall be limited to the amount actually paid by You through the Service or $100 if You haven't purchased anything through the Service. If the Company provides additional paid services in the future, such as a SaaS platform, liability limits for those services will be outlined in the relevant agreements or terms of use.</p>
2811<h3 id="">"AS IS" and "AS AVAILABLE" Disclaimer</h3>
2812<p id="">The Website is provided to You "AS IS" and "AS AVAILABLE" without warranty of any kind. If the Company introduces new services such as a SaaS platform in the future, the Company may provide separate warranties or service guarantees for those offerings, which will be outlined in additional agreements or terms of use.</p>
2813<h3 id="">Governing Law</h3>
2814<p id="">The laws of the Country, excluding its conflicts of law rules, shall govern these Terms and Your use of the Service. Your use of the Application may also be subject to other local, state, national, or international laws.</p>
2815<h3 id="">Disputes Resolution</h3>
2816<p id="">If You have any concern or dispute about the Service, You agree to first try to resolve the dispute informally by contacting the Company.</p>
2817<h3 id="">For European Union (EU) Users</h3>
2818<p id="">If You are a European Union consumer, you will benefit from any mandatory provisions of the law of the country in which You are resident.</p>
2819<h3 id="">United States Legal Compliance</h3>
2820<p id="">You represent and warrant that (i) You are not located in a country that is subject to the United States government embargo, or that has been designated by the United States government as a "terrorist supporting" country, and (ii) You are not listed on any United States government list of prohibited or restricted parties.</p>
2821<h3 id="">Severability and Waiver</h3>
2822<h4 id="">Severability</h4>
2823<p id="">If any provision of these Terms is held to be unenforceable or invalid, such provision will be changed and interpreted to accomplish the objectives of such provision to the greatest extent possible under applicable law, and the remaining provisions will continue in full force and effect.</p>
2824<h4 id="">Waiver</h4>
2825<p id="">Except as provided herein, the failure to exercise a right or to require performance of an obligation under these Terms shall not affect a party's ability to exercise such right or require such performance at any time thereafter, nor shall the waiver of a breach constitute a waiver of any subsequent breach.</p>
2826<h3 id="">Master Services Agreement (MSA)</h3>
2827<p id="">For customers who engage with us through our SaaS platform, specific terms, including but not limited to service levels, liabilities, warranties, data processing, and other obligations, will be governed by a separate Master Services Agreement (MSA). The terms and conditions outlined here apply only to the use of our website and do not override or replace any terms in the MSA. In the event of any conflict between these Terms and the MSA, the terms of the MSA shall prevail.</p>
2828<h3 id="">Translation Interpretation</h3>
2829<p id="">These Terms and Conditions may have been translated if We have made them available to You on our Service. You agree that the original English text shall prevail in the case of a dispute.</p>
2830<h3 id="">Changes to These Terms and Conditions</h3>
2831<p id="">We reserve the right, at Our sole discretion, to modify or replace these Terms at any time. If a revision is material, We will make reasonable efforts to provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at Our sole discretion.</p>
2832<p id="">By continuing to access or use Our Service after those revisions become effective, You agree to be bound by the revised terms. If You do not agree to the new terms, in whole or in part, please stop using the website and the Service.</p>
2833<h3 id="">Contact Us</h3>
2834<p id="">If you have any questions about these Terms and Conditions, You can contact us:</p>
2835<ul id="">
2836<li id="">By mail: 2261 Market Street STE 10412, San Francisco, CA 94114</li>
2837</ul>
2838`},"privacy-policy":{title:"Privacy Policy",lastUpdated:"June 17, 2026",html:`<p>This Privacy Policy describes Our policies and procedures on the collection, use and disclosure of Your information when You use the Service and tells You about Your privacy rights and how the law protects You.</p>
2839<p>We use Your Personal data to provide and improve the Service. By using the Service, You agree to the collection and use of information in accordance with this Privacy Policy.</p>
2840<h2>Interpretation and Definitions</h2>
2841<h3>Interpretation</h3>
2842<p>The words of which the initial letter is capitalized have meanings defined under the following conditions. The following definitions shall have the same meaning regardless of whether they appear in singular or in plural.</p>
2843<h3>Definitions</h3>
2844<p>For the purposes of this Privacy Policy:</p>
2845<ul>
2846<li><strong>Account</strong> means a unique account created for You to access our Service or parts of our Service.<strong>‍</strong></li>
2847<li><strong>Affiliate</strong> means an entity that controls, is controlled by or is under common control with a party, where "control" means ownership of 50% or more of the shares, equity interest or other securities entitled to vote for election of directors or other managing authority.<strong>‍</strong></li>
2848<li><strong>Business</strong>, for the purpose of CCPA/CPRA, refers to the Company as the legal entity that collects Consumers' personal information and determines the purposes and means of the processing of Consumers' personal information, or on behalf of which such information is collected and that alone, or jointly with others, determines the purposes and means of the processing of consumers' personal information, that does business in the State of California.<strong>‍</strong></li>
2849<li><strong>CCPA</strong> and/or <strong>CPRA</strong> refers to the California Consumer Privacy Act (the "CCPA") as amended by the California Privacy Rights Act of 2020 (the "CPRA").<strong>‍</strong></li>
2850<li><strong>Company</strong>
2850 (referred to as either "the Company", "We", "Us" or "Our" in this Agreement) refers to Dragonsight Labs, Inc., 2261 Market Street STE 10412, San Francisco CA 94114.<strong>‍</strong></li>
2851<li><strong>Consumer</strong>, for the purpose of the CCPA/CPRA, means a natural person who is a California resident. A resident, as defined in the law, includes (1) every individual who is in the USA for other than a temporary or transitory purpose, and (2) every individual who is domiciled in the USA who is outside the USA for a temporary or transitory purpose.<strong>‍</strong></li>
2852<li><strong>Country</strong> refers to: California, United States<strong>‍</strong></li>
2853<li><strong>Device</strong> means any device that can access the Service such as a computer, a cellphone or a digital tablet.<strong>‍</strong></li>
2854<li><strong>Do Not Track</strong> (DNT) is a browser setting to signal that you do not want to be tracked. Our website does not respond to DNT signals but honors Global Privacy Control (GPC) signals.<strong>‍</strong></li>
2855<li><strong>Personal Data</strong> is any information that relates to an identified or identifiable individual.</li>
2856<li>For the purposes of the CCPA/CPRA, Personal Data means any information that identifies, relates to, describes or is capable of being associated with, or could reasonably be linked, directly or indirectly, with You.<strong>‍</strong></li>
2857<li><strong>Service</strong> refers to the Website.<strong>‍</strong></li>
2858<li><strong>Service Provider</strong> means any natural or legal person who processes the data on behalf of the Company. It refers to third-party companies or individuals employed by the Company to facilitate the Service, to provide the Service on behalf of the Company, to perform services related to the Service or to assist the Company in analyzing how the Service is used.<strong>‍</strong></li>
2859<li><strong>Usage Data</strong> refers to data collected automatically, either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit).<strong>‍</strong></li>
2860<li><strong>Website</strong> refers to Upside, accessible from <a href="/">https://www.upside.tech</a><strong>‍</strong></li>
2861<li><strong>You</strong> means the individual accessing or using the Service, or the company, or other legal entity on behalf of which such individual is accessing or using the Service, as applicable.</li>
2862</ul>
2863<h2>Collecting and Using Your Personal Data</h2>
2864<h3>Types of Data Collected</h3>
2865<h4>Personal Data</h4>
2866<p>While using Our Service, We may ask You to provide Us with certain personally identifiable information that can be used to contact or identify You. Personally identifiable information may include, but is not limited to:</p>
2867<ul>
2868<li>Email address</li>
2869<li>First name and last name</li>
2870<li>Usage Data</li>
2871</ul>
2872<h4>Usage Data</h4>
2873<p>Usage Data is collected automatically when using the Service.</p>
2874<p>Usage Data may include information such as Your Device's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that You visit, the time and date of Your visit, the time spent on those pages, unique device identifiers and other diagnostic data.</p>
2875<p>When You access the Service by or through a mobile device, We may collect certain information automatically, including, but not limited to, the type of mobile device You use, Your mobile device unique ID, the IP address of Your mobile device, Your mobile operating system, the type of mobile Internet browser You use, unique device identifiers and other diagnostic data.</p>
2876<p>We may also collect information that Your browser sends whenever You visit our Service or when You access the Service by or through a mobile device.</p>
2877<h4>Tracking Technologies and Cookies</h4>
2878<p>We use cookies and similar tracking technologies to improve your experience, understand how our website is used, and deliver personalized content and ads.</p>
2879<p>Cookies are small text files placed on Your device when You visit a website. For more information about how we use cookies, please refer to our <a href="/legal/cookie-policy">Cookie Policy</a>.</p>
2880<h3>Use of Your Personal Data</h3>
2881<p>The Company may use Personal Data for the following purposes:</p>
2882<ul>
2883<li><strong>To provide and maintain our Service</strong>, including to monitor the usage of our Service.<strong>‍</strong></li>
2884<li><strong>To manage Your Account:</strong> to manage Your registration as a user of the Service. The Personal Data You provide can give You access to different functionalities of the Service that are available to You as a registered user.<strong>‍</strong></li>
2885<li><strong>For the performance of a contract:</strong> the development, compliance and undertaking of the purchase contract for the products, items or services You have purchased or of any other contract with Us through the Service.<strong>‍</strong></li>
2886<li><strong>To contact You:</strong> To contact You by email, telephone calls, SMS, or other equivalent forms of electronic communication, such as a mobile application's push notifications regarding updates or informative communications related to the functionalities, products or contracted services, including the security updates, when necessary or reasonable for their implementation.<strong>‍</strong></li>
2887<li><strong>To provide You</strong>
2887 with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless You have opted not to receive such information.<strong>‍</strong></li>
2888<li><strong>To manage Your requests:</strong> To attend and manage Your requests to Us.<strong>‍</strong></li>
2889<li><strong>For business transfers:</strong> We may use Your information to evaluate or conduct a merger, divestiture, restructuring, reorganization, dissolution, or other sale or transfer of some or all of Our assets, whether as a going concern or as part of bankruptcy, liquidation, or similar proceeding, in which Personal Data held by Us about our Service users is among the assets transferred.<strong>‍</strong></li>
2890<li><strong>For other purposes</strong>: We may use Your information for other purposes, such as data analysis, identifying usage trends, determining the effectiveness of our promotional campaigns and to evaluate and improve our Service, products, services, marketing and your experience.</li>
2891</ul>
2892<p>We may share Your personal information in the following situations:</p>
2893<ul>
2894<li><strong>With Service Providers:</strong> We may share Your personal information with Service Providers to monitor and analyze the use of our Service, to contact You.<strong>‍</strong></li>
2895<li><strong>For business transfers:</strong> We may share or transfer Your personal information in connection with, or during negotiations of, any merger, sale of Company assets, financing, or acquisition of all or a portion of Our business to another company.<strong>‍</strong></li>
2896<li><strong>With Affiliates:</strong> We may share Your information with Our affiliates, in which case we will require those affiliates to honor this Privacy Policy. Affiliates include Our parent company and any other subsidiaries, joint venture partners or other companies that We control or that are under common control with Us.<strong>‍</strong></li>
2897<li><strong>With business partners:</strong> We may share Your information with Our business partners to offer You certain products, services or promotions.<strong>‍</strong></li>
2898<li><strong>With other users:</strong> when You share personal information or otherwise interact in the public areas with other users, such information may be viewed by all users and may be publicly distributed outside.<strong>‍</strong></li>
2899<li><strong>With Your consent</strong>: We may disclose Your personal information for any other purpose with Your consent.</li>
2900</ul>
2901<h3>Retention of Your Personal Data</h3>
2902<p>The Company will retain Your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use Your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes, and enforce our legal agreements and policies.</p>
2903<p>The Company will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of Our Service, or We are legally obligated to retain this data for longer time periods.</p>
2904<h3>Transfer of Your Personal Data</h3>
2905<p>Your information, including Personal Data, is processed at the Company's operating offices and in any other places where the parties involved in the processing are located. It means that this information may be transferred to — and maintained on — computers located outside of Your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from Your jurisdiction.</p>
2906<p>Your consent to this Privacy Policy followed by Your submission of such information represents Your agreement to that transfer.</p>
2907<p>The Company will take all steps reasonably necessary to ensure that Your data is treated securely and in accordance with this Privacy Policy and no transfer of Your Personal Data will take place to an organization or a country unless there are adequate controls in place including the security of Your data and other personal information.</p>
2908<h2>EU-U.S. Data Privacy Framework</h2>
2909<p>Dragonsight Labs, Inc. complies with the EU-U.S. Data Privacy Framework (EU-U.S. DPF) and the UK Extension to the EU-U.S. DPF as set forth by the U.S. Department of Commerce. Dragonsight Labs, Inc. has certified to the U.S. Department of Commerce that it adheres to the EU-U.S. Data Privacy Framework Principles (EU-U.S. DPF Principles) with regard to the processing of personal data received from the European Union in reliance on the EU-U.S. DPF and from the United Kingdom (and Gibraltar) in reliance on the UK Extension to the EU-U.S. DPF. If there is any conflict between the terms in this privacy policy and the EU-U.S. DPF Principles, the Principles shall govern. To learn more about the Data Privacy Framework (DPF) program, and to view our certification, please visit <a href="https://www.dataprivacyframework.gov/">https://www.dataprivacyframework.gov/</a>.</p>
2910<h3>Types of Personal Data Collected Under the DPF</h3>
2911<p>In the context of the DPF, Dragonsight Labs, Inc. receives personal data from the European Union and the United Kingdom related to:</p>
2912<p><strong>Non-HR Data:</strong> Customer employees, contractors, collaborators, customers, and prospects data including names, email addresses, phone numbers and other identifiers, communications and engagement data (e.g., marketing interactions), and usage data processed through our cloud-based analytics and attribution services.</p>
2913<p><strong>HR Data:</strong> Employee personal data transferred in the context of the employment relationship, which may include names, contact information, employment records, and other information necessary to manage the employment relationship.</p>
2914<h3>Purposes of Processing Under the DPF</h3>
2915<p>Personal data transferred from the EU and UK is processed for the following purposes:</p>
2916<ul>
2917<li>Providing cloud-based analytics and attribution services</li>
2918<li>Ingesting customer-authorized data from connected systems</li>
2919<li>Analyzing data to generate insights and outputs</li>
2920<li>Supporting, maintaining, and improving our services</li>
2921<li>Managing employment relationships (for HR data)</li>
2922</ul>
2923<p>We do not collect Protected Health Information (PHI) or Payment Card Industry (PCI) data.</p>
2924<h3>Third-Party Disclosures and Onward Transfers</h3>
2925<p>Dragonsight Labs, Inc. may disclose personal data to service providers and subprocessors used to deliver our services, including providers of cloud hosting, data warehouse, ETL, authentication, and monitoring and security services.</p>
2926<p>Dragonsight Labs, Inc. remains liable under the DPF Principles if its agent processes personal information in a manner inconsistent with the Principles, unless we prove we are not responsible for the event giving rise to the damage.</p>
2927<p>We require all third parties to whom we disclose personal data to either: (a) comply with the DPF Principles, or (b) agree in writing to provide at least the same level of protection for personal data as is required by the DPF Principles.</p>
2928<h3>Your Rights Under the DPF</h3>
2929<p>You have the right to access your personal data and to correct, amend, or delete that data where it is inaccurate or has been processed in violation of the DPF Principles. To exercise these rights, please contact us at <a href="mailto:[email protected]">[email protected]</a>.</p>
2930<h3>Choice</h3>
2931<p>For personal data that we process on our own behalf, we will offer you the opportunity to choose (opt out) whether your personal data is to be disclosed to a third party (other than a service provider) or to be used for a purpose materially different from the purposes for which it was originally collected or subsequently authorized by you.</p>
2932<p>For sensitive personal information, we will obtain your affirmative express consent (opt in) before disclosing your data to a third party or using it for a purpose other than those for which it was originally collected or subsequently authorized by you through the exercise of an opt-in choice.</p>
2933<h3>Recourse, Enforcement, and Liability</h3>
2934<p>In compliance with the EU-U.S. DPF and the UK Extension to the EU-U.S. DPF, Dragonsight Labs, Inc. commits to resolve DPF Principles-related complaints about our collection and use of your personal information.</p>
2935<p><strong>For Non-HR Data:</strong> EU and UK individuals with inquiries or complaints regarding our handling of personal data received in reliance on the EU-U.S. DPF and the UK Extension to the EU-U.S. DPF should first contact Dragonsight Labs, Inc. at:</p>
2936<ul>
2937<li>Email: <a href="mailto:[email protected]">[email protected]</a></li>
2938<li>Address: 2261 Market Street STE 10412, San Francisco, CA 94114</li>
2939</ul>
2940<p>If you have an unresolved privacy or data use concern regarding Non-HR data that we have not addressed satisfactorily, please contact our U.S.-based third party dis
2940pute resolution provider (free of charge) at <a href="https://www.jamsadr.com/DPF-Dispute-Resolution">https://www.jamsadr.com/DPF-Dispute-Resolution</a>.</p>
2941<p><strong>For HR Data:</strong> Dragonsight Labs, Inc. has committed to cooperate and comply with the advice of the panel established by the EU data protection authorities (DPAs) with regard to unresolved complaints concerning HR data transferred from the EU in the context of the employment relationship.</p>
2942<h3>Binding Arbitration</h3>
2943<p>Under certain conditions, more fully described on the Data Privacy Framework website at <a href="https://www.dataprivacyframework.gov/framework-article/ANNEX-I-introduction">https://www.dataprivacyframework.gov/framework-article/ANNEX-I-introduction</a>, you may be entitled to invoke binding arbitration when other dispute resolution procedures have been exhausted.</p>
2944<h3>Regulatory Oversight</h3>
2945<p>Dragonsight Labs, Inc. is subject to the investigatory and enforcement powers of the Federal Trade Commission (FTC).</p>
2946<p>We may be required to disclose personal information in response to lawful requests by public authorities, including to meet national security or law enforcement requirements.</p>
2947<h3>Delete Your Personal Data</h3>
2948<p>You have the right to delete or request that We assist in deleting the Personal Data that We have collected about You.</p>
2949<p>Our Service may give You the ability to delete certain information about You from within the Service.</p>
2950<p>You may update, amend, or delete Your information at any time by signing in to Your Account, if you have one, and visiting the account settings section that allows you to manage Your personal information. You may also contact Us to request access to, correct, or delete any personal information that You have provided to Us.</p>
2951<p>Please note, however, that We may need to retain certain information when we have a legal obligation or lawful basis to do so.</p>
2952<h3>Disclosure of Your Personal Data</h3>
2953<h4>Business Transactions</h4>
2954<p>If the Company is involved in a merger, acquisition or asset sale, Your Personal Data may be transferred. We will provide notice before Your Personal Data is transferred and becomes subject to a different Privacy Policy.</p>
2955<h4>Law enforcement</h4>
2956<p>Under certain circumstances, the Company may be required to disclose Your Personal Data if required to do so by law or in response to valid requests by public authorities (e.g. a court or a government agency).</p>
2957<h4>Other legal requirements</h4>
2958<p>The Company may disclose Your Personal Data in the good faith belief that such action is necessary to:</p>
2959<ul>
2960<li>Comply with a legal obligation</li>
2961<li>Protect and defend the rights or property of the Company</li>
2962<li>Prevent or investigate possible wrongdoing in connection with the Service</li>
2963<li>Protect the personal safety of Users of the Service or the public</li>
2964<li>Protect against legal liability</li>
2965</ul>
2966<h3>Security of Your Personal Data</h3>
2967<p>The security of Your Personal Data is important to Us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While We strive to use commercially acceptable means to protect Your Personal Data, We cannot guarantee its absolute security.</p>
2968<h2>Our Commitment to De-Identified Data</h2>
2969<p>When processing De-Identified Data received from our customers, we publicly commit to the following: We maintain reasonable measures to ensure that such data cannot be associated with a natural person, we will process this data only in a de-identified fashion, and we will not attempt to re-identify the data.</p>
2970<h2>Detailed Information on the Processing of Your Personal Data</h2>
2971<p>The Service Providers We use may have access to Your Personal Data. These third-party vendors collect, store, use, process and transfer information about Your activity on Our Service in accordance with their Privacy Policies.</p>
2972<h3>Analytics</h3>
2973<p>We may use third-party Service providers to monitor and analyze the use of our Service.</p>
2974<p><strong>Google Analytics</strong></p>
2975<p>Google Analytics is a web analytics service offered by Google that tracks and reports website traffic. Google uses the data collected to track and monitor the use of our Service. This data is shared with other Google services. Google may use the collected data to contextualize and personalize the ads of its own advertising network.</p>
2976<p>You can opt-out of having made your activity on the Service available to Google Analytics by installing the Google Analytics opt-out browser add-on. The add-on prevents the Google Analytics JavaScript (ga.js, analytics.js and dc.js) from sharing information with Google Analytics about visits activity.</p>
2977<p>For more information on the privacy practices of Google, please visit the Google Privacy &amp; Terms web page: <a href="https://policies.google.com/privacy">https://policies.google.com/privacy</a></p>
2978<p><strong>HubSpot</strong></p>
2979<p>Their Privacy Policy can be viewed at <a href="https://legal.hubspot.com/privacy-policy">https://legal.hubspot.com/privacy-policy</a></p>
2980<p><strong>RB2B</strong></p>
2981<p>When you visit or log in to our website, cookies and similar technologies may be used by our online data partners or vendors to associate these activities with other personal information they or others have about you, including by association with your email or home address. We (or service providers on our behalf) may then send communications and marketing to these email or home addresses. You may opt out of receiving this advertising by visiting <a href="https://app.retention.com/optout" target="_blank">https://app.retention.com/optout</a></p>
2982<h3>Email Marketing</h3>
2983<p>We may use Your Personal Data to contact You with newsletters, marketing or promotional materials and other information that may be of interest to You. You may opt-out of receiving any, or all, of these communications from Us by following the unsubscribe link or instructions provided in any email We send or by contacting Us.</p>
2984<p>We may use Email Marketing Service Providers to manage and send emails to You.</p>
2985<p><strong>HubSpot</strong></p>
2986<p>Their Privacy Policy can be viewed at <a href="https://legal.hubspot.com/privacy-policy">https://legal.hubspot.com/privacy-policy</a></p>
2987<h2>CCPA/CPRA Privacy Notice (California Privacy Rights)</h2>
2988<p>This privacy notice section for California residents supplements the information contained in Our Privacy Policy and it applies solely to all visitors, users, and others who reside in the State of California.</p>
2989<h3>Categories of Personal Information Collected</h3>
2990<p>We collect information that identifies, relates to, describes, references, is capable of being associated with, or could reasonably be linked, directly or indirectly, with a particular Consumer or Device. The following is a list of categories of personal information which we may collect or may have been collected from California residents within the last twelve (12) months.</p>
2991<p>Please note that the categories and examples provided in the list below are those defined in the CCPA/CPRA. This does not mean that all examples of that category of personal information were in fact collected by Us, but reflects our good faith belief to the best of Our knowledge that some of that information from the applicable category may be and may have been collected. For example, certain categories of personal information would only be collected if You provided such personal information directly to Us.</p>
2992<p><strong>Category A: Identifiers.</strong></p>
2993<ul>
2994<li>Examples: A real name, alias, postal address, unique personal identifier, online identifier, Internet Protocol address, email address, account name, driver's license number, passport number, or other similar identifiers.</li>
2995<li>Collected: Yes.</li>
2996</ul>
2997<p><strong>Category B: Personal information categories listed in the California Customer Records statute (Cal. Civ. Code § 1798.80(e)).</strong></p>
2998<ul>
2999<li>Examples: A name, signature, Social Security number, physical characteristics or description, address, telephone number, passport number, driver's license or state identification card number, insurance policy number, education, employment, employment history, bank account number, 
2999credit card number, debit card number, or any other financial information, medical information, or health insurance information. Some personal information included in this category may overlap with other categories.</li>
3000<li>Collected: Yes.</li>
3001</ul>
3002<p><strong>Category C: Protected classification characteristics under California or federal law.</strong></p>
3003<ul>
3004<li>Examples: Age (40 years or older), race, color, ancestry, national origin, citizenship, religion or creed, marital status, medical condition, physical or mental disability, sex (including gender, gender identity, gender expression, pregnancy or childbirth and related medical conditions), sexual orientation, veteran or military status, genetic information (including familial genetic information).</li>
3005<li>Collected: No.</li>
3006</ul>
3007<p><strong>Category D: Commercial information.</strong></p>
3008<ul>
3009<li>Examples: Records and history of products or services purchased or considered.</li>
3010<li>Collected: No.</li>
3011</ul>
3012<p><strong>Category E: Biometric information.</strong></p>
3013<ul>
3014<li>Examples: Genetic, physiological, behavioral, and biological characteristics, or activity patterns used to extract a template or other identifier or identifying information, such as, fingerprints, faceprints, and voiceprints, iris or retina scans, keystroke, gait, or other physical patterns, and sleep, health, or exercise data.</li>
3015<li>Collected: No.</li>
3016</ul>
3017<p><strong>Category F: Internet or other similar network activity.</strong></p>
3018<ul>
3019<li>Examples: Interaction with our Service or advertisement.</li>
3020<li>Collected: Yes.</li>
3021</ul>
3022<p><strong>Category G: Geolocation data.</strong></p>
3023<ul>
3024<li>Examples: Approximate physical location.</li>
3025<li>Collected: No.</li>
3026</ul>
3027<p><strong>Category H: Sensory data.</strong></p>
3028<ul>
3029<li>Examples: Audio, electronic, visual, thermal, olfactory, or similar information.</li>
3030<li>Collected: No.</li>
3031</ul>
3032<p><strong>Category I: Professional or employment-related information.</strong></p>
3033<ul>
3034<li>Examples: Current or past job history or performance evaluations.</li>
3035<li>Collected: No.</li>
3036</ul>
3037<p><strong>Category J: Non-public education information (per the Family Educational Rights and Privacy Act (20 U.S.C. Section 1232g, 34 C.F.R. Part 99)).</strong></p>
3038<ul>
3039<li>Examples: Education records directly related to a student maintained by an educational institution or party acting on its behalf, such as grades, transcripts, class lists, student schedules, student identification codes, student financial information, or student disciplinary records.</li>
3040<li>Collected: No.</li>
3041</ul>
3042<p><strong>Category K: Inferences drawn from other personal information.</strong></p>
3043<ul>
3044<li>Examples: Profile reflecting a person's preferences, characteristics, psychological trends, predispositions, behavior, attitudes, intelligence, abilities, and aptitudes.</li>
3045<li>Collected: No.</li>
3046</ul>
3047<p><strong>Category L: Sensitive personal information.</strong></p>
3048<ul>
3049<li>Examples: Account login and password information, geolocation data.</li>
3050<li>Collected: Yes.</li>
3051</ul>
3052<p>Under CCPA/CPRA, personal information does not include:</p>
3053<ul>
3054<li>Publicly available information from government records</li>
3055<li>Deidentified or aggregated consumer information</li>
3056<li>Information excluded from the CCPA/CPRA's scope, such as:</li>
3057<li>Health or medical information covered by the Health Insurance Portability and Accountability Act of 1996 (HIPAA) and the California Confidentiality of Medical Information Act (CMIA) or clinical trial data</li>
3058<li>Personal Information covered by certain sector-specific privacy laws, including the Fair Credit Reporting Act (FRCA), the Gramm-Leach-Bliley Act (GLBA) or California Financial Information Privacy Act (FIPA), and the Driver's Privacy Protection Act of 1994</li>
3059</ul>
3060<h3>Sources of Personal Information</h3>
3061<p>We obtain the categories of personal information listed above from the following categories of sources:</p>
3062<ul>
3063<li><strong>Directly from You</strong>. For example, from the forms You complete on our Service, preferences You express or provide through our Service.</li>
3064<li>‍<strong>Indirectly from You</strong>. For example, from observing Your activity on our Service.<strong>‍</strong></li>
3065<li><strong>Automatically from You</strong>. For example, through cookies We or our Service Providers set on Your Device as You navigate through our Service.<strong>‍</strong></li>
3066<li><strong>From Service Providers</strong>. For example, third-party vendors to monitor and analyze the use of our Service, or other third-party vendors that We use to provide the Service to You.</li>
3067</ul>
3068<h3>Use of Personal Information</h3>
3069<p>We may use or disclose personal information We collect for "business purposes" or "commercial purposes" (as defined under the CCPA/CPRA), which may include the following examples:</p>
3070<ul>
3071<li>To operate our Service and provide You with Our Service.</li>
3072<li>To provide You with support and to respond to Your inquiries, including to investigate and address Your concerns and monitor and improve our Service.</li>
3073<li>To fulfill or meet the reason You provided the information. For example, if You share Your contact information to ask a question about our Service, We will use that personal information to respond to Your inquiry.</li>
3074<li>To respond to law enforcement requests and as required by applicable law, court order, or governmental regulations.</li>
3075<li>As described to You when collecting Your personal information or as otherwise set forth in the CCPA/CPRA.</li>
3076<li>For internal administrative and auditing purposes.</li>
3077<li>To detect security incidents and protect against malicious, deceptive, fraudulent or illegal activity, including, when necessary, to prosecute those responsible for such activities.</li>
3078<li>Other one-time uses.</li>
3079</ul>
3080<p>Please note that the examples provided above are illustrative and not intended to be exhaustive. For more details on how we use this information, please refer to the "Use of Your Personal Data" section.</p>
3081<p>If We decide to collect additional categories of personal information or use the personal information We collected for materially different, unrelated, or incompatible purposes, We will update this Privacy Policy.</p>
3082<h3>Disclosure of Personal Information</h3>
3083<p>We may use or disclose and may have used or disclosed in the last twelve (12) months the following categories of personal information for business or commercial purposes:</p>
3084<ul>
3085<li>Category A: Identifiers</li>
3086<li>Category B: Personal information categories listed in the California Customer Records statute (Cal. Civ. Code § 1798.80(e))</li>
3087<li>Category F: Internet or other similar network activity</li>
3088</ul>
3089<p>Please note that the categories listed above are those defined in the CCPA/CPRA. This does not mean that all examples of that category of personal information were in fact disclosed, but reflects our good faith belief to the best of our knowledge that some of that information from the applicable category may be and may have been disclosed.</p>
3090<p>When We disclose personal information for a business purpose or a commercial purpose, We enter a contract that describes the purpose and requires the recipient to both keep that personal information confidential and n
3090ot use it for any purpose except performing the contract.</p>
3091<h3>Share of Personal Information</h3>
3092<p>We may share, and have shared in the last twelve (12) months, Your personal information identified in the above categories with the following categories of third parties:</p>
3093<ul>
3094<li>Service Providers</li>
3095<li>Our affiliates</li>
3096<li>Our business partners</li>
3097<li>Third party vendors to whom You or Your agents authorize Us to disclose Your personal information in connection with products or services We provide to You</li>
3098</ul>
3099<h3>Sale of Personal Information</h3>
3100<p>As defined in the CCPA/CPRA, "sell" and "sale" mean selling, renting, releasing, disclosing, disseminating, making available, transferring, or otherwise communicating orally, in writing, or by electronic or other means, a Consumer's personal information by the Business to a third party for valuable consideration. This means that We may have received some kind of benefit in return for sharing personal information, but not necessarily a monetary benefit.</p>
3101<p>We do not sell personal information as the term sell is commonly understood. We do allow Service Providers to use Your personal information for the business purposes described in Our Privacy Policy, for activities such as advertising, marketing, and analytics, and these may be deemed a sale under CCPA/CPRA.</p>
3102<p>We may sell and may have sold in the last twelve (12) months the following categories of personal information:</p>
3103<ul>
3104<li>Category A: Identifiers</li>
3105<li>Category B: Personal information categories listed in the California Customer Records statute (Cal. Civ. Code § 1798.80(e))</li>
3106<li>Category F: Internet or other similar network activity</li>
3107</ul>
3108<p>Please note that the categories listed above are those defined in the CCPA/CPRA. This does not mean that all examples of that category of personal information were in fact sold, but reflects our good faith belief to the best of Our knowledge that some of that information from the applicable category may be and may have been shared for value in return.</p>
3109<h3>Sale of Personal Information of Minors Under 16 Years of Age</h3>
3110<p>We do not knowingly collect personal information from minors under the age of 16 through our Service, although certain third party websites that we link to may do so. These third-party websites have their own terms of use and privacy policies and We encourage parents and legal guardians to monitor their children's Internet usage and instruct their children to never provide information on other websites without their permission.</p>
3111<p>We do not sell the personal information of Consumers We actually know are less than 16 years of age, unless We receive affirmative authorization (the "right to opt-in") from either the Consumer who is between 13 and 16 years of age, or the parent or guardian of a Consumer less than 13 years of age. Consumers who opt-in to the sale of personal information may opt-out of future sales at any time. To exercise the right to opt-out, You (or Your authorized representative) may submit a request to Us by contacting Us.</p>
3112<p>If You have reason to believe that a child under the age of 13 (or 16) has provided Us with personal information, please contact Us with sufficient detail to enable Us to delete that information.</p>
3113<h3>Your Rights under the CCPA/CPRA</h3>
3114<p>The CCPA/CPRA provides California residents with specific rights regarding their personal information. If You are a resident of California, You have the following rights:</p>
3115<ul>
3116<li><strong>The right to notice.</strong> You have the right to be notified which categories of Personal Data are being collected and the purposes for which the Personal Data is being used.<strong>‍</strong></li>
3117<li><strong>The right to know/access.</strong> Under CCPA/CPRA, You have the right to request that We disclose information to You about Our collection, use, sale, disclosure for business purposes and share of personal information.<br>
3118<ul>
3119<li>Once We receive and confirm Your request, We will disclose to You:<br>
3120<ul>
3121<li>The categories of personal information We collected about You</li>
3122<li>The categories of sources for the personal information We collected about You</li>
3123<li>Our business or commercial purposes for collecting or selling that personal information</li>
3124<li>The categories of third parties with whom We share that personal information</li>
3125<li>The specific pieces of personal information We collected about You</li>
3126</ul>
3127</li>
3128<li>If we sold Your personal information or disclosed Your personal information for a business purpose, We will disclose to You:<ul>
3129<li>The categories of personal information categories sold</li>
3130<li>The categories of personal information categories disclosed</li>
3131</ul>
3132</li>
3133</ul>
3134</li>
3135<li><strong>The right to say no to the sale or sharing of Personal Data (opt-out).</strong> You have the right to direct Us to not sell Your personal information. To submit an opt-out request, please see the "Do Not Sell My Personal Information" section or contact Us.<strong>‍</strong></li>
3136<li><strong>The right to correct Personal Data.</strong> You have the right to correct or rectify any inaccurate personal information about You that We collected. Once We receive and confirm Your request, We will use commercially reasonable efforts to correct (and direct our Service Providers to correct) Your personal information, unless an exception applies.<strong>‍</strong></li>
3137<li><strong>The right to limit use and disclosure of sensitive Personal Data.</strong> You have the right to request to limit the use or disclosure of certain sensitive personal information We collected about You, unless an exception applies. To submit, please see the "Limit the Use or Disclosure of My Sensitive Personal Information" section or contact Us.<strong>‍</strong></li>
3138<li><strong>The right to delete Personal Data.</strong> You have the right to request the deletion of Your Personal Data under certain circumstances, subject to certain exceptions. Once We receive and confirm Your request, We will delete (and direct Our Service Providers to delete) Your personal information from our records, unless an exception applies. We may deny Your deletion request if retaining the information is necessary for Us or Our Service Providers to:<br>
3139<ul>
3140<li>Complete the transaction for which We collected the personal information, provide a good or service that You requested, take actions reasonably anticipated within the context of our ongoing business relationship with You, or otherwise perform our contract with You.<br>
3141</li>
3142<li>Detect security incidents, protect against malicious, deceptive, fraudulent, or illegal activity, or prosecute those responsible for such activities.</li>
3143<li>Debug products to identify and repair errors that impair existing intended functionality.</li>
3144<li>Exercise free speech, ensure the right of another consumer to exercise their free speech rights, or exercise another right provided for by law.</li>
3145<li>Comply with the California Electronic Communications Privacy Act (Cal. Penal Code § 1546 et. seq.).</li>
3146<li>
3146Engage in public or peer-reviewed scientific, historical, or statistical research in the public interest that adheres to all other applicable ethics and privacy laws, when the information's deletion may likely render impossible or seriously impair the research's achievement, if You previously provided informed consent.</li>
3147<li>Enable solely internal uses that are reasonably aligned with consumer expectations based on Your relationship with Us.</li>
3148<li>Comply with a legal obligation.</li>
3149<li>Make other internal and lawful uses of that information that are compatible with the context in which You provided it.</li>
3150</ul>
3151</li>
3152<li><strong>The right not to be discriminated against.</strong> You have the right not to be discriminated against for exercising any of Your consumer's rights, including by:<br>
3153<ul>
3154<li>Denying goods or services to You<br>
3155</li>
3156<li>Charging different prices or rates for goods or services, including the use of discounts or other benefits or imposing penalties</li>
3157<li>Providing a different level or quality of goods or services to You</li>
3158<li>Suggesting that You will receive a different price or rate for goods or services or a different level or quality of goods or services</li>
3159</ul>
3160</li>
3161</ul>
3162<h3>Exercising Your CCPA/CPRA Data Protection Rights</h3>
3163<p>Please see the "Do Not Sell My Personal Information" section and "Limit the Use or Disclosure of My Sensitive Personal Information" section for more information on how to opt out and limit the use of sensitive information collected.</p>
3164<p>Additionally, in order to exercise any of Your rights under the CCPA/CPRA, and if You are a California resident, You can contact Us:</p>
3165<ul>
3166<li>By email: [email protected]</li>
3167</ul>
3168<p>Only You, or a person registered with the California Secretary of State that You authorize to act on Your behalf, may make a verifiable request related to Your personal information.</p>
3169<p>Your request to Us must:</p>
3170<ul>
3171<li>Provide sufficient information that allows Us to reasonably verify You are the person about whom We collected personal information or an authorized representative</li>
3172<li>Describe Your request with sufficient detail that allows Us to properly understand, evaluate, and respond to it</li>
3173</ul>
3174<p>We cannot respond to Your request or provide You with the required information if We cannot:</p>
3175<ul>
3176<li>Verify Your identity or authority to make the request</li>
3177<li>And confirm that the personal information relates to You</li>
3178</ul>
3179<p>We will disclose and deliver the required information free of charge within 45 days of receiving Your verifiable request. The time period to provide the required information may be extended once by an additional 45 days when reasonably necessary and with prior notice.</p>
3180<p>Any disclosures We provide will only cover the 12-month period preceding the verifiable request's receipt.</p>
3181<p>For data portability requests, We will select a format to provide Your personal information that is readily usable and should allow You to transmit the information from one entity to another entity without hindrance.</p>
3182<h3>Do Not Sell My Personal Information</h3>
3183<p>As defined in the CCPA/CPRA, "sell" and "sale" mean selling, renting, releasing, disclosing, disseminating, making available, transferring, or otherwise communicating orally, in writing, or by electronic or other means, a Consumer's personal information by the Business to a third party for valuable consideration. This means that We may have received some kind of benefit in return for sharing personal information, but not necessarily a monetary benefit.</p>
3184<p>We do not sell personal information as the term sell is commonly understood. We do allow Service Providers to use Your personal information for the business purposes described in Our Privacy Policy, for activities such as advertising, marketing, and analytics, and these may be deemed a sale under CCPA/CPRA.</p>
3185<p>You have the right to opt-out of the sale of Your personal information. Once We receive and confirm a verifiable consumer request from You, we will stop selling Your personal information. To exercise Your right to opt-out, please contact Us.</p>
3186<p>The Service Providers we partner with (for example, our analytics or advertising partners) may use technology on the Service that sells personal information as defined by the CCPA/CPRA law. If you wish to opt out of the use of Your personal information for interest-based advertising purposes and these potential sales as defined under CCPA/CPRA law, you may do so by following the instructions below.</p>
3187<p>Please note that any opt out is specific to the browser You use. You may need to opt out on every browser that You use.</p>
3188<h4>Website</h4>
3189<p>If applicable, click "Privacy Preferences", "Update Privacy Preferences" or "Do Not Sell My Personal Information" buttons listed on the Service to review Your privacy preferences and opt out of cookies and other technologies that We may use. Please note that You will need to opt out from each browser that You use to access the Service.</p>
3190<p>Additionally, You can opt out of receiving ads that are personalized as served by our Service Providers by following our instructions presented on the Service:</p>
3191<ul>
3192<li>
3192The NAI's opt-out platform: <a href="http://www.networkadvertising.org/choices/">http://www.networkadvertising.org/choices/</a>‍</li>
3193<li>The EDAA's opt-out platform <a href="http://www.youronlinechoices.com/">http://www.youronlinechoices.com/</a>‍</li>
3194<li>The DAA's opt-out platform: <a href="http://optout.aboutads.info/?c=2&lang=EN">http://optout.aboutads.info/?c=2&amp;lang=EN</a>‍</li>
3195<li>RB2B opt-out: <a href="https://app.retention.com/optout" target="_blank">https://app.retention.com/optout</a></li>
3196</ul>
3197<p>The opt out will place a cookie on Your computer that is unique to the browser You use to opt out. If you change browsers or delete the cookies saved by Your browser, You will need to opt out again.</p>
3198<h4>Mobile Devices</h4>
3199<p>Your mobile device may give You the ability to opt out of the use of information about the apps You use in order to serve You ads that are targeted to Your interests:</p>
3200<ul>
3201<li>"Opt out of Interest-Based Ads" or "Opt out of Ads Personalization" on Android devices</li>
3202<li> "Limit Ad Tracking" on iOS devices</li>
3203</ul>
3204<p>You can also stop the collection of location information from Your mobile device by changing the preferences on Your mobile device.</p>
3205<h3>Limit the Use or Disclosure of My Sensitive Personal Information</h3>
3206<p>If You are a California resident, You have the right to limit the use and disclosure of Your sensitive personal information to that use which is necessary to perform the services or provide the goods reasonably expected by an average consumer who requests such services or goods.</p>
3207<p>We collect, use and disclose sensitive personal information in ways that are necessary to provide the Service. For more information on how We use Your personal information, please see the "Use of Your Personal Data" section or contact us.</p>
3208<h2>"Do Not Track" Policy and Global Privacy Control (GPC)</h2>
3209<p>Our website does not respond to traditional Do Not Track (DNT) signals. However, we do honor Global Privacy Control (GPC) signals, which are designed to reflect users' privacy preferences in a more standardized and enforceable way.</p>
3210<h2>Your California Privacy Rights (California's Shine the Light law)</h2>
3211<p>Under California Civil Code Section 1798 (California's Shine the Light law), California residents with an established business relationship with us can request information once a year about sharing their Personal Data with third parties for the third parties' direct marketing purposes.</p>
3212<p>If you'd like to request more information under the California Shine the Light law, and if You are a California resident, You can contact Us using the contact information provided below.</p>
3213<h2>California Privacy Rights for Minor Users (California Business and Professions Code Section 22581)</h2>
3214<p>California Business and Professions Code Section 22581 allows California residents under the age of 18 who are registered users of online sites, services or applications to request and obtain removal of content or information they have publicly posted.</p>
3215<p>To request removal of such data, and if You are a California resident, You can contact Us using the contact information provided below, and include the email address associated with Your account.</p>
3216<p>Be aware that Your request does not guarantee complete or comprehensive removal of content or information posted online and that the law may not permit or require removal in certain circumstances.</p>
3217<h2>Children's Privacy</h2>
3218<p>Our Service does not address anyone under the age of 13. We do not knowingly collect personally identifiable information from anyone under the age of 13. If You are a parent or guardian and You are aware that Your child has provided Us with Personal Data, please contact Us. If We become aware that We have collected Personal Data from anyone under the age of 13 without verification of parental consent, We take steps to remove that information from Our servers.</p>
3219<p>If We need to rely on consent as a legal basis for processing Your information and Your country requires consent from a parent, We may require Your parent's consent before We collect and use that information.</p>
3220<h2>Links to Other Websites</h2>
3221<p>Our Service may contain links to other websites that are not operated by Us. If You click on a third party link, You will be directed to that third party's site. We strongly advise You to review the Privacy Policy of every site You visit.</p>
3222<p>We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.</p>
3223<h2>Changes to this Privacy Policy</h2>
3224<p>We may update Our Privacy Policy from time to time. We will notify You of any changes by posting the new Privacy Policy on this page.</p>
3225<p>We will let You know via email and/or a prominent notice on Our Service, prior to the change becoming effective and update the "Last updated" date at the top of this Privacy Policy.</p>
3226<p>You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.</p>
3227<h2>GDPR Representatives</h2>
3228<p>As required under the UK GDPR and EU GDPR, we have appointed representatives in the United Kingdom and the European Union who can be contacted by supervisory authorities and data subjects regarding our data processing activities.</p>
3229<p><strong>UK Representative</strong><br>
3230Graham Reilly<br>
3231<a href="mailto:[email protected]">[email protected]</a><br>
3232Workstreet, Regus Exeter Business Park, 1 Emperor Way, Exeter, Devon, EX1 3QS, United Kingdom</p>
3233<p><strong>EU Representative</strong><br>
3234Ria Pardeep<br>
3235<a href="mailto:[email protected]">[email protected]</a><br>
3236Workstreet, Bahnhofstraße 8, 30159 Hanover, Germany</p>
3237<h2>Contact Us</h2>
3238<p>If you have any questions about this Privacy Policy, You can contact us:</p>
3239<ul>
3240<li>By email: <a href="mailto:[email protected]">[email protected]</a></li>
3241</ul>
3242`}
3242,"cookie-policy":{title:"Cookie Policy",lastUpdated:"December 26, 2025",html:`<p><strong>Company:</strong> Dragonsight Labs, Inc.<br>
3243<strong>Website:</strong> https://www.upside.tech<br>
3244<strong>Contact:</strong> <a href="mailto:[email protected]">[email protected]</a></p>
3245<p>This Cookie Policy explains what cookies and similar technologies are, how we use them, and how you can control them. It should be read together with our Privacy Policy.</p>
3246<h2>1) What are cookies?</h2>
3247<p>Cookies are small text files that websites place on your device (computer, phone, tablet). Cookies help websites work, remember preferences, improve performance, and (in some cases) support advertising and measurement.</p>
3248<p>Cookies can be:</p>
3249<ul>
3250<li><strong>Session cookies</strong> (deleted when you close your browser), or</li>
3251<li><strong>Persistent cookies</strong> (remain until they expire or you delete them).</li>
3252</ul>
3253<p>We may also use similar technologies (like pixels, tags, or SDKs) that function like cookies.</p>
3254<h2>2) How we use cookies</h2>
3255<p>We use cookies and similar technologies for purposes such as:</p>
3256<ul>
3257<li><strong>Strictly Necessary:</strong> Required for core website functionality (for example, security, network management, and saving your privacy choices).</li>
3258<li><strong>Analytics / Performance:</strong> Help us understand how our website is used so we can improve performance and user experience.</li>
3259<li><strong>Targeted Advertising / Measurement:</strong> Help measure and improve advertising or marketing effectiveness and tailor content where permitted.</li>
3260</ul>
3261<h2>3) View cookies and manage your choices (Privacy Center)</h2>
3262<p>You can view the cookies that apply to you and manage your preferences at any time in our <strong>Privacy Center</strong>.</p>
3263<p>Use this link on our website to open the Privacy Center: </p>
3264<div data-rt-embed-type='true'>
3265<a id="preferenceCenterLink_ketch" href="#" onclick="ketch('showExperience')">Privacy Center</a></div>
3266<p>The Privacy Center provides the most up-to-date details, including cookie names, purposes/categories, providers, duration, and whether cookies are first-party or third-party.</p>
3267<h2>4) Browser controls</h2>
3268<p>Most browsers let you control cookies through their settings (including blocking or deleting cookies). If you block certain cookies, some parts of the website may not function properly.</p>
3269<p><strong>Note:</strong> changing browser settings does not necessarily change choices you’ve saved in the Privacy Center, and vice versa.</p>
3270<h2>5) Global Privacy Control (GPC) and Do Not Track (DNT)</h2>
3271<ul>
3272<li><strong>Global Privacy Control (GPC):</strong> We honor GPC signals. When we detect a GPC signal, we apply privacy choices and limit certain tracking where applicable.</li>
3273<li><strong>Do Not Track (DNT):</strong> Our website does not respond to traditional DNT browser signals.</li>
3274</ul>
3275<h2>6) Third-party cookies</h2>
3276<p>Some cookies may be placed by third parties (for example, analytics or advertising partners). These third parties may use cookies under their own privacy policies. For the most current information about third-party cookies used on our website, please use the Privacy Center.</p>
3277<h2>7) Updates to this Cookie Policy</h2>
3278<p>We may update this Cookie Policy from time to time to reflect changes in technology, legal requirements, or our practices. When we do, we will post the updated version on this page.</p>
3279<h2>8) Contact us</h2>
3280<p>If you have questions about this Cookie Policy, contact us at <a href="mailto:[email protected]">[email protected]</a>.</p>
3281`},msa:{title:"Master Subscription Agreement",lastUpdated:"May 6, 2026",html:`<p>This Master Subscription Agreement (the "<strong>Agreement</strong>") is the standard form agreement that governs access to and use of Upside's Subscription Services.
3282It is incorporated by reference into each Order Form executed between Dragonsight Labs, Inc. ("<strong>Upside</strong>") and its customers ("<strong>Customer</strong>").
3283The Agreement becomes effective as of the date of the last signature on the applicable Order Form (the "<strong>Effective Date</strong>").
3284Upside and Customer may be referred to herein collectively as the "<strong>Parties</strong>" or individually as a "<strong>Party</strong>".</p>
3285<h2>1. Definitions</h2>
3286<p>"<strong>AUP</strong>" means the Acceptable Use Policy available at <a href="/legal/acceptable-use-policy">upside.tech/acceptable-use-policy</a>, which forms part of this Agreement.</p>
3287<p>"<strong>Customer Materials</strong>" means all information, data, content and other materials, in any form or medium, that is provided, or otherwise uploaded, by or on behalf of Customer through the Subscription Services or to Upside in connection with Customer's use of the Subscription Services, but excluding, for clarity, Service Information and any other Upside IP.</p>
3288<p>"<strong>Documentation</strong>" means the operator, user, and technical manuals and documentation.</p>
3289<p>"<strong>Order Form</strong>" means a(n) (i) mutually executed order form or other mutually agreed upon ordering document; (ii) purchase order issued by Customer and accepted by Upside in writing; (iii) online registration form made available by Upside and accepted by Customer; or (iv) quote issued by Upside and accepted by Customer, in each case which references this Agreement and sets forth the applicable Subscription Services to be provided by Upside.</p>
3290<p>"<strong>Professional Services</strong>" means the implementation and/or other professional services, if any, to be provided by Upside to Customer as set forth in the relevant Order Form.</p>
3291<p>"<strong>Service Information</strong>" means data or insights derived by Upside from: (i) any Customer Materials, Input or Output; or (ii) Customer's, its Authorized Users' and/or end users' use of the Subscription Services, including any usage data or trends specific to the Subscription Services, in each case provided that such data is de-identified of any Personal Data (as defined in the DPA).</p>
3292<p>"<strong>Subscription Services</strong>" means Upside's revenue attribution and intelligence platform, as more particularly described or identified in the applicable Order Form.</p>
3293<p>"<strong>Upside IP</strong>" means the (i) Subscription Services, including the underlying software, algorithms, interfaces, technology, data, tools, know-how, processes and methods (A) used to provide or deliver the Subscription Services or any Professional Services and Documentation; or (B) resulting from provision of the Professional Services, including, for example, any agent code; (ii) Service Information; (iii) all improvements, modifications or enhancements to, or derivative works of, the foregoing, regardless of inventorship or authorship; and (iv) all intellectual property rights in and to any of the foregoing.</p>
3294<p>"<strong>Use</strong>" means to use and access the Subscription Services in accordance with this Agreement and the Documentation.</p>
3295<h2>2. Subscription Services</h2>
3296<h3>(a) Right to Use</h3>
3297<p>Subject to Customer's compliance with the terms and conditions of this Agreement, Upside hereby grants to Customer a limited, non-exclusive, non-transferable (except pursuant to Section 13) right to Use the Subscription Services during the applicable Term, solely for the Customer's internal business purpose.</p>
3298<h3>(b) Use Restrictions</h3>
3299<p>Customer will not and will not permit any person or entity (including, without limitation, Authorized Users) to, directly or indirectly: (i) copy, modify or create any derivative work of any portion of the Subscription Services or the Documentation; (ii) reverse engineer, decompile, decode, or disassemble or otherwise attempt to derive or gain improper access to any software component of the Subscription Services, in whole or in part; (iii) frame, mirror, sell, resell, market, sublicense, publish, distribute, reproduce, assign, transfer, rent, lease or loan any portion of the Subscription Services to any other person or entity, or otherwise allow any person or entity to use the Subscription Services for any purpose other than for the benefit of Customer in accordance with this Agreement; (iv) use the Subscription Services or Documentation in any manner or for any purpose that infringes, misappropriates, or otherwise violates any intellectual property rights or other right of any person or entity, or that violates any applicable law; (v) access or search the Subscription Services (or download any data or content contained therein or transmitted thereby) through the use of any engine, software, tool, agent, device or mechanism (including spiders, robots, crawlers or any other similar data mining tools) other than software or Subscription Services features provided by Upside for use expressly for such purposes; (vi) use the Subscription Services in a manner that violates the AUP; or (vii) use the Output, Subscription Services, Documentation or any other Upside Confidential Information for benchmarking or competitive analysis with respect to competitive or related products or services, or to develop, commercialize, license or sell any product, service or technology that could, directly or indirectly, compete with the Subscription Services.</p>
3300<h3>(c) Authorized Users</h3>
3301<p>Customer will not allow any person or entity other than end users, employees or contractors that it authorizes to use the Subscription Services on its behalf ("<strong>Authorized Users</strong>").
3302Customer and Authorized Users shall use the Subscription Services only in compliance with this Agreement.
3303Customer may permit Authorized Users to Use the Subscription Services, provided that Customer is responsible for all acts or omissions by its Authorized Users in connection with their use of the Subscription Services and their compliance with the terms and conditions of this Agreement, including, without limitation, with Customer's obligations and the restrictions set forth in Section 2(b).</p>
3304<h3>(d) Third-Party Services</h3>
3305<p>Certain features and functionalities within the Subscription Services may allow Customer and its Authorized Users to interface or interact with, access and/or use compatible third-party services, products, technology and content (collectively, "<strong>Third-Party Services</strong>") through the Subscription Services.
3306Upside does not provide any aspect of the Third-Party Services and is not responsible for any compatibility issues, errors or bugs in the Subscription Services or Third-Party Services caused in whole or in part by the Third-Party Services or any update or upgrade thereto.
3307Customer is solely responsible for maintaining the Third-Party Services and obtaining any associated licenses and consents necessary for Customer to use the Third-Party Services in connection with the Subscription Services.</p>
3308<h3>(e) Fair Use and Material Change in Use</h3>
3309<p>The Subscription Services are provided on a fair use basis, and Upside does not impose fixed numerical caps on Customer's Use except as expressly set forth in an Order Form.
3310Customer may Use the Subscription Services at levels consistent with the Use contemplated at the time of the applicable Order Form.
3311If, during the Term, Customer's Use of the Subscription Services materially increases beyond the level of Use contemplated at the time of the applicable Order Form, or otherwise becomes disproportionate to Customer's subscription in a manner that places a meaningful burden on Upside's infrastru
3311cture or third-party costs, Upside may notify Customer and the Parties shall negotiate in good faith for a period of thirty (30) days to agree on revised commercial terms, which may include adjusted Fees, an upgraded plan, or a new Order Form reflecting the changed level of Use.
3312If the Parties are unable to reach agreement within such thirty (30) day period, Upside may, upon thirty (30) days' prior written notice, (i) continue to provide the Subscription Services under the existing Order Form; (ii) apply reasonable technical controls proportionate to Customer's subscription; or (iii) terminate the applicable Order Form pursuant to Section 8, with such failure to agree deemed a material breach solely for purposes of this Section 2(e).
3313This Section 2(e) does not limit Upside's rights under Section 2(b) (Use Restrictions), the AUP, or Section 8 (Termination) with respect to security, stability, or compliance risks, for which Upside may act without completing the good-faith negotiation process.</p>
3314<h2>3. Fees</h2>
3315<p>Customer will pay Upside the fees set forth in the applicable Order Form ("<strong>Fees</strong>") in accordance with the payment terms set forth therein and without offset or deduction.
3316Upside reserves the right to change the Fees or applicable charges and to institute new charges and Fees at the end of the Initial Term or then-current Renewal Term, upon sixty (60) days' prior notice to Customer (which may be sent by email).
3317Except as otherwise provided in the relevant Order Form or agreed by the Parties, Upside will issue monthly invoices to Customer during the Term, and Customer will pay all amounts set forth on any such invoice no later than thirty (30) days after the date of such invoice.
3318Within thirty (30) days after the receipt of each invoice, Customer will provide notice to Upside of any amount shown in such invoice that Customer disputes in good faith, which notice will include a reasonably detailed explanation of the disputed amount and the grounds for the dispute.
3319The parties will cooperate in good faith to resolve any disputed payments.
3320Subject to the foregoing, all payments are non-refundable and, except for the initial payment for the Professional Services set forth in the Order Form, neither Party will have the right to set off, discount or otherwise reduce or refuse to pay any amounts due to the other Party under this Agreement.
3321If Customer fails to make any payment when due, late charges will accrue at the rate of 1.5% per month or, if lower, the highest rate permitted by applicable law and Upside may suspend Services until all payments are made in full.
3322Customer will reimburse Upside all reasonable costs and expenses incurred (including reasonable attorneys' fees) in collecting any late payments or interest.</p>
3323<h2>4. Ownership and Use</h2>
3324<h3>(a) Rights Reserved</h3>
3325<p>Upside reserves and, as between the Parties will solely own, the Upside IP and all rights, title and interest in and to the Upside IP.
3326No rights are granted to Customer hereunder (whether by implication, estoppel, exhaustion or otherwise) other than as expressly set forth herein.
3327All intellectual property rights created in any Upside IP will vest solely in Upside upon creation, and to the extent that sole ownership does not originally vest in Upside, such intellectual property rights are hereby automatically and irrevocably assigned by Customer to Upside.
3328Customer will take all actions and execute all documents reasonably requested by Upside to give effect to the preceding sentence.</p>
3329<h3>(b) Customer Materials</h3>
3330<p>The Customer Materials will be deemed Confidential Information of Customer and between Customer and Upside, Customer owns and retains all right, title and interest in and to all Customer Materials.</p>
3331<h3>(c) Input and Output</h3>
3332<p>The Subscription Services will generate information, including revenue attribution information, (collectively, "<strong>Output</strong>") in response to Customer Materials uploaded with the intent to influence the behavior of the Subscription Services (collectively, "<strong>Input</strong>").
3333The Input and Output will be deemed Confidential Information of Customer.
3334As between the Parties, to the extent permitted by applicable law and subject to Section 4(a), Customer owns all Input provided by Customer and the Output generated in response to such Input.</p>
3335<h3>(d) Use of Customer Materials, Input and Output</h3>
3336<p>Upside shall not use, nor shall it allow any third parties to use, Customer Materials, Input, Output, Personal Data, or Confidential Information (collectively, "<strong>Customer Data</strong>
3336") to (i) train or contribute to any generative model (including large language models, foundation models, and other generative AI systems); or (ii) train algorithms or models to provide Subscription Services or Professional Services to another Customer.
3337Subject to the foregoing prohibitions, Upside may use and modify Customer Data solely to (1) provide Subscription Services and Professional Services to Customer, including processing inputs, generating outputs, training customer-specific non-generative models, and performing support and debugging; (2) enforce the Acceptable Use Policy and comply with applicable laws; (3) maintain and improve Subscription Services, including internal study and validation of new or updated features or pipelines, provided no Customer Data or artifacts derived from Customer Data (such as model weightings or embeddings) become part of the Subscription Services; or (4) derive anonymized or aggregated insights that are permanently de-identified of Personal Data.</p>
3338<h3>(e) DPA</h3>
3339<p>The terms and conditions of the <a href="/legal/dpa">Data Processing Addendum</a> govern Upside's processing of Personal Data contained within Customer Materials.</p>
3340<h3>(f) Feedback</h3>
3341<p>From time to time Customer or its employees, contractors, or representatives may provide Upside with suggestions, comments, feedback or the like with regard to the Subscription Services (collectively, "<strong>Feedback</strong>") which Upside may use and exploit in connection with Upside business purposes, including, without limitation, the testing, development, maintenance and improvement of the Subscription Services.</p>
3342<h3>(g) Marketing Support</h3>
3343<p>Customer agrees to comply with reasonable requests of Upside to support public relations efforts pertaining to the Subscription Services, which efforts may include: (a) a press release highlighting Company's use of the Subscription Services, (b) participation in targeted press and analyst interviews highlighting benefits of implementing the Subscription Services, and (c) participation in customer case studies developed by Upside and used on Upside's website(s) and other collateral.
3344Customer grants to Upside a non-exclusive, non-transferable, limited right to use Customer's name, trademarks, and logos (collectively, the "<strong>Customer Marks</strong>") (i) for the purpose of referencing Customer as a customer of Upside on the Upside website(s) and (ii) in the production of marketing materials, provided that such use is in accordance with any trademark and logo use guidelines that Customer provides to Upside.
3345All goodwill developed from such use shall be solely for Customer's benefit.</p>
3346<h2>5. Representations and Warranties</h2>
3347<h3>(a) General</h3>
3348<p>Each Party represents and warrants to the other Party that: (i) it has full power and authority to enter into this Agreement; (ii) the execution, delivery and performance of this Agreement by it have been duly authorized by all necessary actions and do not violate its organizational documents; and (iii) it will comply with the laws applicable to that Party and the performance of their obligations under this Agreement and will provide information reasonably requested by the other Party to assist the other Party in its compliance obligations.</p>
3349<h3>(b) Customer Representations</h3>
3350<p>Customer represents and warrants that: (i) Upside's use of the Customer Materials in accordance with this Agreement will not infringe or violate any intellectual property or other rights of any third party or cause a breach of any agreement or obligations between Customer and any third-party; and (ii) it has all rights and permissions required to submit the Customer Materials and Input to Upside for use in accordance with this Agreement.</p>
3351<h3>(c) Upside Representations</h3>
3352<p>Upside represents and warrants that: (i) Customer's use of the aspects of the Subscription Services that are proprietary to Upside (which for the avoidance of doubt excludes any third-party intellectual property or data) in accordance with this Agreement does not infringe or violate any intellectual property rights of any third party; (ii) it has all rights and permissions required to provide the Subscription Services in accordance with this Agreement; (iii) the Subscription Services will operate during the applicable Term substantially as described 
3352in the applicable Documentation; and (iv) the Professional Services will be performed in a good and workmanlike manner consistent with applicable industry standards (provided that as Customer's sole and exclusive remedy and Upside's entire liability for any breach of this subsection (iv), Upside will promptly re-perform any Professional Services that fail to meet this limited warranty).</p>
3353<h3>(d) Disclaimer</h3>
3354<p>EXCEPT AS EXPRESSLY STATED HEREIN, THE SUBSCRIPTION SERVICES, PROFESSIONAL SERVICES AND OTHER UPSIDE IP ARE PROVIDED ON AN "AS IS" BASIS, AND UPSIDE MAKES NO WARRANTIES OR REPRESENTATIONS OF ANY KIND TO CUSTOMER, ITS AUTHORIZED USERS OR TO ANY OTHER PARTY REGARDING THE UPSIDE IP, THE SUBSCRIPTION SERVICES OR ANY OTHER SERVICES OR MATERIALS PROVIDED HEREUNDER.</p>
3355<h2>6. Support and Services Levels</h2>
3356<p>Except as otherwise set forth in an Order Form, Upside will use best efforts to: (a) provide Customer with technical support for the Subscription Services; and (b) maintain the availability of the Subscription Services.</p>
3357<h2>7. Term</h2>
3358<p>The initial term of this Agreement begins on the Effective Date and expires at the end of the Initial Term specified in the relevant Order Form (the "<strong>Initial Term</strong>").
3359Except as otherwise set forth in the Order Form, following the Initial Term, this Agreement will automatically renew for additional periods of the same duration as the Initial Term (each, a "<strong>Renewal Term</strong>," and together with the Initial Term, the "<strong>Term</strong>"), unless either Party provides the other with at least thirty (30) days' written notice of its intent not to renew this Agreement prior to the end of the Initial Term or the then-current Renewal Term.</p>
3360<h2>8. Termination</h2>
3361<p>Either Party may terminate this Agreement or an Order Form, effective on written notice to the other Party, if the other Party materially breaches this Agreement or such Order Form, and, if able to be cured, such breach remains uncured thirty (30) days after the non-breaching Party provides the breaching Party with written notice of such breach.
3362In the event that the Parties wish to terminate this Agreement, they must also concurrently terminate all active Order Forms.
3363Upside may also terminate an Order Form pursuant to Section 2(e) (Fair Use and Material Change in Use).</p>
3364<h2>9. Effect of Termination</h2>
3365<h3>(a) Effect</h3>
3366<p>Upon expiration or termination of an Order Form or this Agreement: (i) each Party will make no further use of any Confidential Information belonging to the other Party that is specific to such Order Form or to this Agreement (as applicable), and will promptly return to the other Party (or destroy) all such Confidential Information of the other Party in its possession or control, except for any archived electronic communications which may be stored confidentially; (ii) Customer's and its Authorized Users' right to Use the Subscription Services pursuant to such Order Form will immediately terminate; and (iii) all Fees owed by Customer to Upside pursuant to such Order Form or this Agreement (as applicable) will be immediately due.
3367Upon expiration or termination of an Order Form (other than termination of the entire Agreement pursuant to Section 8), each other Order Form that is then-in effect will remain in effect in accordance with its terms.</p>
3368<h3>(b) Survival</h3>
3369<p>The rights and obligations of Upside and Customer contained in Sections 3, 4, 9, 10, 11, 12 and 13 will survive any expiration or termination of this Agreement and any Order Form(s).</p>
3370<h2>10. Confidentiality</h2>
3371<h3>(a) Confidentiality</h3>
3372<p>As used herein, "<strong>Confidential Information</strong>" means any information that one Party (the "<strong>Disclosing Party</strong>") provides to the other Party (the "<strong>Receiving Party</strong>") in connection with this Agreement, whether orally or in writing, that is designated as confidential or that reasonably should be considered to be confidential given the nature of the information and/or the circumstances of disclosure.
3373For clarity, the Subscription Services and the Documentation will be deemed Confidential Information of Upside.
3374The Receiving Party will not use or disclose any Confidential Information of the Disclosing Party except as necessary to perform its obligations or exercise its rights under this Agreement; <em>provided</em> that Upside may use and modify Confidential Information of Customer in deidentified form for purposes of developing and deriving Service Information.
3375The Receiving Party may disclose Confidential Information of the Disclosing Party only: (i) to those of its employees, contractors, agents and advisors who have a bona fide need to know such Confidential Information to perform under this Agreement and who are bound by written agreements with use and n
3375ondisclosure restrictions at least as protective of the Confidential Information as those set forth in this Agreement, or (ii) as such disclosure may be required by the order or requirement of a court, administrative agency or other governmental body, subject to the Receiving Party providing to the Disclosing Party reasonable written notice to allow the Disclosing Party to seek a protective order or otherwise contest the disclosure.
3376The terms and conditions of this Agreement will constitute Confidential Information of each Party but may be disclosed on a confidential basis to a Party's advisors, attorneys, actual or bona fide potential acquirers, investors or other sources of funding (and their respective advisors and attorneys) for due diligence purposes.</p>
3377<h3>(b) Exclusions</h3>
3378<p>Confidential Information will not include any information that: (i) is or becomes generally known to the public through no fault or breach of this Agreement by the Receiving Party; (ii) is rightfully known by the Receiving Party at the time of disclosure without an obligation of confidentiality; (iii) is independently developed by the Receiving Party without access to or use of any Confidential Information of the Disclosing Party that can be evidenced in writing; or (iv) is rightfully obtained by the Receiving Party from a third-party without restriction on use or disclosure.</p>
3379<h2>11. Limitation of Liability</h2>
3380<h3>(a) Exclusion of Damages</h3>
3381<p>TO THE EXTENT PERMITTED BY LAW, NEITHER PARTY WILL BE LIABLE TO THE OTHER PARTY FOR ANY INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, PUNITIVE OR CONSEQUENTIAL DAMAGES, OR ANY LOSS OF INCOME, DATA, GOODWILL, PROFITS, REVENUE OR BUSINESS INTERRUPTION, OR THE COST OF COVER OR SUBSTITUTE SERVICES, ARISING OUT OF OR IN CONNECTION WITH THIS AGREEMENT.</p>
3382<h3>(b) Total Liability</h3>
3383<p>TO THE EXTENT PERMITTED BY LAW, IN NO EVENT WILL EITHER PARTY'S TOTAL CUMULATIVE AGGREGATE LIABILITY TO THE OTHER: (I) IN CONNECTION WITH A BREACH OF THE DPA THAT RESULTS IN A SECURITY BREACH (AS DEFINED IN THE DPA) OR IN CONNECTION WITH UPSIDE'S INDEMNIFICATION OBLIGATIONS SET FORTH IN SECTION 12(a) AS IT RELATES TO THIRD PARTY INTELLECTUAL PROPERTY IN THE SUBSCRIPTION SERVICES, EXCEED THREE TIMES THE FEES PAID BY CUSTOMER TO UPSIDE IN THE TWELVE (12) MONTH PERIOD PRECEDING THE FIRST EVENT GIVING RISE TO LIABILITY (THE "<strong>ENHANCED CAP</strong>"); AND (II) ARISING FROM ALL OTHER CLAIMS OF ACTION UNDER THIS AGREEMENT OF ANY KIND, EXCEED THE FEES PAID BY CUSTOMER TO UPSIDE IN THE TWELVE (12) MONTH PERIOD PRECEDING THE FIRST EVENT GIVING RISE TO LIABILITY (THE "<strong>GENERAL CAP</strong>").
3384THE EXISTENCE OF MORE THAN ONE CLAIM WILL NOT ENLARGE THIS LIMIT AND THE CAPS ARE NOT CUMULATIVE AND IF A PARTY RECOVERS AMOUNTS PURSUANT TO ONE OR MORE CLAIMS SUBJECT TO THE "GENERAL CAP" AND/OR THE "ENHANCED CAP", THOSE AMOUNTS SHALL BE DEDUCTED FROM EACH CAP.</p>
3385<h3>(c) Exceptions</h3>
3386<p>THE FOREGOING EXCLUSIONS AND LIMITS IN SECTION 11(a) AND SECTION 11(b) DO NOT APPLY TO LIABILITY OR OBLIGATIONS ARISING UNDER SECTION 2(b) (USE RESTRICTIONS), CUSTOMER'S PAYMENT OBLIGATIONS, INFRINGEMENT OR MISAPPROPRIATION OF THE OTHER PARTY'S INTELLECTUAL PROPERTY RIGHTS AND INDEMNITY OBLIGATIONS (OTHER THAN THE INDEMNITY OBLIGATIONS THAT ARE SUBJECT TO THE ENHANCED CAP).</p>
3387<h3>(d) Basis of Bargain; Other</h3>
3388<p>THE PARTIES HEREBY ACKNOWLEDGE AND AGREE THAT THE LIMITATIONS OF LIABILITY IN THIS SECTION 11 ARE AN ESSENTIAL PART OF THE BASIS OF THE BARGAIN BETWEEN UPSIDE AND CUSTOMER, AND WILL APPLY EVEN IF THE REMEDIES AVAILABLE HEREUNDER ARE FOUND TO FAIL THEIR ESSENTIAL PURPOSE.
3389THE LIMITATIONS AND EXCLUSIONS IN THIS SECTION 11 WILL APPLY WHETHER SUCH LIABILITY ARISES FROM ANY CLAIM BASED ON CONTRACT, WARRANTY, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, AND WHETHER OR NOT SUCH PARTY WAS ADVISED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE.</p>
3390<h3>(e) Similarity, Accuracy and Appropriateness of Output</h3>
3391<p>Due to the non-deterministic nature of large language models, Output may not be unique and the Subscription Services may generate the same or similar output for Upside or a third party.
3392GIVEN THE PROBABILISTIC NATURE OF MACHINE LEARNING, THE SUBSCRIPTION SERVICES MAY IN SOME SITUATIONS PRODUCE O
3392UTPUT THAT IS INACCURATE, INCORRECT, OFFENSIVE OR OTHERWISE UNDESIRABLE.
3393THE ACCURACY, QUALITY AND COMPLIANCE WITH APPLICABLE LAW OF THE OUTPUT IS DEPENDENT UPON AND COMMENSURATE WITH THAT OF THE INPUT PROVIDED AND CUSTOMER'S COMPLIANCE WITH THIS AGREEMENT, AND NOTWITHSTANDING ANYTHING ELSE SET OUT HEREIN, UPSIDE WILL NOT HAVE ANY LIABILITY OR RESPONSIBILITY TO CUSTOMER OR ANY OTHER PERSON OR ENTITY FOR ANY LOSS OR DAMAGES RELATING TO OR ARISING FROM INPUT, THE OUTPUT OR THEIR USE.
3394Customer will evaluate the content, nature, tone and accuracy of any Output as appropriate for the applicable use case, including by using human review of the Output.</p>
3395<h2>12. Indemnification</h2>
3396<h3>(a) Indemnification by Upside</h3>
3397<p>Subject to Section 12(b), Upside will defend Customer from and against any claims, demands, proceedings, investigations or suits brought by a third party alleging that the Subscription Services provided by Upside infringes or misappropriates such third party's intellectual property rights (each, a "<strong>Claim Against Customer</strong>") and indemnify Customer for any finally awarded damages or settlement amount approved by Upside in writing to the extent arising from a Claim Against Customer, and any reasonable attorneys' fees of Customer associated with providing written notice of a Claim Against Customer to Upside.
3398If Upside reasonably believes the Subscription Services (or any component thereof) could infringe any third party's intellectual property rights, Upside may, at its sole option and expense use commercially reasonable efforts to: (i) modify or replace the Subscription Services, or any component or part thereof, to make it non-infringing; or (ii) procure the right for Customer to continue to Use the Subscription Services.
3399If Upside determines that neither alternative is commercially practicable, Upside may terminate this Agreement, in its entirety or with respect to the affected component, by providing written notice to Customer.
3400In the event of any such termination, Upside will refund to Customer a pro-rata portion of the Fees that have been paid for the unexpired portion of the then current Term.
3401The rights and remedies set forth in this Section 12 will constitute Customer's sole and exclusive remedy for any infringement or misappropriation of intellectual property rights in connection with the Subscription Services.</p>
3402<h3>(b) Exclusions</h3>
3403<p>Upside's obligations under Section 12(a) will not apply to the extent that the underlying Claim Against Customer arises from or as a result of: (i) Customer's breach of this Agreement, negligence, willful misconduct or fraud; (ii) any Customer Materials, Input or Output; (iii) Customer's failure to use any enhancements, modifications, or updates to the Subscription Services that have been provided by Upside; (iv) modifications to or configuration of the Subscription Services by anyone other than Upside; or (v) combinations of the Subscription Services with software, data or materials not provided by Upside.</p>
3404<h3>(c) Indemnification by Customer</h3>
3405<p>Customer will defend Upside from and against any claims, demands, proceedings, investigations, or suits brought by a third party alleging that the Customer Materials or the Input infringes, misappropriates or violates a third-party's intellectual property rights, or rights of publicity or privacy, or result in the violation of any applicable law or regulation (each, a "<strong>Claim Against Upside</strong>").
3406Customer will indemnify Upside for any finally awarded damages or settlement amount approved by Customer in writing to the extent arising from a Claim Against Upside, and any reasonable attorneys' fees of Upside associated with providing written notice of a Claim Against Upside.</p>
3407<h3>(d) Indemnification Procedure</h3>
3408<p>Each Party's obligations under this Section 12 are contingent upon: (i) the Party seeking defense and indemnity (the "<strong>Indemnified Party</strong>") providing the other Party (the "<strong>Indemnifying Party</strong>") with prompt written notice of the Claim Against Customer or Claim Against Upside, as applicable (each, a "<strong>Claim</strong>") (but in any event notice in sufficient time for the Indemnifying Party to respond without prejudice); (ii) the Indemnifying Party having the exclusive right to defend or settle such Claim; and (iii) the Indemnified Party providing all reasonably necessary cooperation to the Indemnifying Party, at the Indemnifying Party's expense, in the defense and settlement of such Claim.
3409The Indemnifying Party will have the sole right to conduct the defense of any Claim for which the Indemnifying Party is responsible hereunder (<em>provided</em> that the Indemnifying Party may not settle any Claim without the Indemnified Party's prior written approval unless the settlement is for a monetary amount, unconditionally releases the Indemnified Party from all liability without prejudice, does not require any admission by the Indemnified Party, and does not place restrictions upon the Indemnified Party's business, products or services).
3410The Indemnified Party may participate in the defense of any Claim at its own expense, subject to the Indemnifying Party's retention of overall control over the defense and settlement of the Claim.</p>
3411<h2>13. Miscellaneous</h2>
3412<p>Neither Party may assign, transfer or sublicense this Agreement, by operation of law or otherwise, without the other Party's prior written consent, except to a successor entity in the event of a merger, consolidation or sale of all or substantially all of the assets of such Party, and any attempt by either Party to do so, without such consent, will be void.
3413Subject to the foregoing, this Agreement is binding upon and will inure to the benefit of each of the Parties and their respective successors and permitted assigns.
3414Customer affirms that it is not named on, owned by, or acting on behalf of any U.S. government denied-party list, and it agrees to comply fully with all relevant export control and sanctions laws and regulations of the United States ("<strong>Export Laws</strong>") to ensure that neither the Subscription Services, software, any Customer Materials, nor any technical data related thereto is: (i) used, exported or re-exported directly or indirectly in violation of Export Laws; or (ii) used for any purposes prohibited by the Export Laws, including, but not limited to, nuclear, chemical, or biological weapons proliferation, missile systems or te
3414chnology, or restricted unmanned aerial vehicle applications.
3415Customer will complete all undertakings required by Export Laws, including obtaining any necessary export license or other governmental approval.
3416Subject to the DPA, Upside may use subcontractors, and other third-party providers ("<strong>Subcontractors</strong>") in connection with the performance of its own obligations hereunder as it deems appropriate; <em>provided</em> that Upside remains responsible for the performance of each such Subcontractor.
3417Neither Party will be responsible for any failure or delay in the performance of its obligations under this Agreement (except for any payment obligations) due to causes beyond its reasonable control.
3418If any provision of this Agreement is held invalid, illegal or unenforceable, that provision will be enforced to the maximum extent permitted by law, given the fundamental intentions of the Parties, and the remaining provisions of this Agreement will remain in full force and effect.
3419This Agreement, including its exhibits and any Order Form(s), is the complete and exclusive agreement between the Parties with respect to its subject matter and supersedes all prior or contemporaneous agreements, communications and understandings, both written and oral, with respect to its subject matter.
3420Upside may update this Agreement from time to time by posting an updated version at <a href="/legal/msa">upside.tech/legal/msa</a>.
3421For changes that are materially adverse to Customer, Upside will provide at least thirty (30) days' prior notice (sent by email to the notice contact on the applicable Order Form or posted within the Subscription Services), and such changes will take effect only upon the next Renewal Term of the applicable Order Form — during Customer's then-current Initial Term or Renewal Term, the Agreement as it existed prior to the change will continue to govern.
3422For purposes of this Section, a change is "materially adverse" if it materially (a) increases Customer's obligations or liability under this Agreement, (b) reduces Upside's obligations or liability to Customer in a way that disadvantages Customer, or (c) reduces the level of protection for Personal Data, in each case other than changes required by applicable law or regulation or to address security, compliance, or risk-management concerns.
3423All other updates, including non-material changes and changes required by law or to address security or compliance issues, take effect upon posting or on such later date as Upside specifies.
3424Customer's continued Use of the Subscription Services after the effective date of any update constitutes Customer's acceptance of the updated Agreement.
3425No update will apply retroactively, and the commercial terms set forth in an Order Form (including Fees, Term, and Subscription Services purchased) are not affected by updates to this Agreement.
3426To the extent that any term of an Order Form conflicts with any of the terms of this Agreement, and the Order Form explicitly states that it intends to modify the conflicting terms, then the Order Form supersedes this Agreement with respect to such conflicting terms.
3427Nothing in this Agreement will be construed to create a partnership, joint venture or agency relationship between the Parties.
3428Neither Party will have the power to bind the other or to incur obligations on the other's behalf without such other Party's prior written consent.
3429Except as expressly set forth in this Agreement, the exercise by either Party of any remedy under this Agreement will be without prejudice to its other remedies under this Agreement or otherwise.
3430Either Party's failure to enforce any provision of this Agreement will not constitute a waiver of future enforcement of that or any other provision.
3431No waiver of any provision of this Agreement will be effective unless it is in writing and signed by the Party granting the waiver.
3432This Agreement will be governed by and construed in accordance with the laws of the State of California without giving effect to any principles of conflict of laws that would lead to the application of the laws of another jurisdiction.
3433The Parties expressly agree that the United Nations Convention on Contracts for the International Sale of Goods will not apply.
3434Any legal action or proceeding arising under this Agreement will be brought exclusively in the federal or state courts located in the Northern District of California and the Parties irrevocably consent to the personal jurisdiction and venue therein.
3435All notices required to be sent hereunder will be in writing (email being sufficient) and will be deemed to have been given when mailed by certified mail, overnight express, or sent by email, with receipt confirmed.
3436This Agreement may be signed in counterparts, and electronic signatures will have the same weight and effect as originals.</p>`},dpa:{title:"Data Processing Addendum",lastUpdated:"May 6, 2026",html:`<p>This Data Processing Agreement ("<strong>DPA</strong>") is incorporated into the <a href="/legal/msa">Master Subscription Agreement</a> (the "<strong>Agreement</strong>") between Dragonsight Labs, Inc. ("<strong>Upside</strong>") and the customer identified in the applicable Order Form ("<strong>Licensee</strong>"). This DPA applies to and takes precedence over the Agreement between the Parties to the extent of any conflict. Capitalized terms not defined herein are defined as in applicable Data Protection Laws.</p>
3437<p>Licensee and Upside agree as follows:</p>
3438<h2>1. Definitions</h2>
3439<p>For purposes of this DPA:</p>
3440<p><strong>(a)</strong> "<strong>Data Protection Laws</strong>" means applicable laws, regulations, and other legally binding requirements relating to privacy, data security, or the Processing of Personal Data, including, to the extent applicable, the California Consumer Privacy Act, Cal. Civ. Code § 1798.100 <em>et seq.</em> ("<strong>CCPA</strong>"); the General Data Protection Regulation, Regulation (EU) 2016/679 ("<strong>GDPR</strong>"); and the United Kingdom Data Protection Act of 2018 ("<strong>UK GDPR</strong>"). For the avoidance of doubt, unless specified otherwise, references to "Data Protection Laws" herein mean Data Protection Laws that are applicable in a given situation.</p>
3441<p><strong>(b)</strong> "<strong>Data Subject</strong>" means an identified or identifiable natural person to whom Personal Data relates, and is deemed to also refer to "consumer" as defined in Data Protection Laws.</p>
3442<p><strong>(c)</strong> "<strong>EU SCCs</strong>" means the Standard Contractual Clauses issued pursuant to Commission Implementing Decision (EU) 2021/914 of 4 June 2021 on standard contractual clauses for the transfer of personal data to third countries pursuant to Regulation (EU) 2016/679 of the European Parliament and of the Council, available at <a href="http://data.europa.eu/eli/dec_impl/2021/914/oj">http://data.europa.eu/eli/dec_impl/2021/914/oj</a> and completed as set forth herein.</p>
3443<p><strong>(d)</strong> "<strong>Personal Data</strong>" includes "personal data," "personal information," "personally identifiable information," and analogous terms, as defined by applicable Data Protection Laws, that is contained in Licensee's data that Licensee uploads to Upside and that Upside Processes on behalf of Licensee under the Agreement to provide the Services to Licensee.</p>
3444<p><strong>(e)</strong> "<strong>Process</strong>" and its cognates "Processing," "Processed," etc. mean any operation or set of operations performed on Personal Data or on sets of Personal Data, whether or not by automated means, such as collection, recording, organization, creating, structuring, storage, adaptation or alteration, retrieval, consultation, use, disclosure by transmission, dissemination or otherwise making available, alignment or combination, restriction, erasure, or destruction.</p>
3445<p><strong>(f)</strong> "<strong>Security Breach</strong>" means any accidental or unlawful acquisition, destruction, loss, alteration, unauthorized disclosure of, or access to, Personal Data.</p>
3446<p><strong>(g)</strong> "<strong>Services</strong>" means the services that Upside performs on behalf of Licensee pursuant to the Agreement.</p>
3447<p><strong>(h)</strong> "<strong>Subprocessor</strong>" means any third party that Upside engages to Process Personal Data.</p>
3448<p><strong>(i)</strong> "<strong>UK Addendum</strong>" means the International Data Transfer Addendum to the EU Commission Standard Contractual Clauses issued by the UK Information Commissioner's Office, located at <a href="https://ico.org.uk/media/for-organisations/documents/4019539/international-data-transfer-addendum.pdf">https://ico.org.uk/media/for-organisations/documents/4019539/international-data-transfer-addendum.pdf</a> and completed as set forth herein.</p>
3449<p><strong>(j)</strong> The terms "<strong>Business</strong>," "<strong>Controller</strong>," "<strong>Processor</strong>," and "<strong>Service Provider</strong>" are defined as in Data Protection Laws. "Controller" is deemed to al
3449so refer to "Business," and "Processor" is deemed to also refer to "Service Provider."</p>
3450<h2>2. Roles of the Parties; Scope and Purposes of Processing</h2>
3451<p><strong>(a)</strong> This DPA applies to Personal Data that Upside Processes on behalf of Licensee under the Agreement.</p>
3452<p><strong>(b)</strong> To the extent that Licensee is the Controller of Personal Data, Upside is its Processor. To the extent that Licensee is a Processor of Personal Data, Upside is its Subprocessor.</p>
3453<p><strong>(c)</strong> Upside will Process Personal Data: (i) on Licensee's behalf; (ii) to fulfill its obligations to Licensee under the Agreement, including this DPA; and (iii) in compliance with Data Protection Laws. For the avoidance of doubt, Upside will Process Personal Data to provide the Services to Licensee under the Agreement for the following express business purposes: (a) maintaining and servicing Licensee's account; (b) tracking Licensee sales and marketing activities, communications, and interactions; (c) providing analytics, auditing, or verifying impressions related to Licensee's end customer actions; (e) debugging and ensuring the security and integrity of the Services; (f) improving and enhancing the Services; and (g) as otherwise set forth in the Agreement.</p>
3454<p><strong>(d)</strong> Licensee retains the right to take reasonable and appropriate steps to (i) ensure that Upside Processes Personal Data in a manner consistent with Data Protection Laws, and (ii) upon written notice, stop and remediate unauthorized Processing of Personal Data that is not permitted by this DPA.</p>
3455<h2>3. Personal Data Processing Requirements</h2>
3456<p>Upside will, except as expressly authorized under Data Protection Laws:</p>
3457<p><strong>(a)</strong> Not retain, use, or disclose Personal Data outside of the direct business relationship between Licensee and Upside, or for any purpose (including any commercial purpose) not set forth in this DPA.</p>
3458<p><strong>(b)</strong> Not "sell" or "share" any Personal Data, or use Personal Data for purposes of "cross-context behavioral advertising," as such terms are defined in Data Protection Laws in the United States.</p>
3459<p><strong>(c)</strong> Comply with any applicable restrictions under Data Protection Laws on combining Personal Data with personal data that Upside receives from, or on behalf of, another person or persons, or that Upside collects from any interaction between it and any individual.</p>
3460<p><strong>(d)</strong> Not attempt to link, identify, or otherwise create a relationship between Personal Data and any other data, without Licensee's express permission.</p>
3461<p><strong>(e)</strong> Ensure that the persons it authorizes to Process the Personal Data have committed themselves to confidentiality or are under an appropriate statutory obligation of confidentiality.</p>
3462<p><strong>(f)</strong> To the extent required by Data Protection Laws, provide Licensee with reasonable assistance and cooperation for the fulfilment of Licensee's obligations under Data Protection Laws, including Licensee's obligation to (i) respond to requests by Data Subjects (or their lawful representatives) to exercise their rights under Data Protection Laws with regard to their Personal Data; (ii) perform any required data protection impact assessment for Processing of Personal Data; and (iii) consult with regulatory authorities in relation to the Processing of Personal Data. Except where prohibited by applicable law, Upside will notify Licensee of any Data Subject or government requests regarding Upside's Processing of Personal Data on Licensee's behalf, and except as prohibited by applicable law will await written instructions from Licensee on how, if at all, to assist in responding. Licensee will pay Upside's costs in providing assistance and carrying out any request under this Section.</p>
3463<p><strong>(g)</strong> Notify Licensee if Upside determines that (i) it can no longer meet its obligations under this DPA or Data Protection Laws; or (ii) in Upside's opinion, an instruction from Licensee infringes Data Protection Laws.
3463</p>
3464<h2>4. Data Security</h2>
3465<p>Upside will implement appropriate administrative, technical, physical, and organizational measures to protect Personal Data on <a href="https://trust.upside.tech">https://trust.upside.tech</a>, and provide a copy of such measures to Licensee upon request. Upside will provide the same level of protection for Personal Data as is required under Data Protection Laws applicable to Licensee.</p>
3466<h2>5. Security Breach</h2>
3467<p>Upside will notify Licensee of any known Security Breach after becoming aware of such Security Breach and to the extent required by Data Protection Laws. Upside will comply with the Security Breach-related obligations directly applicable to it under Data Protection Laws and will reasonably assist Licensee in its compliance with its Security Breach-related obligations, including by providing Licensee with such information about the Security Breach as Upside is reasonably able to disclose to Licensee, taking into account the nature of the Services, the information available to Upside, and any confidentiality or other restrictions on disclosing information. Upside's report or response to a Security Breach pursuant to this Section will not be construed as an acknowledgement by Upside of any fault or liability of Upside with respect to the Security Breach. Upside's obligations under this Section does not apply to incidents that are caused by Licensee, any activity on Licensee's accounts, or third-party services that Licensee elects to use.</p>
3468<h2>6. Subprocessors</h2>
3469<p><strong>(a)</strong> Licensee acknowledges and agrees that Upside may use Subprocessors to Process Personal Data in accordance with this DPA and Data Protection Laws. Upside will enter into a written agreement with Subprocessors who process Personal Data on Upside's behalf, requiring them to comply with similar obligations to those imposed on Upside under this DPA, to the extent applicable based on the nature of the Services provided by the Subprocessor.</p>
3470<p><strong>(b)</strong> Upside uses the Subprocessors listed at <a href="https://trust.upside.tech/subprocessors">https://trust.upside.tech/subprocessors</a> to Process the Personal Data. If Upside engages new Subprocessors to perform a material portion of the work for Licensee involving Personal Data, Upside will give Licensee notice of such new Subprocessors (in accordance with clause 9(a) of the SCCs if applicable).</p>
3471<h2>7. Data Transfers</h2>
3472<p><strong>(a)</strong> Licensee authorizes Upside and its Subprocessors to make international transfers of Personal Data in accordance with this DPA so long as the Data Protection Laws applicable to such transfers are respected.</p>
3473<p><strong>(b)</strong> To the extent legally required, by entering into this DPA, Licensee and Upside are deemed to have signed the EU SCCs, which form part of this DPA and (except as described in Section 7(c) below) are deemed completed as follows:</p>
3474<ol>
3475<li>Module 2 of the EU SCCs applies to transfers of Personal Data from Licensee (as a Controller) to Upside (as a Processor), and Module 3 of the EU SCCs applies to transfers of Personal Data from Licensee (as a Processor) to Upside (as a Subprocessor);</li>
3476<li>Clause 7 (the optional docking clause) is not included;</li>
3477<li>Clause 9 (Use of sub-processors): The Parties select Option 2 (General written authorization). The initial list of Subprocessors is available on <a href="https://trust.upside.tech/subprocessors">https://trust.upside.tech/subprocessors</a> and Upside shall propose updates to that list in accordance with Section 6(b) of this DPA;</li>
3478<li>Clause 11 (Redress): The optional language requiring that data subjects be permitted to lodge a complaint with an independent dispute resolution body is not included;</li>
3479<li>Clause 17 (Governing law): The Parties choose Option 1 (the law of an EU Member State that allows for third-Party beneficiary rights) and select the law of Ireland;</li>
3480<li>Clause 18 (Choice of forum and jurisdiction): The Parties select the courts of Ireland;</li>
3481<li>
3481Annexes I (List of Parties) and II (Technical and organizational measures) are completed as set forth in Schedule A and Section 4 of this DPA, respectively.</li>
3482</ol>
3483<p><strong>(c)</strong> To the extent legally required, by entering into this DPA, the Parties are deemed to be signing the UK Addendum, which forms part of this DPA and takes precedence over the rest of this DPA as set forth in the UK Addendum. The Tables within the UK Addendum are deemed completed as follows:</p>
3484<ol>
3485<li>Table 1: The Parties' details shall be the Parties and their affiliates to the extent any of them is involved in such transfer, and the Key Contact shall be the contacts set forth in Schedule A below.</li>
3486<li>Table 2: The Approved EU SCCs referenced in Table 2 shall be the EU SCCs as executed by the Parties and completed in Section 7(b) of this DPA.</li>
3487<li>Table 3: Annexes I and II are set forth in Schedule A and Section 4 of this DPA, respectively. Annex III is inapplicable.</li>
3488<li>Table 4: Licensee may end this DPA as set out in Section 19 of the UK Addendum.</li>
3489</ol>
3490<h2>8. Additional Safeguards</h2>
3491<p>To the extent permitted by applicable law, Upside will notify Licensee of any request by any government or law enforcement entity regarding Personal Data, and will make commercially reasonable objections and challenges to any such request, including to any prohibition on notifying Licensee of any such request. Unless otherwise required by applicable law, Upside will await written instructions from Licensee on how, if at all, to assist in responding to any such request, and will render Licensee reasonable assistance and cooperation in relation to any such request.</p>
3492<h2>9. Audits</h2>
3493<p>To the extent permitted by Data Protection Laws, Licensee agrees to exercise any rights to conduct an audit to verify the adequacy of Upside's security measures by instructing Upside to carry out such audit using its own external or internal auditors. Licensee agrees that it may be required to agree to a non-disclosure agreement before Upside shares any report from such audit with Licensee, and that Upside may redact any such report as it considers appropriate. Where Licensee is legally required by Data Protection Laws to demonstrate compliance with means other than such a report, the Parties will cooperate in good faith to agree on a plan for complying with the applicable requirements. The Parties agree to use the least intrusive means for Upside to address Licensee's request, taking into account legal requirements, the sensitivity of the Personal Data involved, information otherwise available to Licensee, and the need for Upside to maintain its business operations, confidentiality, and security of its facilities. Any audit or inspection conducted by Licensee or another auditor under this Section shall occur not more than once every twelve (12) calendar months, upon thirty (30) days' prior written notice, and to the extent Upside's personnel are required to cooperate therewith, during Upside's normal business hours. Licensee will pay Upside's costs in carrying out any audit or addressing any request under this Section.</p>
3494<h2>10. Return or Destruction of Personal Data</h2>
3495<p>Except to the extent required by Data Protection Laws, Upside will destroy all Personal Data upon (a) written request of Licensee or (b) termination of the Agreement. Except to the extent prohibited by Data Protection Laws, Upside will inform Licensee if it is not able to return or delete Personal Data.</p>
3496<h2>11. Indemnification and Limitation of Liability</h2>
3497<p>To the extent permitted by Data Protection Laws, the provisions on indemnification and limitation of liability in the Agreement apply to this DPA.</p>
3498<h2>12. Updates to this DPA</h2>
3499<p>Upside may update this DPA from time to time in accordance with Section 13 of the Agreement; provided that no such update will reduce the level of protection for Personal Data below what is required by applicable Data Protection Laws.</p>
3500<h2>Schedule A — Annex I to the EU SCCs</h2>
3501<h3>A. List of Parties</h3>
3502<p><strong>Data exporter(s):</strong></p>
3503<ul>
3504<li>Name: Licensee, as identified in the DPA.</li>
3505<li>Address: As provided in the Agreement.</li>
3506<li>Contact person's name, position, and contact details: As provided in the Agreement.</li>
3507<li>Activities relevant to the data transferred under these Clauses: The data exporter receives the data importer's Services pursuant to their underlying Agreement.</li>
3508<li>Signature and date: The Parties agree that execution of the DPA shall constitute execution of these EU SCCs by both parties.</li>
3509<li>Role: Controller</li>
3510</ul>
3511<p><strong>Data importer(s):</strong></p>
3512<ul>
3513<li>Name: Dragonsight Labs, Inc. ("Upside")</li>
3514<li>Address: As provided in the Agreement.</li>
3515<li>Contact person's name, position, and contact details: As provided in the Agreement.</li>
3516<li>Activities relevant to the data transferred under these Clauses: The data importer provides Services to the data exporter pursuant to their underlying Agreement.</li>
3517<li>Signature and date: The Parties agree that execution of the DPA shall constitute execution of these EU SCCs by both parties.</li>
3518<li>Role: Processor</li>
3519</ul>
3520<h3>B. Description of Transfer</h3>
3521<p><em>Categories of data subjects whose personal data is transferred:</em> The Personal Data transferred concerns employees, contractors, collaborators, customers, and prospects of Licensee and data subjects whose Personal Data is contained in Licensee's data uploaded to Upside.</p>
3522<p><em>Categories of personal data transferred:</em> The Personal Data transferred concern the following categories of data: names, email addresses, phone numbers and other identifiers, communications with Licensee, engagement with Licensee's marketing materials, and usage data.</p>
3523<p><em>The frequency of the transfer (e.g. whether the data is transferred on a one-off or continuous basis):</em> Continuous for the duration of the Agreement.</p>
3524<p><em>Nature of the processing:</em> Upside's Processing activities shall be limited to those discussed in the Agreement and the DPA.</p>
3525<p><em>Purpose(s) of the data transfer and further processing:</em> The purpose of the transfer to and further Processing of Personal Data by Upside is for Upside to provide the Services to Licensee as set forth in the Agreement.</p>
3526<p><em>
3526The period for which the personal data will be retained, or, if that is not possible, the criteria used to determine that period:</em> Personal Data will be retained for the period of time necessary for Upside to provide the Services to Licensee under the Agreement and/or in accordance with applicable legal requirements.</p>
3527<p><em>For transfers to (sub-) processors, also specify subject matter, nature and duration of the processing:</em> Same as above to the extent that Personal Data is provided to Subprocessors for purposes of providing the Services.</p>
3528<h3>C. Competent Supervisory Authority</h3>
3529<p>To the extent legally permitted, the competent supervisory authority is the Irish Data Protection Commission.</p>
3530`},"acceptable-use-policy":{title:"Acceptable Use Policy",lastUpdated:"May 23, 2025",html:`<h2 id="">1. Purpose</h2>
3531<p id="">This Acceptable Use Policy ("<strong id="">Policy</strong>") governs the use of all software-as‑a‑service offerings, websites, APIs, and related services that Dragonsight Labs, Inc. d/b/a <strong id="">Upside</strong> ("<strong id="">Upside</strong>," "<strong id="">we</strong>," "<strong id="">our</strong>") makes available to its customers (collectively, the "<strong id="">Services</strong>"). It forms part of, and is incorporated by reference into, the Upside Master Subscription Agreement or other written agreement covering Customer’s use of the Services (the "<strong id="">Agreement</strong>").</p>
3532<h2 id="">2. Scope</h2>
3533<p id="">This Policy applies to every individual or entity that accesses or uses the Services, including the Customer that has executed the Agreement and each of its employees, agents, contractors, and other users (together, "<strong id="">Users</strong>"). By accessing or using the Services, Users agree to comply with this Policy.</p>
3534<h2 id="">3. Prohibited Activities</h2>
3535<p id="">Users <strong id="">must not</strong>, directly or indirectly:</p>
3536<h4 id="">3.1 Illegal, Harmful, or Offensive Use</h4>
3537<ul id="">
3538<li>Violate any applicable law or regulation (including export control, trade sanctions, and data‑privacy laws).</li>
3539<li>Infringe, misappropriate, or violate any intellectual‑property, privacy, or publicity rights.</li>
3540<li>Publish, store, or transmit material that is obscene, defamatory, harassing, hateful, or otherwise objectionable.</li>
3541</ul>
3542<h4 id="">3.2 Security Violations and Network Abuse</h4>
3543<ul id="">
3544<li>Attempt to gain unauthorized access to any account, data, system, or network.</li>
3545<li>Probe, scan, or test the vulnerability of any network or system, or breach security or authentication measures, without express written authorization from Upside.</li>
3546<li>Introduce malware, ransomware, viruses, Trojan horses, worms, corrupted files, or any other malicious code.</li>
3547</ul>
3548<h4 id="">3.3 Interference and Service Integrity</h4>
3549<ul id="">
3550<li>Interfere with or disrupt the integrity, availability, or performance of the Services or third‑party data contained therein.</li>
3551<li>Overload, flood, mail‑bomb, or otherwise impose an unreasonable or disproportionately large load on the Services.</li>
3552</ul>
3553<h4 id="">3.4 Messaging Abuse</h4>
3554<ul id="">
3555<li>Send unsolicited bulk email, marketing campaigns, or other forms of spam via the Services.</li>
3556<li>Publish or transmit content or communications that impersonate another person or entity, or that misrepresent an affiliation with Upside.</li>
3557</ul>
3558<h4 id="">3.5 Excessive or Unauthorized Use</h4>
3559<ul id="">
3560<li>Use the Services in a manner that exceeds the usage limits or parameters set forth in the Agreement or applicable Order Form.</li>
3561<li>Resell, sublicense, or provide the Services to any third party except as expressly permitted by the Agreement.</li>
3562</ul>
3563<h2 id="">4. Customer Responsibilities</h2>
3564<p id="">Customers are responsible for (a) ensuring that their Users comply with this Policy, and (b) promptly notifying Upside of any suspected violation. Customers will cooperate with Upside in any investigation of suspected or alleged violation.</p>
3565<h2 id="">5. Enforcement</h2>
3566<p id="">Upside may investigate any suspected violation of this Policy. If Upside determines that a User or 
3566Customer has violated the Policy, Upside may take all actions it deems appropriate, including issuing a warning, suspending or terminating access to the Services, or pursuing legal remedies. Where practicable, Upside will provide advance notice and an opportunity to cure; however, Upside reserves the right to act immediately to protect the Services or third parties.</p>
3567<h2 id="">6. Reporting Violations</h2>
3568<p id="">To report a violation of this Policy, please contact <a id=""><strong id="">[email protected]</strong></a> and include relevant details (e.g., logs, message samples, or URLs) to enable Upside to investigate.</p>
3569<h2 id="">7. Changes to This Policy</h2>
3570<p id="">Upside may modify this Policy from time to time by posting an updated version at <a id=""><strong id="">https://upside.tech/acceptable‑use-policy</strong></a> or another URL designated by Upside. The revised Policy becomes effective on the date it is posted. Continued use of the Services after the effective date constitutes acceptance of the revised Policy.</p>
3571`}},Rue={"terms-of-service":"Read the terms governing access to and use of Upside's website, services, and related offerings.","privacy-policy":"Learn how Upside collects, uses, stores, and protects personal information across its website and services.","cookie-policy":"How Upside uses cookies and similar technologies on upside.tech, and how you can manage your preferences.","acceptable-use-policy":"Rules governing acceptable use of Upside's software-as-a-service offerings, websites, APIs, and related services."},Nue=new Set(["msa","dpa"]),Oue=()=>{const{slug:e}=Ta(),t=e?Eue[e]:null;return t?n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:t.title,description:e?Rue[e]:void 0,canonicalUrl:`https://upside.tech/legal/${e}`,noIndex:e?Nue.has(e):!1}),n.jsx("section",{id:"hero",className:"subpage-hero subpage-hero--legal",children:n.jsxs("div",{className:"legal-hero__container",children:[n.jsxs("div",{className:"w-layout-vflex legal-hero__header",children:[n.jsx("div",{className:"badge",children:"Legal"}),n.jsx("h1",{className:"heading-xl",children:t.title})]}),t.lastUpdated&&n.jsx("div",{className:"legal-hero__content",children:n.jsxs("div",{className:"legal-hero__item",children:[n.jsx("img",{loading:"lazy",src:"/images/calendar-legal.svg",alt:""}),n.jsx("div",{className:"text-block-2",children:"Last Updated:"}),n.jsx("div",{children:n.jsx("p",{className:"body-s",children:t.lastUpdated})})]})})]})}),n.jsx("div",{className:"container",children:n.jsx("div",{className:"content",children:n.jsx("div",{className:"legal-content",children:n.jsx("div",{className:"legal-content__rich-text w-richtext",dangerouslySetInnerHTML:{__html:t.html}})})})})]}):n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Hr,{title:"Page Not Found",description:"The legal page you're looking for doesn't exist."}),n.jsx("div",{className:"container",children:n.jsx("div",{className:"content",children:n.jsx("section",{className:"section",children:n.jsx(J,{to:"/",className:"cta w-button",children:"Back to Home"})})})})]})},VG=()=>n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"Page Not Found",description:"The page you requested could not be found on Upside. Browse the site to explore attribution, analytics, case studies, and webinars.",noIndex:!0}),n.jsx(Hr,{title:"Page Not Found",description:"The page you're looking for doesn't exist or has been moved."}),n.jsx("div",{className:"container",children:n.jsx("div",{className:"content",children:n.jsxs("section",{className:"section",style:{textAlign:"center"},children:[n.jsx("h2",{className:"heading-xl",style:{marginBottom:"2rem"},children:"404"}),n.jsx("p",{className:"body-l",style:{marginBottom:"3rem"},children:"Sorry, we couldn't find the page you were looking for."}),n.jsx(J,{to:"/",className:"cta cc-large w-button",children:"Back to Home"})]})})})]}),PP=1240,IP=768,Pue=()=>{const e=M.useRef(null),[t,a]=M.useState(1),[i,r]=M.useState(!0);return M.useEffect(()=>{const o=()=>{e.current&&a(e.current.offsetWidth/PP)};o();const l=new ResizeObserver(o);return e.current&&l.observe(e.current),()=>l.disconnect()},[]),n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"Interactive Demo",description:"Explore Upside's interactive demo and see how we reveal the full buyer journey — every touchpoint, every milestone, every insight.",canonicalUrl:"https://upside.tech/interactive-demo"}),n.jsxs("section",{style:{background:"#f5f7fa",padding:"var(--_layout---spacing--3xl) var(--_layout---spacing--2xl) var(--_layout---spacing--l)",display:"flex",flexDirection:"column",alignItems:"center",textAlign:"center",gap:"var(--_layout---spacing--s)"},children:[n.jsx("div",{className:"badge",children:"Interactive Demo"}),n.jsx("h1",{className:"heading-l",style:{maxWidth:"720px",color:"#0c1e20"},children:"See Upside in Action"}),n.jsx("p",{className:"body-m",style:{maxWidth:"560px",color:"rgba(12,30,32,0.6)"},children:"Click around a live Upside environment — explore accounts, drill into milestones, and see how every touchpoint connects to revenue."})]}),n.jsx("section",{style:{background:"#f5f7fa",padding:"0 var(--_layout---spacing--2xl) var(--_layout---spacing--3xl)"},children:n.jsx("div",{style:{maxWidth:"1280px",margin:"0 auto"},children:n.jsxs("div",{ref:e,style:{width:"100%",height:`${IP*t}px`,borderRadius:"var(--_corner-radii---m)",overflow:"hidden",boxShadow:"0 24px 80px rgba(12,30,32,0.14), 0 4px 16px rgba(12,30,32,0.08)",border:"1px solid rgba(12,30,32,0.07)",position:"relative"},children:[n.jsx("iframe",{src:"/demo-tour/index.html",title:"Upside Interactive Demo",style:{width:`${PP}px`,height:`${IP}px`,border:"none",display:"block",transformOrigin:"top left",transform:`scale(${t})`},allow:"fullscreen"}),i&&n.jsx("div",{onClick:()=>r(!1),style:{position:"absolute",inset:0,zIndex:10,background:"rgba(12,30,32,0.6)",backdropFilter:"blur(6px)",WebkitBackdropFilter:"blur(6px)",display:"flex",alignItems:"center",justifyContent:"center",cursor:"pointer",animation:"fadeIn 250ms ease"},children:n.jsxs("div",{onClick:o=>o.stopPropagation(),style:{background:"#fff",borderRadius:"20px",padding:"44px 52px",maxWidth:"460px",
3571width:"90%",textAlign:"center",boxShadow:"0 32px 96px rgba(12,30,32,0.28), 0 4px 16px rgba(12,30,32,0.1)",animation:"modalSlideIn 300ms ease",cursor:"default"},children:[n.jsx("div",{className:"badge",style:{marginBottom:"14px"},children:"Interactive Demo"}),n.jsx("h2",{className:"heading-m",style:{color:"#0c1e20",marginBottom:"12px"},children:"Explore a live Upside environment"}),n.jsxs("p",{className:"body-m",style:{color:"rgba(12,30,32,0.65)",lineHeight:"1.65",marginBottom:"28px"},children:["See something"," ",n.jsx("span",{style:{color:"#509a79",fontWeight:600},children:"glowing green"}),"? Click it."]}),n.jsx("button",{className:"cta w-button",onClick:()=>r(!1),style:{width:"100%"},children:"Start Exploring →"}),n.jsx("p",{style:{marginTop:"14px",fontSize:"12px",color:"rgba(12,30,32,0.4)"},children:"or click anywhere outside to dismiss"})]})})]})})}),n.jsx("section",{style:{background:"#f5f7fa",padding:"var(--_layout---spacing--2xl) var(--_layout---spacing--2xl) var(--_layout---spacing--3xl)",textAlign:"center"},children:n.jsxs("div",{style:{maxWidth:"560px",margin:"0 auto",display:"flex",flexDirection:"column",alignItems:"center",gap:"var(--_layout---spacing--s)"},children:[n.jsx("h2",{className:"heading-m",style:{color:"#0c1e20"},children:"Ready to see your own data?"}),n.jsx("p",{className:"body-m",style:{color:"rgba(12,30,32,0.6)",marginBottom:"var(--_layout---spacing--xs)"},children:"Connect your GTM stack and get the full picture of what's actually driving revenue."}),n.jsx(J,{to:Wt,className:"cta w-button",children:"Request Demo"})]})})]})},Iue="/resources/miniapp-examples/vendor/",mf=typeof document<"u"?document.addEventListener:void 0,_l=typeof window<"u"?window.addEventListener:void 0,Zj=typeof document<"u"?document.removeEventListener:void 0,eh=typeof window<"u"?window.removeEventListener:void 0;function DP(e,t){if(!e||/^([a-z]+:)?\/\//i.test(e)||e.startsWith("/")||e.startsWith("data:"))return e;let a=e.replace(/^\.\//,"");const i=a.match(/(?:\.\.\/)*vendor\/(.*)$/);return i?Iue+i[1]:(a=a.replace(/^(?:\.\.\/)+/,""),`/resources/miniapp-examples/${t}/${a}`)}function Due(e){let t=e.replace(/:root\b/g,":host");return t=t.replace(/(^|[\s,>+~(])html(?=$|[\s,>+~){:.#[])/g,"$1:host"),t=t.replace(/(^|[\s,>+~(])body(?=$|[\s,>+~){:.#[])/g,"$1.miniapp-root"),t}function Wue(e,t,a){try{typeof e=="function"?e.call(t,a):e&&typeof e.handleEvent=="function"&&e.handleEvent(a)}catch(i){console.error("[miniapp] init handler error",i)}}async function KG(e,t,a={}){const{signal:i}=a,r=()=>{},o=await fetch(`/resources/miniapp-examples/${t}/app.html`,{signal:i});if(!o.ok)throw new Error(`Failed to load miniapp "${t}" (HTTP ${o.status})`);const l=await o.text();if(l.includes('id="root"')&&l.includes('src="/src/main.tsx"'))throw new Error(`Miniapp "${t}" fetch returned the site shell instead of app.html — check static asset paths and redirects.`);if(i!=null&&i.aborted)return r;const d=new DOMParser().parseFromString(l,"text/html"),u=e.shadowRoot??e.attachShadow({mode:"open"}),h=document.createElement("style");h.textContent=":host{display:block;width:100%}.miniapp-root{width:100%}",u.appendChild(h);const m=[];d.querySelectorAll('link[rel="stylesheet"], link[rel="preconnect"]').forEach(G=>{const I=document.createElement("link");for(const K of Array.from(G.attributes))I.setAttribute(K.name,K.value);const F=I.getAttribute("href");F&&!/^([a-z]+:)?\/\//i.test(F)&&I.setAttribute("href",DP(F,t)),I.setAttribute("data-miniapp",t),document.head.appendChild(I),m.push(I)}),d.querySelectorAll("style").forEach(G=>{const I=document.createElement("style");I.textContent=Due(G.textContent||""),u.appendChild(I)});const f=document.createElement("style");f.textContent=`
3572@media (max-width: 767px) {
3573  /* ~10px page gutter lives on .app-example-viewer__app-section; keep a
3574     matching inset inside the card so titles/buttons don't touch the border. */
3575  .miniapp-root,
3576  .wrap {
3577    padding-left: 12px !important;
3578    padding-right: 12px !important;
3579  }
3580}`,u.appendChild(f);const y=document.createElement("div");y.className="miniapp-root",y.innerHTML=d.body?d.body.innerHTML:"",y.querySelectorAll("script").forEach(G=>G.remove()),u.appendChild(y);const b=document.getElementById,x=document.querySelector,k=document.querySelectorAll,v=b.bind(document),j=x.bind(document),T=k.bind(document),A=G=>u.getElementById(G)||v(G),C=(G=>{try{const I=u.querySelector(G);if(I)return I}catch{}return j(G)}),_=(G=>{try{const I=u.querySelectorAll(G);if(I&&I.length)return I}catch{}return T(G)});document.getElementById=A,document.querySelector=C,document.querySelectorAll=_;const E=document.addEventListener,R=window.addEventListener,W=E.bind(document),z=R.bind(window),H=[],$=[],U=[],X=((G,I,F)=>{if(G==="DOMContentLoaded"){I&&U.push(I);return}return I&&H.push([G,I,F]),W(G,I,F)}),D=((G,I,F)=>(I&&$.push([G,I,F]),z(G,I,F)));document.addEventListener=X,window.addEventListener=D;const P=()=>{document.addEventListener===X&&mf&&(document.addEventListener=mf),window.addEventListener===D&&_l&&(window.addEventListener=_l)},O=Array.from(d.querySelectorAll("script"));try{for(const G of O){if(i!=null&&i.aborted)break;const I=document.createElement("script");for(const K of Array.from(G.attributes))K.name!=="src"&&I.setAttribute(K.name,K.value);I.dataset.miniapp=t;const F=G.getAttribute("src");F?(I.src=DP(F,t),await new Promise(K=>{I.onload=()=>K(),I.onerror=()=>K(),u.appendChild(I)}
3580)):(I.textContent=G.textContent,u.appendChild(I))}if(!(i!=null&&i.aborted)){const G=new Event("DOMContentLoaded");U.forEach(I=>Wue(I,document,G))}}finally{P()}try{u.querySelectorAll("*").forEach(G=>{const I=getComputedStyle(G);I.position==="fixed"&&(I.top==="0px"&&I.left==="0px"?((I.alignItems==="center"||I.alignItems==="normal")&&(G.style.alignItems="safe center"),I.overflowY!=="auto"&&I.overflowY!=="scroll"&&(G.style.overflowY="auto")):(G.style.maxHeight="calc(100% - 24px)",G.style.maxWidth="calc(100% - 24px)"))})}catch{}const B=()=>{try{const G=window.Chart,I=G==null?void 0:G.instances;if(!I)return;Object.keys(I).forEach(F=>{var ne,ae;const K=I[F];try{K!=null&&K.canvas&&u.contains(K.canvas)&&((ne=K.resize)==null||ne.call(K),(ae=K.render)==null||ae.call(K))}catch{}})}catch{}},Y=()=>{document.visibilityState!=="hidden"&&requestAnimationFrame(B)};mf==null||mf.call(document,"visibilitychange",Y),_l==null||_l.call(window,"focus",Y),_l==null||_l.call(window,"pageshow",Y);let V=!1;return()=>{if(!V){V=!0;try{Zj==null||Zj.call(document,"visibilitychange",Y),eh==null||eh.call(window,"focus",Y),eh==null||eh.call(window,"pageshow",Y)}catch{}try{const G=window.Chart,I=G==null?void 0:G.instances;I&&Object.keys(I).forEach(F=>{var ne;const K=I[F];try{K!=null&&K.canvas&&u.contains(K.canvas)&&((ne=K.destroy)==null||ne.call(K))}catch{}})}catch{}H.forEach(([G,I,F])=>{try{document.removeEventListener(G,I,F)}catch{}}),$.forEach(([G,I,F])=>{try{window.removeEventListener(G,I,F)}catch{}});try{document.getElementById===A&&(document.getElementById=b),document.querySelector===C&&(document.querySelector=x),document.querySelectorAll===_&&(document.querySelectorAll=k)}catch{}P(),m.forEach(G=>{try{G.remove()}catch{}});try{u.innerHTML=""}catch{}}}}const pt={lindseyMarymont:"/images/lindsey-marymont.png",charlieFlanagan:"/images/charlie-flanagan.jpg",amyWellersdick:"/images/amy-wellersdick-testimonial.jpg",wendyWerve:"/images/wendy-werve.png"},zue={"aeo-measurement":{hero:{eyebrow:"Upside for",headline:"Measure how your pipeline is impacted by AI",subhead:"Detect when buyers use ChatGPT, Claude, Gemini, and Perplexity to find and evaluate you. Understand what they searched for, and connect that discovery to real pipeline and win rates."},heroVisual:"opportunities-table",embeddedApp:"aeo-influence",features:[{heading:"Extract AI influence from unstructured data",body:"Upside enables you to find when buyers mention using ChatGPT, Claude, Gemini, or Perplexity to find and evaluate you, across every sales call. In one customer study, 78% of AEO signal came from call mentions alone. That's conversation data your attribution tool was never designed to see.",accentColor:"green-light",visualChip:"AI influence",visualType:"venn-discovery"},{heading:"See the buyers AI engines send you — even the ones your tags missed",body:"When ChatGPT, Perplexity, or Gemini send a buyer to your site, that visit usually lands in 'direct' or 'unknown' and disappears. Upside recognizes AI-engine traffic for what it is and ties it to the deals it influenced, including months of history you never tagged, so you can finally see how much pipeline AI discovery is actually driving instead of just knowing it's happening.",accentColor:"cream",visualChip:"Hidden AI traffic",visualType:"llm-citation-traffic"},{heading:"Understand what buyers were searching for",body:"It's not enough to know a buyer came from ChatGPT. Use Upside to extract the themes buyers were asking AI about: tool discovery, vendor comparison, integration research, pricing. Then focus content, messaging, and SEO+AEO investment on what actually drives decisions.",accentColor:"purple-soft",visualChip:"Buyer intent",visualType:"search-themes-bar"}],spotlight:{quote:"As AI-driven discovery started to pick up, Upside helped us see it on the back end. Being able to actually track that was really exciting. I've been in marketing for 10+ years, and I've never been able to get a clear picture of the buyer journey before Upside.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",caseStudySlug:"assembled-from-attribution-guesswork-to-pipeline-surge",heroImage:"/images/assembled-logo-black.png",heroImageIsLogo:!0,companyLogo:"/images/assembled-logo-black.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when AEO is measurable",items:[{headline:"Know how AEO is driving pipeline and revenue",body:"See the specific deals, dollar amounts, and win rates influenced by AI discovery. Not just clicks, not just mentions. Connect every AEO touchpoint to a real opportunity in your CRM."},{headline:"Focus content on what customers actually ask AI",body:"Use Upside to extract the themes buyers research through AI engines, then use that real search intent to prioritize content, messaging, and SEO+AEO investment."},{headline:"Cohort AEO buyers and measure trends over time",body:"Track the AEO-influenced cohort separately from other channels. Segment by discovery source, theme, or time window to spot trends you can only see when the data is cleanly grouped."}],footnote:{text:"Assembled discovered a +12 percentage point win rate increase on AEO-sourced opportunities using this exact analysis.",caseStudySlug:"assembled-from-attribution-guesswork-to-pipeline-surge",caseStudyLabel:"Read the Assembled case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"Most AEO, SEO, web, and call tools each report a slice of the story, traffic, rankings, or mentions. Upside fuses structured CRM and unstructured conversation so AI-driven discovery is measurable in the same pipeline and cohort view as the rest of your GTM.",points:["Unlike web analytics (GA, Heap) and SEO platforms (Ahrefs, Semrush) that report sessions, queries, and rankings, Upside ties AI-e
3580ngine citations and self-reported AI discovery to the opps, dollars, and win rates already in your CRM.","Unlike AEO visibility / rank trackers (Profound) that stop at mentions, Upside attributes AI-driven discovery and the search themes behind it to pipeline with milestone-based evidence in your own opportunity model.","Unlike conversation intelligence (Gong, Chorus, Fireflies) that stop at a clip, Upside ties those calls to influenced opps and cohort win rates so AEO mentions become an attribution channel, not a search query.","Unlike fully deterministic attribution platforms (HockeyStack, Dreamdata, Bizible) that rely on tracked links, Upside makes self-reported discovery from forms, email, and notes first-class, inferred and logged touches together.","Unlike BI and CDP exports that end where structured data ends, Upside fuses forms, recorded touchpoints, and conversational signal into one knowledge graph for AEO and every other channel you measure.","Unlike UTM-hygiene programs that have to finish before you trust the numbers, Upside runs on the imperfect data you have today, no new form mandate and no 'clean everything first' gate for reps."]},testimonials:[{quote:"The fact that Upside could work with imperfect data was the selling point. We knew our data wasn't clean. Getting all the Gong transcripts and everything else into a single milestone view. That was something I've never seen before.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",accentColor:"green-light",avatarImage:pt.lindseyMarymont},{quote:"What used to take 2-3 hours I can now do in a few clicks, and it's made me a smarter operations person than I've ever been in my career.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",accentColor:"cream",avatarImage:pt.charlieFlanagan}],relatedUseCases:[{title:"Hidden Contact & Touchpoint Discovery",description:"The same unstructured-data extraction that powers AEO also surfaces 30K+ hidden contacts and 37K+ hidden touchpoints per customer.",customer:"Assembled"},{title:"Content Performance Tied to Pipeline",description:"Measure which content drives pipeline across every format: web, email attachments, podcast mentions, and LLM citations."},{title:"Executive Thought Leadership Impact",description:"Create a dedicated attribution channel for CEO/founder thought leadership, podcast appearances, and long-form posts.",customer:"Graphite"},{title:"SEO Topic Discovery from Customer Conversations",description:"Mine call transcripts for the questions AI engines would answer, then build an SEO+AEO strategy on real customer language."},{title:"Self-Reported Attribution from Notes & Forms",description:"Extract 'how did you hear about us' signal from CRM notes, email threads, and form fills, the signal most attribution tools throw away."},{title:"AI Engine Citation Tracking",description:"Detect and normalize referrer traffic from ChatGPT search, Perplexity, and emerging AI engines, with retroactive rules that apply to historical data."}],faqs:[{question:"How is Upside different from AEO visibility trackers?",answer:"Visibility trackers report how often AI engines mention you. Upside connects AI-driven discovery to the deals it influenced: the opportunities, dollars, and win rates already in your CRM, so AEO becomes a measurable revenue channel instead of a mention count."},{question:"How fast can I see AEO attribution for my business?",answer:"Typically within days of connecting your CRM, marketing automation system, and call recording platform. A pilot on 500+ opportunities is enough to establish statistical confidence, delivered in weeks rather than quarters."},{question:"What self-reported sources does Upside read?",answer:"Emails and email threads, call transcripts, meeting summaries, CRM notes, and form fills across your marketing automation system. If a buyer mentions AI discovery anywhere in your data, Upside can find and attribute it."},{question:"Do I need clean UTM tagging on all my channels?",answer:"No. Upside's AEO detection works even when UTM hygiene is imperfect because the majority of AEO signal comes from call mentions, not traffic tags, the signal shows up in conversations first."},{question:"Which AI engines does Upside detect?",answer:"ChatGPT (including ChatGPT search), Claude, Gemini, Perplexity, and other major LLMs. New engines can be added via natural-language keyword configuration, with no engineering work required."},{question:"Can Upside tell me what buyers are asking AI?",answer:"Yes, as long as there's structured or unstructured data in your systems that reveals it (and there usually is, so you can usually find a lot). When buyers describe their AI research on calls or in emails, use Upside to extract those themes and rank them by frequency and pipeline value. We can't pull data directly out of ChatGPT, but if the signal lives in your data, you can surface it."}],cta:{headline:"See how AI engines are driving your pipeline",subhead:"Book a 30-minute c
3580onversation to see how Upside would detect AEO influence in your own opportunity data."}},"event-field-marketing":{hero:{eyebrow:"Upside for",headline:"See the real impact of every event, dinner, and activation",subhead:"From trade show sponsorships to intimate dinners to webinars, Upside connects event touchpoints to pipeline and revenue even when campaign membership is incomplete."},heroVisual:"events-deals-table",features:[{heading:"Detect event attendance and engagement your CRM never captured",body:"Even when your CRM has no accurate record of who engaged with an event, Upside can forensically reconstruct it from the unstructured signals already in your systems: emails, call transcripts, and meeting invites. An email that says 'great to see you yesterday at the event' becomes evidence someone was there, and Upside completes the campaign your list upload missed.",accentColor:"green-light",visualChip:"Hidden attendance",visualType:"event-attendance-detected"},{heading:"Go beyond simple campaign metrics. Measure influence from every angle.",body:"Events can source deals, but they can also influence existing ones. Upside helps your team report the full contribution in plain terms: deals that were created, deals that moved forward, and deals that were influenced across the buying group. Enough to truly understand the impact your event had, and to confidently know you made the right call.",accentColor:"cream",visualChip:"Full-funnel impact",visualType:"sourced-vs-influenced"},{heading:"Trace event influence beyond the people in the room",body:"The true influence of an event goes beyond who registered. Attendees become champions, champions refer friends, and second-order pipeline shows up months later at companies that never sent anyone. Use the Upside MCP to follow that chain, attendee to champion to referral to new deal, so events get credit for everything they set in motion.",accentColor:"blue-soft",visualChip:"Ripple effect",visualType:"referrer-network"},{heading:"Know if sales followed up on every event lead",body:"Events show a large payoff when leads get worked. Use Upside to see which attendees got follow-up, how fast, and from whom, which high-intent attendees are still waiting, and whether the people who showed up matched your ICP in the first place. The budget conversation should include execution, not just attendance.",accentColor:"green-soft",visualChip:"Follow-up gaps",visualType:"event-followup-status"},{heading:"Know who to invite next",body:"Use Upside to build invite lists that maximize pipeline: buyers who are in-cycle, match your ICP, and haven't been invited recently. The same approach surfaces speaker candidates, customers who use the product and have positive sentiment on calls, without a week of manual research.",accentColor:"ivory",visualChip:"Smart invites",visualType:"smart-invite-list"},{heading:"Compare event performance side by side",body:"Create a list view that compares the performance of every event. Whether you're deciding format, location, duration, or which cities to invest in, you can quickly see what's working and what's not for your specific market.",accentColor:"purple-soft",visualChip:"Event benchmarks",visualType:"event-format-bars"}],spotlight:{quote:"We stopped doing events because we didn't have data saying they were impactful. With Upside, we can see events are actually a massive flywheel for our business.",name:"Ethan Smith",title:"CEO & Founder",company:"Graphite",caseStudySlug:"graphite-uncovering-real-channels-behind-inbound-growth",heroImage:"/images/graphite-logo.jpeg",heroImageIsLogo:!0,companyLogo:"/images/graphite-logo.jpeg"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when event attribution actually works",items:[{headline:"Justify event budget with real ROI, not gut feel",body:"See each event's full pipeline contribution, including the deals it assisted and the champion relationships it set in motion. The kind of data the CFO asks for when event season approaches."},{headline:"Shift spend from underperforming formats to what works",body:"Compare dinners to webinars to conferences fairly. Cut what doesn't move the needle. Double down on the formats that actually drive pipeline for your specific GTM motion."},{headline:"Capture the full impact, direct and indirect",body:"Events drive pipeline both from attendees who convert directly and from the champions and referrals they set in motion. Use Upside to capture the full picture so you understand the true impact and influence of every event."}],footnote:{text:"Graphite restarted their entire event program after Upside proved events fuel the referral flywheel behind 53% of their deals.",caseStudySlug:"graphite-uncovering-real-channels-behind-inbound-growth",caseStudyLabel:"Read the Graphite case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"Most event tools and list-based attribution assume a complete campaign object. Upside measures what really happened in the field, late lists, uncaptured attendance, in-cycle influence, and referral effects, in the same multi-touch model as the rest of your GTM spend.",points:["Unlike event platforms (Splash, Bizzabo, Cvent, Goldcast) that end at check-ins, Upside attributes sourced, in-cycle, and influenced pipeline, and still credits the event when the badge file lands in the CRM a week late.","Unlike list-only and CRM campaign-membership views, Upside infers who actually attended from email, calendar, and call data when the formal upload is incomplete.","Unlike first/last-touch attribution that depends on clean tagging, Upside makes in-cycle event influence a first-class metric in one milestone analysis, not a one-off event dashboard on the side.","Unlike conversation tools (Gong, Clari) that stop at the mention, Upside links event context to stage moves, opps, and dollars with the same custom channels and persona resolution as the rest of the journey.","Unlike attribution platforms (HockeyStack, Dreamdata, Bizible) that depend on a clean campaign object, Upside still attributes when membership is wrong or missing, and traces champion and referral payoffs from the same events.","Unlike ad-hoc per-format scorecards, Upside runs one success framework so dinners, webinars, conferences, and roadshows compare apples-to-apples without a new spreadsheet for every format."]},testimonials:[{quote:"I had the data to make the case: double down on events. We could see the impact these conversations were having on our bottom line and made the case to invest more in events and even hire a second events marketer.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",accentColor:"green-light",avatarImage:pt.lindseyMarymont},{quote:"This level of granularity was simply not feasible before. We can compare, like, do we have better luck in New York vs. Minneapolis. Is it worth going back to Minneapolis next year?",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",accentColor:"cream",avatarImage:pt.charlieFlanagan}],relatedUseCases:[{title:"Activation After Event (Timestamp Progression Metric)",description:"A metric that exists nowhere else. Track how offline activity translates to progression, days or weeks later.",customer:"Assembled"},{title:"In-Cycle Event Influence",description:"Find the events your CRM's 'sourced' attribution ignored, which are actually accelerating your biggest opportunities.",customer:"Syndio"},{title:"Event Format A/B Comparison",description:"See whether your dinners, happy hours, conferences, or webinars actually drive pipeline for your specific market.",customer:"Dscout"},{title:"Champion Tracking Across Job Changes",description:"Events create champions. Champions change jobs. Upside catches those transitions so you can re-engage with the full relationship history intact.",customer:"Graphite"},{title:"Event Invite List Optimization",description:"Build targeted invite lists on demand by title, geo, in-cycle signal, and prior attendance. Skip the ghost list and invite buyers who will actually show up."},{title:"Post-Event Pipeline Activation",description:"Measure activation rate after each event: which attendees progressed, which stalled, and which never engaged. Surface the moments worth a follow-up play.",customer:"Assembled"}],faqs:[{question:"How is this different from our event platform's reporting?",answer:"Event platforms report registrations and check-ins. Upside connects events to pipeline: deals sourced, deals accelerated mid-cycle, and influence beyond the people in the room, even when attendees never made it into a campaign."},{question:"What if our campaign membership is incomplete?",answer:"That's the point. We do our best to rebuild the true story of what happened in every account and opportunity, so if an event was involved, it shows up, even when attendees were never added to CRM campaigns. We read meeting invites, email follow-ups, and call transcripts to surface the real attendance, then attribute accordingly."},{question:"Can Upside detect event influence beyond who got scanned?",answer:"Yes. Because the data is structured to look beyond direct attendance, we can pick up signals like 'I walked past your booth but didn't get scanned' or 'great to see you speak at your session' from emails and calls, and tie them to the deal."},{question:"Can I see which events created champions who later referred deals?",answer:"Yes. Use Upside to map the full flywheel from event to champion to referral to deal. The pattern is common: a program can look dead in last-touch attribution but actually supply most of pipeline through referral chains the events kicked off."}],cta:{headline:"Stop guessing whether events work",subhead:"See your real event ROI on your own data in a 30-minute walkthrough."}},"revenue-attribution":{hero:{eyebrow:"Upside for",headline:"Model attribution the way that makes sense for your business",subhead:"Break free from the constraints of position-based models. Upside unifies every touchpoint, logged and inferred, into one clean foun
3580dation, so you can use attribution out of the box or build the exact model your business needs."},heroVisual:"attribution-overview",embeddedApp:"channel-analysis",features:[{heading:"One clean foundation under any attribution model",body:"Attribution is only as good as the data underneath it. Upside unifies emails, calls, meetings, campaigns, and web activity into one clean timeline per deal, including the inferred touchpoints your CRM never logged. Whatever model you run on top, it runs on the whole story.",accentColor:"green-light",visualChip:"Clean foundation",visualType:"milestone-timeline"},{heading:"Attribute the touchpoints your CRM never logged",body:"Most attribution models only credit what reps remembered to log. Upside extracts call attendees, email threads, and meeting invites from unstructured data and brings them into the attribution model as first-class touchpoints, so credit flows to the channels and campaigns the CRM was blind to.",accentColor:"cream",visualChip:"Hidden touches",visualType:"hidden-touchpoints-stats"},{heading:"Get a rigorous multi-touch answer without building anything",body:"Not every team wants to design its own model — sometimes you just need a credible multi-touch view you can take to planning. Upside's next-generation Pipedash model spreads impact-based credit across every touchpoint in the deal, broken down by team, channel, and individual touch, and tells you why each one mattered to the win. A defensible answer your CFO can audit, with nothing to set up.",accentColor:"blue-soft",visualChip:"Multi-touch answer",visualType:"attribution-breakdown"},{heading:"Build the model that fits how you go to market",body:"Position-based models force every business into the same shape. With all of your data in one clean place, use the Upside MCP and miniapps to model attribution your way: define your own milestones, weight channels how your business thinks about them, segment by customer type or motion.",accentColor:"green-soft",visualChip:"Your own model",visualType:"segmented-attribution-bar"},{heading:"Views into cause and effect, not just credit splits",body:"A lot of what teams actually want from attribution isn't a credit split, it's an answer. Upside's influence reports and channel report cards show what's moving deals from a specific angle: which campaigns touched won deals, what channels moved deals forward, which programs influence pipeline without sourcing it.",accentColor:"purple-soft",visualChip:"Cause & effect",visualType:"channel-report-card"}],spotlight:{quote:"The challenge we were trying to solve was essentially annual planning, getting a good sense of where our pipeline was coming from, where to double down as we were thinking about budget allocation for the year ahead.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",caseStudySlug:"assembled-from-attribution-guesswork-to-pipeline-surge",heroImage:"/images/assembled-logo-black.png",heroImageIsLogo:!0,companyLogo:"/images/assembled-logo-black.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when attribution actually reflects reality",items:[{headline:"End the 'marketing says / sales says' debate",body:"When marketing, sales, SDRs, and RevOps all work from the same reconstructed source of truth, zero-sum attribution fights disappear. Planning conversations become grounded in shared reality."},{headline:"See everything that contributed",body:"Get true visibility into everything that contributed to pipeline, even when touchpoints weren't logged, contact roles were incomplete, or campaign membership was broken. Upside finds it and attributes it."},{headline:"Make budget decisions on real data, not last-touch",body:"Reallocate spend the moment multi-touch data shows a major pipeline-per-opp gap between programs (e.g. events vs paid). The kind of move you can only justify with a forensic journey your CFO can audit."}],footnote:{text:"Assembled recovered 30K+ hidden contacts and 37K+ hidden touchpoints their CRM never captured, and found events drove ~20x more pipeline per opportunity than other sources such as paid.",caseStudySlug:"assembled-from-attribution-guesswork-to-pipeline-surge",caseStudyLabel:"Read the Assembled case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"First/last-touch and a BI cut of what got logged are not the full journey. Upside rebuilds it, milestone analysis, custom channels, and inferred touchpoints, from the data you have today, not the hygiene project you keep postponing.",points:["Unlike first/last-touch and CRM-only path views, Upside is forensic multi-touch across Salesforce, marketing automation, Gong, and email, so the majority of the journey that never made it to the CRM is still in the model.","Unlike BI and warehouse dashboards (Looker, Power BI, Tableau) that need quarters of ETL and still drop call and email text, Upside fuses structured and unstructured data in one deal timeline and outcome set.","Unlike attribution stacks (HockeyStack, Dreamdata, Bizible) that assume clean UTMs, Upside leans on GCLIDs, referrers, and natural-language custom channels with retroactive rules on the messy tags you really have.","Unlike CRM activity logs that capture only what reps remembered, Upside recovers hidden contacts, touchpoints, and buying-group members from email, calendar, and recordings, no 'log your touches' blitz required.","Unlike fixed marketing-automation or ad-platform categories, Upside custom channels model how you actually go to market, with history applied retroactively.","Unlike out-of-band call clips and 'interesting moments' lists, Upside makes inferred and logged touches first-class in one attribution and outcome model, not a side panel of evidence the model can't use."]},testimonials:[{quote:"I've been in marketing for 10+ years, and I've never been able to get a clear picture of the buyer journey before Upside.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",accentColor:"green-light",avatarImage:pt.lindseyMarymont},{quote:"What used to take 2-3 hours I can now do in a few clicks, and it's made me a smarter operations person than I've ever been in my career.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",accentColor:"cream",avatarImage:pt.charlieFlanagan},{quote:"It helped us validate that what we thought was true was actually true. We were just not seeing the impact of the ADR function like we needed to.",name:"Amy Wellersdick",title:"Director of Marketing Ops",company:"Syndio",accentColor:"blue-soft",avatarImage:pt.amyWellersdick}],relatedUseCases:[{title:"Milestone Analysis (Full Buyer Journey View)",description:"Every touchpoint from every system, chronologically ordered, with inferred touchpoints flagged. The foundation of every other insight.",customer:"Assembled"},{title:"Hidden Contact & Touchpoint Discovery",description:"Surface the 14%+ of contacts and touchpoints your CRM never captured, extracted from calls and emails.",customer:"Assembled"},{title:"Inbound vs. Outbound Pipeline Rebalancing",description:"Discover how much of your 'outbound' is really marketing-assisted outbound, often enough to reshape your entire SDR org.",customer:"Syndio"},{title:"Custom Channel Creation from UTM Tags",description:"Build channels that match how your business actually works, with retroactive rules that apply to historical data."},{title:"Segmented Attribution by Customer Type",description:"See which channels and campaigns drive enterprise deals vs SMB, inbound vs outbound, and new vs expansion, in one model."},{title:"Forensic Loss Analysis",description:"Understand why deals actually lost by reading every conversation, email, and meeting, not just the CRM close-lost reason."}],faqs:[{question:"Does Upside replace my existing attribution tool?",answer:"Most customers replace their point or position-based attribution tool with Upside because Upside covers more sources and works with messier data."},{question:"Do we have to use a multi-touch model?",answer:"No. Multi-touch is one lens. Some teams legitimately run last-touch for opportunity sourcing, others build custom models on the unified data with the Upside MCP. Upside supports the model that matches how y
3580our business actually makes decisions."},{question:"What if our UTM tagging is inconsistent?",answer:"Tagging is never perfectly consistent, and that's fine. Upside's channel rules are dynamic and flexible enough to adapt to what your data actually looks like: UTMs when they exist, referrer URLs when they don't, GCLIDs for Google Ads even without UTMs, and natural-language rules for the edge cases. Inconsistent tagging doesn't break the model, and you can apply the rules retroactively to clean up historical data."},{question:"Do we need to clean up our CRM data first?",answer:"No. Upside is specifically designed to work with messy, incomplete GTM data. We extract missing contact roles, infer hidden touchpoints, and reconstruct buying groups automatically, doing the heavy lifting of cleaning up your data so you can get insights rapidly."},{question:"Can we compare Upside's attribution to our current model?",answer:"Yes. You can run both at the same time and see how differently we look at the world. Upside tends to find more specific influence because it looks at the whole buying group, not just the contacts on the opportunity."},{question:"How long until we have trusted attribution?",answer:"Implementation takes days. Once your sources are connected, attribution runs on your live data, so you are interrogating a working model quickly instead of waiting on a quarter-long rollout."}],cta:{headline:"Know what really drives your pipeline",subhead:"See revenue attribution on your own data in a 30-minute walkthrough."}},"account-management":{hero:{eyebrow:"Upside for",headline:"Know the next play for every account",subhead:"Pair the AI agent your team already uses with the Upside MCP, and turn everything that actually happened on an account, every call, email, meeting, and CRM record, into next-best plays, win-back kits, and on-demand briefs. Coverage for your whole book, not a hero account a week."},heroVisual:"buying-group-detection",embeddedApp:"account-coverage-explorer",features:[{heading:"A recommended next play for every account",body:"Point your AI agent at the Upside MCP and it can weigh your playbook against each account's full context, calls, emails, meetings, and CRM history, then surface the play that fits, the message that lands, who to target next, and the discovery questions for their stage. One prompt covers hundreds of accounts, not one.",accentColor:"green-soft",visualChip:"Next best play",visualType:"next-best-play"},{heading:"Turn your closed-lost list into win-back kits",body:"Use the Upside MCP and Deep Research Agents to build a re-engagement one-pager for every closed-lost account: why it stalled, what has changed since, the decision makers and tech stack from past calls, and the specific hook that reopens the conversation.",accentColor:"cream",visualChip:"Win-back kits",visualType:"win-back-sales-kit"},{heading:"Pull a one-page account brief before any call",body:"Point the same tooling at a live account and the Upside MCP can assemble a dossier on demand: situation, people, recent activity, risks, and renewal dates, ready before a QBR or a renewal conversation. Build it once, and your CSMs and AEs can regenerate it whenever the account moves.",accentColor:"blue-soft",visualChip:"Account brief",visualType:"customer-dossier"},{heading:"Multi-thread every deal before it stalls",body:"See multi-threading the way it actually is, not the way the CRM records it. Upside's buying-group detection recovers who is really engaged on every deal, so your multi-threading reporting is truthful: it flags single-threaded deals early and shows exactly where to add a thread, so you can act before they stall.",accentColor:"purple-soft",visualChip:"Multi-threading",visualType:"multi-threading-dashboard"}],spotlight:{quote:"We are like kids in a candy shop digging into accounts and opportunities.",name:"Wendy Werve",title:"CMO",company:"Comply",caseStudySlug:"comply-from-unfiltered-salesforce-data-to-marketing-intelligence",heroImage:"/images/comply-logo.png",heroImageIsLogo:!0,companyLogo:"/images/comply-logo.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when every account has a next step",items:[{headline:"Coverage that scales without headcount",body:"Dossiers, kits, and plays generated in batches across whole target lists. The research that used to take a week per account runs across the entire list in a single pass."},{headline:"Reps act on context, not guesswork",body:"Every recommendation is grounded in what the account actually said and did: the calls, emails, and meetings already in your systems, not a generic playbook applied blind."},{headline:"Closed-lost becomes a pipeline source",body:"Win-back kits turn your closed-lost list into a prioritized re-engagement program, with specific hooks per account instead of a generic blast."}],footnote:{text:"Comply runs AI milestone analyses automatically on every open and recently won opportunity, 3,592 and counting, account insight impossible to generate manually.",caseStudySlug:"comply-from-unfiltered-salesforce-data-to-marketing-intelligence",caseStudyLabel:"Read the Comply case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"Account research tools and intent platforms tell you who looks interesting. Upside works from what actually happened on each account, so the play, the persona, and the message rest on the deal's real history.",points:["Unlike one-off research pulls, the Upside MCP batch-generates dossiers, win-back kits, and next-best plays at the scale of hundreds or thousands of accounts, not a few hero accounts a week.","Unlike intent-centric ABM platforms (6sense, Demandbase) and intent feeds (Bombora) that light up 'interest' before the meeting, Upside infers the real buying group and missing personas from email, calendar, and call data on live opps.","Unlike CRM contact roles that capture who reps remembered to add, Upside does buying-group detection and persona resolution across the messy real identities in threads and side conversations.","Unlike sales engagement (Outreach, Salesloft) that optimizes rep sequences, Upside is the system of account truth: who's in the deal, who's missing, and which next-best play fits.","Unlike a separate 'fix the CRM' project that has to ship first, Upside's data unification and persona resolution are the foundation your plays can already trust for segments, lists, and recommendations."]},testimonials:[{quote:"What used to take 2-3 hours I can now do in a few clicks, and it's made me a smarter operations person than I've ever been in my career.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",accentColor:"green-light",avatarImage:pt.charlieFlanagan},{quote:"It helped us validate that what we thought was true was actually true. We were just not seeing the impact of the ADR function like we needed to.",name:"Amy Wellersdick",title:"Director of Marketing Ops",company:"Syndio",accentColor:"cream",avatarImage:pt.amyWellersdick}],relatedUseCases:[{title:"Win-Back Sales Kit",description:"Closed-lost enterprise accounts, each with a one-pager: narrative, stakeholders, news, product deltas, tech stack from calls, re-engagement hooks. Built in days via the Upside MCP."},{title:"Account Engagement Summaries & Dossiers",description:"Batch-generated dossiers for ~1,000 accounts: situation, people, activity, risks, recommended actions, renewal dates. One page per account.",customer:"Dscout"},{title:"Multi-Threading Analysis & Velocity Tracking",description:"Weekly dashboard tracking contacts per deal by team, region, and rep. Coaches multi-threading and surfaces stalling deals early.",customer:"Dscout"},{title:"Smart Event Invite List Building",description:"The Upside MCP builds targeted invite lists on demand: Director+, geo-filtered, not recently invited. Ideal for intimate events and premium activations."},{title:"Speaker & Advocate Shortlists",description:"Surface customers who use the product and have positive sentiment on calls, ready to be asked for a webinar, a reference, or a referral."}],faqs:[{question:"Is this out-of-the-box functionality or something we build?",answer:"Both, depending on the layer. Buying-group detection, persona resolution, and unified account timelines are core Upside functionality. The kits, dossiers, and play recommendations are built on top of that data with the Upside MCP and Deep Research Agents, shaped to your playbook rather than a generic template, and typically set up in days."}
3580,{question:"How does Upside know who's in the buying group?",answer:"Upside infers the buying group from the email, calendar, and call activity around each deal, then resolves identities across systems. Missing personas and single-threaded deals surface without reps having to log contact roles."},{question:"Does Upside take sales notes into account?",answer:"Yes. Upside ingests and understands unstructured data fields in your CRM and other systems, so the notes reps already write become part of each account's context alongside calls, emails, and meetings."}],cta:{headline:"Put a next play on every account",subhead:"See what win-back kits, dossiers, and next-best-plays look like on your own accounts."}},"ask-your-gtm-data":{hero:{eyebrow:"Upside for",headline:"Ask anything about your GTM data — in your tool or inside Upside",subhead:"Your AI is only as good as the data you give it. Upside turns all your customer activity into one clean source of truth, then lets your whole team ask it questions — in the AI tool they already use, or with Upside's own agent."},heroVisual:"ask-overview",features:[{heading:"Chatting with your data only works once the data is clean",body:"Teams that pointed AI at their CRM got a different answer every time, because the data underneath was messy, duplicated, and missing half of what actually happened. Upside fixes that first: your accounts, opportunities, calls, emails, and touchpoints resolved into one identity-matched, timeline-reconstructed source of truth. Ask anything on top of it and the answer reflects what really happened, not whatever a half-connected export could see.",accentColor:"green-light",visualChip:"Clean data layer",visualType:"unified-foundation"},{heading:"Everyone on your team gets the same answer",body:"When the numbers change depending on who pulled them, every planning meeting turns into a debate about whose definition is right. Upside's librarian gives your whole team one shared, governed view of the data, so marketing, sales, and CS ask the same question and get the same evidence-backed answer. One source of truth instead of five spreadsheets that disagree.",accentColor:"cream",visualChip:"One answer",visualType:"librarian-answer"},{heading:"Ask in the AI tool you already use",body:"You shouldn't have to adopt a new tool just to get answers. Connect the AI your team already lives in — Claude, ChatGPT, Cursor, Gemini, and more — to your unified Upside data through the MCP, and ask in plain language right where you already work. No vendor lock-in, and the tools you already pay for get more useful the moment they can reach clean, complete GTM data.",accentColor:"blue-soft",visualChip:"In your AI tools",visualType:"mcp-agent-hub"},{heading:"Or ask right inside Upside",body:"Don't have an AI tool of your own, or want the question and the data to stay in one place? Ask Upside's built-in agent directly. Same unified data, same evidence-backed answers, nothing to set up or connect — type the question where your GTM data already lives and get the records behind every answer.",accentColor:"purple-soft",visualChip:"Ask in Upside",visualType:"in-app-agent"},{heading:"Don't just ask — build",body:"The best answers shouldn't vanish when the chat closes. When a question becomes one your team asks every week, turn it into a live miniapp on the same data: a follow-up tracker, an account health board, a pipeline view your team checks Monday morning. Go from a one-time answer to a tool the whole team relies on, without a BI ticket or an engineering sprint.",accentColor:"green-soft",visualChip:"Ask to build",visualType:"prompt-to-app"}],spotlight:{quote:"Things that used to take me hours to pull, I'm getting them in Upside in minutes. Instead of having to pick what questions to ask based on how long it will take to get a verifiable answer, with a quick MCP search, I'm uncovering issues I didn't even know existed.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",caseStudySlug:"assembled-from-attribution-guesswork-to-pipeline-surge",heroImage:"/images/assembled-logo-black.png",heroImageIsLogo:!0,companyLogo:"/images/assembled-logo-black.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when your data speaks your agent's language",items:[{headline:"Insights in minutes, not BI tickets",body:"The questions that used to wait in a dashboard backlog get answered in the conversation where they came up, so leaders stay focused on impact instead of the queue."},{headline:"One shared truth",body:"Marketing, sales, and CS query the same unified dataset, so the answer does not depend on who pulled it or which export they used."},{headline:"Your AI investment compounds",body:"The agents your company already pays for get more useful the moment they can reach clean, complete GTM data, and they keep getting more useful as your data grows."}],footnote:{text:"When Assembled connected the Upside MCP to their AI tool (Dust), pipeline queries returned roughly 2x the completeness and accuracy of querying Salesforce directly, with 2,300+ MCP calls in the first week.",caseStudySlug:"assembled-from-attribution-guesswork-to-pipeline-surge",caseStudyLabel:"Read the Assembled case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"Generic AI assistants answer from whatever they can reach: a single CRM export, a stale spreadsheet, a half-connected warehouse. Upside gives the AI tool your team already uses one clean, identity-resolved view of all GTM activity, with a security posture built for enterprise review.",points:["Unlike CRM copilots locked to one vendor's assistant, the Upside MCP works with the major MCP-compatible clients: Claude, ChatGPT, Google Gemini, Cursor, and more.","Unlike text-to-SQL tools pointed at a raw warehouse, agents query identity-resolved, timeline-reconstructed data, so 'who touched this deal' has one answer instead of five.","Unlike BI chat layers that only see structured data, Upside exposes call transcripts and emails alongside CRM records in the same unified dataset.","Unlike a custom RAG project, there is no pipeline to build or maintain: connect a client, authenticate, and ask.","Unlike 'just point AI at the warehouse', access is read-only, scoped to one organization, sandboxed, and on a SOC 2 compliant platform, so the integration that would otherwise get blocked in security review gets greenlit."]},testimonials:[{quote:"What used to take 2-3 hours I can now do in a few clicks, and it's made me a smarter operations person than I've ever been in my career.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",accentColor:"green-light",avatarImage:pt.charlieFlanagan},{quote:"It helped us validate that what we thought was true was actually true. We were just not seeing the impact of the ADR function like we needed to.",name:"Amy Wellersdick",title:"Director of Marketing Ops",company:"Syndio",accentColor:"blue-soft",avatarImage:pt.amyWellersdick}],relatedUseCases:[{title:"Ad-Hoc Pipeline Questions",description:"Which campaigns touched the deals we won last quarter? Asked in your AI tool, answered from the unified dataset, with the records to back it up."},{title:"Account Research Before a Call",description:"Pull the full history of an account, what they s
3580aid on calls, who is engaged, and what has changed, in the minutes before you join."},{title:"Win/Loss Themes from Call Transcripts",description:"Ask why deals are stalling or losing and get themes drawn from the actual conversations, not the closed-lost dropdown."},{title:"Custom Analyses Without a Data Team",description:"Cohorts, segments, and one-off cuts of the data, built conversationally and repeatable whenever you ask again."}],faqs:[{question:"Which AI tools work with the Upside MCP?",answer:"A growing set of AI tools. Upside integrates with platforms such as ChatGPT, Claude, Claude Code, Google Gemini, Gemini CLI, Cursor, Craft agents, Codex, Dust, Notion, Glean, Lovable, and Devin, and we add more as teams adopt them. This is what lets your team run natural-language queries for massive insights into GTM data, in the tools they already use."},{question:"Does Upside work with Claude?",answer:"Yes. Claude (Desktop, Claude Code, and claude.ai) is one of the most common ways teams use the Upside MCP today. The same connection also works with other supported AI tools like ChatGPT, Google Gemini, and Cursor, so you are not locked to a single assistant."},{question:"Is this just a chatbot on top of our CRM?",answer:"No. The agent reaches the unified dataset Upside builds: identity-resolved contacts, reconstructed timelines, extracted touchpoints, call transcripts, and emails, not raw CRM tables. Upside provides the clean foundation and the toolbox, the agent does the reasoning, and that combination is the difference between an answer and a guess."},{question:"How is access controlled, and is our data safe?",answer:"Access runs through your organization's authentication and is scoped to a single organization. It is read-only and sandboxed, on a SOC 2 compliant platform, so an agent can only see what your org's Upside workspace sees and cannot write back. The same posture that blocks 'just point AI at the warehouse' is the one that greenlights Upside in security review."},{question:"Do we need a data team to set this up?",answer:"No. Connecting a client typically takes minutes: add the Upside MCP in your AI tool's integration settings and authenticate with your Upside account."}],cta:{headline:"Bring your own agent. We'll bring the data.",subhead:"See the Upside MCP answer real questions on your own GTM data in a 30-minute walkthrough."}},"gtm-apps":{hero:{eyebrow:"Upside for",headline:"Turn the report you keep rebuilding into a tool your team actually uses",subhead:"Every GTM team has a workflow stuck in a spreadsheet nobody trusts and a BI request that never ships. Describe what you need, build it on your unified Upside data, and share it with exactly the right people — no engineering sprint, no shadow IT, no BI backlog."},heroVisual:"gtm-apps-overview",embeddedApp:"rep-scorecard",features:[{heading:"Build the tool no one else will build for you",body:"You know the view your team needs — which campaign responders got worked, which accounts are at risk, who's been multi-threaded — but it's stuck behind a BI backlog or an engineering roadmap. Describe it in plain language and stand it up yourself as an interactive app on your live GTM data, the same afternoon the need came up. If you can describe the tool, you can ship the first version.",accentColor:"green-light",visualChip:"Prompt to app",visualType:"prompt-to-app"},{heading:"Share it with exactly the right people — and no one else",body:"These tools usually die in security review because they leak data into spreadsheets and screenshots. Here, what you build stays inside the platform your security team already approved. Roll it out org-wide, keep a sensitive view to leadership only, or give edit rights to just the people who maintain it. A personal experiment becomes a sanctioned team tool instead of shadow IT.",accentColor:"purple-soft",visualChip:"Scoped access",visualType:"app-permissions"},{heading:"Hand it off without breaking it for the team",body:"When more than one person owns a tool, every change risks breaking what everyone else depends on. Your team keeps using the approved version while someone iterates on the next one, so updates never surprise the people relying on it day to day. Every iteration is reviewed, not improvised.",accentColor:"ivory",visualChip:"Safe handoff",visualType:"version-lifecycle"},{heading:"Trust it won't go stale",body:"Exports go stale the moment you download them, and a tool nobody trusts is a tool nobody opens. Your apps read live from your continuously refreshed Upside data, so the tracker your team checks Monday morning reflects what actually happened Friday night — no manual refresh, no CSVs floating around.",accentColor:"cream",visualChip:"Always live",visualType:"live-data-app"}],spotlight:{quote:"Honestly, the first time I found a huge use case for AI for me. A tool that has the data organized, and I can query it thinking the way I think.",name:"Carl Gunlefinger",title:"Senior Marketing Operations Manager",company:"Comply",caseStudySlug:"comply-from-unfiltered-salesforce-data-to-marketing-intelligence",heroImage:"/images/comply-logo.png",heroImageIsLogo:!0,companyLogo:"/images/comply-logo.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when shipping an internal tool takes an afternoon",items:[{headline:"Tools in days, not quarters",body:"The internal app that used to mean a BI ticket, an engineering sprint, and a procurement cycle ships the same week it was suggested."},{headline:"Compliance stays a checkbox, not a blocker",body:"Apps stay inside the platform your security team already approved, published with org-scoped view and edit permissions instead of exported data floating around in spreadsheets."},{headline:"Adoption, because it's exactly what the team asked for",body:"Purpose-built beats general-purpose. An app shaped to your team's exact workflow, iterated as fast as the feedback comes in."}]}
3580,whyUpside:{heading:"How Upside compares to alternatives",intro:"Internal GTM tools usually die between the BI backlog and the security review. Upside removes both: miniapps are built with agents on unified data and published inside the platform's existing permission model, with independent view and edit scopes per app.",points:["Unlike BI dashboards (Looker, Tableau, Power BI) that need modeled data and licensed seats, miniapps are purpose-built interactive tools shipped by the team that needs them.","Unlike internal tool builders (Retool) pointed at raw databases, miniapps inherit Upside's identity-resolved GTM dataset, so the hard data work is already done.","Unlike one-off vibe-coded apps deployed wherever, you build privately and then publish inside Upside, so customer data stays within an already-reviewed platform with org-scoped view and edit permissions.","Unlike a wiki of stale screenshots, draft, sealed, and active versions let the team keep using the approved app while the next version is in progress.","Unlike spreadsheets passed around by email, apps query live data through the SDK in a sandboxed iframe and stay current without manual exports."]},testimonials:[{quote:"What used to take 2-3 hours I can now do in a few clicks, and it's made me a smarter operations person than I've ever been in my career.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",accentColor:"green-light",avatarImage:pt.charlieFlanagan},{quote:"We are like kids in a candy shop digging into accounts and opportunities.",name:"Wendy Werve",title:"CMO",company:"Comply",accentColor:"cream",avatarImage:pt.wendyWerve}],relatedUseCases:[{title:"Campaign Follow-Up Tracker",description:"A miniapp that shows which campaign responders got worked, how fast, and which high-intent leads are still waiting on a first touch."},{title:"Multi-Threading Coaching Dashboard",description:"Weekly view of contacts per deal by team, region, and rep, built as a miniapp on Upside's buying-group detection.",customer:"Dscout"},{title:"Win-Back Kit Generator",description:"Batch-generate re-engagement one-pagers for closed-lost accounts and hand them to the team as a living internal tool."},{title:"Account Health Board",description:"A team-specific view of sentiment, engagement, and risk signals across the book, refreshed continuously from calls and emails."}],faqs:[{question:"Do we need engineers to build a miniapp?",answer:"No. Miniapps are typically built by GTM operators using the Upside MCP with an AI agent. If you can describe the tool, you can build the first version of it."},{question:"Who can see or edit an app once it's published?",answer:"You decide per app. Apps default to private (creator-only) while you build, then you publish with independent view and edit permissions: the whole organization, admins only, or specific people. Everything stays inside your Upside workspace and follows your organization's authentication."},{question:"How do I update an app without breaking it for the team?",answer:"Versions move through draft, sealed, then active. The team keeps using the active version while you iterate on a draft, so nothing changes for them until you promote the next version."},{question:"What happens when the data changes?",answer:"Nothing breaks. Apps query Upside's continuously refreshed data with live SQL through the SDK rather than a frozen export, so they stay current without re-publishing."},{question:"Is this a replacement for our BI tool?",answer:"For a lot of one-team workflows, it is in practice: requests that would have waited in a BI backlog become apps the team ships themselves. Company-wide reporting can stay wherever it lives today."}],cta:{headline:"Ship the internal tool your team asked for",subhead:"See how teams build and publish miniapps on their own GTM data in a 30-minute walkthrough."}},"campaign-intelligence":{hero:{eyebrow:"Upside for",headline:"Know which campaigns actually work",subhead:"Roll every channel up into the integrated campaign it belongs to, score each program on pipeline instead of opens, and get clear keep, optimize, and stop calls, even when campaign membership is incomplete."},heroVisual:"campaign-overview",embeddedApp:"integrated-campaign-performance",features:[{heading:"Score every campaign on pipeline, not opens",body:"Open rates and click counts don't tell you which campaigns earned their budget. Use Upside to give each campaign a scorecard that runs all the way down the funnel: members, qualified leads, opps created, opps that moved to a real stage, pipeline originated, and revenue won, so you can see what a program actually contributed instead of how many people opened an email.",accentColor:"green-light",visualChip:"Pipeline scorecard",visualType:"campaign-scorecard"},{heading:"Roll every channel up into one integrated campaign",body:"Real campaigns run across email, events, paid, and content at once, but your MAP and CRM report each channel in its own silo. Upside enables you to roll those channels up into the integrated program they belong to, then drill into any single channel's contribution underneath it. You get the program-level number for planning and the channel-level detail for optimization, in the same view.",accentColor:"cream",visualChip:"Integrated rollup",visualType:"campaign-rollup"},{heading:"Compare programs side by side",body:"Deciding where next quarter's budget goes means comparing programs fairly, not reading six different dashboards. Use Upside to put every campaign in one comparison: pipeline per program, cost efficiency, and how far each one pushed deals, so the strongest programs are obvious and the underperformers have nowhere to hide.",accentColor:"blue-soft",visualChip:"Program compare",visualType:"program-comparison"},{heading:"Keep, optimize, or stop, from two years of evidence",body:"Most teams cut campaigns on a hunch the week budgets are due. Build a miniapp on the Upside MCP to run a multi-year retrospective on every campaign and get a verdict for each (keep, optimize, or stop) based on real engagement and the pipeline it influenced afterward, not the activity it generated in the moment. A defensible answer you can take into the budget conversation.",accentColor:"green-soft",visualChip:"Keep or cut",visualType:"campaign-verdict"}],spotlight:{quote:"The challenge we were trying to solve was essentially annual planning, getting a good sense of where our pipeline was coming from, where to double down as we were thinking about budget allocation for the year ahead.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",caseStudySlug:"assembled-from-attribution-guesswork-to-pipeline-surge",heroImage:"/images/assembled-logo-black.png",heroImageIsLogo:!0,companyLogo:"/images/assembled-logo-black.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when campaign performance is measurable",items:[{headline:"Allocate budget on contribution, not opens",body:"Move spend toward the programs that actually originate and accelerate pipeline. The kind of reallocation you can only justify when every campaign is scored the same way, all the way to revenue."},{headline:"See the integrated campaign, not the channel silos",body:"Stop stitching email, events, paid, and content together by hand. Each program rolls up into one number, with the channel detail still underneath when you need to optimize."},{headline:"Make the keep/optimize/stop call with confidence",body:"Cut and double down based on a multi-year view of what each campaign influenced, instead of guessing the week the budget is due."}],footnote:{text:"Assembled found events drove ~20x more pipeline per opportunity than other sources such as paid, the kind of gap that only shows up when every program is measured the same way.",caseStudySlug:"assembled-from-attribution-guesswork-to-pipeline-surge",caseStudyLabel:"Read the Assembled case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"Marketing automation campaign reports and BI cuts stop at the activity that got logged. Upside scores campaigns on the pipeline they actually influenced, rolls fragmented channels into integrated programs, and works even when campaign membership is incomplete.",points:["Unlike marketing-automation campaign reports (Marketo, HubSpot, Pardot) that count opens, clicks, and members, Upside scores each campaign all the way to opps, pipeline, and won revenue in one funnel view.","Unlike BI dashboards (Looker, Power BI, Tableau) that need quarters of ETL and still drop call and email context, Upside rolls channels into integrated campaigns on data you have today, with the channel detail still drillable underneath.","Unlike first/last-touch campaign attribution that depends on clean membership, Upside still credits a campaign when the list upload is late or incomplete, by reading the touchpoints from email, calendar, and call data.","Unlike per-channel point tools that each report their own slice, Upside compares email, events, paid, and content in one apples-to-apples framework so budget decisions don't require six dashboards.","Unlike a one-time agency audit, the Upside MCP and miniapps re-run the keep/optimize/stop retrospective on live data whenever you need it, not once a year."]},testimonials:[{quote:"I had the data to make the case: double down on events. We could see the impact these conversations were having on our bottom line and made the case to invest more.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",accentColor:"green-light",avatarImage:pt.lindseyMarymont},{quote:"This level of granularity was simply not feasible before. We can compare, like, do we have better luck in New York vs. Minneapolis. Is it worth going back to Minneapolis next year?",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",accentColor:"cream",avatarImage:pt.charlieFlanagan}],relatedUseCases:[{title:"Integrated Campaign Rollup",description:"Roll channels into the program they belong to and track members, qualified leads, opps, pipeline, and won revenue per program and per channel in one view."},{title:"Keep / Optimize / Stop Retrospective",description:"A multi-year verdict on every campaign, based on post-engagement pipeline influence rather than 
3580in-the-moment activity.",customer:"Comply"},{title:"Revenue Attribution",description:"Once campaigns are scored, attribute the full multi-touch journey behind them on one clean foundation, out of the box or modeled your way."},{title:"Event & Field Marketing Efficiency",description:"Bring events into the same campaign comparison, including the in-cycle influence and referral effects your CRM never credited."}],faqs:[{question:"How is this different from our marketing automation's campaign reports?",answer:"Those reports count members, opens, and clicks. Upside scores each campaign on what it actually contributed to pipeline and revenue, rolls fragmented channels into the integrated program they belong to, and still credits a campaign when membership is incomplete."},{question:"What if our campaign membership is messy or incomplete?",answer:"That's expected. Upside reconstructs who really engaged from emails, meeting invites, and call transcripts, so a campaign still gets credit even when the list upload was late or never happened."}],cta:{headline:"Stop guessing which campaigns to cut",subhead:"See your real campaign performance on your own data in a 30-minute walkthrough."}},"content-creation-performance":{hero:{eyebrow:"Upside for",headline:"Create content that actually moves deals",subhead:"Find website-ready proof in your own customer calls, see which content actually influences pipeline, and decide what to write next from what's already worked, instead of guessing."},heroVisual:"content-overview",embeddedApp:"prospect-question-themes",features:[{heading:"Find website-ready quotes in your own calls",body:"The best proof you have is already sitting in your meeting transcripts, you just can't find it. Use Upside to surface website-ready customer quotes straight from your calls: the line where a customer described the problem in their own words, the moment they named the result. Approved language, attributed to the right person, without combing through hours of recordings.",accentColor:"green-light",visualChip:"Quote finder",visualType:"customer-quote-find"},{heading:"See which content actually influences pipeline",body:"Page views and downloads can't fully tell you whether a piece helped close anything. Upside enables you to tie content to the deals it touched: which assets show up in opportunities that progress, which pages get shared inside the buying group, which content recurs in won deals versus lost ones, so you can rank your library by influence on pipeline, not traffic.",accentColor:"cream",visualChip:"Content influence",visualType:"content-influence-rank"},{heading:"Know what to write next, from what's worked",body:"Your content calendar shouldn't be built on opinion. Use Upside to find the questions buyers keep raising on calls that you have no page for yet, and to benchmark new ideas against how similar assets actually performed. You write the next piece because the demand and the precedent are both already in your data.",accentColor:"blue-soft",visualChip:"What to write",visualType:"content-gap-queue"},{heading:"Turn an approved brief into a first draft",body:"Once you know what to write, every asset still starts from a blank page. Use the Upside MCP and Deep Research Agents to turn a brief into a first draft of a case study, landing page, or sales one-pager: it pulls the real customer quotes, proof points, and competitive framing from your calls and pipeline, then assembles them into the structure you specified, so your team edits and ships instead of writing from scratch.",accentColor:"green-soft",visualChip:"Brief to draft",visualType:"content-draft-pipeline"}],spotlight:{quote:"Things that used to take me hours to pull, I'm getting them in Upside in minutes. Instead of having to pick what questions to ask based on how long it will take to get a verifiable answer, with a quick MCP search, I'm uncovering issues I didn't even know existed.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",caseStudySlug:"assembled-from-attribution-guesswork-to-pipeline-surge",heroImage:"/images/assembled-logo-black.png",heroImageIsLogo:!0,companyLogo:"/images/assembled-logo-black.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when content is measurable",items:[{headline:"Proof on demand, in your customers' words",body:"Pull website-ready quotes and case-study material from real calls in minutes, instead of scheduling interviews and waiting on approvals."},{headline:"A content library ranked by influence",body:"Know which assets actually help deals progress, so you can retire what nobody uses and double down on what closes."},{headline:"A calendar built on demand, not opinion",body:"Write the pages buyers are already asking for, prioritized by real customer voice and the past performance of similar content."}],footnote:{text:"Assembled used the Upside MCP to uncover issues they didn't even know existed, the same approach surfaces the content gaps hiding in your customer conversations.",caseStudySlug:"assembled-from-attribution-guesswork-to-pipeline-surge",caseStudyLabel:"Read the Assembled case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"Web analytics and SEO tools report traffic and rankings; CMS reporting stops at the page. Upside ties content to the pipeline it influenced and mines your own calls for the proof and the topics worth writing.",points:["Unlike web analytics (GA, Heap) that stop at sessions and bounce rate, Upside ties content engagement to the opps it touched, including pages shared inside the buying group that never generated a tracked click.","Unlike SEO platforms (Ahrefs, Semrush) that rank you on search volume, Upside ranks content by influence on real pipeline and by the questions your actual buyers raise on calls.","Unlike CMS and content analytics that end at the page, Upside connects an asset to whether the deals it touched progressed or stalled, across won versus lost.","Unlike manual quote-mining and customer interviews, Upside surfaces website-ready, attributable customer language straight from meeting transcripts in minutes.","Unlike a content calendar built on opinion, the Upside MCP grounds the next-topic decision in unmet customer questions and the measured performance of similar assets."]},testimonials:[{quote:"I've been in marketing for 10+ years, and I've never been able to get a clear picture of the buyer journey before Upside.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",accentColor:"green-light",avatarImage:pt.lindseyMarymont},{quote:"What used to take 2-3 hours I can now do in a few clicks, and it's made me a smarter operations person than I've ever been in my career.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",accentColor:"cream",avatarImage:pt.charlieFlanagan}],relatedUseCases:[{title:"Customer Quotes from Transcripts",description:"Website-ready testimonials surfaced directly from meeting transcripts, attributed and approval-ready."},{title:"Content Performance Tied to Pipeline",description:"Measure which content drives pipeline across every format: web pages, email attachments, podcast mentions, and LLM citations."},{title:"AEO (AI Engine Optimization) Measurement",description:"See what buyers ask AI engines about you, then prioritize content and messaging on that real search intent."}
3580,{title:"SEO Topic Discovery from Conversations",description:"Mine call transcripts for the questions AI engines would answer, then build a content plan on real customer language."}],faqs:[{question:"How does Upside find quotes in our calls?",answer:"Upside reads your meeting transcripts and surfaces website-ready customer language: the moment a customer named the problem or the result, attributed to the right person, so you can pull proof without combing through recordings."},{question:"How can Upside tell which content influenced a deal?",answer:"Upside connects content engagement to the opportunities it touched: pages visited, assets opened, and content referenced on calls and in emails across the buying group. You see which assets recur in deals that progress versus deals that stall."},{question:"Do we need clean UTM tagging or a perfect CMS setup first?",answer:"No. Upside works with the messy, incomplete data you already have. It infers content touches from emails, calls, and meetings even when nothing was tagged, so the picture isn't limited to clicks you happened to track."}],cta:{headline:"Write the content your pipeline is asking for",subhead:"See content performance and customer-voice topics on your own data in a 30-minute walkthrough."}},"product-marketing":{hero:{eyebrow:"Upside for",headline:"Know what messaging actually lands",subhead:"Hear across every sales call to see which talk tracks move deals, which objections and competitors keep coming up, and which content and events historically perform, so positioning rests on evidence, not opinion."},heroVisual:"messaging-overview",embeddedApp:"messaging-themes",features:[{heading:"See which messaging lands in sales calls",body:"You can't sit in on every call, so messaging decisions get made on anecdote. Use Upside to hear across all of them at once: which talk tracks and value props show up in deals that progress, which ones correlate with stalls, and how closely reps stick to the positioning you shipped. The narrative you take to the next launch is backed by what actually moved deals.",accentColor:"green-light",visualChip:"Message landing",visualType:"messaging-lands"},{heading:"Hear every objection and competitor mention at scale",body:"The objections that kill deals and the competitors that keep coming up are buried in hundreds of conversations. Upside enables you to surface and rank them across won versus lost deals: the recurring objection your battlecard doesn't answer, the competitor framing that keeps winning, so you can sharpen positioning where it's actually losing.",accentColor:"cream",visualChip:"Objection radar",visualType:"objection-rank"},{heading:"Know which content and events actually carried the message",body:"You greenlight formats on gut and last year's calendar, with no real evidence of which ones moved your market. Use Upside to treat content and events as measurable channels and compare them over time: which posts, formats, and events drove real pipeline, and which only drove impressions. Back the formats that carry your narrative, not the ones that fill the calendar.",accentColor:"blue-soft",visualChip:"Channel compare",visualType:"channel-performance-compare"},{heading:"Treat founder and exec thought leadership as a channel",body:"Executive posts, podcast appearances, and long-form thought leadership are real pipeline drivers that no dashboard credits. Upside enables you to make founder and exec content a measurable channel of its own, so the team can see its influence on deals and decide how much to invest in it, the same way you'd evaluate any other program.",accentColor:"green-soft",visualChip:"Exec as channel",visualType:"exec-channel"}],spotlight:{quote:"We are like kids in a candy shop digging into accounts and opportunities.",name:"Wendy Werve",title:"CMO",company:"Comply",caseStudySlug:"comply-from-unfiltered-salesforce-data-to-marketing-intelligence",heroImage:"/images/comply-logo.png",heroImageIsLogo:!0,companyLogo:"/images/comply-logo.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when messaging is evidence-based",items:[{headline:"Positioning grounded in what moved deals",body:"Ship messaging backed by the talk tracks that correlate with progression across hundreds of calls, not the ones that sounded good in a workshop."},{headline:"Battlecards that answer real objections",body:"Sharpen competitive and objection handling on the patterns that actually recur in won and lost deals, ranked by frequency and pipeline at stake."},{headline:"Investment where the evidence points",body:"See which content, events, and exec channels historically drove pipeline for your market, and fund the ones that earn it."}],footnote:{text:"Comply runs AI milestone analyses on every open and recently won opportunity (3,592 and counting), turning raw conversations into messaging insight impossible to read by hand.",caseStudySlug:"comply-from-unfiltered-salesforce-data-to-marketing-intelligence",caseStudyLabel:"Read the Comply case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"Conversation tools stop at the clip and survey-based message testing stops at the opinion. Upside ties what's said on calls (and what's published in market) to the deals it actually influenced.",points:["Unlike conversation intelligence (Gong, Chorus, Fireflies) that stop at a clip or a tracker, Upside ties talk tracks, objections, and competitor mentions to the opps and stage moves they correlate with across the whole book.","Unlike survey- or panel-based message testing, Upside measures messaging against real buyer conversations and real pipeline outcomes, not stated preference.","Unlike social and content analytics that report impressions and engagement, Upside treats posts, events, and exec content as channels and ties them to influenced pipeline.","Unlike battlecard tools fed by rep memory, Upside surfaces the objections and competitor framings that actually recur in won versus lost deals, ranked by pipeline at stake.","Unlike a quarterly win-loss interview program, the Upside MCP reads every call, email, and meeting continuously, so messaging insight is always current rather than a sampled snapshot."]},testimonials:[{quote:"I've been in marketing for 10+ years, and I've never been able to get a clear picture of the buyer journey before Upside.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",accentColor:"green-light",avatarImage:pt.lindseyMarymont},{quote:"It helped us validate that what we thought was true was actually true. We were just not seeing the impact of the ADR function like we needed to.",name:"Amy Wellersdick",title:"Director of Marketing Ops",company:"Syndio",accentColor:"cream",avatarImage:pt.amyWellersdick}],relatedUseCases:[{title:"Messaging Adherence vs. Conversion",description:"See how closely reps stick to your positioning and how adherence tracks against stage conversion across the team."},{title:"Win-Loss Intelligence",description:"Understand why deals really won or lost by reading every conversation, not just the CRM closed-lost reason."},{title:"Content Creation & Performance",description:"Turn the messaging that lands into the content calendar, and measure which assets actually influence pipeline."},{title:"Executive Thought Leadership Impact",description:"Create a dedicated attribution channel for founder and exec content, podcasts, and long-form posts.",customer:"Graphite"}],faqs:[{question:"How is this different from our conversation intelligence tool?",answer:"Conversation tools surface clips and track keywords on individual calls. Upside reads across all of them and connects what's said (talk tracks, objections, competitor mentions) to the opps and stage moves they correlate with, so messaging becomes measurable against pipeline."},{question:"Can Upside compare messaging across reps and segments?",answer:"Yes. Upside can break messaging adherence and outcomes down by rep, team, segment, and competitor, so you can see where the positioning is landing and where it's being dropped or improvised."},{question:"Where does the content and event performance data come from?",answer:"From the same unified foun
3580dation: content touches and event signals pulled from web activity, emails, calls, and meetings, tied to the pipeline they influenced, so posts, events, and exec content can be compared as channels rather than vanity metrics."}],cta:{headline:"Build messaging on evidence, not opinion",subhead:"See what's actually landing in your sales calls in a 30-minute walkthrough."}},"win-loss-intelligence":{hero:{eyebrow:"Upside for",headline:"Know why you really win and lose",subhead:"The dropdown a rep clicked on the way out isn't why the deal died. Reconstruct the real reason every deal closed from the calls and emails themselves, see the patterns across every loss, and route each finding to the team that can act on it."},heroVisual:"win-loss-overview",embeddedApp:"lost-deals-analysis",features:[{heading:"Reconstruct the real reason you won or lost, from the deal, not the picklist",body:"The one-word reason a rep picked from a dropdown isn't necessarily why the deal died. Use Upside to reconstruct the actual reason from the calls, emails, and threads: where momentum broke, the objection that never got answered, the moment a champion went quiet. Evidence-backed, per deal, not a one-word guess.",accentColor:"green-light",visualChip:"Real reasons",visualType:"deal-reason-reconstruct"},{heading:"Stop guessing from anecdotes: see the patterns across every loss",body:"One lost deal is a story; a hundred is a signal. Upside enables you to cluster your closed-lost across the whole book: recurring objections, pricing pushback, the stage where deals stall, the persona that kills momentum, ranked by how often they actually cost you revenue, so you fix the pattern instead of reacting to the last deal.",accentColor:"cream",visualChip:"Loss patterns",visualType:"loss-patterns"},{heading:"Build competitive intelligence from your own deals",body:"You already know who you lose to, you just can't see the pattern. Query your data with the Upside MCP to surface which competitors show up, where they win and where they don't, the objections that come with each, and the conditions that actually flipped deals back your way.",accentColor:"blue-soft",visualChip:"Competitive intel",visualType:"competitive-scorecard"},{heading:"Build win-loss views that end in action, not a slide deck",body:"Most win-loss dies in a quarterly readout. Use Upside to route findings where they change outcomes: the messaging PMM should sharpen, the objection handling Sales needs, the gaps Product should hear, each with the deal count it's costing and the evidence attached, so the change actually gets prioritized.",accentColor:"purple-soft",visualChip:"Action, not decks",visualType:"win-loss-routing"}],spotlight:{quote:"It helped us validate that what we thought was true was actually true. We were just not seeing the impact of the ADR function like we needed to.",name:"Amy Wellersdick",title:"Director of Marketing Ops",company:"Syndio",caseStudySlug:"syndio-driving-strategic-gtm-decisions-with-upside",heroImage:"/images/logo-syndio.png",heroImageIsLogo:!0,companyLogo:"/images/logo-syndio.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when win-loss runs on evidence",items:[{headline:"A real reason behind every closed deal",body:"Per-deal reasons reconstructed from the actual record (calls, emails, threads) instead of a one-word picklist a rep filled in on the way out the door."},{headline:"Patterns you can act on, not anecdotes",body:"Recurring objections, competitor displacement, and stage drop-off ranked across the whole book by how often they cost you revenue, so you fix the pattern instead of the last deal."},{headline:"Findings that reach the people who can fix them",body:"Every insight routed to PMM, Sales, or Product with the deal count attached, so win-loss ends in a change that ships, not a deck nobody opens."}],footnote:{text:"Syndio used Upside to validate what was really driving its GTM motion, turning assumptions into evidence leadership could act on.",caseStudySlug:"syndio-driving-strategic-gtm-decisions-with-upside",caseStudyLabel:"Read the Syndio case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"Win-loss survey vendors interview a handful of buyers after the fact, and conversation tools stop at the clip. Upside reconstructs why every deal closed from your own record, cluster
3580s the patterns across the whole book, and routes each finding to the team that owns the fix.",points:["Unlike win-loss survey firms (Clozd, DoubleCheck) that interview a small sample weeks later, Upside reconstructs the reason for every closed deal from the calls and emails you already have, with no scheduling, no recall bias, full coverage.","Unlike CRM closed-lost picklists that capture a one-word guess a rep clicked on the way out, Upside infers the real reason from where momentum broke in the actual conversation, with the evidence behind it.","Unlike conversation intelligence (Gong, Chorus, Fireflies) that surfaces a single call clip, Upside clusters objections, competitors, and stage drop-off across the whole book and ties them to win rates.","Unlike static win-loss decks that die in a quarterly readout, Upside routes each finding to PMM, Sales, or Product with the deal count it's costing, so the change gets prioritized and shipped.","Unlike BI dashboards that end where structured fields end, Upside fuses CRM stages with unstructured call and email signal so the why behind win and loss is measurable, not anecdotal."]},testimonials:[{quote:"It helped us validate that what we thought was true was actually true. We were just not seeing the impact of the ADR function like we needed to.",name:"Amy Wellersdick",title:"Director of Marketing Ops",company:"Syndio",accentColor:"green-light",avatarImage:pt.amyWellersdick},{quote:"What used to take 2-3 hours I can now do in a few clicks, and it's made me a smarter operations person than I've ever been in my career.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",accentColor:"cream",avatarImage:pt.charlieFlanagan}],relatedUseCases:[{title:"Product Marketing",description:"Feed win-loss findings straight into positioning: which talk tracks move deals and which objections keep coming up, from every call."},{title:"Campaign Intelligence",description:"Connect the why-we-win patterns back to the campaigns and channels that sourced the winning deals."},{title:"Competitive Displacement Plays",description:"Turn head-to-head win-rate patterns into the objection handling and proof points that flip deals back your way."}],faqs:[{question:"Where does Upside get its data?",answer:"Upside builds on the data you already generate: call transcripts, email threads, meeting invites, and CRM activity, unified into one clean foundation. There's nothing new to log and no surveys to run, the evidence is already in your systems."},{question:"Does Upside replace our existing tools?",answer:"No. Upside sits on top of your CRM, conversation intelligence, and email, unifying the signals each captures in isolation. You keep your stack, and Upside connects it into one picture you can actually act on."},{question:"How quickly can we get value from Upside?",answer:"Upside connects to your existing systems and works with the messy, incomplete data you already have, so core analysis is available in days, not quarters. Anything custom to how your teams work is built on that same foundation with the Upside MCP and miniapps."}],cta:{headline:"See why you really win and lose",subhead:"See reconstructed deal reasons, loss patterns, and competitive scorecards on your own closed deals in a 30-minute walkthrough."}},"pipeline-forecasting":{hero:{eyebrow:"Upside for",headline:"Forecast the number you can actually defend",subhead:"Forecast from what's really happening inside every open deal (the calls, the emails, the meetings), not the stage a rep last touched. See what's on track, what's slipping, and why, so the number you commit holds up in the room."},heroVisual:"pf-overview",embeddedApp:"open-deals-forecast",features:[{heading:"Forecast from the deal, not the stage field",body:"Stage is a rep's opinion entered on a Friday; it's not what the buyer actually did. Use Upside to score every open deal on the real signals (who's engaged, how the last few calls went, whether momentum is building or going quiet), so your forecast reflects what's happening in the deal instead of what got typed into the CRM.",accentColor:"green-light",visualChip:"Deal-level signal",visualType:"pf-signal-vs-stage"},{heading:"See which deals are actually slipping, early",body:"By the time a deal slides a quarter, the warning signs were in the record weeks ago: a champion who went quiet, a stakeholder who never showed, a next step that keeps moving. Upside enables you to catch those signals across the whole book, so slipping deals surface while there's still time to act, not on the last day of the quarter.",accentColor:"cream",visualChip:"Slip risk",visualType:"pf-slip-early-warning"},{heading:"Roll every rep's pipeline into one number you trust",body:"A bottoms-up forecast is only as good as the deal data under it, and reps grade their own homework. Use Upside to roll each rep's deals up into a single forecast built on evidence, with the deal-level reasoning still visible underneath, so you can commit a number and show your work when leadership asks how you got there.",accentColor:"blue-soft",visualChip:"Bottoms-up roll-up",visualType:"pf-bottoms-up-rollup"},{heading:"Pressure-test the forecast before the board call",body:"The riskiest moment is committing a number you can't defend. Build a miniapp on the Upside MCP to stress-test the forecast: pull the deals carrying the most risk, model best/likely/worst on real signal instead of gut feel, and walk into the review with the scenarios already run.",accentColor:"green-soft",visualChip:"Scenario view",visualType:"pf-scenario-bars"}],spotlight:{quote:"Real life is messy. Enterprise cycles are messy. Upside accurately reflects that messy reality, which I think is rare and was impossible before.",name:"Stephen Daniels",title:"VP, GTM & Strategic Operations",company:"Cresta",caseStudySlug:"cresta-from-attribution-to-ai-deep-research",heroImage:"/images/cresta-black.svg",heroImageIsLogo:!0,companyLogo:"/images/cresta-black.svg"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when the forecast runs on evidence",items:[{headline:"A number you can defend line by line",body:"Every deal in the forecast is backed by what actually happened in it, so when leadership asks why a deal is committed, the evidence is already attached."},{headline:"Slippage you catch, not slippage you explain",body:"At-risk deal
3580s surface weeks earlier, from real signal instead of a stalled stage, so you're intervening while the quarter is still winnable."},{headline:"One forecast instead of six spreadsheets",body:"Each rep's pipeline rolls up on the same evidence-based logic, with deal-level reasoning still drillable underneath when you need to inspect a call."}],footnote:{text:"Cresta made Upside the engine of every Quarterly Business Review, turning messy enterprise deal cycles into a picture leadership could actually trust.",caseStudySlug:"cresta-from-attribution-to-ai-deep-research",caseStudyLabel:"Read the Cresta case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"CRM forecasts inherit the stage field, and forecasting tools re-score the same structured pipeline. Upside forecasts from the conversation record itself, so the number reflects what's happening in the deal, not what got typed in.",points:["Unlike CRM roll-up forecasts (Salesforce, HubSpot) that trust the stage a rep last set, Upside scores each deal on the calls, emails, and meetings that actually happened.","Unlike forecasting tools (Clari, BoostUp) that re-weight the same structured pipeline fields, Upside reads the unstructured signal those fields never capture: quiet champions, missing stakeholders, slipping next steps.","Unlike a spreadsheet built by hand each Friday, an Upside miniapp re-runs the forecast on live data whenever you need it, with the deal-level evidence attached.","Unlike conversation intelligence (Gong, Chorus) that surfaces a single call, Upside rolls call-level signal across the whole book into one committable number."]},testimonials:[{quote:"What used to take 2-3 hours I can now do in a few clicks, and it's made me a smarter operations person than I've ever been in my career.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",accentColor:"green-light",avatarImage:pt.charlieFlanagan},{quote:"Things that used to take me hours to pull, I'm getting them in Upside in minutes. With a quick MCP search, I'm uncovering issues I didn't even know existed.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",accentColor:"cream",avatarImage:pt.lindseyMarymont}],relatedUseCases:[{title:"Deal Execution & Coaching",description:"Once you can see which deals are slipping, turn each one into a runbook with the next best move to keep it on track."},{title:"Win-Loss Intelligence",description:"Feed the forecast with the real reasons deals close, reconstructed from the calls and emails instead of a picklist.",customer:"Cresta"},{title:"Revenue Attribution",description:"Tie the pipeline you're forecasting back to the channels and touches that created it, on one clean foundation."},{title:"Pipeline Generation",description:"Keep the forecast fed by pointing demand at the accounts already showing real buying intent."}],faqs:[{question:"How is this different from our CRM's forecast?",answer:"The CRM forecast trusts the stage a rep last set. Upside scores each deal on what actually happened in it (the calls, emails, and meetings), so slipping deals surface early and the committed number is backed by evidence you can show."},{question:"Do we have to change how reps log deals?",answer:"No. Upside reads the conversation record you already capture, so it works with the messy, incomplete CRM data you have today. Reps keep working the way they do; the forecast just stops depending on a field being perfect."}],cta:{headline:"Commit a forecast you can defend",subhead:"See your open pipeline scored on real deal signal in a 30-minute walkthrough."}},"pipeline-generation":{hero:{eyebrow:"Upside for",headline:"Point demand at the accounts already in-market",subhead:"Surface the buying signals hiding in your calls, inbound, and product usage, so you build pipeline against accounts showing real intent instead of spraying the whole list. Know who's in-market, what they care about, and where to focus next."},heroVisual:"pg-overview",embeddedApp:"intent-signals",features:[{heading:"Find the accounts already showing intent",body:"The best pipeline is hiding in signals you already have: a competitor named on a call, a pricing page viewed three times, a champion who just changed jobs. Use Upside to pull those buying signals together across sources and rank accounts by how in-market they actually are, so your team works the ones ready to move first.",accentColor:"green-light",visualChip:"Intent ranking",visualType:"pg-intent-ranking"},{heading:"Know what each account actually cares about",body:"A hot account is useless if the outreach is generic. Upside enables you to see the themes an account keeps raising (the problem they described, the competitor they're comparing, the outcome they need), so the first touch lands on what they care about instead of a templated sequence.",accentColor:"cream",visualChip:"Account themes",visualType:"pg-account-themes"},{heading:"Turn inbound into pipeline, not a lead pile",body:"Most inbound dies in a routing rule. Use Upside to explore inbound the way it really behaves (which leads sit inside accounts already showing intent, which repeat visitors your forms never captured), so SDRs spend their day on the inbound that's actually close to buying, not the top of an unsorted list.",accentColor:"blue-soft",visualChip:"Inbound explorer",visualType:"pg-inbound-router"},{heading:"Build the target list on evidence, refresh it on demand",body:"Target lists go stale the day they're built. Build a miniapp on the Upside MCP that rebuilds the in-market list from live signal whenever you need it, so the accounts your team works this week reflect the intent showing up this week, not a list someone exported last quarter.",accentColor:"green-soft",visualChip:"Live target list",visualType:"pg-live-target-list"}],spotlight:{quote:"Things that used to take me hours to pull, I'm getting them in Upside in minutes. Instead of picking questions based on how long the answer takes, with a quick MCP search I'm uncovering issues I didn't even know existed.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",caseStudySlug:"assembled-from-attribution-guesswork-to-pipeline-surge",heroImage:"/images/assembled-logo-black.png",heroImageIsLogo:!0,companyLogo:"/images/assembled-logo-black.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when demand runs on real intent",items:[{headline:"A pipeline motion aimed at in-market accounts",body:"Reps and 
3580SDRs spend their time on accounts showing real buying signal, instead of working an alphabetized list from the top down."},{headline:"Outreach that lands on what buyers care about",body:"Every touch is grounded in the themes an account is actually raising, so the first message earns a reply instead of a delete."},{headline:"A target list that reflects this week, not last quarter",body:"The in-market list rebuilds from live signal on demand, so demand generation is always pointed at where the intent actually is."}],footnote:{text:"Assembled uncovered 30k+ hidden contacts and a new discovery channel with Upside, contributing to a 35% pipeline lift.",caseStudySlug:"assembled-from-attribution-guesswork-to-pipeline-surge",caseStudyLabel:"Read the Assembled case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"Intent vendors sell you third-party signal about anonymous companies; your CRM only knows accounts once they're already deals. Upside reads the first-party signal you already own (calls, inbound, usage) and ranks accounts by intent you can actually verify.",points:["Unlike third-party intent providers (Bombora, 6sense, ZoomInfo) that infer surges from anonymized web activity, Upside ranks accounts on first-party signal you can inspect: the calls, emails, and product usage you already capture.","Unlike your CRM, which only recognizes an account once a rep has created the opportunity, Upside surfaces intent from conversations and inbound before a deal exists.","Unlike a static ICP list exported once a quarter, an Upside miniapp rebuilds the in-market list from live signal whenever you need it.","Unlike lead-scoring rules that fire on form fills, Upside reads the themes an account is actually raising, so outreach is relevant, not just timely."]},testimonials:[{quote:"It helped us validate that what we thought was true was actually true. We were just not seeing the impact of the ADR function like we needed to.",name:"Amy Wellersdick",title:"Director of Marketing Ops",company:"Syndio",accentColor:"green-light",avatarImage:pt.amyWellersdick},{quote:"We are like kids in a candy shop digging into accounts and opportunities.",name:"Wendy Werve",title:"CMO",company:"Comply",accentColor:"cream",avatarImage:pt.wendyWerve}],relatedUseCases:[{title:"ABM Measurement",description:"Once you know which accounts are in-market, measure how far the program moves them and coordinate marketing and sales on one account view."},{title:"Deal Execution & Coaching",description:"Hand in-market accounts to reps with the context and next best move already attached.",customer:"Comply"},{title:"Ask Your GTM Data",description:"Ask which accounts are showing intent this week in plain language and get an evidence-backed answer."},{title:"Pipeline Forecasting",description:"Feed the forecast with pipeline built against accounts that actually intend to buy."}],faqs:[{question:"Do we need a third-party intent data subscription for this?",answer:"No. Upside ranks accounts on the first-party signal you already own (calls, inbound, product usage), so you can verify why an account is flagged instead of trusting an anonymized surge score. Third-party signal can layer on top, but it isn't required."},{question:"How does this reach reps day to day?",answer:"Build a miniapp on the Upside MCP that rebuilds the in-market list from live signal, or ask directly in the AI tool your team already uses. Either way, reps get a ranked list with the reason each account made it, not a raw export."}],cta:{headline:"Build pipeline against real intent",subhead:"See your in-market accounts ranked on your own signal in a 30-minute walkthrough."}},"deal-execution":{hero:{eyebrow:"Upside for",headline:"Give every rep the next best move on every deal",subhead:"Turn every open deal into a runbook: what's been said, who's engaged, what's stalling, and the next step that moves it forward. Coach the whole team on evidence from real conversations, not a manager's memory of the last one-on-one."},heroVisual:"de-overview",embeddedApp:"deal-runbook",features:[{heading:"A runbook for every open deal",body:"Reps carry a dozen deals and remember the details of two. Use Upside to give each deal a living runbook: the commitments made, the stakeholders in and out, the risks showing up in the last few calls, and the specific next step to take, so every rep works every deal like it's the one they know best.",accentColor:"green-light",visualChip:"Deal runbook",visualType:"de-deal-runbook"},{heading:"Catch the deal-killer before the deal dies",body:"Deals rarely die loudly. A champion goes quiet, a competitor gets named, a next step slips twice. Upside enables you to surface those risks across the book as they happen, with the evidence attached, so managers coach the deals that need it now instead of finding out at close.",accentColor:"cream",visualChip:"Risk signal",visualType:"de-risk-alerts"},{heading:"Coach on what actually happened, not a recollection",body:"One-on-ones run on memory and the last call the manager happened to hear. Use Upside to coach from the real record: where deals stall for this rep, which objections they keep hitting, which moves work when they make them, so coaching targets the pattern instead of the anecdote.",accentColor:"blue-soft",visualChip:"Rep patterns",visualType:"de-rep-patterns"},{heading:"Standardize the winning play across the team",body:"Your best rep has a motion that works; the rest are guessing. Build a miniapp on the Upside MCP that identifies the plays that actually move deals in your business and puts the recommended next move in front of every rep on every deal, so the winning motion scales past one person.",accentColor:"green-soft",visualChip:"Winning plays",visualType:"de-winning-plays"}],spotlight:{quote:"We are like kids in a candy shop digging into accounts and opportunities.",name:"Wendy Werve",title:"CMO",company:"Comply",caseStudySlug:"comply-from-unfiltered-salesforce-data-to-marketing-intelligence",heroImage:"/images/comply-logo.png",heroImageIsLogo:!0,companyLogo:"/images/comply-logo.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when every deal has a next step",items:[{headline:"Reps that always know the next move",body:"Every open deal comes with a runbook grounded in what the buyer actually said and did, so no deal drifts because a rep lost the thread."},{headline:"Coaching that targets the pattern, not the anecdote",body:"Managers coach from the real record of how a rep's deals actually go, so time goes to the habit that's costing pipeline, not the last call they overheard."},{headline:"The best rep's motion, running across the team",body:"The plays that actually win in your business get identified and put in front of every rep, so the winning motion scales past one person."}],footnote:{text:"Comply unified 27.5M+ touchpoints across 18 users, turning unfiltered Salesforce data into intelligence their team could act on.",caseStudySlug:"comply-from-unfiltered-salesforce-data-to-marketing-intelligence",caseStudyLabel:"Read the Comply case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"Conversation tools surface a clip; sales engagement tools track activity. Upside turns the full conversation record into a per-deal runbook and coaches on the patterns across a rep's whole book.",points:["Unlike conversation intelligence (Gong, Chorus, Fireflies) that scores individual calls, Upside assembles every call, email, and meeting on a deal into one runbook with the next best move.","Unlike sales engagement platforms (Outreach, Salesloft) that count activity, Upside reads whether the activity is actually moving the deal and flags the ones going quiet.","Unlike a manager's memory of the last one-on-one, Upside coaches from the real record of how a rep's deals go, across the whole book, not the last call overheard.","Unlike a static playbook PDF, an Upside miniapp puts the plays that actually win in your business in front of every rep on every open deal."]},testimonials:[{quote:"Real life is messy. Enterprise cycles are messy. Upside accurately reflects that messy reality, which I think is rare and was impossible before.",name:"Stephen Daniels",title:"VP, GTM & Strategic Operations",company:"Cresta",accentColor:"green-light"},{quote:"What used to take 2-3 hours I can now do in a few clicks, and it's made me a smarter operations person than I've ever been in my career.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",accentColor:"cream",avatarImage:pt.charlieFlanagan}],relatedUseCases:[{title:"Pipeline Forecasting",description:"Once every deal has a truthful runbook, the roll-up becomes a forecast you can defend."},{title:"Win-Loss Intelligence",description:"Turn the deals that close into coaching by reconstructing the real reason each one won or lost.",customer:"Cresta"},{title:"Account Management",description:"Extend the runbook past the deal into the account: dossiers, win-back kits, and next-best plays."},{title:"Pipeline Generation",description:"Hand reps in-market accounts with context already attached, so execution starts on the front foot."}],faqs:[{question:"Does this replace our conversation intelligence tool?",answer:"No. Upside sits on top of the calls, emails, and CRM data you already capture (including from tools like Gong) and turns them into a per-deal runbook and coaching view. You keep your stack; Upside connects it into the next best move."},{question:"How does a rep actually see the runbook?",answer:"As a miniapp built on the Upside MCP, or by asking in the AI tool your team already uses. The runbook stays current because it's built on live data, not a snapshot someone updated by hand."}],cta:{headline:"Give every rep the next best move",subhead:"See a live deal runbook built on your own conversations in a 30-minute walkthrough."}},"account-based-marketing":{hero:{eyebrow:"Upside for",headline:"Prove your ABM program on real account progress",subhead:"Measure how far each target account has actually moved, which plays moved it, and the pipeline the program created. Coordinate marketing and sales on one account view, and reallocate to the accounts that respond instead of the ones that just clicked."},heroVisual:"abm-overview",embeddedApp:"enterprise-abm-tracker",features:[{heading:"Measure engagement across the whole buying group",body:"ABM dashboards score the contacts sitting in y
3580our CRM; the real buying group is always bigger than that. Use Upside to measure how deeply each target account is actually engaged across marketing, sales, and every channel, including the stakeholders your CRM never logged, so program health reflects real engagement instead of ad delivery.",accentColor:"green-light",visualChip:"Engagement depth",visualType:"abm-engagement-depth"},{heading:"See which accounts are actually progressing",body:"Touches and impressions don't tell you whether an account moved. Upside enables you to track how far each target account has advanced from cold to committed, so you can see which accounts the program is genuinely progressing and which have stalled, and put effort where it's actually working.",accentColor:"cream",visualChip:"Stage movement",visualType:"abm-stage-movement"},{heading:"Coordinate marketing and sales on the same account view",body:"ABM breaks when marketing and sales work from different pictures of the account. Use Upside to give both teams one view of who's engaged, what's landed, and what's next per account, so air cover and outbound hit the same stakeholders with the same message instead of talking past each other.",accentColor:"blue-soft",visualChip:"One account view",visualType:"abm-one-account-view"},{heading:"Prove the pipeline the program created",body:"Board conversations need a number, not activity. Build a miniapp on the Upside MCP that ties the ABM program to pipeline created, opportunities influenced, and revenue won, so you can prove the program's contribution and defend the budget with evidence instead of impressions.",accentColor:"green-soft",visualChip:"Program ROI",visualType:"abm-program-roi"}],spotlight:{quote:"It helped us validate that what we thought was true was actually true. We were just not seeing the impact of the ADR function like we needed to.",name:"Amy Wellersdick",title:"Director of Marketing Ops",company:"Syndio",caseStudySlug:"syndio-driving-strategic-gtm-decisions-with-upside",heroImage:"/images/logo-syndio.png",heroImageIsLogo:!0,companyLogo:"/images/logo-syndio.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when ABM runs on real measurement",items:[{headline:"Account coverage you can trust",body:"Engagement reflects who's really in the buying group (including the stakeholders your CRM never captured), so coverage isn't a comforting fiction."},{headline:"A clear read on which accounts are moving",body:"You can see how far each target account has progressed and which have stalled, so effort and budget flow to the accounts the program is actually advancing."},{headline:"ABM measured on progression, not impressions",body:"Prove which plays moved which accounts and how much pipeline the program created, then reallocate to the accounts that respond."}],footnote:{text:"Syndio used Upside to validate what was really driving its GTM motion and strategically restructured around the evidence.",caseStudySlug:"syndio-driving-strategic-gtm-decisions-with-upside",caseStudyLabel:"Read the Syndio case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"ABM platforms report the contacts and clicks they can see; your CRM only knows the stakeholders a rep logged. Upside recovers the real buying group from conversations and measures ABM on how far accounts actually progressed.",points:["Unlike ABM platforms (6sense, Demandbase, Terminus) that track known contacts and ad engagement, Upside recovers who's actually in the buying group from calls and email threads your CRM never captured.","Unlike vanity ABM dashboards that report reach and impressions, Upside ties the program to the pipeline it created and the accounts it actually advanced.","Unlike engagement scoring that stops at clicks and form fills, Upside measures how far each target account progressed and which plays moved it.","Unlike separate marketing and sales dashboards, an Upside miniapp gives both teams one account view so air cover and outbound hit the same stakeholders."]},testimonials:[{quote:"We are like kids in a candy shop digging into accounts and opportunities.",name:"Wendy Werve",title:"CMO",company:"Comply",accentColor:"green-light",avatarImage:pt.wendyWerve},{quote:"This level of granularity was simply not feasible before. We can compare, like, do we have better luck in New York vs. Minneapolis.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",accentColor:"cream",avatarImage:pt.charlieFlanagan}],relatedUseCases:[{title:"Pipeline Generation",description:"Choose the target accounts worth an ABM motion by starting from the ones already showing real intent.",customer:"Assembled"},{title:"Deal Execution & Coaching",description:"Turn account coverage into action with a per-deal runbook and the next thread to add."},{title:"Campaign Intelligence",description:"Roll ABM plays up into the integrated program they belong to and score them on pipeline, not clicks."},{title:"Account Management",description:"Extend coverage past the deal into the account with dossiers and next-best-play re
3580commendations."}],faqs:[{question:"How is this different from our ABM platform?",answer:"ABM platforms track the contacts and ad engagement they can see. Upside measures the real buying group from your calls and emails, tracks how far each account has progressed, and ties the program to pipeline created rather than impressions."},{question:"Can marketing and sales work from the same view?",answer:"Yes. That's the point. Build one account view as a miniapp on the Upside MCP so both teams see the same engaged stakeholders, what's landed, and what's next, instead of coordinating across two disconnected dashboards."}],cta:{headline:"Prove your ABM program on pipeline",subhead:"See account progression and program pipeline across your target accounts in a 30-minute walkthrough."}},"paid-media":{hero:{eyebrow:"Upside for",headline:"Spend on the paid media that creates pipeline",subhead:"Tie paid spend to the deals it actually influenced (including the touchpoints your pixels and platforms miss), so you can cut the campaigns that only look good in-platform and reinvest in the ones that create real pipeline."},heroVisual:"pm-overview",embeddedApp:"paid-media-impact",features:[{heading:"Tie paid spend to pipeline, not platform conversions",body:"Every ad platform reports itself as the hero, and the numbers never reconcile. Use Upside to tie paid spend to the deals it actually influenced in your CRM (pipeline created, opps progressed, revenue won), so you're optimizing to real business outcomes instead of a conversion each platform counts for itself.",accentColor:"green-light",visualChip:"Paid → pipeline",visualType:"pm-paid-to-pipeline"},{heading:"Credit the touches your pixels never saw",body:"Cookie loss, dark social, and a buyer who clicked on their phone but bought from their laptop all break platform attribution. Upside enables you to recover the paid touchpoints that landed in 'direct' or 'unknown' and tie them back to the deals they influenced, so paid media gets credit for the pipeline it actually drove instead of losing it to the void.",accentColor:"cream",visualChip:"Recovered touches",visualType:"pm-recovered-touches"},{heading:"Compare channels on cost per real opportunity",body:"Cost per lead flatters the channels that generate volume and punishes the ones that generate deals. Use Upside to compare every paid channel on what it costs to create a real opportunity and the pipeline it originated, so budget moves toward the channels that produce revenue, not the ones that produce cheap clicks.",accentColor:"blue-soft",visualChip:"Cost per opp",visualType:"pm-cost-per-opp"},{heading:"Kill demand waste before the next budget cycle",body:"Underperforming spend hides until someone finds it at planning time. Build a miniapp on the Upside MCP that flags the campaigns and keywords burning budget without influencing pipeline, so you cut the waste and reinvest continuously instead of discovering it once a year when the budget is due.",accentColor:"green-soft",visualChip:"Demand efficiency",visualType:"pm-demand-waste"}],spotlight:{quote:"We stopped doing events because we didn't have data saying they were impactful. With Upside, we can see events are actually a massive flywheel for our business.",name:"Ethan Smith",title:"CEO & Founder",company:"Graphite",caseStudySlug:"graphite-uncovering-real-channels-behind-inbound-growth",heroImage:"/images/graphite-logo.jpeg",heroImageIsLogo:!0,companyLogo:"/images/graphite-logo.jpeg"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when paid media is measured on pipeline",items:[{headline:"Spend aimed at pipeline, not platform metrics",body:"Optimize to opps created and revenue won in your CRM, instead of the conversions each ad platform counts for itself."},{headline:"Credit for the touches attribution loses",body:"Paid touchpoints that fall into 'direct' or 'unknown' get tied back to the deals they influenced, so no channel is under- or over-credited."},{headline:"Continuous reinvestment, not annual cleanup",body:"Budget waste surfaces as it happens, so you cut and reallocate in-cycle instead of discovering it once a year at planning."}],footnote:{text:"Graphite used full-journey attribution to uncover $10M+ in hidden referral revenue and reverse a decision to cut a channel that was actually driving growth.",caseStudySlug:"graphite-uncovering-real-channels-behind-inbound-growth",caseStudyLabel:"Read the Graphite case study →"}},whyUpside:{heading:"How Upside compares to alternatives",intro:"Ad platforms grade their own homework and BI cuts stop where the pixel does. Upside ties paid spend to the pipeline it actually influenced in your CRM, including the touches attribution loses.",points:["Unlike ad platform reporting (Google Ads, LinkedIn, Meta) where each channel claims the same conversion, Upside ties spend to the deals it influenced in one CRM-grounded view.","Unlike pixel- and cookie-based attribution that breaks on dark social and cross-device journeys, Upside recovers paid touches that land in 'direct' or 'unknown' and credits them to the right deals.","Unlike cost-per-lead dashboards that flatter volume channels, Upside compares channels on cost per real opportunity and pipeline originated.","Unlike a once-a-year budget audit, an Upside miniapp flags underperforming spend continuously so you reinvest in-cycle."]},testimonials:[{quote:"I had the data to make the case. We could see the impact these conversations were having on our bottom line and made the case to invest more.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",accentColor:"green-light",avatarImage:pt.lindseyMarymont},{quote:"We are like kids in a candy shop digging into accounts and opportunities.",name:"Wendy Werve",title:"CMO",company:"Comply",accentColor:"cream",avatarImage:pt.wendyWerve}],relatedUseCases:[{title:"Campaign Intelligence",description:"Roll paid up into the integrated campaign it belongs to and score the whole program on pipeline, not opens.",customer:"Assembled"},{title:"Revenue Attribution",description:"Attribute the full multi-touch journey behind paid on one clean foun
3580dation, out of the box or modeled your way."},{title:"AEO Measurement",description:"Bring AI-engine discovery into the same view as paid, so you see every source that drives pipeline."},{title:"Pipeline Generation",description:"Point paid budget at the accounts already showing real buying intent."}],faqs:[{question:"How is this different from what our ad platforms report?",answer:"Each ad platform counts the same conversion as its own and never reconciles with the CRM. Upside ties paid spend to the deals it actually influenced (pipeline created, opps progressed, revenue won) and recovers the touches that pixels and cookies miss."},{question:"Will this work now that cookies and pixels are unreliable?",answer:"Yes. Upside doesn't depend on the pixel firing. It reconstructs paid influence from the deals and touchpoints in your unified data, so it recovers the pipeline that lands in 'direct' or 'unknown' instead of losing it."}],cta:{headline:"Spend on the media that creates pipeline",subhead:"See your paid spend tied to real influenced pipeline in a 30-minute walkthrough."}},"expansion-revenue":{hero:{eyebrow:"Upside for",headline:"Grow the accounts you already won",subhead:"Your next quarter is sitting inside your current customers, but the signals of who's ready to expand are buried in calls, usage, and org changes no CRM field captures. Use Upside to score every account on expansion readiness and put your team on the ones that will actually say yes."},heroVisual:"ex-overview",embeddedApp:"expansion-readiness",features:[{heading:"Score every customer on how ready they are to expand",body:"Reps chase expansion on gut feel, and the accounts that are actually ready get the same attention as the ones that aren't. Use Upside to score every customer on a readiness signal built from the shape of their land deal, their firmographics, how deep the buying group goes, and how engaged they've been since, so you know where the next expansion is most likely before you spend a single hour on it.",accentColor:"green-light",visualChip:"Readiness score",visualType:"ex-readiness-score"},{heading:"See the whitespace and the plays to fill it",body:"Knowing an account could expand isn't the same as knowing what to sell them or how. Use Upside to see each account's whitespace, the expansion signals already showing up in their conversations, the recommended plays, and the estimated value, so your team walks into every expansion conversation with a specific motion instead of a hopeful check-in.",accentColor:"cream",visualChip:"Whitespace plays",visualType:"ex-whitespace-plays"},{heading:"Read the risk before you make the ask",body:"The worst expansion pitch is the one you make to an account that's quietly slipping. Use Upside to surface the top risk on every account (a champion who's gone quiet, engagement that's cooled, a renewal that looks shaky) alongside the readiness score, so you protect the base you have before you try to grow it.",accentColor:"blue-soft",visualChip:"Risk radar",visualType:"ex-risk-signal"},{heading:"Prioritize the whole book, not a hero account a week",body:"Expansion planning usually means a spreadsheet, a few loud accounts, and a lot of guessing about the rest. Use Upside to rank the entire customer base on readiness, filter to the segment you care about, and export it, so cross-sell and upsell run against the whole book on evidence instead of whoever happened to come up in the pipeline review.",accentColor:"green-soft",visualChip:"Book ranking",visualType:"ex-book-ranking"}],spotlight:{quote:"It helped us validate that what we thought was true was actually true. We were just not seeing the impact of the ADR function like we needed to.",name:"Amy Wellersdick",title:"Director of Marketing Ops",company:"Syndio",caseStudySlug:"syndio-driving-strategic-gtm-decisions-with-upside",heroImage:"/images/logo-syndio.png",heroImageIsLogo:!0,companyLogo:"/images/logo-syndio.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when expansion runs on evidence",items:[{headline:"Effort aimed at accounts that will say yes",body:"A readiness score across every customer, so cross-sell and upsell go to the accounts most likely to expand instead of the loudest ones."},{headline:"A specific play for every account",body:"Whitespace, expansion signals, recommended plays, and estimated value on each account, so reps open with a motion, not a check-in."},{headline:"Coverage across the entire base",body:"The whole book ranked and filterable, so expansion planning covers every account instead of the handful that surface in pipeline reviews."}]}
3580,whyUpside:{heading:"How Upside compares to alternatives",intro:"Expansion signals live in conversations, usage, and org changes that no CRM field captures, and no BI dashboard reads. Upside scores expansion readiness from the unified evidence and hands your team the play.",points:["Unlike CRM health scores built on a few manual fields, Upside scores readiness from the land-deal profile, buying-group depth, and post-land engagement in your actual data.","Unlike a rep's gut feel about which accounts are ready, Upside ranks the entire base on evidence and surfaces the risk before you make the ask.","Unlike a static whitespace spreadsheet, an Upside miniapp keeps readiness, plays, and estimated value current as the accounts change.","Unlike a BI dashboard that stops at the score, Upside gives each account a recommended play, key evidence, and a full narrative your team can act on."]},testimonials:[{quote:"We are like kids in a candy shop digging into accounts and opportunities.",name:"Wendy Werve",title:"CMO",company:"Comply",accentColor:"cream",avatarImage:pt.wendyWerve}],relatedUseCases:[{title:"Account Management",description:"Win-back kits, account dossiers, and next-best-play recommendations built from every conversation on the account."},{title:"Pipeline Generation",description:"Surface the buying signals in calls, inbound, and product usage to point demand at the accounts already in-market."},{title:"Account-Based Marketing",description:"Coordinate marketing and sales on one account view and measure the program on pipeline, not clicks.",customer:"Syndio"}],faqs:[{question:"How is the readiness score calculated?",answer:"Upside combines signals across the shape of the land deal, firmographics, buying-group depth, post-land engagement, expansion signals in conversations, whitespace fit, and account risk into a single 0–100 score, with the breakdown visible on every account so you can see why it scored the way it did."},{question:"Do we need clean CRM data for this to work?",answer:"No. Upside builds the score from your unified data (calls, emails, meetings, usage, and CRM) rather than depending on manually maintained health fields, so it works with the messy, incomplete data you actually have."}],cta:{headline:"Grow the accounts you already won",subhead:"See your customer base scored on expansion readiness in a 30-minute walkthrough."}},"pipeline-conversion":{hero:{eyebrow:"Upside for",headline:"See exactly where deals stall",subhead:"Everyone can feel that pipeline gets stuck somewhere, but stage-to-stage conversion numbers are inflated by deals still sitting in the funnel, so you're never sure where the real break is. Use Upside to measure conversion on deals that actually resolved and pinpoint the bottleneck."},heroVisual:"fc-overview",embeddedApp:"funnel-conversion",features:[{heading:"Measure conversion on deals that actually resolved",body:"Standard funnel reports count every open deal as if it's still going to convert, which flatters your rates and hides the leaks. Use Upside to measure each transition on a resolved-or-past basis (a deal counts toward a stage only once it has closed or advanced beyond it), so your conversion rates reflect what really happened instead of the optimism still sitting in the pipeline.",accentColor:"blue-soft",visualChip:"Real conversion",visualType:"fc-resolved-funnel"},{heading:"Find the one transition that's costing you the most",body:"When conversion is soft everywhere, teams spread effort thin trying to fix all of it. Use Upside to flag the worst-converting transition as the bottleneck, so you know the single stage that's costing you the most pipeline and can put your energy there instead of everywhere.",accentColor:"purple-soft",visualChip:"The bottleneck",visualType:"fc-bottleneck"},{heading:"See how long deals really sit at each stage",body:"A stage can convert fine and still be quietly killing your velocity. Use Upside to chart time-in-stage and monthly stage entries, so you see where deals pile up and stall, catch the stages that are slow rather than leaky, and fix the aging that never shows up in a conversion rate.",accentColor:"green-light",visualChip:"Time in stage",visualType:"fc-time-in-stage"},{heading:"Get the takeaways without building the analysis",body:"Funnel analysis usually means an analyst, a week, and a deck that's stale by the time it lands. Use Upside to auto-generate the key takeaways, filter by record type and time window, and refresh it whenever you want, so the read on your funnel is current and self-serve instead of a quarterly project.",accentColor:"cream",visualChip:"Auto takeaways",visualType:"fc-takeaways"}],spotlight:{quote:"Real life is messy. Enterprise cycles are messy. Upside accurately reflects that messy reality, which I think is rare and was impossible before.",name:"Stephen Daniels",title:"VP, GTM & Strategic Operations",company:"Cresta",caseStudySlug:"cresta-from-attribution-to-ai-deep-research",heroImage:"/images/cresta-black.svg",heroImageIsLogo:!0,companyLogo:"/images/cresta-black.svg"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when the funnel tells the truth",items:[{headline:"Conversion rates you can trust",body:"Transitions measured on deals that resolved or advanced, so your rates aren't inflated by pipeline that's still open."},{headline:"One bottleneck to fix, not five",body:"The worst-converting transition flagged as the bottleneck, so effort goes to the stage that's actually costing you pipeline."},{headline:"Velocity leaks, not just conversion leaks",body:"Time-in-stage and stage-entry trends, so the stages where deals quietly age surface alongside the ones that leak."}]}
3580,whyUpside:{heading:"How Upside compares to alternatives",intro:"CRM funnel reports count open deals as future conversions and stop at the rate. Upside measures conversion on what resolved, names the bottleneck, and shows the velocity behind it.",points:["Unlike CRM funnel dashboards that inflate conversion by counting still-open deals, Upside uses a resolved-or-past funnel so rates reflect what actually happened.","Unlike a report that shows every transition equally, Upside flags the single worst-converting transition as the bottleneck to focus on.","Unlike conversion rates alone, Upside charts time-in-stage so slow stages surface alongside leaky ones.","Unlike an analyst-built funnel deck, an Upside miniapp auto-generates takeaways and refreshes on demand with record-type and time-window filters."]},testimonials:[{quote:"I had the data to make the case. We could see the impact these conversations were having on our bottom line and made the case to invest more.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",accentColor:"blue-soft",avatarImage:pt.lindseyMarymont}],relatedUseCases:[{title:"Pipeline Forecasting",description:"Forecast from what's really happening inside every open deal, not the stage a rep last updated.",customer:"Cresta"},{title:"Deal Execution & Coaching",description:"Turn every open deal into a runbook and coach the team on the moves that get deals through the stuck stage."},{title:"Revenue Attribution",description:"Attribute the pipeline that does convert to the channels and touches that created it."}],faqs:[{question:"Why does a resolved-or-past funnel matter?",answer:"Counting still-open deals as if they'll convert inflates your rates and hides the real leaks. A resolved-or-past funnel only credits a stage once a deal has closed or advanced beyond it, so conversion reflects what actually happened rather than the pipeline you're still hoping on."},{question:"Can we scope this to a segment or time period?",answer:"Yes. Filter by record type and time window to look at the funnel for a specific segment, product, or period, so you can compare enterprise against commercial, or this quarter against last, without rebuilding the analysis."}],cta:{headline:"See exactly where deals stall",subhead:"See your funnel measured on deals that actually resolved in a 30-minute walkthrough."}},"speed-to-lead":{hero:{eyebrow:"Upside for",headline:"Reach every lead before the moment passes",subhead:"Interest has a half-life, and the difference between a five-minute follow-up and a two-day one is a deal. Use Upside to see how fast sales actually follows up after someone engages, who's still waiting, and where warm leads are going cold."},heroVisual:"sl-overview",embeddedApp:"campaign-follow-up",features:[{heading:"See how fast sales really follows up",body:"Everyone agrees speed-to-lead matters, but almost no one can tell you their actual median follow-up time. Use Upside to measure how long it takes sales to respond after someone engages with a campaign, with the fastest and slowest reps and the best and worst campaigns summarized up front, so the standard you talk about is finally a number you can see.",accentColor:"green-light",visualChip:"Response time",visualType:"sl-response-time"},{heading:"Route the leads that are still waiting",body:"The leads that hurt most are the ones nobody realizes are sitting untouched. Use Upside to surface a 'needs follow-up' list grouped by owner, so every rep knows exactly who's still waiting on them and warm interest gets a touch before it cools instead of quietly aging out.",accentColor:"blue-soft",visualChip:"Needs follow-up",visualType:"sl-needs-followup"},{heading:"Hold the whole team to a follow-up standard",body:"Speed-to-lead coaching usually comes down to a manager's memory of one bad example. Use Upside to see speed-to-follow-up leaderboards by rep, by campaign, and by month, so you can hold the whole team to a standard on evidence, spot the reps who need help, and recognize the ones setting the pace.",accentColor:"purple-soft",visualChip:"Rep leaderboard",visualType:"sl-leaderboard"},{heading:"Know which campaigns hand off leads that get worked",body:"A campaign can generate great leads and still lose them to a slow hand-off. Use Upside to see follow-up status per campaign, so you know 
3580which programs get worked fast and which ones are wasting the demand they create, and can fix the routing before you pour more budget in.",accentColor:"cream",visualChip:"Campaign status",visualType:"sl-campaign-status"}],impact:{eyebrow:"What Upside unlocks",heading:"What you get when follow-up has a standard",items:[{headline:"A follow-up time you can actually see",body:"Median speed-to-lead with fastest and slowest reps and campaigns, so the standard is a number instead of a hope."},{headline:"No warm lead left waiting",body:"A needs-follow-up list grouped by owner, so every rep knows who's still waiting and interest gets a touch before it cools."},{headline:"Coaching and routing on evidence",body:"Leaderboards by rep, campaign, and month, so you coach the slow reps and fix the campaigns that lose leads to a slow hand-off."}]},whyUpside:{heading:"How Upside compares to alternatives",intro:"Most teams can't measure their own speed-to-lead, so it never improves. Upside makes follow-up speed visible by rep, campaign, and month, and routes the leads still waiting.",points:["Unlike a gut sense that follow-up is 'usually fast,' Upside measures actual speed-to-lead with the fastest and slowest reps and campaigns named.","Unlike leads that quietly age in a queue, Upside surfaces a needs-follow-up list grouped by owner so nothing warm is left waiting.","Unlike coaching from a single anecdote, Upside shows leaderboards by rep, campaign, and month to hold the whole team to a standard.","Unlike judging campaigns on lead volume alone, Upside shows follow-up status per campaign so you see which programs actually get worked."]},testimonials:[{quote:"I had the data to make the case. We could see the impact these conversations were having on our bottom line and made the case to invest more.",name:"Lindsey Marymont",title:"Head of Demand Generation",company:"Assembled",accentColor:"green-light",avatarImage:pt.lindseyMarymont}],relatedUseCases:[{title:"Pipeline Generation",description:"Surface the buying signals in calls, inbound, and product usage so follow-up goes to the accounts showing real intent."},{title:"Campaign Intelligence",description:"Score each campaign on the pipeline it creates, not the leads it generates, so you invest in the programs that convert."},{title:"Deal Execution & Coaching",description:"Turn every deal into a runbook and coach the team on the next best move, from first touch to close."}],faqs:[{question:"How does Upside measure follow-up time?",answer:"Upside ties each engagement to the sales activity that followed it in your unified data, so it can measure the real gap between when someone engaged and when a rep responded, then roll that up by rep, campaign, and month."},{question:"Can reps see their own leads that need follow-up?",answer:"Yes. The needs-follow-up list is grouped by owner, so each rep sees exactly which leads are still waiting on them, and managers see the whole picture across the team."}],cta:{headline:"Reach every lead before the moment passes",subhead:"See your team's real speed-to-lead in a 30-minute walkthrough."}},"customer-advocacy":{hero:{eyebrow:"Upside for",headline:"Turn customer voices into marketing proof",subhead:"Your best proof is already sitting in your customer calls, but it's trapped in hours of transcripts and tangled up in who you're actually allowed to name. Use Upside to pull website-ready quotes straight from those conversations and know exactly who you can feature."},embeddedApp:"customer-quotes",heroVisual:"ca-overview",features:[{heading:"Pull website-ready quotes from your own calls",body:"The perfect customer quote almost always already exists, buried somewhere in a call nobody has time to re-listen to. Use Upside to surface quotes straight from your call transcripts, so marketing can find real customer language for the website, a deck, or a launch without booking a single new interview.",accentColor:"green-light",visualChip:"Quote finder",visualType:"ca-quote-card"},{heading:"Know exactly who you're cleared to feature",body:"The scariest part of publishing a customer quote is not knowing whether you're allowed to. Use Upside to see each account's logo-use rights alongside its quotes, so you always know who you can name publicly and never have to chase down legal or the account team before you hit publish.",accentColor:"blue-soft",visualChip:"Logo rights",visualType:"ca-logo-rights"},{heading:"Search across every quote and account",body:"When you need proof for a specific claim, scrolling a folder of testimonials doesn't cut it. Use Upside to search across quotes and accounts and filter by company, so you can find the exact voice-of-customer line that backs the point you're making, on the theme you need, in seconds.",accentColor:"purple-soft",visualChip:"Quote search",visualType:"ca-search"},{heading:"Keep a living wall of customer proof",body:"A testimonial page built once goes stale the moment the next great call happens. Use Upside to keep a living voice-of-customer wall that pulls from new conversations as they come in, alongside the full roster of customers and design partners, so your proof grows with your customer base instead of freezing at launch.",accentColor:"cream",visualChip:"Living proof wall",visualType:"ca-quote-wall"}],spotlight:{quote:"We are like kids in a candy shop digging into accounts and opportunities.",name:"Wendy Werve",title:"CMO",company:"Comply",caseStudySlug:"comply-from-unfiltered-salesforce-data-to-marketing-intelligence",heroImage:"/images/comply-logo.png",heroImageIsLogo:!0,companyLogo:"/images/comply-logo.png"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when proof pulls itself",items:[{headline:"Real customer language, on demand",body:"Website-ready quotes surfaced from your own call transcripts, so marketing finds proof without booking a new interview."},{headline:"Confidence in what you can publish",body:"Logo-use rights shown next to every quote, so you always know who you're cleared to feature before you hit publish."},{headline:"Proof that stays current",body:"A living voice-of-customer wall that pulls from new calls as they happen, so your testimonials grow instead of freezing at launch."}]}
3580,whyUpside:{heading:"How Upside compares to alternatives",intro:"Great customer proof is buried in transcripts and gated by uncertain permissions. Upside surfaces the quotes, attaches the logo-use rights, and keeps the wall current.",points:["Unlike re-listening to calls or waiting on a case-study cycle, Upside surfaces website-ready quotes straight from your transcripts.","Unlike guessing whether you can name a customer, Upside shows each account's logo-use rights next to its quotes so you publish with confidence.","Unlike a static testimonial folder, Upside lets you search across quotes and accounts and filter by company to find the exact line you need.","Unlike a proof page built once, an Upside miniapp keeps a living voice-of-customer wall that updates as new calls come in."]},testimonials:[{quote:"It helped us validate that what we thought was true was actually true. We were just not seeing the impact of the ADR function like we needed to.",name:"Amy Wellersdick",title:"Director of Marketing Ops",company:"Syndio",accentColor:"green-light",avatarImage:pt.amyWellersdick}],relatedUseCases:[{title:"Content Creation & Performance",description:"Find website-ready proof in your customer calls and decide what to write next from what's already worked."},{title:"Product Marketing",description:"Hear across every call to see which talk tracks and messages actually land with customers."},{title:"Win-Loss Intelligence",description:"Reconstruct the real reason every deal closed from the calls and emails themselves.",customer:"Comply"}],faqs:[{question:"Where do the quotes come from?",answer:"Upside surfaces them from your call transcripts in your unified data, so the language is real customer voice pulled from actual conversations rather than paraphrased or written by marketing."},{question:"How do we know we're allowed to publish a quote?",answer:"Each account's logo-use rights are shown alongside its quotes, so you can see at a glance who you're cleared to feature publicly before you use anything on the website or in a deck."}],cta:{headline:"Turn customer voices into marketing proof",subhead:"See website-ready quotes pulled from your own calls in a 30-minute walkthrough."}},"launch-intelligence":{hero:{eyebrow:"Upside for",headline:"Know what's working the moment you launch",subhead:"A product launch throws off signal fast (which messaging lands, which deals move, where pipeline is at risk), but the read usually arrives in a quarterly retro when it's too late to change anything. Use Upside to read the launch from the deals themselves while you can still act."},embeddedApp:"product-launch",heroVisual:"li-overview",features:[{heading:"Read the launch from the deals themselves",body:"Launch dashboards usually track activity (emails sent, pages viewed) instead of whether any of it is moving deals. Use Upside to analyze closed deals and open pipeline together, with engagement benchmarks and journey archetypes, so you see how the launch is actually landing in the funnel rather than how busy the go-to-market motion looks.",accentColor:"green-light",visualChip:"Deal-level read",visualType:"li-deal-read"},{heading:"See which messaging is landing",body:"Every launch ships with a message, and most teams never find out whether it stuck. Use Upside to surface the messaging signals showing up across sales conversations, so you see which parts of the story resonate, which fall flat, and what to double down on before the next wave of the launch.",accentColor:"purple-soft",visualChip:"Message landing",visualType:"li-messaging"},{heading:"Catch loss patterns while you can still fix them",body:"The objections that kill a launch usually only become obvious after the quarter closes. Use Upside to surface loss patterns as deals resolve (the objections, competitors, and gaps that keep coming up) so you can adjust positioning, enablement, or the roadmap mid-launch instead of learning it in the retro.",accentColor:"blue-soft",visualChip:"Loss patterns",visualType:"li-loss-patterns"},{heading:"Flag the pipeline that's at risk now",body:"A launch can look healthy in aggregate while specific deals quietly stall. Use Upside to flag pipeline risk on the deals tied to the launch, so you know 
3580which ones are slipping and why, and can put attention on the at-risk revenue while there's still time to save it.",accentColor:"cream",visualChip:"Pipeline risk",visualType:"li-pipeline-risk"}],spotlight:{quote:"What used to take 2-3 hours I can now do in a few clicks, and it's made me a smarter operations person than I've ever been in my career.",name:"Charlie Flanagan",title:"Head of GTM Ops",company:"Dscout",caseStudySlug:"dscout-driving-confident-growth-with-upside",heroImage:"/images/logo-dscout.svg",heroImageIsLogo:!0,companyLogo:"/images/logo-dscout.svg"},impact:{eyebrow:"What Upside unlocks",heading:"What you get when a launch reads itself",items:[{headline:"A read on outcomes, not activity",body:"Closed deals and open pipeline analyzed together, so you see how the launch lands in the funnel instead of how busy the motion looks."},{headline:"Messaging feedback in real time",body:"The messaging signals showing up in conversations, so you double down on what resonates before the next wave."},{headline:"Time to fix, not just to explain",body:"Loss patterns and pipeline risk surfaced as deals resolve, so you adjust mid-launch instead of learning it in the retro."}]},whyUpside:{heading:"How Upside compares to alternatives",intro:"Most launch reporting tracks activity and arrives after the launch is over. Upside reads the launch from the deals themselves, in time to change the outcome.",points:["Unlike launch dashboards that count activity, Upside analyzes closed deals and open pipeline to show how the launch is landing in the funnel.","Unlike guessing whether the message stuck, Upside surfaces the messaging signals in real sales conversations so you see what resonates.","Unlike a post-mortem after the quarter closes, Upside surfaces loss patterns as deals resolve so you can adjust positioning mid-launch.","Unlike an aggregate health number, Upside flags pipeline risk on the specific deals tied to the launch while there's still time to save them."]},testimonials:[{quote:"Real life is messy. Enterprise cycles are messy. Upside accurately reflects that messy reality, which I think is rare and was impossible before.",name:"Stephen Daniels",title:"VP, GTM & Strategic Operations",company:"Cresta",accentColor:"purple-soft"}],relatedUseCases:[{title:"Win-Loss Intelligence",description:"Reconstruct the real reason every launch deal closed and see the patterns across every win and loss."},{title:"Product Marketing",description:"Hear across every call to see which talk tracks move deals and which objections keep coming up."},{title:"Pipeline Forecasting",description:"Forecast the pipeline the launch creates from what's really happening inside every open deal.",customer:"Dscout"}],faqs:[{question:"Can we use this before the launch has fully closed out?",answer:"Yes, that's the point. Upside analyzes open pipeline alongside closed deals, so you get a read on messaging, journeys, and risk while the launch is still in flight and there's time to change course."},{question:"How does Upside know which deals belong to the launch?",answer:"Upside ties deals to the launch from the signals in your unified data (the products, messaging, and campaigns showing up in conversations and CRM) rather than depending on a single field someone has to remember to set."}],cta:{headline:"Know what's working the moment you launch",subhead:"See a launch read from real deals in a 30-minute walkthrough."}}},XG=e=>zue[e],wd="#2d6a4f",D4="#509A79",ko="#347BD1",Ba="#1b1f1c",Vi="#5f6563",Lue=()=>n.jsxs("div",{style:{width:"100%",maxWidth:"480px"},children:[n.jsx("p",{style:{textAlign:"center",fontSize:"1.05rem",fontWeight:600,color:Ba,margin:"0 0 1rem 0",fontFamily:"'Geist', sans-serif"},children:"AEO Discovery Method"}),n.jsxs("svg",{viewBox:"0 0 480 260",width:"100%",xmlns:"http://www.w3.org/2000/svg",children:[n.jsx("circle",{cx:"170",cy:"130",r:"112",fill:wd,fillOpacity:"0.12",stroke:wd,strokeWidth:"1.5"}),n.jsx("circle",{cx:"320",cy:"130",r:"85",fill:ko,fillOpacity:"0.12",stroke:ko,strokeWidth:"1.5"}),n.jsx("text",{x:"160",y:"108",textAnchor:"middle",fontSize:"13",fontWeight:600,fill:wd,fontFamily:"'Geist', sans-serif",children:"Call Mentions"}),n.jsx("text",{x:"160",y:"148",textAnchor:"middle",fontSize:"38",fontWeight:700,fill:Ba,fontFamily:"'Geist', sans-serif",children:"78%"}),n.jsx("text",{x:"160",y:"182",textAnchor:"middle",fontSize:"10",fill:Vi,children:"Call recordings with"}),n.jsx("text",{x:"160",y:"196",textAnchor:"middle",fontSize:"10",fill:Vi,children:"AI tool mentions"}),n.jsx("text",{x:"332",y:"114",textAnchor:"middle",fontSize:"13",fontWeight:600,fill:ko,fontFamily:"'Geist', sans-serif",children:"Citation Traffic"}),n.jsx("text",{x:"332",y:"150",textAnchor:"middle",fontSize:"30",fontWeight:700,fill:Ba,fontFamily:"'Geist', sans-serif",children:"22%"}),n.jsx("text",{x:"332",y:"180",textAnchor:"middle",fontSize:"10",fill:Vi,children:"LLM UTM / referral"}),n.jsx("text",{x:"259",y:"128",textAnchor:"middle",fontSize:"15",fontWeight:700,fill:Ba,fontFamily:"'Geist', sans-serif",children:"0%"}),n.jsx("text",{x:"259",y:"144",textAnchor:"middle",fontSize:"9",fill:Vi,children:"overlap"})]})]}),Uue=()=>{const e=[{label:"WFM Tool Discovery",pct:77,count:17,fill:.85},{label:"Vendor Comparison",pct:50,count:11,fill:.7},{label:"Integration Research",pct:27,count:6,fill:.55},{label:"Capability Matching",pct:23,count:5,fill:.4},{label:"Pricing Research",pct:9,count:2,fill:.25}],t=260,a=135;return n.jsxs("div",{style:{width:"100%",maxWidth:"480px"},children:[n.jsx("p",{style:{textAlign:"center",fontSize:"1.05rem",fontWeight:600,color:Ba,margin:"0 0 0.25rem 0",fontFamily:"'Geist', sans-serif"},children:"What buyers were searching for"}),n.jsx("p",{style:{textAlign:"center",fontSize:"0.84rem",color:Vi,margin:"0 0 1rem 0"},children:"% of AI-influenced opportunities · multiple themes per deal"}),n.jsx("svg",{viewBox:"0 0 480 220",width:"100%",xmlns:"http://www.w3.org/2000/svg",children:e.map((i,r)=>{const o=14+r*40,l=i.pct/100*t;return n.jsxs("g",{children:[n.jsx("text",{x:a-8,y:o+14,textAnchor:"end",fontSize:"11",fontWeight:500,fill:Ba,fontFamily:"'Geist', sans-serif",children:i.label}),n.jsx("rect",{x:a,y:o,width:l,height:"22",rx:"4",fill:wd,fillOpacity:i.fill}),n.jsxs("text",{x:a+l+8,y:o+15,fontSize:"11",fontWeight:700,fill:Ba,fontFamily:"'Geist', sans-serif",children:[i.pct,"%"]}),n.jsxs("text",{x:a+l+42,y:o+15,fontSize:"10",fill:Vi,children:["(",i.count,")"]})]},i.label)})})]})},Bue=()=>{const e={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08), 0 2px 8px rgba(27, 31, 28, 0.04)",padding:"1.25rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},t={display:"inline-block",background:"#e8f4ed",color:wd,fontSize:"0.84rem",fontWeight:600,padding:"0.2rem 0.6rem",borderRadius:"999px"},a={fontSize:"0.75rem",fontWeight:600,color:ko,letterSpacing:"0.05em",textTransform:"uppercase",margin:0},i={fontSize:"1.2rem",fontWeight:700,color:D4,margin:"0.1rem 0 0 0"},r={fontSize:"0.75rem",fontWeight:700,color:ko,letterSpacing:"0.06em",textTransform:"uppercase",margin:"0.9rem 0 0.35rem 0"},o={fontSize:"0.9rem",lineHeight:1.5,color:Ba,margin:0};return n.jsxs("div",{style:e,children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[n.jsxs("div",{children:[n.jsx("h4",{style:{color:D4,fontSize:"1.35rem",margin:0,fontWeight:700},children:"Beacon Labs"}),n.jsx("div",{style:{marginTop:"0.5rem"},children:n.jsx("span",{style:t,children:"Closed Won"})})]}),n.jsx("span",{style:{color:ko,fontSize:"1.08rem",cursor:"pointer"},children:"×"})]}),n.jsxs("div",{style:{marginTop:"0.9rem",background:"#f1f4f7",borderRadius:"8px",padding:"0.75rem 1rem",display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:"0.5rem",textAlign:"center"},children:[n.jsxs("div",{children:[n.jsx("p",{style:i,children:"$48,200"}),n.jsx("p",{style:a,children:"Amount"})]}),n.jsxs("div",{children:[n.jsx("p",{style:i,children:"Jul 14, 2025"}),n.jsx("p",{style:a,children:"Created"})]}),n.jsxs("div",{children:[n.jsx("p",{style:i,children:"ChatGPT"}),n.jsx("p",{style:a,children:"LLM"})]})]}),n.jsx("p",{style:r,children:"Self-reported query"}),n.jsx("div",{style:{background:"#f1f4f7",borderRadius:"6px",padding:"0.5rem 0.75rem"},children:n.jsx("p",{style:o,children:"Researched workforce management vendors through ChatGPT to compare integration and pricing."})}),n.jsx("p",{style:r,children:"Evidence from transcripts"}),n.jsx("div",{style:{background:"#ecf4ee",borderRadius:"6px",padding:"0.5rem 0.75rem"},children:n.jsx("p",{style:o,children:"Prospect disclosed systematic research process during intro meeting. Used ChatGPT to identify top vendors, shortlisted based on integration depth, then booked demo."})}),n.jsx("p",{style:r,children:"Direct quote"}),n.jsx("div",{style:{background:"#eef1f5",borderRadius:"6px",padding:"0.5rem 0.75rem"},children:n.jsx("p",{style:{...o,fontStyle:"italic"},children:'"I just asked ChatGPT what the best workforce management tools were, you came up as the integration-friendly one, so we set up a call."'})})]})},que=()=>{const e=[{account:"Acme Support",source:"mention",stage:"Demo",amount:"$58,400",llm:"Gemini",themes:["Vendor Comparison","Tool Discovery"],evidence:'"Used Gemini to narrow down vendors with strong integration support..."'},{account:"Pacific Grid",source:"mention",stage:"Demo",amount:"$33,900",llm:"Gemini",themes:["Vendor Comparison"],evidence:'"Asked Gemini which platforms work well with our existing stack..."'},{account:"Beacon Labs",source:"mention",stage:"Business Validation",amount:"$79,920",llm:"ChatGPT",themes:["Integration Research","Capability Matching"],evidence:'"Inputted our requirements into ChatGPT to identify the major players..."'},{account:"Coast Retail",source:"mention",stage:"Demo",amount:"$19,500",llm:"ChatGPT",themes:["Tool Discovery"],evidence:'"I just asked ChatGPT what the best WFM platform was..."'},{account:"Atlas Ops",source:"traffic",stage:"Commitment",amount:"$42,340",llm:"ChatGPT",themes:["Tool Discovery"],evidence:"utm_source=chatgpt.com · utm_medium=referral"},{account:"Northwind",source:"mention",stage:"Closed Won",amount:"$43,375",llm:"Generic AI",themes:["Integration Research"],evidence:'"Used AI to compare vendors on AppExchange before booking demos..."'}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem",width:"100%",maxWidth:"960px",fontFamily:"'Geist', sans-serif"},children:[n.jsxs("div",{style:{marginBottom:"0.75rem"},children:[n.jsx("h4",{style:{fontSize:"1.2rem",margin:0,fontWeight:700,color:Ba}
3580,children:"AEO-Detected Opportunities"}),n.jsx("p",{style:{fontSize:"0.84rem",color:ko,margin:"0.15rem 0 0 0",fontStyle:"italic"},children:"Opportunities where AI influence was detected in calls or communications"})]}),n.jsx("div",{style:{borderTop:"1px solid #eaeeea",paddingTop:"0.5rem"},children:n.jsxs("table",{style:{width:"100%",tableLayout:"fixed",borderCollapse:"collapse",fontSize:"0.8rem"},children:[n.jsxs("colgroup",{children:[n.jsx("col",{style:{width:"14%"}}),n.jsx("col",{style:{width:"11%"}}),n.jsx("col",{style:{width:"13%"}}),n.jsx("col",{style:{width:"12%"}}),n.jsx("col",{style:{width:"11%"}}),n.jsx("col",{style:{width:"17%"}}),n.jsx("col",{style:{width:"22%"}})]}),n.jsx("thead",{children:n.jsx("tr",{style:{textAlign:"left",color:Vi},children:["Account","Source","Stage","Amount","LLM","Themes","Self-reported query / UTM"].map(t=>n.jsx("th",{style:{padding:"0.4rem 0.4rem",fontSize:"0.68rem",fontWeight:700,letterSpacing:"0.04em",textTransform:"uppercase"},children:t},t))})}),n.jsx("tbody",{children:e.map(t=>n.jsxs("tr",{style:{borderTop:"1px solid #eef1ef"},children:[n.jsx("td",{style:{padding:"0.55rem 0.4rem",fontWeight:600,color:Ba},children:t.account}),n.jsx("td",{style:{padding:"0.55rem 0.4rem"},children:n.jsx("span",{style:{background:t.source==="traffic"?"#e4edf5":"#f1e7f5",color:t.source==="traffic"?ko:"#7a4a9e",padding:"0.2rem 0.5rem",borderRadius:"999px",fontSize:"0.72rem",fontWeight:600,textTransform:"uppercase"},children:t.source})}),n.jsx("td",{style:{padding:"0.55rem 0.4rem",color:ko,fontSize:"0.78rem"},children:t.stage}),n.jsx("td",{style:{padding:"0.55rem 0.4rem",color:Ba,fontWeight:600},children:t.amount}),n.jsx("td",{style:{padding:"0.55rem 0.4rem"},children:n.jsx("span",{style:{background:"#ecf4ee",color:wd,padding:"0.2rem 0.5rem",borderRadius:"999px",fontSize:"0.72rem",fontWeight:600},children:t.llm})}),n.jsx("td",{style:{padding:"0.55rem 0.4rem"},children:n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.25rem"},children:t.themes.map(a=>n.jsx("span",{style:{background:"#f5f7fa",color:Vi,padding:"0.15rem 0.45rem",borderRadius:"4px",fontSize:"0.72rem",fontWeight:500},children:a},a))})}),n.jsx("td",{style:{padding:"0.55rem 0.4rem",color:Vi,fontSize:"0.74rem",lineHeight:1.35,fontStyle:t.source==="mention"?"italic":"normal",fontFamily:t.source==="traffic"?"'SF Mono', Menlo, monospace":"inherit",overflowWrap:"anywhere",wordBreak:"break-word"},children:t.evidence})]},t.account))})]})})]})},$ue=({label:e})=>n.jsxs("div",{style:{background:"#fff",padding:"1rem 1.5rem",borderRadius:"12px",boxShadow:"0 2px 16px rgba(27, 31, 28, 0.08)",display:"inline-flex",alignItems:"center",gap:"0.75rem",fontFamily:"'Geist', sans-serif",fontSize:"1.2rem",fontWeight:600,color:Ba},children:[n.jsx("span",{style:{width:"28px",height:"28px",borderRadius:"999px",background:wd,color:"#fff",display:"inline-flex",alignItems:"center",justifyContent:"center",fontSize:"1.05rem"},children:"U"}),e??"ChatGPT citation detected"]}),Fue=()=>{const e=[{name:"ChatGPT",sessions:312,pipeline:"$420K",pct:100,rule:"ref=chat.openai.com · utm_source=chatgpt"},{name:"Perplexity",sessions:184,pipeline:"$260K",pct:62,rule:"ref=perplexity.ai · utm_source=perplexity"},{name:"Claude",sessions:96,pipeline:"$140K",pct:34,rule:"ref=claude.ai · custom redirect"},{name:"Gemini",sessions:41,pipeline:"$60K",pct:18,rule:"ref=gemini.google.com"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:ko,letterSpacing:"0.05em",textTransform:"uppercase"},children:"LLM citation traffic · retroactive rules"}),n.jsx("div",{style:{marginTop:"0.7rem",display:"grid",gap:"0.55rem"},children:e.map((t,a)=>n.jsxs("div",{style:{padding:"0.55rem 0.7rem",borderRadius:"10px",background:a===0?"#e8f4ed":"#f5f7fa"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"0.5rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.936rem",fontWeight:700,color:Ba},children:t.name}),n.jsxs("span",{style:{fontSize:"0.84rem",fontWeight:700,color:Ba},children:[t.pipeline,n.jsxs("span",{style:{color:Vi,fontWeight:500,marginLeft:"0.3rem"},children:["· ",t.sessions," sessions"]})]})]}
3580),n.jsx("div",{style:{marginTop:"0.25rem",height:"5px",background:"#eef1ef",borderRadius:"3px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:D4,opacity:a===0?1:.55,borderRadius:"3px"}})}),n.jsx("p",{style:{margin:"0.3rem 0 0 0",fontSize:"0.72rem",color:Vi,fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",lineHeight:1.35},children:t.rule})]},t.name))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.792rem",color:Vi,fontStyle:"italic",textAlign:"center",lineHeight:1.4},children:"Rules apply retroactively to months of historical sessions. No forward-only tagging required."})]})},Rt="#2d6a4f",QG="#509A79",Nr="#347BD1",Nt="#1b1f1c",Vt="#5f6563",Gue=()=>{const e=[{account:"Acme Logistics",amount:"$72,400",phases:["Sourced"],detail:"Executive dinner · SF · Mar 2025"},{account:"Pacific Grid",amount:"$145,200",phases:["Sourced","Activated"],detail:"Roadshow + webinar sequence · Apr + Jun"},{account:"Beacon Labs",amount:"$58,900",phases:["Sourced"],detail:"Conference booth · Annual Summit"},{account:"Coast Retail",amount:"$28,400",phases:["Activated"],detail:"Private dinner · NYC · Jul 2025"},{account:"Atlas Ops",amount:"$91,650",phases:["Sourced"],detail:"Happy hour · Austin · May 2025"},{account:"Northwind",amount:"$38,200",phases:["Sourced","Activated"],detail:"Partner summit + 1:1 dinner"}],t={display:"inline-flex",alignItems:"center",padding:"0.2rem 0.55rem",borderRadius:"999px",fontSize:"0.744rem",fontWeight:700,marginRight:"0.3rem",letterSpacing:"0.02em",whiteSpace:"nowrap"};return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem",width:"100%",maxWidth:"960px",fontFamily:"'Geist', sans-serif"},children:[n.jsxs("div",{style:{marginBottom:"0.75rem"},children:[n.jsx("h4",{style:{fontSize:"1.2rem",margin:0,fontWeight:700,color:Nt},children:"Event-Influenced Deals"}),n.jsx("p",{style:{fontSize:"0.84rem",color:Nr,margin:"0.15rem 0 0 0",fontStyle:"italic"},children:"Opportunities where event influence was detected across calls, emails, and attendance lists"})]}),n.jsx("div",{style:{borderTop:"1px solid #eaeeea",paddingTop:"0.5rem"},children:n.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:"0.84rem"},children:[n.jsx("thead",{children:n.jsx("tr",{style:{textAlign:"left",color:Vt},children:["Account","Amount","Phase","Event Detail"].map(a=>n.jsx("th",{style:{padding:"0.4rem 0.5rem",fontSize:"0.72rem",fontWeight:700,letterSpacing:"0.05em",textTransform:"uppercase"},children:a},a))})}),n.jsx("tbody",{children:e.map(a=>n.jsxs("tr",{style:{borderTop:"1px solid #eef1ef"},children:[n.jsx("td",{style:{padding:"0.55rem 0.5rem",fontWeight:600,color:Nt},children:a.account}),n.jsx("td",{style:{padding:"0.55rem 0.5rem",color:Nt,fontWeight:600},children:a.amount}),n.jsxs("td",{style:{padding:"0.55rem 0.5rem"},children:[a.phases.includes("Sourced")&&n.jsx("span",{style:{...t,background:"#e4edf5",color:Nr},children:"Sourced"}),a.phases.includes("Activated")&&n.jsx("span",{style:{...t,background:"#e8f4ed",color:Rt},children:"Activated"})]}),n.jsx("td",{style:{padding:"0.55rem 0.5rem",color:Vt,fontSize:"0.816rem"},children:a.detail})]},a.account))})]})})]})},Hue=()=>{const e=[{label:"Private Dinners",pct:29,pipeline:"$2.4M",fill:.9},{label:"Conferences",pct:27,pipeline:"$1.9M",fill:.8},{label:"Executive Summits",pct:24,pipeline:"$1.2M",fill:.7},{label:"Happy Hours",pct:18,pipeline:"$890K",fill:.55},{label:"Webinars",pct:15,pipeline:"$680K",fill:.45},{label:"Trade Shows",pct:9,pipeline:"$310K",fill:.3}],t=240,a=130;return n.jsxs("div",{style:{width:"100%",maxWidth:"480px"},children:[n.jsx("p",{style:{textAlign:"center",fontSize:"1.05rem",fontWeight:600,color:Nt,margin:"0 0 0.25rem 0",fontFamily:"'Geist', sans-serif"},children:"Success rate by event format"}),n.jsx("p",{style:{textAlign:"center",fontSize:"0.84rem",color:Vt,margin:"0 0 1rem 0"},children:"% of events that influenced a won deal · pipeline contribution shown"}),n.jsx("svg",{viewBox:"0 0 480 260",width:"100%",xmlns:"http://www.w3.org/2000/svg",children:e.map((i,r)=>{const o=14+r*40,l=i.pct/30*t;return n.jsxs("g",{children:[n.jsx("text",{x:a-8,y:o+14,textAnchor:"end",fontSize:"11",fontWeight:500,fill:Nt,fontFamily:"'Geist', sans-serif",children:i.label}),n.jsx("rect",{x:a,y:o,width:l,height:"22",rx:"4",fill:Rt,fillOpacity:i.fill}),n.jsxs("text",{x:a+l+8,y:o+15,fontSize:"11",fontWeight:700,fill:Nt,fontFamily:"'Geist', sans-serif",children:[i.pct,"%"]}),n.jsx("text",{x:a+l+44,y:o+15,fontSize:"10",fill:Vt,children:i.pipeline})]},i.label)})})]})},Yue=()=>{const e=[{label:"Created",deals:"12 deals",amount:"$480K",pct:30,color:Nr},{label:"Moved forward",deals:"47 deals",amount:"$1.6M",pct:100,color:Rt},{label:"Influenced across buying group",deals:"23 deals",amount:"$720K",pct:45,color:QG}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"12px",boxShadow:"0 2px 16px rgba(27, 31, 28, 0.08)",padding:"1.35rem 1.5rem",fontFamily:"'Geist', sans-serif",maxWidth:"460px",
3580width:"100%"},children:[n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"0.84rem",fontWeight:700,color:Nr,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Full event contribution"}),n.jsx("div",{style:{display:"grid",gap:"0.85rem"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"0.5rem",marginBottom:"0.3rem"},children:[n.jsx("span",{style:{fontSize:"0.888rem",fontWeight:700,color:Nt},children:t.label}),n.jsxs("span",{style:{fontSize:"0.816rem",color:Vt,whiteSpace:"nowrap"},children:[t.deals," · ",n.jsx("span",{style:{color:Nt,fontWeight:700},children:t.amount})]})]}),n.jsx("div",{style:{height:"8px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",borderRadius:"999px",background:t.color}})})]},t.label))}),n.jsxs("div",{style:{marginTop:"1rem",paddingTop:"0.75rem",borderTop:"1px solid #eaeeea",display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"0.84rem",fontWeight:700,color:Rt,letterSpacing:"0.04em",textTransform:"uppercase"},children:"Full contribution"}),n.jsx("span",{style:{fontSize:"0.984rem",fontWeight:700,color:Nt},children:"82 deals · $2.8M"})]}),n.jsx("p",{style:{margin:"0.6rem 0 0 0",fontSize:"0.768rem",color:Vt,fontStyle:"italic",lineHeight:1.45},children:"Simple campaign metrics would credit only the deals it sourced."})]})},Vue=()=>n.jsxs("div",{style:{background:"#fff",borderRadius:"12px",boxShadow:"0 2px 16px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.5rem",fontFamily:"'Geist', sans-serif",maxWidth:"460px"},children:[n.jsx("p",{style:{margin:"0 0 0.85rem 0",fontSize:"0.84rem",fontWeight:700,color:Nr,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Activation after event"}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"auto 1fr auto 1fr auto",alignItems:"center",gap:"0.5rem"},children:[n.jsxs("div",{style:{textAlign:"center"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.78rem",fontWeight:700,color:Rt},children:"EVENT"}),n.jsx("p",{style:{margin:0,fontSize:"0.9rem",fontWeight:600,color:Nt},children:"Mar 14"})]}),n.jsx("div",{style:{height:"2px",background:Rt,opacity:.4}}),n.jsxs("div",{style:{textAlign:"center"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.78rem",fontWeight:700,color:Rt},children:"LIST"}),n.jsx("p",{style:{margin:0,fontSize:"0.9rem",fontWeight:600,color:Nt},children:"Mar 19"})]}),n.jsx("div",{style:{height:"2px",background:Rt,opacity:.4}}),n.jsxs("div",{style:{textAlign:"center"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.78rem",fontWeight:700,color:Rt},children:"PIPELINE"}),n.jsx("p",{style:{margin:0,fontSize:"0.9rem",fontWeight:600,color:Nt},children:"Mar 22"})]})]})]}),Kue=()=>{const e=[{icon:xy,label:"Email mention",sample:'"see you at the booth"'},{icon:j$,label:"Calendar accept",sample:"Dinner @ Annual User Summit"},{icon:Bw,label:"Call mention",sample:'"we met you at the conference"'}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",fontFamily:"'Geist', sans-serif",maxWidth:"460px",width:"100%"},children:[n.jsx("p",{style:{margin:"0 0 0.85rem 0",fontSize:"0.744rem",fontWeight:700,color:Rt,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Attendance detection"}),n.jsx("div",{style:{display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"26px 1fr",alignItems:"center",gap:"0.65rem",padding:"0.5rem 0.6rem",borderRadius:"10px",background:"#f5f7fa"},children:[n.jsx("span",{style:{width:"26px",height:"26px",borderRadius:"50%",background:"#fff",color:Rt,fontWeight:700,fontSize:"1.02rem",display:"inline-flex",alignItems:"center",justifyContent:"center",boxShadow:"0 1px 4px rgba(27,31,28,0.08)"},children:n.jsx(t.icon,{size:13,strokeWidth:2.4})}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Nt},children:t.label}),n.jsx("p",{style:{margin:0,fontSize:"0.792rem",color:Vt,fontStyle:"italic",lineHeight:1.4},children:t.sample})]})]},t.label))}),n.jsx("div",{style:{marginTop:"0.85rem",textAlign:"center",fontSize:"1.32rem",color:Rt,fontWeight:700,lineHeight:1},children:"↓"}),n.jsxs("div",{style:{marginTop:"0.4rem",padding:"0.65rem 0.8rem",borderRadius:"10px",background:"#e8f4ed",textAlign:"center"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Rt,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Backdated touchpoint · Mar 14"}),n.jsx("p",{style:{margin:"0.25rem 0 0 0",fontSize:"0.84rem",color:Nt,lineHeight:1.4},children:"Follow-up workflow fires before the list upload arrives."})]})]})},Xue=()=>{const e=[{icon:xy,label:"Email",sample:'"Great to see you yesterday at the event!"'},{icon:Bw,label:"Call transcript",sample:'"...we met your team at the summit"'},{icon:j$,label:"Calendar invite",sample:"Dinner @ Annual Summit"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",fontFamily:"'Geist', sans-serif",maxWidth:"460px",
3580width:"100%"},children:[n.jsx("p",{style:{margin:"0 0 0.85rem 0",fontSize:"0.744rem",fontWeight:700,color:Rt,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Event attendance detected"}),n.jsx("div",{style:{display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"26px 1fr",alignItems:"center",gap:"0.65rem",padding:"0.5rem 0.6rem",borderRadius:"10px",background:"#f5f7fa"},children:[n.jsx("span",{style:{width:"26px",height:"26px",borderRadius:"50%",background:"#fff",color:Rt,fontWeight:700,fontSize:"1.02rem",display:"inline-flex",alignItems:"center",justifyContent:"center",boxShadow:"0 1px 4px rgba(27,31,28,0.08)"},children:n.jsx(t.icon,{size:13,strokeWidth:2.4})}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Nt},children:t.label}),n.jsx("p",{style:{margin:0,fontSize:"0.792rem",color:Vt,fontStyle:"italic",lineHeight:1.4},children:t.sample})]})]},t.label))}),n.jsx("div",{style:{marginTop:"0.85rem",textAlign:"center",fontSize:"1.32rem",color:Rt,fontWeight:700,lineHeight:1},children:"↓"}),n.jsxs("div",{style:{marginTop:"0.4rem",padding:"0.65rem 0.8rem",borderRadius:"10px",background:"#e8f4ed"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Rt,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Attendance confirmed"}),n.jsx("p",{style:{margin:"0.25rem 0 0 0",fontSize:"0.84rem",color:Nt,lineHeight:1.4},children:"High confidence this person was there. Added to the event campaign, even though they were never on the list."})]})]})},Que=()=>{const e=[{window:"7 days",pct:22,label:"early movers"},{window:"30 days",pct:48,label:"core activation window"},{window:"60 days",pct:64,label:"follow-up cycles"},{window:"90 days",pct:71,label:"long-tail"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Rt,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Activation after event · annual user summit"}),n.jsxs("div",{style:{marginTop:"0.55rem",padding:"0.45rem 0.65rem",borderRadius:"8px",background:"#f3e9d6",display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:"0.792rem",color:"#a1560b",fontWeight:600},children:[n.jsx("span",{children:"List arrived 5 days late · backdated"}),n.jsx("span",{style:{fontWeight:700},children:"148 attendees"})]}),n.jsxs("div",{style:{marginTop:"0.85rem",paddingBottom:"0.65rem",borderBottom:"1px solid #eef1ef"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",color:Vt},children:"Accounts that activated within 30 days"}),n.jsxs("p",{style:{margin:"0.15rem 0 0 0",fontSize:"1.8rem",fontWeight:700,color:Nt,lineHeight:1.1},children:["48%",n.jsx("span",{style:{fontSize:"0.792rem",color:Rt,fontWeight:600,marginLeft:"0.4rem"},children:"+14pp vs prior summit"})]})]}),n.jsx("div",{style:{marginTop:"0.75rem",display:"grid",gap:"0.5rem"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"70px 1fr 40px",alignItems:"center",gap:"0.55rem"},children:[n.jsx("span",{style:{fontSize:"0.84rem",fontWeight:700,color:a===1?Rt:Vt},children:t.window}),n.jsx("div",{style:{height:"8px",background:"#eef1ef",borderRadius:"4px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:Rt,opacity:a===1?1:.5,borderRadius:"4px"}})}),n.jsxs("span",{style:{fontSize:"0.84rem",fontWeight:700,color:a===1?Nt:Vt,textAlign:"right"},children:[t.pct,"%"]})]},t.window))})]})},Zue=()=>{const e=[{label:"Private dinner · NYC",sourcedPipeline:"$120K",inCyclePipeline:"$680K",sourcedPct:18,inCyclePct:96,winner:"in-cycle"},{label:"Industry conference",sourcedPipeline:"$520K",inCyclePipeline:"$180K",sourcedPct:78,inCyclePct:26,winner:"sourced"},{label:"Partner roundtable · EMEA",sourcedPipeline:"$60K",inCyclePipeline:"$420K",sourcedPct:9,inCyclePct:60,winner:"in-cycle"}],t=(a,i,r)=>n.jsx("div",{style:{height:"6px",background:"#eef1ef",borderRadius:"3px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${a}
3580%`,height:"100%",background:i,opacity:r?.45:1,borderRadius:"3px"}})});return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Nr,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Events · sourced vs in-cycle influenced"}),n.jsx("div",{style:{marginTop:"0.75rem",display:"grid",gap:"0.85rem"},children:e.map(a=>n.jsxs("div",{style:{padding:"0.55rem 0.7rem",borderRadius:"10px",background:"#f5f7fa"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.888rem",fontWeight:700,color:Nt,lineHeight:1.25},children:a.label}),n.jsxs("div",{style:{marginTop:"0.4rem",display:"grid",gridTemplateColumns:"62px 1fr 56px",alignItems:"center",gap:"0.45rem",fontSize:"0.744rem"},children:[n.jsx("span",{style:{color:a.winner==="sourced"?Nt:Vt,fontWeight:700,textTransform:"uppercase",letterSpacing:"0.04em"},children:"Sourced"}),t(a.sourcedPct,Nr,a.winner==="in-cycle"),n.jsx("span",{style:{color:a.winner==="sourced"?Nt:Vt,fontWeight:700,textAlign:"right"},children:a.sourcedPipeline})]}),n.jsxs("div",{style:{marginTop:"0.25rem",display:"grid",gridTemplateColumns:"62px 1fr 56px",alignItems:"center",gap:"0.45rem",fontSize:"0.744rem"},children:[n.jsx("span",{style:{color:a.winner==="in-cycle"?Nt:Vt,fontWeight:700,textTransform:"uppercase",letterSpacing:"0.04em"},children:"In-cycle"}),t(a.inCyclePct,Rt,a.winner==="sourced"),n.jsx("span",{style:{color:a.winner==="in-cycle"?Nt:Vt,fontWeight:700,textAlign:"right"},children:a.inCyclePipeline})]})]},a.label))})]})},Jue=()=>{const e=[{when:"Today",kind:"Event",detail:"Met VP RevOps at booth · 8 min"},{when:"−6 d",kind:"Call",detail:"Discovery w/ Director Marketing",inferred:!0},{when:"−24 d",kind:"Email",detail:"Replied to nurture · forwarded to CFO"},{when:"−72 d",kind:"Referral",detail:"Intro from champion at Northwind",inferred:!0}],t=i=>i==="Event"?Rt:i==="Call"?Nr:i==="Email"?"#7a4a9e":"#a1560b",a=i=>i==="Event"?"#e8f4ed":i==="Call"?"#e4edf5":i==="Email"?"#efe7f4":"#f3e9d6";return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.6rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:"#7a4a9e",letterSpacing:"0.05em",textTransform:"uppercase"},children:"Attendee · rep view"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:600,color:Vt,fontStyle:"italic"},children:"1 click · full history"})]}),n.jsxs("div",{style:{paddingBottom:"0.7rem",borderBottom:"1px solid #eef1ef"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.14rem",fontWeight:700,color:Nt},children:"J. Park · Acme Logistics"}),n.jsxs("div",{style:{marginTop:"0.25rem",display:"flex",gap:"0.4rem",flexWrap:"wrap"},children:[n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,padding:"0.18rem 0.45rem",borderRadius:"999px",background:"#e4edf5",color:Nr},children:"VP RevOps · economic buyer"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,padding:"0.18rem 0.45rem",borderRadius:"999px",background:"#e8f4ed",color:Rt},children:"Open opp · $145K · stage 3"})]})]}),n.jsxs("div",{style:{marginTop:"0.75rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Nr,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Last 4 touchpoints"}),n.jsx("div",{style:{marginTop:"0.4rem",display:"grid",gap:"0.35rem"},children:e.map((i,r)=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"50px 70px 1fr",alignItems:"baseline",gap:"0.45rem",fontSize:"0.816rem"},children:[n.jsx("span",{style:{color:Vt,fontWeight:600},children:i.when}),n.jsx("span",{style:{display:"inline-block",padding:"0.15rem 0.45rem",borderRadius:"999px",background:a(i.kind),color:t(i.kind),fontWeight:700,fontSize:"0.696rem",textTransform:"uppercase",letterSpacing:"0.04em",textAlign:"center"},children:i.kind}),n.jsxs("span",{style:{color:Nt,lineHeight:1.35},children:[i.detail,i.inferred&&n.jsx("span",{style:{marginLeft:"0.35rem",fontSize:"0.66rem",color:Vt,fontStyle:"italic"},children:"· inferred"})]})]},r))})]}),n.jsxs("div",{style:{marginTop:"0.85rem",padding:"0.55rem 0.7rem",borderRadius:"10px",background:"#e8f4ed",fontSize:"0.792rem",color:Nt,lineHeight:1.45},children:[n.jsx("span",{style:{fontWeight:700,color:Rt,marginRight:"0.3rem"},children:"Buying group"}),"4 of 5 personas covered · CFO missing · champion = VP Marketing"]})]})}
3580,ehe="#a1560b",the=()=>{const e=[{who:"VP Ops · Acme",icp:!0,status:"Followed up 1d",owner:"Rep A"},{who:"Dir Eng · Globex",icp:!0,status:"Waiting 9d",waiting:!0,owner:"Unassigned"},{who:"Head GTM · Initech",icp:!0,status:"Followed up 2d",owner:"Rep C"},{who:"Analyst · Hooli",icp:!1,status:"No follow-up",owner:"—"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",maxWidth:"460px",width:"100%",fontFamily:"'Geist', sans-serif"},children:[n.jsx("p",{style:{margin:"0 0 0.75rem 0",fontSize:"0.744rem",fontWeight:700,color:Rt,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Post-event follow-up"}),n.jsx("div",{style:{display:"grid",gap:"0.4rem"},children:e.map(t=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr auto",rowGap:"0.2rem",alignItems:"center",background:t.waiting?"#faf3e8":"#f5f7fa",borderRadius:"9px",padding:"0.5rem 0.65rem"},children:[n.jsx("span",{style:{fontSize:"0.888rem",fontWeight:700,color:Nt},children:t.who}),n.jsx("span",{style:{fontSize:"0.696rem",fontWeight:700,color:t.icp?Rt:Vt,background:t.icp?"#e8f4ed":"#eceeec",borderRadius:"5px",padding:"0.12rem 0.4rem",justifySelf:"end"},children:t.icp?"ICP match":"Off-ICP"}),n.jsx("span",{style:{fontSize:"0.792rem",fontWeight:600,color:t.waiting?ehe:Vt},children:t.status}),n.jsx("span",{style:{fontSize:"0.768rem",color:Vt,justifySelf:"end"},children:t.owner})]},t.who))}),n.jsx("p",{style:{margin:"0.7rem 0 0 0",fontSize:"0.768rem",color:Vt,fontStyle:"italic",lineHeight:1.45},children:"A high-intent, in-ICP attendee has been waiting 9 days with no owner."})]})},nhe=()=>{const e=[{rank:"1",who:"CRO · Acme",kind:"Dinner invite",chips:["In-cycle","ICP","8mo since last"]},{rank:"2",who:"VP Mktg · Globex",kind:"Speaker pick",speaker:!0,chips:["Power user","4 positive mentions"]},{rank:"3",who:"Dir Rev · Initech",kind:"Dinner invite",chips:["In-cycle","Not invited yet"]}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",maxWidth:"460px",width:"100%",fontFamily:"'Geist', sans-serif"},children:[n.jsx("p",{style:{margin:"0 0 0.75rem 0",fontSize:"0.744rem",fontWeight:700,color:QG,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Recommended invites"}),n.jsx("div",{style:{display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",gap:"0.6rem",background:"#f5f7fa",borderRadius:"9px",padding:"0.55rem 0.65rem"},children:[n.jsx("span",{style:{fontSize:"0.96rem",fontWeight:700,color:Vt,flexShrink:0},children:t.rank}),n.jsxs("div",{style:{minWidth:0,flex:1},children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"0.4rem"},children:[n.jsx("span",{style:{fontSize:"0.888rem",fontWeight:700,color:Nt},children:t.who}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,color:t.speaker?Nr:Rt},children:t.kind})]}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.3rem",marginTop:"0.35rem"},children:t.chips.map(a=>n.jsx("span",{style:{fontSize:"0.696rem",fontWeight:600,color:Vt,background:"#eceeec",borderRadius:"5px",padding:"0.12rem 0.4rem"},children:a},a))})]})]},t.who))})]})},Od="#2d6a4f",X0="#509A79",Kl="#347BD1",td="#7a4a9e",Or="#1b1f1c",ba="#5f6563",ahe=()=>{const e=[{referrer:"Sarah Chen",affiliation:"VP Product, Acme",deals:3,revenue:"$240K",engagement:["6 events","Reforge"]},{referrer:"Marcus Ortiz",affiliation:"Prior customer",deals:2,revenue:"$180K",engagement:["Customer ref"]},{referrer:"Priya Patel",affiliation:"Advisor",deals:2,revenue:"$165K",engagement:["Dinner · 2024","Podcast"]},{referrer:"Kevin Harper",affiliation:"SEO peer",deals:1,revenue:"$98K",engagement:["Swag","Referred directly"]},{referrer:"Elena Santos",affiliation:"CMO, Pacific Grid",deals:1,revenue:"$72K",engagement:["Prior role"]},{referrer:"Rachel Kim",affiliation:"Employee referral",deals:1,revenue:"$58K",engagement:["Internal"]}],t={display:"inline-block",background:"#f5f7fa",color:ba,padding:"0.15rem 0.45rem",borderRadius:"4px",fontSize:"0.72rem",fontWeight:500,marginRight:"0.25rem"};return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem",width:"100%",maxWidth:"960px",fontFamily:"'Geist', sans-serif"},children:[n.jsxs("div",{style:{marginBottom:"0.75rem"},children:[n.jsx("h4",{style:{fontSize:"1.2rem",margin:0,fontWeight:700,color:Or},children:"Referrer Directory"}),n.jsx("p",{style:{fontSize:"0.84rem",color:Kl,margin:"0.15rem 0 0 0",fontStyle:"italic"},children:"Individuals who referred deals, with engagement history and revenue impact"})]}),n.jsx("div",{style:{borderTop:"1px solid #eaeeea",paddingTop:"0.5rem"},children:n.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:"0.84rem"},children:[n.jsx("thead",{children:n.jsx("tr",{style:{textAlign:"left",color:ba},children:["Referrer","Affiliation","Deals","Revenue","Engagement with us"].map(a=>n.jsx("th",{style:{padding:"0.4rem 0.5rem",fontSize:"0.72rem",fontWeight:700,letterSpacing:"0.05em",textTransform:"uppercase"},children:a},a))})}),n.jsx("tbody",{children:e.map(a=>n.jsxs("tr",{style:{borderTop:"1px solid #eef1ef"}
3580,children:[n.jsx("td",{style:{padding:"0.55rem 0.5rem",fontWeight:600,color:Or},children:a.referrer}),n.jsx("td",{style:{padding:"0.55rem 0.5rem",color:ba,fontSize:"0.816rem"},children:a.affiliation}),n.jsx("td",{style:{padding:"0.55rem 0.5rem",color:Or,fontWeight:600,textAlign:"center"},children:a.deals}),n.jsx("td",{style:{padding:"0.55rem 0.5rem",color:X0,fontWeight:700},children:a.revenue}),n.jsx("td",{style:{padding:"0.55rem 0.5rem"},children:a.engagement.map(i=>n.jsx("span",{style:t,children:i},i))})]},a.referrer))})]})})]})},ihe=()=>{const e=Qp(),t=[{eyebrow:"EVENT",title:"SF dinner",bg:"#e8f4ed",border:Od,color:Od},{eyebrow:"CHAMPION",title:"Sarah Chen",bg:"#f5eedc",border:"#a8824e",color:"#8b6938"},{eyebrow:"REFERRAL",title:"3 deals",bg:"#e4edf5",border:Kl,color:Kl}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",maxWidth:"460px",width:"100%"},children:[n.jsx("p",{style:{margin:"0 0 1.25rem 0",fontSize:"0.84rem",fontWeight:700,color:Kl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"The referral flywheel"}),n.jsx("div",{style:{display:"flex",flexDirection:e?"column":"row",alignItems:"stretch",justifyContent:"space-between",gap:e?"0.5rem":"0.35rem"},children:t.map((a,i)=>n.jsxs(M.Fragment,{children:[n.jsxs("div",{style:{flex:1,background:a.bg,border:`1.5px solid ${a.border}`,borderRadius:"10px",padding:e?"0.75rem 1rem":"0.85rem 0.5rem",textAlign:"center",minWidth:0,display:e?"flex":"block",alignItems:"center",justifyContent:e?"center":void 0,gap:e?"0.6rem":void 0},children:[n.jsx("div",{style:{fontSize:"0.78rem",fontWeight:700,color:a.color,letterSpacing:"0.08em",marginBottom:e?0:"0.35rem",whiteSpace:"nowrap"},children:a.eyebrow}),n.jsx("div",{style:{fontSize:"1.02rem",fontWeight:600,color:Or,lineHeight:1.2},children:a.title})]}),i<t.length-1&&n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",color:X0,fontWeight:700,fontSize:"1.5rem",flex:"0 0 auto",lineHeight:1},children:e?"↓":"→"})]},a.eyebrow))}),n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.5rem",marginTop:"1rem",fontSize:"0.9rem",color:ba,fontStyle:"italic",justifyContent:"center"},children:[n.jsx("span",{style:{fontSize:"1.02rem",flexShrink:0},children:"↺"}),n.jsx("span",{children:"Champions get re-invited to future events"})]}),n.jsxs("div",{style:{marginTop:"0.85rem",padding:"0.65rem 0.85rem",background:"#F5F7FA",borderRadius:"8px",textAlign:"center"},children:[n.jsx("span",{style:{fontSize:"0.84rem",color:ba,marginRight:"0.5rem"},children:"Revenue influenced"}),n.jsx("span",{style:{fontSize:"1.38rem",fontWeight:700,color:X0},children:"$240K"})]})]})},rhe=()=>n.jsxs("div",{style:{background:"#fff",borderRadius:"12px",boxShadow:"0 2px 16px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.5rem",fontFamily:"'Geist', sans-serif",maxWidth:"460px"},children:[n.jsx("p",{style:{margin:"0 0 0.5rem 0",fontSize:"0.78rem",fontWeight:700,color:td,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Champion alert"}),n.jsx("p",{style:{margin:"0 0 0.5rem 0",fontSize:"1.14rem",fontWeight:700,color:Or},children:"Sarah Chen"}),n.jsxs("p",{style:{margin:0,fontSize:"0.9rem",color:ba,lineHeight:1.5},children:["Former champion at ",n.jsx("strong",{children:"Acme Logistics"})," (3 deals influenced). Now VP Product at ",n.jsx("strong",{children:"Beacon Labs"})," as of Oct 2025."]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"inline-block",background:Od,color:"#fff",padding:"0.35rem 0.85rem",borderRadius:"999px",fontSize:"0.84rem",fontWeight:600},children:"Suggested: re-engage"})]}),ohe=()=>n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.75rem 1.75rem 1.5rem 1.75rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px"},children:[n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"0.84rem",fontWeight:700,color:Kl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"B2B software customer · mid-market segment"}),n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.75rem",marginBottom:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"5.4rem",fontWeight:700,color:Od,lineHeight:1},children:"52%"}),n.jsxs("span",{style:{fontSize:"1.02rem",color:ba,lineHeight:1.4}
3580,children:["of closed-won deals",n.jsx("br",{}),"had a champion job change"]})]}),n.jsx("p",{style:{margin:"0.75rem 0 1rem 0",fontSize:"0.9rem",color:ba,fontStyle:"italic",paddingLeft:"0.75rem"},children:'"We just need people who love our product to get new jobs." · VP Revenue Marketing'}),n.jsxs("div",{style:{borderTop:"1px solid #eef1ef",paddingTop:"0.75rem"},children:[n.jsx("p",{style:{margin:"0 0 0.5rem 0",fontSize:"0.78rem",fontWeight:700,color:ba,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Example deals"}),[{company:"Beacon Labs",detail:"champion from Northwind"},{company:"Pacific Grid",detail:"champion from Atlas Retail"},{company:"Meridian AI",detail:"champion from Harbor Logistics"}].map((e,t,a)=>n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",padding:"0.35rem 0",borderBottom:t<a.length-1?"1px solid #f5f7fa":"none",fontSize:"0.84rem"},children:[n.jsx("span",{style:{fontWeight:600,color:Or},children:e.company}),n.jsx("span",{style:{color:ba},children:e.detail})]},e.company))]})]}),she=()=>{const e=[{name:"Sarah Chen",deals:7,revenue:"$890K",isTop:!0},{name:"Marcus Ortiz",deals:3,revenue:"$280K"},{name:"Priya Patel",deals:3,revenue:"$245K"},{name:"Kevin Harper",deals:2,revenue:"$180K"},{name:"Elena Santos",deals:1,revenue:"$72K"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"12px",boxShadow:"0 2px 16px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"520px"},children:[n.jsx("p",{style:{margin:"0 0 0.85rem 0",fontSize:"0.84rem",fontWeight:700,color:Kl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Top referrers · ranked"}),e.map((t,a)=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 72px 84px",alignItems:"center",gap:"0.5rem",padding:"0.45rem 0",borderBottom:a<e.length-1?"1px solid #eef1ef":"none"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx("span",{style:{width:"18px",height:"18px",borderRadius:"999px",background:t.isTop?Od:"#e8f4ed",color:t.isTop?"#fff":Od,display:"inline-flex",alignItems:"center",justifyContent:"center",fontSize:"0.78rem",fontWeight:700,flexShrink:0},children:a+1}),n.jsx("span",{style:{fontSize:"0.96rem",fontWeight:600,color:Or},children:t.name})]}),n.jsxs("span",{style:{fontSize:"0.84rem",color:ba,textAlign:"right"},children:[t.deals," deals"]}),n.jsx("span",{style:{fontSize:"0.96rem",fontWeight:700,color:X0,textAlign:"right"},children:t.revenue})]},t.name))]})},lhe=()=>{const e=[{label:"Event",detail:"Bespoke dinners + summits",metric:"62 attendees",color:Od,bg:"#e8f4ed"},{label:"Champion",detail:"Deep relationships formed",metric:"14 strong champions",color:Kl,bg:"#e4edf5"},{label:"Referral",detail:"Warm intros extracted from notes",metric:"$1.4M referred",color:td,bg:"#efe7f4"},{label:"New deal",detail:"Closed-won + new champion",metric:"9 deals · 53% win",color:"#a1560b",bg:"#f3e9d6"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Kl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Referral flywheel · last 12 months"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.35rem"},children:e.map((t,a)=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"78px 1fr 96px",alignItems:"center",gap:"0.55rem",padding:"0.55rem 0.7rem",borderRadius:"10px",background:t.bg},children:[n.jsxs("span",{style:{fontSize:"0.744rem",fontWeight:700,color:t.color,letterSpacing:"0.04em",textTransform:"uppercase"},children:[a+1," · ",t.label]}),n.jsx("span",{style:{fontSize:"0.84rem",fontWeight:600,color:Or,lineHeight:1.3},children:t.detail}),n.jsx("span",{style:{fontSize:"0.792rem",fontWeight:700,color:t.color,textAlign:"right"},children:t.metric})]}),a<e.length-1&&n.jsx("div",{style:{textAlign:"center",color:ba,fontSize:"0.9rem",lineHeight:1,padding:"0.1rem 0"},children:"↓"})]},t.label))}),n.jsx("div",{style:{marginTop:"0.5rem",padding:"0.55rem 0.7rem",borderRadius:"10px",background:"#f5f7fa",fontSize:"0.792rem",color:Or,lineHeight:1.4,textAlign:"center",fontStyle:"italic"},children:"↺ New champions seed the next round of events."})]})},che=()=>{const e=[{name:"Sarah Chen",role:"VP Customer Success · Acme Logistics",referrals:5,where:["Warm intro","Podcast"],top:!0},{name:"Marcus Webb",role:"Director of Growth · Northwind Labs",referrals:3,where:["LinkedIn"]},{name:"Priya Nair",role:"Head of RevOps · Pacific Grid",referrals:2,where:["Slack community"]}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:td,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Advocate leaderboard · by referrals"}),n.jsx("div",{style:{marginTop:"0.7rem",display:"grid",gap:"0.5rem"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"22px 1fr auto",alignItems:"center",gap:"0.6rem",padding:"0.55rem 0.7rem",borderRadius:"10px",background:t.top?"#efe7f4":"#f5f7fa"},children:[n.jsxs("span",{style:{fontSize:"0.864rem",fontWeight:700,color:t.top?td:ba,textAlign:"center"},children:["#",a+1]}),n.jsxs("div",{style:{minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.936rem",fontWeight:700,color:Or,lineHeight:1.25},children:t.name}),n.jsx("p",{style:{margin:"0.1rem 0 0 0",fontSize:"0.744rem",color:ba,lineHeight:1.3},children:t.role}),n.jsx("div",{style:{marginTop:"0.4rem",display:"flex",flexWrap:"wrap",gap:"0.3rem"},children:t.where.map(i=>n.jsxs("span",{style:{fontSize:"0.672rem",fontWeight:700,padding:"0.16rem 0.42rem",borderRadius:"999px",background:"#fff",color:td,border:`1px solid ${td}55`},children:["via ",i]},i))})]}),n.jsxs("div",{style:{textAlign:"right",minWidth:"44px"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.68rem",fontWeight:700,color:t.top?td:Or,lineHeight:1},children:t.referrals}),n.jsx("p",{style:{margin:0,fontSize:"0.648rem",color:ba,textTransform:"uppercase",letterSpacing:"0.04em"},children:"referrals"})]})]},t.name))})]})},qa="#2d6a4f",Jf="#509A79",Sr="#347BD1",UM="#7a4a9e",tr="#1b1f1c",wa="#5f6563",dhe=()=>{const e=[{type:"marketing",label:"Blog view",date:"Apr 14",dotColor:Sr},{type:"marketing",label:"Webinar registration",date:"Apr 22",dotColor:Sr},{type:"inferred",label:"ChatGPT search",source:"mentioned on call",date:"May 3",dotColor:"#8b6938",inferred:!0}
3580,{type:"sales",label:"Demo booked",date:"May 11",dotColor:qa},{type:"inferred",label:"Dinner attended",source:"email follow-up",date:"May 19",dotColor:"#8b6938",inferred:!0},{type:"sales",label:"Proposal sent",date:"Jun 4",dotColor:qa},{type:"outcome",label:"Closed won",date:"Jun 28",dotColor:qa,isOutcome:!0}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px"},children:[n.jsx("p",{style:{margin:"0 0 1.25rem 0",fontSize:"0.84rem",fontWeight:700,color:Sr,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Milestone Analysis · Beacon Labs"}),n.jsxs("div",{style:{position:"relative"},children:[n.jsx("div",{style:{position:"absolute",left:"7px",top:"8px",bottom:"8px",width:"2px",background:"#eaeeea"}}),e.map((t,a)=>n.jsxs("div",{style:{position:"relative",display:"grid",gridTemplateColumns:"16px 1fr auto",columnGap:"0.85rem",alignItems:"start",padding:"0.55rem 0"},children:[n.jsx("div",{style:{width:"16px",height:"16px",borderRadius:"999px",background:t.isOutcome?t.dotColor:"#fff",border:`${t.isOutcome?3:2}px solid ${t.dotColor}`,borderStyle:t.inferred?"dashed":"solid",marginTop:"2px",zIndex:1}}),n.jsxs("div",{children:[n.jsx("div",{style:{fontSize:"1.05rem",fontWeight:t.isOutcome?700:600,color:tr,lineHeight:1.25},children:t.label}),t.source&&n.jsxs("div",{style:{fontSize:"0.9rem",fontStyle:"italic",color:"#8b6938",marginTop:"0.15rem"},children:["via ",t.source]})]}),n.jsx("div",{style:{fontSize:"0.9rem",color:wa,fontVariantNumeric:"tabular-nums",whiteSpace:"nowrap",marginTop:"3px"},children:t.date})]},a))]}),n.jsxs("div",{style:{display:"flex",gap:"0.85rem",flexWrap:"wrap",justifyContent:"center",fontSize:"0.84rem",color:wa,marginTop:"1rem",paddingTop:"0.85rem",borderTop:"1px solid #eef1ef"},children:[n.jsxs("span",{children:[n.jsx("span",{style:{display:"inline-block",width:10,height:10,borderRadius:"999px",border:`2px solid ${Sr}`,background:"#fff",marginRight:5,verticalAlign:"middle"}}),"Marketing"]}),n.jsxs("span",{children:[n.jsx("span",{style:{display:"inline-block",width:10,height:10,borderRadius:"999px",border:`2px solid ${qa}`,background:"#fff",marginRight:5,verticalAlign:"middle"}}),"Sales"]}),n.jsxs("span",{children:[n.jsx("span",{style:{display:"inline-block",width:10,height:10,borderRadius:"999px",border:"2px dashed #8b6938",background:"#fff",marginRight:5,verticalAlign:"middle"}}),"Inferred (call / email)"]})]})]})},uhe=()=>{const e=Qp();return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.75rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px"},children:[n.jsx("p",{style:{margin:"0 0 1.25rem 0",fontSize:"0.84rem",fontWeight:700,color:Sr,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Touchpoints per account"}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:e?"1fr":"1fr auto 1fr",alignItems:"center",gap:e?"0.6rem":"1rem"},children:[n.jsxs("div",{style:{textAlign:"center",padding:"1rem 0.75rem",background:"#f5f7fa",borderRadius:"10px"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.78rem",fontWeight:700,color:wa,letterSpacing:"0.05em",textTransform:"uppercase"},children:"CRM only"}),n.jsx("p",{style:{margin:"0.35rem 0 0 0",fontSize:"2.4rem",fontWeight:700,color:tr,lineHeight:1},children:"47"}),n.jsx("p",{style:{margin:0,fontSize:"0.78rem",color:wa},children:"logged touchpoints"})]}),n.jsx("div",{style:{fontSize:"1.5rem",fontWeight:700,color:Jf,textAlign:"center",lineHeight:1},children:e?"↓":"→"}),n.jsxs("div",{style:{textAlign:"center",padding:"1rem 0.75rem",background:"#e8f4ed",borderRadius:"10px",border:`2px solid ${Jf}`},children:[n.jsx("p",{style:{margin:0,fontSize:"0.78rem",fontWeight:700,color:qa,letterSpacing:"0.05em",textTransform:"uppercase"},children:"With Upside"}),n.jsx("p",{style:{margin:"0.35rem 0 0 0",fontSize:"2.4rem",fontWeight:700,color:qa,lineHeight:1},children:"77"}),n.jsx("p",{style:{margin:0,fontSize:"0.78rem",color:Jf},children:"touchpoints found"})]})]}),n.jsx("p",{style:{margin:"1.25rem 0 0 0",fontSize:"0.84rem",color:wa,fontStyle:"italic",textAlign:"center"},children:"30 touchpoints surfaced from call transcripts and email threads, never logged manually."})]})},hhe=()=>{const e=[{name:"Paid search",count:148,color:Sr},{name:"Thought leadership",count:92,color:qa},{name:"Premium events",count:67,color:"#a8824e"},{name:"Organic social",count:54,color:UM},{name:"Partner webinars",count:38,color:Jf}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"12px",boxShadow:"0 2px 16px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.5rem",fontFamily:"'Geist', sans-serif",maxWidth:"460px"},children:[n.jsx("p",{style:{margin:"0 0 0.85rem 0",fontSize:"0.84rem",fontWeight:700,color:Sr,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Custom channels · retroactive"}),e.map((t,a)=>n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0.45rem 0",borderBottom:a<e.length-1?"1px solid #eef1ef":"none"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:999,background:t.color}}),n.jsx("span",{style:{fontSize:"0.96rem",fontWeight:600,color:tr},children:t.name})]}),n.jsxs("span",{style:{fontSize:"0.9rem",color:wa},children:[t.count," opps"]})]},t.name))]})},phe=()=>{const e=[{label:"Pure outbound",pct:18,pipeline:"$620K",color:Sr},{label:"Marketing-assisted outbound",pct:34,pipeline:"$1.4M",color:Jf},{label:"Pure inbound",pct:28,pipeline:"$1.1M",color:qa}
3580,{label:"Marketing-influenced inbound",pct:20,pipeline:"$820K",color:"#8b6938"}],t=220,a=180;return n.jsxs("div",{style:{width:"100%",maxWidth:"480px"},children:[n.jsx("p",{style:{textAlign:"center",fontSize:"1.05rem",fontWeight:600,color:tr,margin:"0 0 0.25rem 0",fontFamily:"'Geist', sans-serif"},children:'What your CRM calls "outbound" vs. reality'}),n.jsx("p",{style:{textAlign:"center",fontSize:"0.84rem",color:wa,margin:"0 0 1rem 0"},children:"% of pipeline · broken down by true origin pattern"}),n.jsx("svg",{viewBox:"0 0 480 200",width:"100%",xmlns:"http://www.w3.org/2000/svg",children:e.map((i,r)=>{const o=12+r*42,l=i.pct/40*t;return n.jsxs("g",{children:[n.jsx("text",{x:a-8,y:o+14,textAnchor:"end",fontSize:"10",fontWeight:500,fill:tr,fontFamily:"'Geist', sans-serif",children:i.label}),n.jsx("rect",{x:a,y:o,width:l,height:"22",rx:"4",fill:i.color,fillOpacity:"0.85"}),n.jsxs("text",{x:a+l+8,y:o+15,fontSize:"11",fontWeight:700,fill:tr,fontFamily:"'Geist', sans-serif",children:[i.pct,"%"]}),n.jsx("text",{x:a+l+44,y:o+15,fontSize:"10",fill:wa,children:i.pipeline})]},i.label)})})]})},mhe={email:{bg:"#e4edf5",color:Sr,label:"EMAIL"},meeting:{bg:"#e8f4ed",color:qa,label:"MEETING"},event:{bg:"#f5eedc",color:"#8b6938",label:"EVENT"},sms:{bg:"#fdeccf",color:"#a1560b",label:"SMS"},social:{bg:"#f0e4f5",color:UM,label:"SOCIAL"},crm:{bg:"#eef1ef",color:wa,label:"CRM FIELD"},opportunity:{bg:"#d9ead3",color:qa,label:"OPPORTUNITY"}},fhe={green:{bg:"#d9ead3",color:qa},blue:{bg:"#e4edf5",color:Sr},amber:{bg:"#fdeccf",color:"#8b5a1e"}},ghe=[{account:"Beacon Labs",statusLabel:"Design Partner · 7.3 Pilot",statusTone:"amber",headline:"An 18-month relationship built through social, not marketing ops",narrative:"Customer-initiated in-person marketing feedback meeting at the CEO's house, sparked by an untracked text thread that referenced a prior conversation no CRM had ever logged.",touchpoints:[{date:"Jun 2024",label:"BBQ social event",detail:"Leadership connects at a ~60 person BBQ",channel:"social"},{date:"Nov 2024",label:"GTM event: Optimizing Revenue Efficiency",detail:"Head of Marketing attends",channel:"event"},{date:"Feb 2026",label:"1:1 marketing feedback meeting",detail:"Arranged directly, not via SDR workflow",channel:"meeting"},{date:"Mar 2026",label:"Text message conversation (untracked)",detail:"Referenced in a later email as 'as we discussed via text'",channel:"sms",highlighted:!0},{date:"Mar 2026",label:"Design partner proposal email",detail:"Formalizes 6-month pilot terms",channel:"email"},{date:"Apr 2026",label:"Opportunity created",channel:"opportunity"}],pickedUp:"Upside extracted the text-message thread, referenced but never logged, as a first-class touchpoint, and stitched it into an 18-month relationship graph that started at a BBQ."},{account:"Northwind Labs",statusLabel:"3 · Validation",statusTone:"blue",headline:"Advisor-sourced via a warm intro email",narrative:"Sourced through a B2B growth advisor's warm intro. Prospect replied within 72 hours with specific meeting times. First meeting booked the following week.",touchpoints:[{date:"Aug 19",label:"[<<] Advisor intro email",detail:"Gallant Chen intros 'one of the founders of Upside' with a clear pain-point framing",channel:"email",highlighted:!0},{date:"Aug 22",label:"Positive reply from Senior Director, Marketing Ops",detail:"Active interest + engagement",channel:"email"},{date:"Aug 22",label:"Specific meeting times proposed",detail:"'12:00 PM EDT or next Friday between 10:30–12:30 EDT'",channel:"email"},{date:"Aug 22",label:"Opportunity created",detail:"next_step: 'First meeting this Fri, second meeting not yet booked'",channel:"opportunity"}],pickedUp:"Upside attributed the entire opportunity to the advisor's warm-intro email chain, a direct-email touchpoint the CRM w
3580ould have mis-sourced as 'outbound'."},{account:"Pacific Grid",statusLabel:"Early Access",statusTone:"blue",headline:"Technical outbound with event pull-through",narrative:"A targeted outbound meeting on 'AI-powered forensic attribution' landed fast. The prospect then brought two teammates to a marketing event 48 hours later, activating the opportunity.",touchpoints:[{date:"Sep 17",label:"Outbound meeting: AI-powered forensic attribution",detail:"VP Demand Gen + Upside leadership",channel:"meeting"},{date:"Sep 19",label:"Event waitlist reply with teammates",detail:"Prospect brings Performance Marketing + Marketing Ops heads",channel:"email",highlighted:!0},{date:"Sep 19",label:"Opportunity created",detail:"Buying-group expansion signal logged automatically",channel:"opportunity"}],pickedUp:"Upside read the event-registration email, recognized the 'brought two teammates' expansion pattern, and flagged the new personas as buying-group members before the SDR logged them."}],yhe=()=>n.jsx("div",{style:{width:"100%",maxWidth:"1100px",display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(300px, 1fr))",gap:"1.25rem"},children:ghe.map(e=>n.jsx(bhe,{example:e},e.account))}),bhe=({example:e})=>{const t=fhe[e.statusTone];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 4px 20px rgba(27, 31, 28, 0.06)",border:"1px solid #eaeeea",padding:"1.25rem",fontFamily:"'Geist', sans-serif",display:"flex",flexDirection:"column",gap:"0.9rem"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",flexWrap:"wrap"},children:[n.jsx("span",{style:{fontSize:"1.14rem",fontWeight:700,color:tr},children:e.account}),n.jsx("span",{style:{display:"inline-flex",padding:"0.15rem 0.55rem",borderRadius:"4px",fontSize:"0.744rem",fontWeight:700,letterSpacing:"0.04em",background:t.bg,color:t.color,whiteSpace:"nowrap"},children:e.statusLabel})]}),n.jsx("p",{style:{margin:0,fontSize:"1.08rem",fontWeight:600,color:tr,lineHeight:1.35},children:e.headline}),n.jsx("p",{style:{margin:0,fontSize:"0.936rem",color:wa,lineHeight:1.55},children:e.narrative}),n.jsxs("div",{style:{borderTop:"1px solid #eef1ef",paddingTop:"0.65rem"},children:[n.jsx("p",{style:{margin:"0 0 0.5rem 0",fontSize:"0.72rem",fontWeight:700,color:wa,letterSpacing:"0.08em",textTransform:"uppercase"},children:"Cited touchpoints"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:e.touchpoints.map((a,i)=>n.jsx(vhe,{touchpoint:a},i))})]}),n.jsxs("div",{style:{marginTop:"auto",background:"#f5f7fa",padding:"0.65rem 0.85rem",borderRadius:"0 8px 8px 0"},children:[n.jsx("p",{style:{margin:"0 0 0.25rem 0",fontSize:"0.72rem",fontWeight:700,color:qa,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Upside picked up"}),n.jsx("p",{style:{margin:0,fontSize:"0.9rem",color:tr,lineHeight:1.5},children:e.pickedUp})]})]})},vhe=({touchpoint:e})=>{const t=mhe[e.channel],a=e.highlighted?{background:"#fef8ec",border:"1px solid #f0d591",borderRadius:"6px",padding:"0.4rem 0.55rem"}:{padding:"0 0.1rem"};return n.jsxs("div",{style:a,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.5rem",flexWrap:"wrap"},children:[n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,color:wa,fontVariantNumeric:"tabular-nums",minWidth:"48px",flexShrink:0},children:e.date}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,padding:"0.1rem 0.4rem",borderRadius:"3px",background:t.bg,color:t.color,letterSpacing:"0.04em",whiteSpace:"nowrap"},children:t.label}),n.jsx("span",{style:{fontSize:"0.936rem",fontWeight:e.highlighted?700:600,color:tr,lineHeight:1.3},children:e.label})]}),e.detail&&n.jsx("p",{style:{margin:"0.2rem 0 0 56px",fontSize:"0.864rem",color:wa,lineHeight:1.45,fontStyle:"italic"},children:e.detail})]})},xhe=()=>{const e=[{label:"Events",pct:34,color:qa},{label:"Content",pct:22,color:Sr},{label:"Paid",pct:18,color:UM},{label:"Outbound",pct:14,color:"#a1560b"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27,31,28,0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:qa,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Pipeline attribution · last 90 days"}),n.jsxs("div",{style:{marginTop:"0.7rem",display:"flex",alignItems:"baseline",gap:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"1.9rem",fontWeight:800,color:tr,lineHeight:1},children:"$4.2M"}),n.jsx("span",{style:{fontSize:"0.8rem",color:wa},children:"influenced pipeline"})]}),n.jsx("div",{style:{marginTop:"0.95rem",display:"flex",flexDirection:"column",gap:"0.55rem"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:"0.78rem",color:tr,marginBottom:"0.25rem"},children:[n.jsx("span",{children:t.label}),n.jsxs("span",{style:{fontWeight:700,color:t.color},children:[t.pct,"%"]})]}),n.jsx("div",{style:{height:"6px",borderRadius:"999px",background:"#eef1ef"}
3580,children:n.jsx("div",{style:{width:`${t.pct*2.6}%`,height:"100%",borderRadius:"999px",background:t.color}})})]},t.label))}),n.jsx("p",{style:{margin:"0.9rem 0 0 0",fontSize:"0.76rem",color:wa,lineHeight:1.45},children:"Every touch tied to revenue, including the ones other tools miss."})]})},xs="#2d6a4f",W4="#509A79",Q0="#347BD1",ff="#7a4a9e",ZG="#a1560b",Xl="#1b1f1c",kn="#5f6563",whe=()=>{const e=[{system:"Gmail",label:"[email protected]",detail:"Event signup, no title",tone:Q0},{system:"Salesforce",label:"Sarah C.",detail:"Lead, no job title",tone:ZG},{system:"Corporate",label:"[email protected]",detail:"VP Product, Beacon Labs",tone:xs}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px",display:"flex",flexDirection:"column",gap:"1rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Q0,letterSpacing:"0.05em",textTransform:"uppercase"},children:"One person, three systems"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{background:"#F5F7FA",border:"1px solid #eaeeea",borderRadius:"8px",padding:"0.55rem 0.65rem",minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.696rem",fontWeight:700,color:t.tone,letterSpacing:"0.05em",textTransform:"uppercase"},children:t.system}),n.jsx("p",{style:{margin:"0.2rem 0 0.1rem 0",fontSize:"0.84rem",fontWeight:600,color:Xl,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t.label}),n.jsx("p",{style:{margin:0,fontSize:"0.744rem",color:kn,lineHeight:1.3},children:t.detail})]},t.system))}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",justifyContent:"center",margin:"0.15rem 0"},children:[n.jsx("div",{style:{flex:1,height:"1px",background:"#eaeeea"}}),n.jsx("span",{style:{fontSize:"1.32rem",color:W4,lineHeight:1},children:"↓"}),n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:700,color:xs,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Merged"}),n.jsx("span",{style:{fontSize:"1.32rem",color:W4,lineHeight:1},children:"↓"}),n.jsx("div",{style:{flex:1,height:"1px",background:"#eaeeea"}})]}),n.jsxs("div",{style:{background:"#e8f4ed",border:`1.5px solid ${xs}`,borderRadius:"10px",padding:"0.9rem 1rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.72rem",fontWeight:700,color:xs,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Unified identity"}),n.jsx("p",{style:{margin:"0.25rem 0 0.1rem 0",fontSize:"1.2rem",fontWeight:700,color:Xl,lineHeight:1.2},children:"Sarah Chen"}),n.jsx("p",{style:{margin:0,fontSize:"0.9rem",color:kn,lineHeight:1.3},children:"VP Product · Beacon Labs · 3 sources merged"})]})]})},khe=()=>{const e=[{name:"J. Ortega",role:"AE-owned champion"},{name:"M. Diaz",role:"Economic buyer"},{name:"T. Huang",role:"Technical champion"}],t=[{name:"C. Bennett",role:"CMO",source:"Meeting invite"},{name:"R. Patel",role:"Legal",source:"Email thread"},{name:"L. Schmidt",role:"Procurement",source:"Call transcript"},{name:"A. Kim",role:"Security",source:"Email CC"}],a={display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0.35rem 0",fontSize:"0.864rem"};return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px"},children:[n.jsx("p",{style:{margin:"0 0 0.15rem 0",fontSize:"0.84rem",fontWeight:700,color:Q0,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Opportunity"}),n.jsx("p",{style:{margin:"0 0 1.1rem 0",fontSize:"1.14rem",fontWeight:700,color:Xl},children:"Beacon Labs · 7.3 Pilot"}),n.jsxs("div",{style:{marginBottom:"1rem"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.4rem",marginBottom:"0.35rem"},children:[n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,background:"#f5f7fa",color:kn,padding:"0.12rem 0.4rem",borderRadius:"4px",letterSpacing:"0.05em"},children:"CRM CONTACT ROLES"}),n.jsx("span",{style:{fontSize:"0.84rem",fontWeight:700,color:kn},children:"3"})]}),e.map(i=>n.jsxs("div",{style:a,children:[n.jsxs("span",{style:{color:Xl,fontWeight:500},children:[n.jsx("span",{style:{color:kn,marginRight:"0.35rem"},children:"•"}),i.name]}),n.jsx("span",{style:{color:kn,fontSize:"0.78rem"},children:i.role})]},i.name))]}),n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.4rem",marginBottom:"0.35rem"},children:[n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,background:"#e8f4ed",color:xs,padding:"0.12rem 0.4rem",borderRadius:"4px",letterSpacing:"0.05em"},children:"DETECTED BY UPSIDE"}),n.jsx("span",{style:{fontSize:"0.84rem",fontWeight:700,color:xs},children:"+4"})]}),t.map(i=>n.jsxs("div",{style:a,children:[n.jsxs("span",{style:{color:Xl,fontWeight:500},children:[n.jsx("span",{style:{color:xs,marginRight:"0.35rem"},children:"★"}),i.name," ",n.jsxs("span",{style:{color:kn,fontWeight:400},children:["· ",i.role]}
3580)]}),n.jsx("span",{style:{color:kn,fontSize:"0.744rem",background:"#f5f7fa",padding:"0.1rem 0.35rem",borderRadius:"4px"},children:i.source})]},i.name))]}),n.jsxs("div",{style:{marginTop:"1rem",paddingTop:"0.85rem",borderTop:"1px solid #eef1ef",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[n.jsx("span",{style:{fontSize:"0.864rem",color:kn},children:"Real buying group"}),n.jsx("span",{style:{fontSize:"1.32rem",fontWeight:700,color:W4},children:"7 stakeholders"})]})]})},jhe=()=>{const e=[{label:"Clicked",count:18},{label:"Replied",count:12},{label:"Attended",count:7},{label:"Downloaded",count:5}],t=[{label:"Sent",count:84},{label:"Invited",count:41},{label:"Called",count:22},{label:"Emailed",count:9}],a=r=>r.reduce((o,l)=>o+l.count,0),i=({title:r,sub:o,items:l,isEngagement:d})=>{const u=d?xs:ZG,h=d?"#e8f4ed":"#fdeccf",m=d?"●":"○";return n.jsxs("div",{style:{background:h,border:`1px solid ${d?xs:"#f0d591"}`,borderRadius:"10px",padding:"0.9rem 0.85rem",minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.72rem",fontWeight:700,color:u,letterSpacing:"0.05em",textTransform:"uppercase"},children:r}),n.jsx("p",{style:{margin:"0.2rem 0 0.7rem 0",fontSize:"0.78rem",color:kn,lineHeight:1.35,fontStyle:"italic"},children:o}),l.map(f=>n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:"0.864rem",padding:"0.22rem 0",color:Xl},children:[n.jsxs("span",{children:[n.jsx("span",{style:{color:u,marginRight:"0.35rem"},children:m}),f.label]}),n.jsx("span",{style:{fontWeight:600,color:kn,fontVariantNumeric:"tabular-nums"},children:f.count})]},f.label)),n.jsxs("div",{style:{marginTop:"0.6rem",paddingTop:"0.55rem",borderTop:`1px solid ${d?"#c8e3d3":"#ecd9b0"}`,display:"flex",justifyContent:"space-between",fontSize:"0.84rem"},children:[n.jsx("span",{style:{color:kn},children:"Total"}),n.jsx("span",{style:{fontWeight:700,color:u},children:a(l)})]})]})};return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px"},children:[n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"0.84rem",fontWeight:700,color:Q0,letterSpacing:"0.05em",textTransform:"uppercase"},children:"This deal · last 30 days"}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.65rem"},children:[n.jsx(i,{title:"Engagements",sub:"What the customer actually did",items:e,isEngagement:!0}),n.jsx(i,{title:"Bids",sub:"What your team attempted",items:t,isEngagement:!1})]})]})},She=()=>{const e=[{from:"CEO → Prospect",label:"Original intro",date:"Mar 3"},{from:"Prospect → team",label:"Forward + reply",date:"Mar 5"},{from:"AE joins thread",label:"Joined late",date:"Mar 8"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px"},children:[n.jsx("p",{style:{margin:"0 0 0.55rem 0",fontSize:"0.72rem",fontWeight:700,color:kn,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Before · scattered, some lost"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.35rem"},children:e.map((t,a)=>n.jsxs("div",{style:{background:"#F5F7FA",border:"1px dashed #c9cec9",borderRadius:"6px",padding:"0.45rem 0.65rem",display:"flex",justifyContent:"space-between",alignItems:"center",fontSize:"0.864rem"},children:[n.jsxs("span",{style:{color:Xl},children:[n.jsx("span",{style:{color:kn,marginRight:"0.4rem"},children:"✉"}),t.from,n.jsxs("span",{style:{color:kn,fontWeight:400},children:[" · ",t.label]})]}),n.jsx("span",{style:{color:kn,fontSize:"0.78rem",fontVariantNumeric:"tabular-nums"},children:t.date})]},a))}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",justifyContent:"center",margin:"0.85rem 0"},children:[n.jsx("div",{style:{flex:1,height:"1px",background:"#eaeeea"}}),n.jsx("span",{style:{fontSize:"1.32rem",color:ff,lineHeight:1},children:"↓"}),n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:700,color:ff,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Upside reconstructs"}),n.jsx("span",{style:{fontSize:"1.32rem",color:ff,lineHeight:1},children:"↓"}),n.jsx("div",{style:{flex:1,height:"1px",background:"#eaeeea"}})]}),n.jsxs("div",{style:{background:"#f0e4f5",border:`1.5px solid ${ff}`,borderRadius:"10px",padding:"0.9rem 1rem"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.4rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.72rem",fontWeight:700,color:ff,letterSpacing:"0.05em",textTransform:"uppercase"},children:"One touchpoint · email chain"}),n.jsx("span",{style:{fontSize:"0.84rem",fontWeight:700,color:kn,fontVariantNumeric:"tabular-nums"},children:"Mar 3"})]}),n.jsxs("p",{style:{margin:0,fontSize:"0.936rem",color:Xl,lineHeight:1.45},children:["CEO intro ",n.jsx("span",{style:{color:kn},children:"→"})," prospect forwards to team"," ",n.jsx("span",{style:{color:kn},children:"→"})," AE joins thread. All stitched into a single touchpoint at the original timestamp."]})]})]})},Ql="#2d6a4f",Che="#509A79",Zl="#347BD1",JG="#7a4a9e",Bi="#a1560b",$r="#1b1f1c",Nn="#5f6563",Ahe=()=>{const e=[{label:"Opportunities influenced",value:"148",sub:"$6.2M",tone:Ql}
3580,{label:"Won opps influenced",value:"32",sub:"$1.4M",tone:Ql},{label:"Created post-engagement",value:"47",sub:"$1.9M",tone:Zl},{label:"Progressed opps",value:"68",sub:"$2.8M",tone:Zl},{label:"Accounts activated",value:"23",sub:"new accounts",tone:JG},{label:"Campaign active days",value:"164",sub:"first → latest",tone:Nn}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.2rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Zl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Channel report card"}),n.jsx("span",{style:{fontSize:"0.744rem",color:Nn,fontStyle:"italic"},children:"last 90 days"})]}),n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"1.2rem",fontWeight:700,color:$r},children:"Paid Search"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:"0.6rem"},children:e.map(t=>n.jsxs("div",{style:{background:"#F5F7FA",border:"1px solid #eaeeea",borderRadius:"8px",padding:"0.65rem 0.75rem",minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.72rem",fontWeight:700,color:Nn,letterSpacing:"0.03em",textTransform:"uppercase",lineHeight:1.2},children:t.label}),n.jsx("p",{style:{margin:"0.25rem 0 0 0",fontSize:"1.62rem",fontWeight:700,color:$r,lineHeight:1,fontVariantNumeric:"tabular-nums"},children:t.value}),n.jsx("p",{style:{margin:"0.15rem 0 0 0",fontSize:"0.78rem",color:t.tone,fontWeight:600},children:t.sub})]},t.label))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.78rem",color:Nn,fontStyle:"italic",textAlign:"center"},children:"Excludes engagements from your own team."})]})},The=()=>{const e=[{path:"/product/attribution",pipeline:"$1.4M",bar:1,featured:!0},{path:"/pricing",pipeline:"$980K",bar:.7},{path:"/blog/multi-touch-attribution-guide",pipeline:"$620K",bar:.44},{path:"/product/integrations",pipeline:"$410K",bar:.29},{path:"/blog/event-roi",pipeline:"$280K",bar:.2}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px"},children:[n.jsx("p",{style:{margin:"0 0 0.15rem 0",fontSize:"0.84rem",fontWeight:700,color:Zl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Webpage revenue analysis"}),n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"0.84rem",color:Nn,fontStyle:"italic"},children:"Pipeline attributed to each page"}),e.map(t=>n.jsxs("div",{style:{padding:"0.55rem 0",borderTop:"1px solid #eef1ef"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.3rem"},children:[n.jsx("span",{style:{fontSize:"0.936rem",fontWeight:t.featured?700:500,color:$r,fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace"},children:t.path}),n.jsx("span",{style:{fontSize:"0.984rem",fontWeight:700,color:t.featured?Ql:$r,fontVariantNumeric:"tabular-nums"},children:t.pipeline})]}),n.jsx("div",{style:{background:"#f0f3f0",borderRadius:"3px",height:"6px",overflow:"hidden"},children:n.jsx("div",{style:{background:t.featured?Ql:Che,height:"100%",width:`${t.bar*100}%`}})})]},t.path)),n.jsxs("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.78rem",color:Nn,fontStyle:"italic",textAlign:"center"},children:["One product page drove ",n.jsx("strong",{style:{color:Ql},children:"$1.4M"})," in pipeline, far more than its traffic suggested."]})]})},_he=()=>{const e=[.82,.78,.74,.68,.58,.45,.38],t=1;return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.35rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Zl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Account at risk"}),n.jsx("span",{style:{fontSize:"0.744rem",fontWeight:700,background:"#fdeccf",color:Bi,padding:"0.12rem 0.5rem",borderRadius:"4px",letterSpacing:"0.04em"},children:"HIGH RISK"})]}),n.jsx("p",{style:{margin:"0 0 0.1rem 0",fontSize:"1.2rem",fontWeight:700,color:$r},children:"Pacific Grid Labs"}),n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"0.84rem",color:Nn},children:"Renewal · Mar 12 · 37 days · $180K ARR"}),n.jsxs("div",{style:{marginBottom:"1rem"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:"0.744rem",color:Nn,marginBottom:"0.3rem"},children:[n.jsx("span",{children:"Sentiment trend · last 7 calls"}),n.jsx("span",{style:{color:Bi,fontWeight:700},children:"-44 pts"})]}),n.jsxs("svg",{viewBox:"0 0 300 50",width:"100%",xmlns:"http://www.w3.org/2000/svg",preserveAspectRatio:"none",children:[n.jsx("polyline",{fill:"none",stroke:Bi,strokeWidth:"2",points:e.map((a,i)=>`${i/(e.length-1)*290+5},${50-a/t*40-5}`).join(" ")}),e.map((a,i)=>n.jsx("circle",{cx:i/(e.length-1)*290+5,cy:50-a/t*40-5,r:"2.5",fill:i===e.length-1?Bi:"#f0b873"},i))]})]}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:"0 0 0.45rem 0",fontSize:"0.72rem",fontWeight:700,color:Nn,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Detected signals"}
3580),[{label:"Champion left the company",detail:"Feb 18 · detected via email domain change",tone:Bi},{label:"Engagement drop",detail:"-68% email replies in 21 days",tone:Bi},{label:"'Contract questions' theme",detail:"mentioned on 3 calls",tone:Bi}].map(a=>n.jsxs("div",{style:{padding:"0.45rem 0",borderTop:"1px solid #eef1ef",display:"flex",gap:"0.5rem",alignItems:"baseline"},children:[n.jsx("span",{style:{color:a.tone,fontSize:"1.08rem",lineHeight:1},children:"⚠"}),n.jsxs("div",{style:{flex:1,minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.9rem",fontWeight:600,color:$r},children:a.label}),n.jsx("p",{style:{margin:0,fontSize:"0.78rem",color:Nn,lineHeight:1.35},children:a.detail})]})]},a.label))]})]})},Mhe=()=>{const e=[{name:"Q1 product launch",opens:"38%",replies:"12%",pipeline:"$420K",top:!0},{name:"Re-engagement nurture",opens:"42%",replies:"9%",pipeline:"$310K"},{name:"Event invite · Annual Summit",opens:"55%",replies:"7%",pipeline:"$195K"},{name:"Weekly digest",opens:"22%",replies:"2%",pipeline:"$38K",weak:!0}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px"},children:[n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"0.84rem",fontWeight:700,color:Zl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Email performance · last quarter"}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr auto auto auto",gap:"0.5rem 0.75rem",fontSize:"0.78rem",color:Nn,paddingBottom:"0.4rem",borderBottom:"1px solid #eef1ef"},children:[n.jsx("span",{style:{fontWeight:700,letterSpacing:"0.04em",textTransform:"uppercase"},children:"Campaign"}),n.jsx("span",{style:{fontWeight:700,letterSpacing:"0.04em",textTransform:"uppercase",textAlign:"right",textDecoration:"line-through",opacity:.6},children:"Opens"}),n.jsx("span",{style:{fontWeight:700,letterSpacing:"0.04em",textTransform:"uppercase",textAlign:"right",textDecoration:"line-through",opacity:.6},children:"Replies"}),n.jsx("span",{style:{fontWeight:700,letterSpacing:"0.04em",textTransform:"uppercase",textAlign:"right",color:Ql},children:"Pipeline"})]}),e.map(t=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr auto auto auto",gap:"0.5rem 0.75rem",padding:"0.55rem 0",borderBottom:"1px solid #f5f7fa",alignItems:"baseline",fontSize:"0.9rem"},children:[n.jsx("span",{style:{color:$r,fontWeight:600},children:t.name}),n.jsx("span",{style:{textAlign:"right",color:Nn,fontVariantNumeric:"tabular-nums",opacity:.6},children:t.opens}),n.jsx("span",{style:{textAlign:"right",color:Nn,fontVariantNumeric:"tabular-nums",opacity:.6},children:t.replies}),n.jsx("span",{style:{textAlign:"right",color:t.top?Ql:t.weak?Bi:$r,fontWeight:700,fontVariantNumeric:"tabular-nums"},children:t.pipeline})]},t.name))]})},Ehe=()=>{const e=[{name:"Referrers",share:53,tone:Ql,featured:!0},{name:"Events (dinners, summits)",share:18,tone:Zl},{name:"Podcasts & external webinars",share:12,tone:JG},{name:"Exec thought leadership",share:9,tone:Bi},{name:"Premium swag",share:5,tone:Nn},{name:"Content & SEO",share:3,tone:Nn}],t=Math.max(...e.map(a=>a.share));return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px"},children:[n.jsx("p",{style:{margin:"0 0 0.1rem 0",fontSize:"0.84rem",fontWeight:700,color:Zl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Inbound-led GTM motion"}),n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"0.864rem",color:Nn},children:"What really drives the pipeline · % share of deals"}),e.map(a=>n.jsxs("div",{style:{padding:"0.5rem 0",borderTop:"1px solid #eef1ef"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.25rem"},children:[n.jsx("span",{style:{fontSize:"0.936rem",fontWeight:a.featured?700:600,color:$r},children:a.name}),n.jsxs("span",{style:{fontSize:"0.96rem",fontWeight:700,color:a.tone,fontVariantNumeric:"tabular-nums"},children:[a.share,"%"]})]}),n.jsx("div",{style:{background:"#f0f3f0",borderRadius:"3px",height:"5
3580px",overflow:"hidden"},children:n.jsx("div",{style:{background:a.tone,height:"100%",width:`${a.share/t*100}%`,opacity:a.featured?1:.75}})})]},a.name))]})},Rhe=()=>{const e=[{label:"Sentiment dropped",detail:"negative on last 2 calls"},{label:"Champion went quiet",detail:"no reply in 18 days"},{label:"Pricing concerns",detail:"raised 3× this quarter"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Bi,letterSpacing:"0.05em",textTransform:"uppercase"},children:"At-risk signal · Acme Logistics"}),n.jsxs("div",{style:{marginTop:"0.65rem",padding:"0.7rem 0.85rem",borderRadius:"10px",background:"#f8edd6",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.6rem"},children:[n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:$r},children:"Renewal in 47 days · trending down"}),n.jsx("p",{style:{margin:"0.15rem 0 0 0",fontSize:"0.792rem",color:Nn},children:"Sentiment −38 pts over last 30 days"})]}),n.jsx("span",{style:{fontSize:"1.2rem",fontWeight:700,color:Bi},children:"▼"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.45rem"},children:e.map(t=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"10px 1fr",alignItems:"baseline",gap:"0.55rem"},children:[n.jsx("span",{style:{width:"8px",height:"8px",background:Bi,borderRadius:"50%",display:"inline-block",marginTop:"0.2rem"}}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.864rem",fontWeight:600,color:$r,lineHeight:1.3},children:t.label}),n.jsx("p",{style:{margin:0,fontSize:"0.792rem",color:Nn,lineHeight:1.35},children:t.detail})]})]},t.label))})]})},vg="#2d6a4f",eH="#347BD1",z4="#7a4a9e",BM="#a1560b",id="#1b1f1c",nd="#5f6563",tH="#73d1a0",Nhe="#9dd9bb",Ohe="#8fb8e7",Phe="#b89dd1",Ihe="#e8b97a",Dhe="#c0392b",nH=()=>{const e=[{label:"Opps created post-engagement",value:"12,480",tone:tH},{label:"Post-engagement won revenue",value:"$94M",tone:Nhe},{label:"Deals progressed by campaigns",value:"3,120",tone:Phe},{label:"Progressed pipeline",value:"$38M",tone:Ihe},{label:"In-cycle deals touched",value:"7,250",tone:Ohe}],t=["Attribution Overview","Keep / Optimize / Stop","Top Performers","Underperformers","Playbook","Methodology"];return n.jsxs("div",{style:{width:"100%",maxWidth:"980px",fontFamily:"'Geist', sans-serif",borderRadius:"14px",overflow:"hidden",boxShadow:"0 12px 40px rgba(27, 31, 28, 0.14)"},children:[n.jsxs("div",{style:{background:"linear-gradient(145deg, #0c1a14 0%, #1b2922 100%)",color:"#fff",padding:"1.5rem 1.75rem 1.25rem"},children:[n.jsx("p",{style:{margin:"0 0 0.25rem 0",fontSize:"1.38rem",fontWeight:700,lineHeight:1.2},children:"Campaign ROI Analysis"}),n.jsx("div",{style:{height:"1.1rem"}}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(160px, 1fr))",gap:"0.7rem"},children:e.map(a=>n.jsxs("div",{style:{background:"rgba(255,255,255,0.04)",border:"1px solid rgba(255,255,255,0.08)",borderRadius:"12px",padding:"0.95rem 1rem",minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.9rem",fontWeight:600,color:"#a6b3ad",lineHeight:1.35},children:a.label}),n.jsx("p",{style:{margin:"0.45rem 0 0 0",fontSize:"1.92rem",fontWeight:700,color:a.tone,lineHeight:1,fontVariantNumeric:"tabular-nums"},children:a.value})]},a.label))})]}),n.jsx("div",{style:{background:"#f5f7fa",borderTop:"1px solid #eaeeea",padding:"0.55rem 1.25rem",display:"flex",gap:"0.25rem",overflowX:"auto",whiteSpace:"nowrap"},children:t.map((a,i)=>n.jsx("span",{style:{padding:"0.5rem 0.95rem",borderRadius:"8px",fontSize:"0.9rem",fontWeight:600,color:i===0?id:nd,background:i===0?"#fff":"transparent",boxShadow:i===0?"0 1px 3px rgba(0,0,0,0.06)":"none",flexShrink:0},children:a},a))})]})},Whe=()=>{const e=Qp(),t=e?"1fr auto":"1fr 78px 84px 90px",a=[{label:"MARKETING",credit:"$42.5K",depth:0,subtotal:!0,sectionTone:eH},{label:"Bulk Marketing Email",credit:"$15.5K",depth:1},{label:"Q1 product update",credit:"$15.5K",date:"Feb 12, 2024",type:"Tracked",depth:2},{label:"Chatbot",credit:"$27.0K",depth:1},{label:"Qualified website chat",credit:"$27.0K",date:"Jan 8, 2026",type:"Tracked",depth:2},{label:"SDR",credit:"$28.0K",depth:0,subtotal:!0,sectionTone:BM},{label:"Direct Email · West",credit:"$12.0K",date:"Nov 4, 2025",type:"Tracked",depth:1},{label:"Direct Email · East",credit:"$16.0K",date:"Aug 18, 2023",type:"Tracked",depth:1},{label:"INFERRED INFLUENCES",credit:"$95.0K",depth:0,subtotal:!0,sectionTone:z4}],i=r=>r==="Response"?{background:"#f0e4f5",color:z4}:r==="Inferred"?{background:"#eef1ef",color:nd}:{background:"#e8f4ed",color:vg};return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"520px"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"1rem",gap:"0.5rem",flexWrap:"wrap"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.2rem",fontWeight:700,color:id},children:"Zero-sum attribution"}),n.jsx("span",{style:{fontSize:"0.9rem",fontWeight:700,color:vg,fontVariantNumeric:"tabular-nums"},children:"$165.5K · 100% allocated"})]}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:t,gap:"0.5rem",fontSize:"0.78rem",fontWeight:700,color:nd,padding:"0.55rem 0",borderBottom:"1px solid #eaeeea"},children:[n.jsx("span",{children:"Activity"}),n.jsx("span",{style:{textAlign:"right"},children:"Credit"}),!e&&n.jsx("span",{children:"Date"}),!e&&n.jsx("span",{children:"Type"})]}),a.map((r,o)=>{const l=r.subtotal;return n.jsxs("div",{style:{display:"grid",gridTemplateColumns:t,gap:"0.5rem",alignItems:"center",padding:"0.6rem 0",borderBottom:"1px solid #f5f7fa",background:l?"#F5F7FA":"transparent",margin:l?"0 -0.5rem":"0",paddingLeft:l?"0.5rem":"0",paddingRight:l?"0.5rem":"0"},children:[n.jsxs("span",{style:{fontSize:"0.9rem",fontWeight:l?700:r.depth===1?600:500,color:l?id:r.depth>=2?nd:id,paddingLeft:`${r.depth*.85}rem`,display:"flex",alignItems:"center",gap:"0.45rem"},children:[l&&r.sectionTone&&n.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:r.sectionTone,flexShrink:0}}),n.jsxs("span",{style:{display:"flex",flexDirection:"column",minWidth:0},children:[n.jsx("span",{children:r.label}),e&&r.date&&n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:500,color:nd,fontVariantNumeric:"tabular-nums"},children:r.date})]})]}),n.jsx("span",{style:{textAlign:"right",fontSize:"0.9rem",fontWeight:l?700:600,color:id,fontVariantNumeric:"tabular-nums"},children:r.credit}),!e&&n.jsx("span",{style:{fontSize:"0.84rem",color:nd,fontVariantNumeric:"tabular-nums"},children:r.date??""}),!e&&n.jsx("span",{children:r.type&&n.jsx("span",{style:{...i(r.type),fontSize:"0.78rem",fontWeight:700,padding:"0.18rem 0.5rem",borderRadius:"6px"},children:r.type})})]},o)})]})},zhe=()=>{const e=[{title:"Scale Up",subtitle:"HIGH CAUSAL IMPACT",icon:"🚀",bg:"#e4edf5",border:"#b4cae0",accentText:eH,items:[{label:"Content Downloads",note:"4,200 post-eng · 620 progressed · $9.2M won"},{label:"Webinars",note:"#1 progression engine · 89% rate"},{label:"Newsletters",note:"560 progressed · $11.8M pipeline"}]}
3580,{title:"Keep Doing",subtitle:"SOLID PERFORMERS",icon:"✓",bg:"#e8f4ed",border:"#b6d7c1",accentText:vg,items:[{label:"Annual User Summit",note:"2,840 post-eng · 410 progressed"},{label:"Field Roadshows",note:"2,100 post-eng · $19M won"},{label:"Partner Events",note:"980 post-eng · $6.4M won"}]},{title:"Optimize",subtitle:"FIX EXECUTION",icon:"⚠",bg:"#fdeccf",border:"#f0d591",accentText:BM,items:[{label:"Partner Webinars",note:"720 post-eng · only 115 progressed"},{label:"Product Launch Series",note:"3,400 post-eng · only 62 progressed"},{label:"Thank You Followups",note:"290 post-eng · $310K pipeline"}]},{title:"Stop or Rethink",subtitle:"LOW / NO CAUSAL IMPACT",icon:"⬤",bg:"#fbe0e0",border:"#e9b9b9",accentText:Dhe,items:[{label:"Generic Brand Announcements",note:"3,600 post-eng · 4 progressed · $42K"},{label:"Press Release Blasts",note:"210 post-eng · 3 progressed · $18K"},{label:"Generic Enterprise Blast Emails",note:"0.04% click rate · hurting reputation"}]}];return n.jsx("div",{style:{width:"100%",maxWidth:"980px",fontFamily:"'Geist', sans-serif"},children:n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(220px, 1fr))",gap:"0.85rem"},children:e.map(t=>n.jsxs("div",{style:{background:"#fff",border:"1px solid #e6ebe7",borderRadius:"14px",overflow:"hidden",display:"flex",flexDirection:"column",boxShadow:"0 4px 18px rgba(27,31,28,0.05)"},children:[n.jsx("div",{style:{height:4,background:t.accentText}}),n.jsxs("div",{style:{padding:"1.1rem 1.1rem 1.2rem",display:"flex",flexDirection:"column",gap:"0.85rem"},children:[n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"1.2rem",fontWeight:700,color:id},children:t.title}),n.jsx("p",{style:{margin:"0.25rem 0 0 0",fontSize:"0.84rem",fontWeight:700,color:t.accentText,letterSpacing:"0.04em"},children:t.subtitle})]}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.7rem",borderTop:"1px solid #eaeeea",paddingTop:"0.85rem"},children:t.items.map(a=>n.jsxs("div",{style:{display:"flex",gap:"0.5rem"},children:[n.jsx("span",{style:{width:7,height:7,borderRadius:"50%",background:t.accentText,marginTop:"0.42rem",flexShrink:0}}),n.jsxs("div",{style:{minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.95rem",fontWeight:700,color:id,lineHeight:1.3},children:a.label}),a.note&&n.jsx("p",{style:{margin:"0.15rem 0 0 0",fontSize:"0.84rem",color:nd,lineHeight:1.4},children:a.note})]})]},a.label))})]})]},t.title))})})},Lhe=()=>{const e=[{label:"Pipeline attributed",value:"$42.7M",tone:vg},{label:"Won pipeline",value:"$11.4M",tone:vg},{label:"Channels measured",value:"16",tone:z4},{label:"Touchpoints analyzed",value:"4.9M",tone:BM}],t=[{name:"Field events",share:.34,value:"$14.5M"},{name:"Referrals",share:.22,value:"$9.4M"},{name:"Content & SEO",share:.16,value:"$6.8M"}];return n.jsxs("div",{style:{background:"linear-gradient(160deg, #0e3724 0%, #1c5237 60%, #2d6a4f 100%)",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.12)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"480px",color:"#fff",position:"relative",overflow:"hidden"},children:[n.jsx("div",{"aria-hidden":"true",style:{position:"absolute",top:"-40px",right:"-40px",width:"180px",height:"180px",background:"radial-gradient(circle, rgba(255,255,255,0.08) 0%, rgba(255,255,255,0) 70%)",pointerEvents:"none"}}),n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"1.1rem",position:"relative",zIndex:1},children:[n.jsx("p",{style:{margin:0,fontSize:"1.32rem",fontWeight:700,color:"#fff",letterSpacing:"0.01em"},children:"Year in Review"}),n.jsx("span",{style:{fontSize:"0.9rem",color:"rgba(255,255,255,0.7)",fontVariantNumeric:"tabular-nums"},children:"FY 2026"})]}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:"0.65rem",marginBottom:"1.1rem",position:"relative",zIndex:1},children:e.map(a=>n.jsxs("div",{style:{background:"rgba(255,255,255,0.08)",border:"1px solid rgba(255,255,255,0.12)",borderRadius:"10px",padding:"0.7rem 0.85rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.9rem",fontWeight:500,color:"rgba(255,255,255,0.72)",lineHeight:1.3},children:a.label}),n.jsx("p",{style:{margin:"0.3rem 0 0 0",fontSize:"1.5rem",fontWeight:700,color:"#fff",fontVariantNumeric:"tabular-nums"},children:a.value})]},a.label))}),n.jsx("p",{style:{margin:"0 0 0.65rem 0",fontSize:"0.9rem",fontWeight:600,color:"rgba(255,255,255,0.72)",position:"relative",zIndex:1},children:"Top 3 channels by influenced pipeline"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.6rem",marginBottom:"1rem",position:"relative",zIndex:1},children:t.map((a,i)=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.15rem"},children:[n.jsxs("span",{style:{fontSize:"0.936rem",fontWeight:600,color:"#fff"},children:["#",i+1," · ",a.name]}),n.jsx("span",{style:{fontSize:"0.936rem",fontWeight:700,color:"#fff",fontVariantNumeric:"tabular-nums"},children:a.value})]}),n.jsx("div",{style:{height:"7px",background:"rgba(255,255,255,0.15)",borderRadius:"999px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${a.share*100}%`,height:"100%",background:tH,borderRadius:"999px"}})})]},a.name))}),n.jsx("div",{style:{borderTop:"1px solid rgba(255,255,255,0.12)",paddingTop:"0.85rem",position:"relative",zIndex:1},children:n.jsx("p",{style:{margin:0,fontSize:"0.95rem",color:"rgba(255,255,255,0.88)",lineHeight:1.5},children:"The biggest move this year: budget shifted from paid into events after multi-touch revealed a 20× pipeline-per-opp gap."})})]})},un="#2d6a4f",Uhe="#509A79",Jl="#347BD1",Ki="#7a4a9e",Cr="#a1560b",yi="#1b1f1c",ia="#5f6563",Fl="#eef1ef",Sy="#F5F7FA",Bhe=()=>{const e=[{label:"Accounts engaged",value:"3,074",sub:"4.44 engagements / account",tone:Cr},{label:"Total engagements",value:"13,639",sub:"across all touchpoints",tone:Cr},{label:"People engaged",value:"5,392",sub:"2.53 engagements / person",tone:Ki},{label:"Deal contacts engaged",value:"1,143",sub:"2.89 engagements / contact",tone:Ki},{label:"Opportunities influenced",value:"1,067",sub:"$75.7M",tone:un}
3580,{label:"Won opps influenced",value:"230",sub:"$17.7M",tone:un},{label:"Sourced opportunities",value:"318",sub:"$16.5M",tone:un},{label:"Opps created post-engagement",value:"591",sub:"$33.8M",tone:un}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"560px"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.2rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Jl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Web page report card"}),n.jsx("span",{style:{fontSize:"0.744rem",color:ia,fontStyle:"italic"},children:"last 90 days"})]}),n.jsx("p",{style:{margin:"0 0 0.25rem 0",fontSize:"1.2rem",fontWeight:700,color:yi},children:"Blog · How to Measure Event ROI"}),n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"0.84rem",color:ia},children:"/blog/how-to-measure-event-roi"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:"0.55rem"},children:e.map(t=>n.jsxs("div",{style:{background:Sy,borderRadius:"8px",padding:"0.6rem 0.7rem",border:`1px solid ${Fl}`,display:"flex",flexDirection:"column",gap:"0.15rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.72rem",fontWeight:600,color:ia,letterSpacing:"0.04em",textTransform:"uppercase"},children:t.label}),n.jsx("p",{style:{margin:0,fontSize:"1.26rem",fontWeight:700,color:yi,fontVariantNumeric:"tabular-nums"},children:t.value}),t.sub&&n.jsx("p",{style:{margin:0,fontSize:"0.78rem",color:t.tone,fontWeight:600},children:t.sub})]},t.label))})]})},qhe=()=>{const e=[{name:"Whitepaper · GTM Data Playbook",type:"Whitepaper",people:"3,340",dealContacts:"405",oppsCreated:"195",amount:"$12.5M",progressed:"63"},{name:"Blog · 4 Ways Upside Cleans Your Data",type:"Blog",people:"1,601",dealContacts:"351",oppsCreated:"113",amount:"$9.6M",progressed:"78"},{name:"Podcast · Future of Marketing E12",type:"Podcast",people:"882",dealContacts:"274",oppsCreated:"103",amount:"$5.7M",progressed:"91"},{name:"Blog · How to Measure Event ROI",type:"Blog",people:"690",dealContacts:"153",oppsCreated:"60",amount:"$3.0M",progressed:"63"},{name:"Webinar · CMO Panel Q3",type:"Webinar",people:"530",dealContacts:"181",oppsCreated:"86",amount:"$5.3M",progressed:"61"},{name:"Landing · Demo Request",type:"Landing",people:"247",dealContacts:"105",oppsCreated:"34",amount:"$3.99M",progressed:"47"}],t={Blog:Jl,Whitepaper:Ki,Podcast:Cr,Webinar:Uhe,Landing:un};return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"720px"},children:[n.jsx("p",{style:{margin:"0 0 0.85rem 0",fontSize:"0.84rem",fontWeight:700,color:Jl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Pipeline impact of content"}),n.jsx("div",{children:n.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:"0.84rem"},children:[n.jsx("thead",{children:n.jsx("tr",{children:["Page","Type","Opps created","$ Pipeline"].map((a,i)=>n.jsx("th",{style:{textAlign:i<=1?"left":"right",padding:"0.4rem 0.5rem 0.5rem",fontSize:"0.66rem",fontWeight:700,color:ia,letterSpacing:"0.05em",textTransform:"uppercase",borderBottom:`1px solid ${Fl}`,whiteSpace:"nowrap"},children:a},a))})}),n.jsx("tbody",{children:e.map((a,i)=>n.jsxs("tr",{style:{background:i%2===0?"#fff":Sy},children:[n.jsx("td",{style:{padding:"0.5rem 0.5rem",fontWeight:600,color:yi,maxWidth:"210px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",borderBottom:`1px solid ${Fl}`},title:a.name,children:a.name}),n.jsx("td",{style:{padding:"0.5rem 0.5rem",borderBottom:`1px solid ${Fl}`},children:n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,color:t[a.type],background:`${t[a.type]}15`,padding:"0.12rem 0.45rem",borderRadius:"999px",letterSpacing:"0.04em",textTransform:"uppercase",whiteSpace:"nowrap"},children:a.type})}),[a.oppsCreated,a.amount].map((r,o)=>n.jsx("td",{style:{padding:"0.5rem 0.5rem",textAlign:"right",color:yi,fontVariantNumeric:"tabular-nums",fontWeight:o===1?700:500,borderBottom:`1px solid ${Fl}`,whiteSpace:"nowrap"},children:r},o))]},a.name))})]})})]})},$he=()=>{const e=[{label:"Accounts engaged",page:"161",benchmark:"193",delta:"-17%",deltaPositive:!1,tone:Cr},{label:"Total engagements",page:"335",benchmark:"264",delta:"+27%",deltaPositive:!0,tone:Cr},{label:"People engaged",page:"334",benchmark:"263",delta:"+27%",deltaPositive:!0,tone:Ki},{label:"Opportunities influenced",page:"41",benchmark:"50",delta:"-18%",deltaPositive:!1,tone:un}
3580,{label:"Won opps influenced",page:"21",benchmark:"21",delta:"0%",deltaPositive:!0,tone:un},{label:"Progressed opps",page:"37",benchmark:"21",delta:"+76%",deltaPositive:!0,tone:un}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"560px"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.2rem",gap:"0.5rem",flexWrap:"wrap"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Jl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Page vs benchmark"}),n.jsx("span",{style:{fontSize:"0.66rem",fontWeight:600,color:un,background:`${un}15`,padding:"0.18rem 0.45rem",borderRadius:"999px",letterSpacing:"0.02em",textTransform:"uppercase"},children:"● Benchmarks on"})]}),n.jsx("p",{style:{margin:"0 0 0.25rem 0",fontSize:"1.2rem",fontWeight:700,color:yi},children:"Blog · How to Measure Event ROI"}),n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"0.84rem",color:ia},children:"Compared to the average of all blog posts"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:"0.55rem"},children:e.map(t=>n.jsxs("div",{style:{background:Sy,borderRadius:"8px",padding:"0.55rem 0.7rem",border:`1px solid ${Fl}`},children:[n.jsx("p",{style:{margin:"0 0 0.3rem 0",fontSize:"0.66rem",fontWeight:600,color:ia,letterSpacing:"0.04em",textTransform:"uppercase",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t.label}),n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.5rem"},children:[n.jsxs("div",{style:{flex:1,minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.6rem",fontWeight:700,color:ia,letterSpacing:"0.06em",textTransform:"uppercase"},children:"Page"}),n.jsxs("p",{style:{margin:0,fontSize:"1.26rem",fontWeight:700,color:yi,fontVariantNumeric:"tabular-nums"},children:[t.page,n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,marginLeft:"0.3rem",color:t.deltaPositive?un:Cr},children:t.delta})]})]}),n.jsxs("div",{style:{flex:1,minWidth:0,textAlign:"right"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.6rem",fontWeight:700,color:ia,letterSpacing:"0.06em",textTransform:"uppercase"},children:"Benchmark"}),n.jsx("p",{style:{margin:0,fontSize:"1.2rem",fontWeight:600,color:ia,fontVariantNumeric:"tabular-nums"},children:t.benchmark})]})]})]},t.label))})]})},Fhe=()=>{const e=[{num:0,title:"Setup & integrations",desc:"Customer name + reference case studies. Connects Upside MCP, Fireflies, Slack, Notion.",sources:["Upside MCP","Fireflies","Slack","Notion"],tone:Cr},{num:1,title:"Generate ~21 questions",desc:"Parses past case study structure and tone, drafts questions by section, presents for approval.",sources:["Past case studies"],tone:Ki},{num:2,title:"Research the answers",desc:"Runs SQL on pipeline data, searches call transcripts and Slack, pulls relevant Notion docs.",sources:["Snowflake","Gong / Fireflies","Slack","Notion"],tone:Ki},{num:3,title:"Pull video clips & quotes",desc:"Searches transcripts for compelling moments, ranks them, extracts quotes with timestamps.",sources:["Call transcripts","Email threads"],tone:Jl},{num:4,title:"Validate every metric",desc:"Pulls SQL metrics with citations, cross-references each claim against source data, flags gaps.",sources:["Snowflake","Methodology cites"],tone:Jl},{num:5,title:"Draft in Google Docs",desc:"Creates a shareable doc. Reviewers leave comments; the agent revises against the comment thread.",sources:["Google Docs"],tone:un},{num:6,title:"Publish as a webpage",desc:"Generates the HTML, applies the design system, pushes to Webflow via MCP or drops into Lovable.",sources:["Webflow MCP","Lovable"],tone:un}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"720px"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.5rem",marginBottom:"0.2rem",flexWrap:"wrap"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Jl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Case study creation skill"}),n.jsx("span",{style:{fontSize:"0.66rem",fontWeight:600,color:un,background:`${un}15`,padding:"0.18rem 0.45rem",borderRadius:"999px",letterSpacing:"0.02em",textTransform:"uppercase",whiteSpace:"nowrap"},children:"7 phases \\u00b7 1 prompt"})]}),n.jsx("p",{style:{margin:"0 0 0.25rem 0",fontSize:"1.2rem",fontWeight:700,color:yi},children:"Customer name in. Published case study out."}),n.jsx("p",{style:{margin:"0 0 1.1rem 0",fontSize:"0.9rem",color:ia,lineHeight:1.5},children:"Used to ship the Assembled, Comply, Dscout, Graphite, and Syndio case studies. Reviewers still conduct the interview and approve every revision; the agent does the rest."}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.55rem"},children:e.map(t=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"auto 1fr",gap:"0.85rem",alignItems:"stretch",background:Sy,border:`1px solid ${Fl}`,borderRadius:"10px",padding:"0.65rem 0.85rem"},children:[n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"28px",height:"28px",borderRadius:"999px",background:t.tone,color:"#fff",fontSize:"0.84rem",fontWeight:700,fontVariantNumeric:"tabular-nums",flexShrink:0},children:t.num}),n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"0.2rem",minWidth:0},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.5rem",flexWrap:"wrap"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.02rem",fontWeight:700,color:yi},children:t.title}),n.jsx("div",{style:{display:"flex",gap:"0.25rem",flexWrap:"wrap"},children:t.sources.map(a=>n.jsx("span",{style:{fontSize:"0.66rem",fontWeight:600,color:t.tone,background:"#fff",border:`1px solid ${t.tone}30`,padding:"0.12rem 0.4rem",borderRadius:"999px",letterSpacing:"0.02em",whiteSpace:"nowrap"},children:a},a))})]}),n.jsx("p",{style:{margin:0,fontSize:"0.84rem",color:ia,lineHeight:1.5},children:t.desc})]})]},t.num))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.744rem",color:ia,textAlign:"right"},children:"Source: \\u201CHow We Automated Five Marketing Functions\\u201D \\u00b7 aigtm.engineer"})]})},Ghe=()=>
3580{const e=[{group:"Sources",title:"Google Drive",subtitle:"Podcast transcripts + recordings",tone:Cr},{group:"Sources",title:"Notion",subtitle:"Brand guidelines + briefs",tone:Cr},{group:"Sources",title:"Upside MCP",subtitle:"Customer voice + proof points",tone:Cr},{group:"Brain",title:"Content writer agent",subtitle:"Drafts the post in our voice",tone:Ki},{group:"Brain",title:"Image generator agent",subtitle:"Brand-compliant visuals via Figma",tone:Ki},{group:"Brain",title:"Editor agent",subtitle:"Removes AI tells, checks tone",tone:Ki},{group:"Outputs",title:"Substack",subtitle:"Publishes the post directly",tone:un},{group:"Outputs",title:"Figma",subtitle:"Branded podcast cover image",tone:un},{group:"Outputs",title:"Slack \\#marketing",subtitle:"Notifies team for review",tone:un}],t=[{name:"Sources",tone:Cr,eyebrow:"Sources · connected"},{name:"Brain",tone:Ki,eyebrow:"Agents · orchestrated"},{name:"Outputs",tone:un,eyebrow:"Outputs · published"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"560px"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.5rem",marginBottom:"0.2rem",flexWrap:"wrap"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Jl,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Podcast \\u2192 branded post"}),n.jsx("span",{style:{fontSize:"0.66rem",fontWeight:600,color:un,background:`${un}15`,padding:"0.18rem 0.45rem",borderRadius:"999px",letterSpacing:"0.02em",textTransform:"uppercase"},children:"● Automated"})]}),n.jsx("p",{style:{margin:"0 0 0.25rem 0",fontSize:"1.2rem",fontWeight:700,color:yi},children:"Future of Marketing podcast \\u2192 Substack"}),n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"0.864rem",color:ia,lineHeight:1.5},children:"Each transcript answers a question we never asked the guest directly: \\u201CHow would they answer \\u2018What is the future of marketing?\\u2019\\u201D Branded images come from the Figma MCP using the brand guideline doc."}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.85rem"},children:t.map(a=>{const i=e.filter(r=>r.group===a.name);return n.jsxs("div",{children:[n.jsx("p",{style:{margin:"0 0 0.45rem 0",fontSize:"0.66rem",fontWeight:700,color:a.tone,letterSpacing:"0.06em",textTransform:"uppercase"},children:a.eyebrow}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(150px, 1fr))",gap:"0.45rem"},children:i.map(r=>n.jsxs("div",{style:{background:Sy,border:`1px solid ${Fl}`,borderRadius:"8px",padding:"0.5rem 0.65rem",display:"flex",flexDirection:"column",gap:"0.1rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.936rem",fontWeight:700,color:yi,lineHeight:1.2},children:r.title}),n.jsx("p",{style:{margin:0,fontSize:"0.78rem",color:ia,lineHeight:1.4},children:r.subtitle})]},r.title))})]},a.name)})})]})},Hhe=()=>{const e=[{topic:"Migrating from incumbent X",mentions:12,pipeline:"$480K",pct:100},{topic:"Multi-region rollout",mentions:9,pipeline:"$310K",pct:65},{topic:"SOC 2 questions",mentions:7,pipeline:"$190K",pct:40},{topic:"Roadmap vs competitor Y",mentions:5,pipeline:"$140K",pct:29}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Ki,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Topics buyers raise · no matching page"}),n.jsx("div",{style:{marginTop:"0.6rem",paddingBottom:"0.65rem",borderBottom:"1px solid #eef1ef"},children:n.jsxs("p",{style:{margin:0,fontSize:"1.08rem",fontWeight:700,color:yi,lineHeight:1.2},children:["$1.1M",n.jsx("span",{style:{fontSize:"0.792rem",color:ia,fontWeight:500,marginLeft:"0.4rem"},children:"in deals touched topics with no landing page"})]})}),n.jsx("div",{style:{marginTop:"0.75rem",display:"grid",gap:"0.55rem"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 56px",alignItems:"center",gap:"0.55rem"},children:[n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.888rem",fontWeight:a===0?700:600,color:yi,lineHeight:1.2},children:t.topic}),n.jsx("div",{style:{marginTop:"0.25rem",height:"6px",background:"#eef1ef",borderRadius:"3px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:Ki,opacity:a===0?1:.55,borderRadius:"3px"}})}),n.jsxs("p",{style:{margin:"0.2rem 0 0 0",fontSize:"0.744rem",color:ia},children:[t.mentions," mentions across calls + emails"]})]}),n.jsx("span",{style:{fontSize:"0.888rem",fontWeight:700,color:yi,textAlign:"right"},children:t.pipeline})]},t.topic))})]})},eg="#2d6a4f",Yhe="#509A79",Z0="#347BD1",Vhe="#7a4a9e",aH="#a1560b",xg="#1b1f1c",Fi="#5f6563",ws="#eef1ef",L4="#F5F7FA",Khe=()=>{const e=["Mon","Tue","Wed","Thu","Fri"],t=["8a","9a","10a","11a","12p","1p","2p","3p","4p","5p","6p"],a=[[82,88,91,84,60,38,42,35,48,55,30],[78,86,90,81,58,35,40,32,45,52,28],[76,84,88,79,55,33,38,30,42,50,25],[70,80,86,76,52,30,36,28,40,48,22],[62,72,78,68,45,25,30,22,32,40,18]],i=o=>o>=80?"#2d6a4f":o>=65?"#509A79":o>=50?"#94c4ad":o>=35?"#e3c98c":o>=25?"#d4a06a":"#c87a5a",r=o=>o>=50?"#fff":"#1b1f1c";return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"560px"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.5rem",marginBottom:"0.2rem",flexWrap:"wrap"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Z0,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Send time optimizer"}),n.jsx("span",{style:{fontSize:"0.66rem",fontWeight:600,color:eg,background:`${eg}15`,padding:"0.18rem 0.45rem",borderRadius:"999px",letterSpacing:"0.02em",textTransform:"uppercase"},children:"● Stat-sig filtered"})]}),n.jsx("p",{style:{margin:"0 0 0.15rem 0",fontSize:"1.2rem",fontWeight:700,color:xg},children:"Reply rate by day × hour"}),n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"0.84rem",color:Fi},children:"3.4M emails analyzed · grouped by send timestamp"}),n.jsx("div",{style:{overflowX:"auto",WebkitOverflowScrolling:"touch",marginLeft:"-0.25rem",marginRight:"-0.25rem",paddingLeft:"0.25rem",paddingRight:"0.25rem"},children:n.jsxs("table",{style:{borderCollapse:"separate",borderSpacing:"3px",fontSize:"0.72rem",minWidth:"440px"},children:[n.jsx("thead",{children:n.jsxs("tr",{children:[n.jsx("th",{style:{width:"32px"}}),t.map(o=>n.jsx("th",{style:{fontSize:"0.66rem",fontWeight:700,color:Fi,letterSpacing:"0.04em",textTransform:"uppercase",padding:"2px 0"},children:o},o))]})}),n.jsx("tbody",{children:e.map((o,l)=>n.jsxs("tr",{children:[n.jsx("td",{style:{fontSize:"0.72rem",fontWeight:700,color:Fi,letterSpacing:"0.04em",textTransform:"uppercase",paddingRight:"6px"},children:o}),a[l].map((d,u)=>n.jsx("td",{style:{width:"30px",height:"26px",borderRadius:"4px",background:i(d),color:r(d),fontSize:"0.66rem",fontWeight:700,textAlign:"center",verticalAlign:"middle",fontVariantNumeric:"tabular-nums"},title:`${e[l]} ${t[u]} · reply index ${d}`,children:d},u))]},o))})]})}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.5rem",marginTop:"1rem",paddingTop:"0.85rem",borderTop:`1px solid ${ws}`},children:[n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.66rem",fontWeight:700,color:Fi,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Best window"}),n.jsx("p",{style:{margin:"0.15rem 0 0 0",fontSize:"1.02rem",fontWeight:700,color:eg},children:"Tue–Wed · 9a–11a"})]}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.66rem",fontWeight:700,color:Fi,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Avoid"}),n.jsx("p",{style:{margin:"0.15rem 0 0 0",fontSize:"1.02rem",fontWeight:700,color:aH},children:"Fri afternoon"})]})]})]})},Xhe=()=>{const e=[{name:"Rep · West region",region:"West",sent:"1,248",replies:"287",replyRate:"23.0%",oppsCreated:"41",pipeline:"$3.1M",highlight:!0},{name:"Rep · East region",region:"East",sent:"1,103",replies:"248",replyRate:"22.5%",oppsCreated:"37",pipeline:"$2.7M"},{name:"Rep · Mid-Market North",region:"North",sent:"986",replies:"183",replyRate:"18.6%",oppsCreated:"28",pipeline:"$1.9M"},{name:"Rep · EMEA",region:"EMEA",sent:"812",replies:"147",replyRate:"18.1%",oppsCreated:"24",pipeline:"$1.6M"},{name:"Rep · West region (jr)",region:"West",sent:"744",replies:"118",replyRate:"15.9%",oppsCreated:"18",pipeline:"$0.9M"},{name:"Rep · Central",region:"Central",sent:"692",replies:"96",replyRate:"13.9%",oppsCreated:"12",pipeline:"$0.6M"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"560px"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.5rem",marginBottom:"0.2rem",flexWrap:"wrap"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Z0,letterSpacing:"0.05em",textTransform:"uppercase"},children:"1:1 email · rep effectiveness"}),n.jsx("span",{style:{fontSize:"0.66rem",fontWeight:600,color:Fi,background:L4,border:`1px solid ${ws}`,padding:"0.18rem 0.45rem",borderRadius:"999px",letterSpacing:"0.02em",textTransform:"uppercase"},children:"Sorted by pipeline"})]}),n.jsx("p",{style:{margin:"0 0 0.85rem 0",fontSize:"0.84rem",color:Fi},children:"Last 90 days · all reps with 500+ sends"}),n.jsx("div",{children:n.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:"0.84rem"},children:[n.jsx("thead",{children:n.jsx("tr",{children:["Rep","Opps created","$ Pipeline"].map((t,a)=>n.jsx("th",{style:{textAlign:a===0?"left":"right",padding:"0.4rem 0.5rem 0.5rem",fontSize:"0.66rem",fontWeight:700,color:Fi,letterSpacing:"0.05em",textTransform:"uppercase",borderBottom:`1px solid ${ws}`,whiteSpace:"nowrap"},children:t},t))})}),n.jsx("tbody",{children:e.map((t,a)=>n.jsxs("tr",{style:{background:a%2===0?"#fff":L4},children:[n.jsx("td",{style:{padding:"0.5rem 0.5rem",fontWeight:600,color:xg,borderBottom:`1px solid ${ws}`,whiteSpace:"nowrap"},children:t.name}),[t.oppsCreated,t.pipeline].map((i,r)=>n.jsx("td",{style:{padding:"0.5rem 0.5rem",textAlign:"right",color:t.highlight&&r===1?eg:xg,fontVariantNumeric:"tabular-nums",fontWeight:r===1?700:500,borderBottom:`1px solid ${ws}`,whiteSpace:"nowrap"},children:i},r))]},t.name))})]})}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.744rem",color:Fi,textAlign:"right"},children:"Anonymized illustrative data"})]})},Qhe=()=>{const e=[{name:"1.3 · Quick win in 14 days",sequence:"Activation",sends:"12,409",replyRate:"11.4%",oppsInfluenced:"192",pipeline:"$8.7M"},{name:"2.1 · One champion, one win",sequence:"Late-stage",sends:"3,847",replyRate:"16.9%",oppsInfluenced:"164",pipeline:"$7.3M"},{name:"1.1 · The 3-question discovery",sequence:"Onboarding",sends:"9,621",replyRate:"8.2%",oppsInfluenced:"118",pipeline:"$4.9M"},{name:"3.2 · 'You'd be surprised how many'",sequence:"Win-back",sends:"2,194",replyRate:"12.5%",oppsInfluenced:"63",pipeline:"$3.4M"},{name:"4.4 · Q1 retro + customer voice",sequence:"Re-engage",sends:"5,008",replyRate:"7.1%",oppsInfluenced:"47",pipeline:"$2.1M"},{name:"1.5 · The objection-handling kit",sequence:"Activation",sends:"7,212",replyRate:"6.4%",oppsInfluenced:"32",pipeline:"$1.4M"}],t={Onboarding:Z0,Activation:eg,"Win-back":Vhe,"Late-stage":aH,"Re-engage":Yhe};return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"720px"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Z0,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Nurture track · pipeline ROI"}),n.jsx("p",{style:{margin:"0.2rem 0 0.85rem 0",fontSize:"0.864rem",color:Fi},children:"Sorted by influenced pipeline"}),n.jsx("div",{children:n.jsxs("table",{style:{width:"100%",borderCollapse:"collapse",fontSize:"0.84rem"},children:[n.jsx("thead",{children:n.jsx("tr",{children:["Email","Track","Opps influenced","$ Pipeline"].map((a,i)=>n.jsx("th",{style:{textAlign:i<=1?"left":"right",padding:"0.4rem 0.5rem 0.5rem",fontSize:"0.66rem",fontWeight:700,color:Fi,letterSpacing:"0.05em",textTransform:"uppercase",borderBottom:`1px solid ${ws}`,whiteSpace:"nowrap"},children:a},a))})}),n.jsx("tbody",{children:e.map((a,i)=>n.jsxs("tr",{style:{background:i%2===0?"#fff":L4},children:[n.jsx("td",{style:{padding:"0.5rem 0.5rem",fontWeight:600,color:xg,maxWidth:"260px",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap",borderBottom:`1px solid ${ws}`},title:a.name,children:a.name}),n.jsx("td",{style:{padding:"0.5rem 0.5rem",borderBottom:`1px solid ${ws}`},children:n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,color:t[a.sequence],background:`${t[a.sequence]}15`,padding:"0.12rem 0.45rem",borderRadius:"999px",letterSpacing:"0.04em",textTransform:"uppercase",whiteSpace:"nowrap"},children:a.sequence})}),[a.oppsInfluenced,a.pipeline].map((r,o)=>n.jsx("td",{style:{padding:"0.5rem 0.5rem",textAlign:"right",color:xg,fontVariantNumeric:"tabular-nums",fontWeight:o===1?700:500,borderBottom:`1px solid ${ws}`,whiteSpace:"nowrap"},children:r},o))]},a.name))})]})}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.744rem",color:Fi,textAlign:"right"},children:"Anonymized illustrative data"})]})},Pr="#2d6a4f",Ir="#347BD1",Jj="#7a4a9e",Zhe="#a1560b",Hn="#1b1f1c",Ua="#5f6563",Jhe=()=>{const e=[{name:"VP Marketing",note:"Joined Q3 · net-new champion"},{name:"Director RevOps",note:"Held budget on prior eval"},{name:"CFO",note:"Approver on $250K+ deals"}],t=["Native HubSpot sync","SOC 2 Type II","Zero-sum attribution"],a=["Salesforce","Marketo","Gong","(Compet
3580itor)"],i=(r,o,l)=>n.jsx("span",{style:{display:"inline-flex",alignItems:"center",padding:"0.2rem 0.55rem",borderRadius:"999px",fontSize:"0.744rem",fontWeight:700,marginRight:"0.3rem",marginBottom:"0.3rem",letterSpacing:"0.02em",background:o,color:l,whiteSpace:"nowrap"},children:r},r);return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.75rem"},children:n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Jj,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Win-Back Kit · 1 of 99"})}),n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:"0.65rem",borderBottom:"1px solid #eef1ef"},children:[n.jsx("h4",{style:{margin:0,fontSize:"1.2rem",fontWeight:700,color:Hn},children:"Acme Logistics"}),n.jsx("span",{style:{display:"inline-flex",alignItems:"center",padding:"0.2rem 0.55rem",borderRadius:"999px",fontSize:"0.744rem",fontWeight:700,letterSpacing:"0.02em",background:"#f3e9d6",color:Zhe,whiteSpace:"nowrap"},children:"Closed-Lost · Q2 last year"})]}),n.jsxs("div",{style:{marginTop:"0.75rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Ir,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Narrative"}),n.jsx("p",{style:{margin:"0.25rem 0 0 0",fontSize:"0.888rem",color:Hn,lineHeight:1.45},children:"Evaluated alongside two competitors. Stalled on integration gaps + champion departure. 14 calls, 38 emails on file."})]}),n.jsxs("div",{style:{marginTop:"0.85rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Ir,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Decision makers"}),n.jsx("div",{style:{marginTop:"0.4rem",display:"grid",gap:"0.3rem"},children:e.map(r=>n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.5rem",fontSize:"0.84rem"},children:[n.jsx("span",{style:{fontWeight:700,color:Hn,minWidth:"100px"},children:r.name}),n.jsx("span",{style:{color:Ua,fontSize:"0.792rem"},children:r.note})]},r.name))})]}),n.jsxs("div",{style:{marginTop:"0.85rem",display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.85rem"},children:[n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Pr,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Shipped since"}),n.jsx("div",{style:{marginTop:"0.35rem"},children:t.map(r=>i(r,"#e8f4ed",Pr))})]}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Jj,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Stack (from calls)"}),n.jsx("div",{style:{marginTop:"0.35rem"},children:a.map(r=>i(r,"#efe7f4",Jj))})]})]}),n.jsxs("div",{style:{marginTop:"0.85rem",padding:"0.65rem 0.75rem",borderRadius:"10px",background:"#eef5fa"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Ir,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Re-engagement hook"}),n.jsx("p",{style:{margin:"0.25rem 0 0 0",fontSize:"0.864rem",color:Hn,lineHeight:1.45,fontStyle:"italic"},children:'"Last June you flagged the HubSpot gap. That shipped in March. New champion in seat. Worth a 20-min reset?"'})]}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.792rem",color:Ua,textAlign:"center",fontStyle:"italic"},children:"Synthesized from CRM history, call transcripts, email threads, and product changelog by Upside MCP."})]})},epe=()=>{const e=[{name:"Champion Revival",fit:92,top:!0},{name:"Stack Migration",fit:76,top:!1},{name:"Executive Shift",fit:41,top:!1}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.75rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Pr,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Next Best Play · Acme Logistics"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:600,color:Ua,fontStyle:"italic"},children:"ranked across 8 plays"})]}),n.jsx("div",{style:{display:"grid",gap:"0.4rem",marginBottom:"0.85rem"},children:e.map(t=>{const a=t.top?Pr:"#cdd5d0",i=t.top?Hn:Ua;return n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"120px 1fr 36px",alignItems:"center",gap:"0.6rem"},children:[n.jsx("span",{style:{fontSize:"0.864rem",fontWeight:t.top?700:500,color:i},children:t.name}),n.jsx("div",{style:{height:"8px",background:"#eef1ef",borderRadius:"4px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.fit}%`,height:"100%",background:a,borderRadius:"4px"}})}),n.jsxs("span",{style:{fontSize:"0.84rem",fontWeight:700,color:i,textAlign:"right"},children:[t.fit,"%"]})]},t.name)}
3580)}),n.jsxs("div",{style:{padding:"0.7rem 0.8rem",borderRadius:"10px",background:"#e8f4ed"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Pr,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Recommended action"}),n.jsx("p",{style:{margin:"0.3rem 0 0.45rem 0",fontSize:"0.888rem",color:Hn,lineHeight:1.45,fontWeight:600},children:"Champion Revival → reach out to net-new VP Marketing"}),n.jsx("p",{style:{margin:0,fontSize:"0.816rem",color:Ua,lineHeight:1.45},children:"Lead with the integration that shipped this quarter (their stalled objection). Reference the prior champion's scoping notes from the Q3 call. Suggest a 20-min reset."})]}),n.jsxs("div",{style:{marginTop:"0.65rem",display:"flex",alignItems:"center",justifyContent:"space-between",fontSize:"0.744rem",color:Ua},children:[n.jsxs("span",{children:[n.jsx("span",{style:{fontWeight:700,color:Ir},children:"3"})," contacts to add"]}),n.jsxs("span",{children:[n.jsx("span",{style:{fontWeight:700,color:Ir},children:"4"})," discovery questions queued"]})]})]})},tpe=()=>{const e=[{role:"VP Marketing (champion)",note:"weekly user",sentiment:"up"},{role:"Director RevOps",note:"owns renewal budget",sentiment:"flat"},{role:"CFO",note:"asked for ROI memo on Mar 4",sentiment:"down"}],t=["Engagement on core feature down 22% MoM","No exec touch since Q3 launch"],a=i=>i==="up"?Pr:i==="down"?"#a1560b":"#bcc7c0";return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.75rem"},children:n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Ir,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Customer Dossier · 1 of 240"})}),n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:"0.65rem",borderBottom:"1px solid #eef1ef"},children:[n.jsx("h4",{style:{margin:0,fontSize:"1.2rem",fontWeight:700,color:Hn},children:"Acme Logistics"}),n.jsx("span",{style:{display:"inline-flex",alignItems:"center",padding:"0.2rem 0.55rem",borderRadius:"999px",fontSize:"0.744rem",fontWeight:700,letterSpacing:"0.02em",background:"#f3e9d6",color:"#a1560b",whiteSpace:"nowrap"},children:"Renewal · Mar 12"})]}),n.jsxs("div",{style:{marginTop:"0.75rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Ir,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Situation"}),n.jsx("p",{style:{margin:"0.25rem 0 0 0",fontSize:"0.888rem",color:Hn,lineHeight:1.45},children:"Renewal in 47 days. Champion still strong, but exec sponsor went quiet. 22 calls, 64 emails on file."})]}),n.jsxs("div",{style:{marginTop:"0.85rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Ir,letterSpacing:"0.05em",textTransform:"uppercase"},children:"People"}),n.jsx("div",{style:{marginTop:"0.4rem",display:"grid",gap:"0.3rem"},children:e.map(i=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"10px 1fr",alignItems:"baseline",gap:"0.55rem",fontSize:"0.84rem"},children:[n.jsx("span",{style:{width:"8px",height:"8px",borderRadius:"50%",background:a(i.sentiment),display:"inline-block",marginTop:"0.2rem"}}),n.jsxs("div",{children:[n.jsx("span",{style:{fontWeight:700,color:Hn},children:i.role})," ",n.jsxs("span",{style:{color:Ua,fontSize:"0.792rem"},children:["· ",i.note]})]})]},i.role))})]}),n.jsxs("div",{style:{marginTop:"0.85rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:"#a1560b",letterSpacing:"0.05em",textTransform:"uppercase"},children:"Risks"}),n.jsx("ul",{style:{margin:"0.3rem 0 0 0",paddingLeft:"1rem",fontSize:"0.84rem",color:Hn,lineHeight:1.5},children:t.map(i=>n.jsx("li",{children:i},i))})]}),n.jsxs("div",{style:{marginTop:"0.85rem",padding:"0.65rem 0.75rem",borderRadius:"10px",background:"#e8f4ed"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Pr,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Recommended action"}),n.jsx("p",{style:{margin:"0.25rem 0 0 0",fontSize:"0.864rem",color:Hn,lineHeight:1.45,fontStyle:"italic"},children:"Schedule an exec QBR before Feb 20. Lead with the Mar 4 ROI memo the CFO asked for. Bring the champion as co-host."})]})]})},npe=()=>{const e=[{account:"Acme Logistics",stage:"Stage 4",crm:2,recovered:7,coverage:"strong"},{account:"Northwind Labs",stage:"Stage 3",crm:1,recovered:4,coverage:"thin"},{account:"Pacific Grid",stage:"Stage 3",crm:1,recovered:1,coverage:"single"},{account:"Coast Retail",stage:"Stage 5",crm:3,recovered:6,coverage:"strong"}],t=i=>i==="strong"?Pr:i==="thin"?"#a1560b":"#c0392b",a=i=>i==="strong"?"Strong":i==="thin"?"Thin · coach":"Single thread";return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.6rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Ir,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Multi-threading · weekly"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:600,color:Ua,fontStyle:"italic"},children:"EMEA region · this week"})]}),n.jsxs("div",{style:{paddingBottom:"0.65rem",borderBottom:"1px solid #eef1ef"}
3580,children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",color:Ua},children:"Deals with <3 contacts engaged"}),n.jsxs("p",{style:{margin:"0.15rem 0 0 0",fontSize:"1.56rem",fontWeight:700,color:Hn,lineHeight:1.1},children:["~6%",n.jsx("span",{style:{fontSize:"0.792rem",color:"#c0392b",fontWeight:600,marginLeft:"0.4rem"},children:"win rate · vs 38% w/ 3+"})]})]}),n.jsxs("div",{style:{marginTop:"0.75rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:Ir,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Active deals · recovered vs CRM contacts"}),n.jsx("div",{style:{marginTop:"0.45rem",display:"grid",gap:"0.4rem"},children:e.map(i=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 70px 90px",alignItems:"center",gap:"0.5rem",padding:"0.45rem 0.6rem",borderRadius:"8px",background:"#f5f7fa"},children:[n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.864rem",fontWeight:700,color:Hn,lineHeight:1.2},children:i.account}),n.jsx("p",{style:{margin:0,fontSize:"0.72rem",color:Ua},children:i.stage})]}),n.jsxs("div",{style:{textAlign:"center"},children:[n.jsxs("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:Hn,lineHeight:1.2},children:[i.crm,n.jsx("span",{style:{color:Ua,fontWeight:500},children:" → "}),n.jsx("span",{style:{color:Pr},children:i.recovered})]}),n.jsx("p",{style:{margin:0,fontSize:"0.66rem",color:Ua,letterSpacing:"0.03em",textTransform:"uppercase"},children:"CRM → real"})]}),n.jsx("span",{style:{fontSize:"0.696rem",fontWeight:700,padding:"0.18rem 0.4rem",borderRadius:"999px",background:"#fff",color:t(i.coverage),border:`1px solid ${t(i.coverage)}44`,textAlign:"center"},children:a(i.coverage)})]},i.account))})]})]})},ape=()=>{const e=[{label:"ROI in 90 days",adherence:78,winLift:"+24pp",liftPct:96,accent:"good"},{label:"Native CRM healing",adherence:64,winLift:"+18pp",liftPct:72,accent:"good"},{label:"MCP self-serve",adherence:41,winLift:"+9pp",liftPct:36,accent:"mid"},{label:"Legacy comparison",adherence:22,winLift:"+2pp",liftPct:8,accent:"low"}],t=a=>a==="good"?Pr:a==="mid"?"#a1560b":"#bcc7c0";return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:"#7a4a9e",letterSpacing:"0.05em",textTransform:"uppercase"},children:"Messaging adherence · stage 2 → 4"}),n.jsxs("div",{style:{marginTop:"0.55rem",paddingBottom:"0.65rem",borderBottom:"1px solid #eef1ef",fontSize:"0.84rem",color:Hn,lineHeight:1.45},children:["On-message reps progress deals"," ",n.jsx("span",{style:{fontWeight:700,color:Pr},children:"2.1×"})," faster. Off-message reps cluster at"," ",n.jsx("span",{style:{fontWeight:700,color:"#c0392b"},children:"14%"})," win rate."]}),n.jsx("div",{style:{marginTop:"0.75rem",display:"grid",gap:"0.6rem"},children:e.map(a=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"0.4rem",marginBottom:"0.25rem"},children:[n.jsx("span",{style:{fontSize:"0.864rem",fontWeight:700,color:Hn},children:a.label}),n.jsxs("span",{style:{fontSize:"0.792rem",fontWeight:700,color:t(a.accent)},children:[a.winLift," win"]})]}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"62px 1fr 40px",alignItems:"center",gap:"0.5rem",fontSize:"0.72rem",marginBottom:"0.18rem"},children:[n.jsx("span",{style:{color:Ua,textTransform:"uppercase",letterSpacing:"0.04em",fontWeight:700},children:"Adherence"}),n.jsx("div",{style:{height:"5px",background:"#eef1ef",borderRadius:"3px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${a.adherence}%`,height:"100%",background:Ir,opacity:a.accent==="low"?.45:.85,borderRadius:"3px"}})}),n.jsxs("span",{style:{fontWeight:700,color:Hn,textAlign:"right"},children:[a.adherence,"%"]})]}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"62px 1fr 40px",alignItems:"center",gap:"0.5rem",fontSize:"0.72rem"},children:[n.jsx("span",{style:{color:Ua,textTransform:"uppercase",letterSpacing:"0.04em",fontWeight:700},children:"Win lift"}
3580),n.jsx("div",{style:{height:"5px",background:"#eef1ef",borderRadius:"3px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${a.liftPct}%`,height:"100%",background:t(a.accent),borderRadius:"3px"}})}),n.jsx("span",{style:{fontWeight:700,color:t(a.accent),textAlign:"right"},children:a.winLift})]})]},a.label))})]})},WP="#347BD1",eS="#a1560b",T0="#1b1f1c",_h="#5f6563",ipe=()=>{const e=[{name:"LinkedIn",mentions:124,pipeline:"$1.2M",pct:100,top:!0},{name:"X (Twitter)",mentions:58,pipeline:"$420K",pct:36},{name:"Reddit",mentions:31,pipeline:"$210K",pct:18}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:eS,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Organic social · by platform"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.55rem"},children:e.map((t,a)=>{const i=t.top?T0:_h,r=t.top?eS:"#d3b07a";return n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"26px 110px 1fr 56px",alignItems:"center",gap:"0.55rem"},children:[n.jsxs("span",{style:{fontSize:"0.792rem",fontWeight:700,color:t.top?eS:_h,textAlign:"center"},children:["#",a+1]}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.888rem",fontWeight:t.top?700:600,color:i,lineHeight:1.2},children:t.name}),n.jsxs("p",{style:{margin:0,fontSize:"0.744rem",color:_h},children:[t.mentions," mentions"]})]}),n.jsx("div",{style:{height:"8px",background:"#eef1ef",borderRadius:"4px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:r,borderRadius:"4px"}})}),n.jsx("span",{style:{fontSize:"0.864rem",fontWeight:700,color:i,textAlign:"right"},children:t.pipeline})]},t.name)})})]})},rpe=()=>{const e=[{label:"Keynote talks",pipeline:"$580K",pct:100},{label:"LinkedIn posts",pipeline:"$420K",pct:72},{label:"Podcast appearances",pipeline:"$280K",pct:48},{label:"Long-form essays",pipeline:"$120K",pct:21}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:WP,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Executive social as a channel"}),n.jsxs("div",{style:{marginTop:"0.65rem",display:"flex",alignItems:"baseline",gap:"0.4rem",paddingBottom:"0.65rem",borderBottom:"1px solid #eef1ef"},children:[n.jsx("span",{style:{fontSize:"1.92rem",fontWeight:700,color:T0,lineHeight:1},children:"$1.4M"}),n.jsx("span",{style:{fontSize:"0.84rem",color:_h,lineHeight:1.3},children:"pipeline from exec thought leadership · last 90 days"})]}),n.jsx("div",{style:{marginTop:"0.75rem",display:"grid",gap:"0.5rem"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"150px 1fr 56px",alignItems:"center",gap:"0.55rem"},children:[n.jsx("span",{style:{fontSize:"0.864rem",fontWeight:a===0?700:500,color:a===0?T0:_h},children:t.label}),n.jsx("div",{style:{height:"8px",background:"#eef1ef",borderRadius:"4px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:WP,opacity:.35+(a===0?.6:a===1?.45:a===2?.3:.2),borderRadius:"4px"}})}),n.jsx("span",{style:{fontSize:"0.864rem",fontWeight:700,color:a===0?T0:_h,textAlign:"right"},children:t.pipeline})]},t.label))})]})},sa="#2d6a4f",iH="#509A79",rH="#347BD1",oH="#7a4a9e",zP="#c0392b",bi="#1b1f1c",Dr="#5f6563",Pd="#e6ebe7",ope="0 8px 30px rgba(27, 31, 28, 0.08)",iu={background:"#fff",borderRadius:"16px",boxShadow:ope,padding:"1.5rem 1.6rem",width:"100%",maxWidth:"560px",fontFamily:"Geist, sans-serif"},spe="ui-monospace, 'SF Mono', Menlo, monospace",LP=e=>({margin:0,fontSize:"0.62rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),lpe=()=>n.jsx("div",{style:{textAlign:"center",color:iH,fontSize:"1rem",fontWeight:700,lineHeight:1,margin:"0.5rem 0"},children:"↓"}),sH=()=>{const e=[{label:"Salesforce",logo:"/images/src-salesforce.png"},{label:"Marketo",logo:"/images/src-marketo.png"},{label:"Gong",logo:"/images/src-gong.png"},{label:"Email",Icon:xy},{label:"Calendar",Icon:S$}
3580],a=Qp()?e.slice(0,3):e,i=[{label:"Identity resolved",detail:"J. Ortega ×3 → 1 person"},{label:"Timeline reconstructed",detail:"every touch, in order"},{label:"Touchpoints recovered",detail:"+37K from calls & email"}],r=512,o=10,l=56,d=(m,f)=>{const y=(r-o*(f-1))/f;return m*(y+o)+y/2},u=({n:m,color:f,opacity:y,dir:b})=>n.jsx("svg",{width:"100%",viewBox:`0 0 ${r} ${l}`,height:l,preserveAspectRatio:"none",style:{display:"block"},"aria-hidden":"true",children:Array.from({length:m}).map((x,k)=>{const v=d(k,m),j=b==="in"?`M ${v} 0 C ${v} ${l*.55}, ${r/2} ${l*.45}, ${r/2} ${l}`:`M ${r/2} 0 C ${r/2} ${l*.45}, ${v} ${l*.55}, ${v} ${l}`;return n.jsx("path",{d:j,fill:"none",stroke:f,strokeWidth:2,strokeOpacity:y,vectorEffect:"non-scaling-stroke"},k)})}),h=({label:m,logo:f,Icon:y})=>n.jsxs("div",{style:{height:64,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"0.3rem",padding:"0 0.3rem",background:"#fff",border:`1px solid ${Pd}`,borderRadius:11},children:[f?n.jsx("img",{src:f,alt:"",style:{height:22,width:"auto",maxWidth:24,objectFit:"contain",display:"block"}}):y?n.jsx(y,{size:20,strokeWidth:2,color:Dr}):null,n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:600,lineHeight:1.1,color:Dr,textAlign:"center"},children:m})]});return n.jsxs("div",{style:iu,children:[n.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${a.length}, 1fr)`,gap:o},children:a.map(m=>n.jsx(h,{label:m.label,logo:m.logo,Icon:m.Icon},m.label))}),n.jsx(u,{n:a.length,color:"#c4ccc7",opacity:1,dir:"in"}),n.jsxs("div",{style:{background:"#fff",border:`1.5px solid ${sa}`,borderRadius:14,padding:"1rem 1.1rem",boxShadow:"0 2px 10px rgba(45,106,79,0.10)"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.55rem",marginBottom:"0.75rem"},children:[n.jsx("img",{src:"/images/upside-icon.svg",alt:"",style:{height:22,width:"auto"}}),n.jsx("span",{style:{fontFamily:"'Geist', sans-serif",fontWeight:700,fontSize:"1.05rem",color:sa},children:"One GTM dataset"})]}),n.jsx("div",{style:{display:"grid",gap:"0.55rem"},children:i.map(m=>n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"0.75rem"},children:[n.jsx("span",{style:{fontSize:"0.9rem",fontWeight:700,color:bi},children:m.label}),n.jsx("span",{style:{fontSize:"0.84rem",color:Dr,textAlign:"right"},children:m.detail})]},m.label))})]}),n.jsx(u,{n:1,color:iH,opacity:.8,dir:"out"}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem",background:"#fff",border:`1px solid ${Pd}`,borderRadius:12,padding:"0.75rem 0.9rem"},children:[n.jsx("span",{style:{width:"40px",height:"40px",borderRadius:"10px",background:rH,color:"#fff",display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:n.jsx(rM,{size:22,strokeWidth:2.2})}),n.jsx("span",{style:{fontSize:"1rem",fontWeight:700,color:bi},children:"Your AI agent"})]})]})},lH=()=>{const e=[{label:"Claude",y:58},{label:"ChatGPT",y:150},{label:"Gemini",y:242}],t=[{label:"Cursor",y:58},{label:"Codex",y:150},{label:"+ more",y:242}],a=520,i=300,r=260,o=150,l=140,d=46,u=10,h={Claude:"/images/llm-claude.webp",ChatGPT:"/images/llm-chatgpt.jpg",Gemini:"/images/llm-gemini.webp",Cursor:"/images/llm-cursor.png",Codex:"/images/llm-openai.png"},m=(f,y,b)=>{const x=h[f];return n.jsxs("g",{children:[n.jsx("rect",{x:y,y:b-d/2,width:l,height:d,rx:11,fill:"#fff",stroke:Pd,strokeWidth:1}),x&&n.jsx("image",{href:x,x:y+14,y:b-11,width:22,height:22,preserveAspectRatio:"xMidYMid meet"}),n.jsx("text",{x:x?y+44:y+l/2,y:b+6,textAnchor:x?"start":"middle",fontSize:"16",fontWeight:600,fill:bi,fontFamily:"Geist, sans-serif",children:f})]},`${f}-${y}`)};return n.jsx("div",{style:{...iu,width:"100%",maxWidth:"820px",padding:"1.5rem 1.25rem"},children:n.jsxs("svg",{viewBox:`0 0 ${a} ${i}`,width:"100%",xmlns:"http://www.w3.org/2000/svg",children:[e.map(f=>{const y=u+l;return n.jsx("path",{d:`M ${y} ${f.y} C ${(y+r)/2} ${f.y}, ${(y+r)/2} ${o}, ${r} ${o}`,fill:"none",stroke:"#cdd5cf",strokeWidth:2},`l-${f.label}`)}),t.map(f=>{const y=a-u-l;return n.jsx("path",{d:`M ${y} ${f.y} C ${(y+r)/2} ${f.y}, ${(y+r)/2} ${o}, ${r} ${o}`,fill:"none",stroke:"#cdd5cf",strokeWidth:2},`r-${f.label}`)}),n.jsx("circle",{cx:r,cy:o,r:62,fill:"#fff",stroke:sa,strokeWidth:2}),n.jsx("image",{href:"/images/upside-icon-green.svg",x:r-18,y:o-40,width:36,height:30,preserveAspectRatio:"xMidYMid meet"}),n.jsx("text",{x:r,y:o+14,textAnchor:"middle",fontSize:"16",fontWeight:700,fill:sa,fontFamily:"'Geist', sans-serif",children:"Upside"}),n.jsx("text",{x:r,y:o+32,textAnchor:"middle",fontSize:"16",fontWeight:700,fill:sa,fontFamily:"'Geist', sans-serif",children:"MCP"}),e.map(f=>m(f.label,u,f.y)),t.map(f=>m(f.label,a-u-l,f.y))]})})},cpe=()=>{const e=[{account:"Acme Corp",signal:"No activity in 41 days",evidence:"3 calls · 2 emails"}
3580,{account:"Globex",signal:"Champion went quiet",evidence:"2 calls"},{account:"Initech",signal:"Usage dropped 60%",evidence:"4 emails"}];return n.jsxs("div",{style:iu,children:[n.jsx("div",{style:{display:"flex",justifyContent:"flex-end",marginBottom:"0.85rem"},children:n.jsx("span",{style:{background:"#f3f5f3",color:bi,fontSize:"0.95rem",fontWeight:600,borderRadius:"12px 12px 2px 12px",padding:"0.65rem 0.85rem",maxWidth:"85%",lineHeight:1.35},children:"Which accounts have gone quiet this month?"})}),n.jsx("div",{style:{display:"grid",gap:"0.55rem"},children:e.map(t=>n.jsxs("div",{style:{background:"#fff",border:`1px solid ${Pd}`,borderRadius:"12px",padding:"0.75rem 0.9rem"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.75rem"},children:[n.jsx("span",{style:{fontSize:"1rem",fontWeight:700,color:bi},children:t.account}),n.jsx("span",{style:{fontSize:"0.88rem",color:Dr},children:t.signal})]}),n.jsx("span",{style:{display:"inline-block",marginTop:"0.5rem",fontSize:"0.82rem",fontWeight:600,fontFamily:spe,color:sa,background:"#e8f4ed",borderRadius:"6px",padding:"0.22rem 0.5rem"},children:t.evidence})]},t.account))})]})},dpe=()=>{const e=[{icon:Uw,label:"Read-only"},{icon:k$,label:"Org-scoped"},{icon:kte,label:"Sandboxed"},{icon:I$,label:"SOC 2 Type II"}],t=(a,i)=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem",background:"#fff",border:`1px solid ${a?"#bcdccb":"#eccfca"}`,borderRadius:"12px",padding:"0.75rem 0.85rem"},children:[n.jsx("span",{style:{width:"28px",height:"28px",borderRadius:"999px",background:a?sa:zP,color:"#fff",display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:a?n.jsx(C$,{size:16,strokeWidth:3}):n.jsx(L$,{size:16,strokeWidth:3})}),n.jsx("span",{style:{fontSize:"0.95rem",fontWeight:600,color:bi,flex:1},children:i}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:a?sa:zP,textTransform:"uppercase",letterSpacing:"0.04em"},children:a?"Approved":"Blocked"})]});return n.jsxs("div",{style:iu,children:[n.jsxs("div",{style:{display:"grid",gap:"0.55rem"},children:[t(!1,"Point AI at the raw warehouse"),t(!0,"Query through the Upside MCP")]}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.55rem",marginTop:"0.85rem"},children:e.map(a=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",background:"#fff",border:`1px solid ${Pd}`,borderRadius:"10px",padding:"0.65rem 0.75rem"},children:[n.jsx(a.icon,{size:22,strokeWidth:2.1,color:sa}),n.jsx("span",{style:{fontSize:"0.92rem",fontWeight:600,color:bi},children:a.label})]},a.label))})]})},upe=()=>{const e=[{label:"Marketing",color:sa},{label:"Sales",color:rH},{label:"CS",color:oH}];return n.jsxs("div",{style:iu,children:[n.jsx("p",{style:LP(Dr),children:'"What drove Q3 pipeline?"'}),n.jsx("div",{style:{display:"flex",gap:"0.4rem",marginTop:"0.5rem"},children:e.map(t=>n.jsxs("span",{style:{flex:1,display:"inline-flex",alignItems:"center",justifyContent:"center",gap:"0.3rem",fontSize:"0.7rem",fontWeight:600,color:t.color,background:"#f5f7fa",border:"1px solid #e6eae8",borderRadius:"8px",padding:"0.4rem 0.3rem"},children:[n.jsx(W$,{size:13,strokeWidth:2.2})," ",t.label]},t.label))}),n.jsx(lpe,{}),n.jsxs("div",{style:{background:"#e8f4ed",borderRadius:"10px",padding:"0.85rem"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.55rem",marginBottom:"0.5rem"},children:[n.jsx("span",{style:{width:"30px",height:"30px",borderRadius:"8px",background:sa,color:"#fff",display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:n.jsx(E$,{size:17,strokeWidth:2.2})}),n.jsx("p",{style:LP(sa),children:"One trusted answer"})]}),n.jsx("p",{style:{margin:0,fontSize:"0.9rem",fontWeight:700,color:bi},children:"$2.4M influenced — events led, then paid"}),n.jsx("p",{style:{margin:"0.3rem 0 0 0",fontSize:"0.66rem",color:Dr},children:"Same definitions, same numbers, every team."})]}),n.jsx("p",{style:{margin:"0.75rem 0 0 0",fontSize:"0.66rem",color:Dr,fontStyle:"italic",lineHeight:1.45},children:'No more "it depends who you ask."'})]})},hpe=()=>n.jsxs("div",{style:{...iu,padding:0,overflow:"hidden"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",padding:"0.7rem 1rem",borderBottom:"1px solid #eef1f5",background:"#fafbfc"},children:[n.jsx("span",{style:{width:"24px",height:"24px",borderRadius:"7px",background:sa,color:"#fff",display:"inline-flex",alignItems:"center",justifyContent:"center"},children:n.jsx(L0,{size:14,strokeWidth:2.3})}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:bi},children:"Upside"}),n.jsx("span",{style:{marginLeft:"auto",fontSize:"0.6rem",fontWeight:600,color:sa,background:"#e8f4ed",borderRadius:"5px",padding:"0.15rem 0.45rem"},children:"Ask"})]}),n.jsxs("div",{style:{padding:"1rem 1.2rem 0.5rem"},children:[n.jsx("div",{style:{display:"flex",justifyContent:"flex-end",marginBottom:"0.6rem"},children:n.jsx("span",{style:{background:"#eef1f5",color:bi,fontSize:"0.74rem",fontWeight:600,borderRadius:"12px 12px 2px 12px",padding:"0.5rem 0.7rem",maxWidth:"85%"},children:"Which accounts should I prioritize this week?"})}),n.jsxs("div",{style:{display:"flex",gap:"0.55rem",alignItems:"flex-start"},children:[n.jsx("span",{style:{width:"26px",height:"26px",borderRadius:"7px",background:sa,color:"#fff",display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:n.jsx(rM,{size:15,strokeWidth:2.2})}),n.jsx("div",{style:{background:"#e8f4ed",borderRadius:"2px 12px 12px 12px",padding:"0.6rem 0.75rem"},children:n.jsx("p",{style:{margin:0,fontSize:"0.74rem",fontWeight:600,color:bi,lineHeight:1.5},children:"Three in-cycle accounts went quiet after a champion change: Acme, Globex, Initech — full context attached."})})]})]}),n.jsx("p",{style:{margin:0,padding:"0 1.2rem 1.1rem",fontSize:"0.66rem",color:Dr,fontStyle:"italic",lineHeight:1.45},children:"No tool to connect — ask right where your data lives."})]}),ppe=()=>n.jsxs("div",{style:iu,children:[n.jsx("p",{style:{margin:"0 0 0.85rem 0",fontSize:"0.744rem",fontWeight:700,color:oH,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Ask your GTM data"}),n.jsx("div",{style:{display:"flex",justifyContent:"flex-end",marginBottom:"0.85rem"},children:n.jsx("span",{style:{background:"#f3f5f3",color:bi,fontSize:"0.95rem",fontWeight:600,borderRadius:"12px 12px 2px 12px",padding:"0.65rem 0.85rem",maxWidth:"88%",lineHeight:1.35},children:"Which campaigns drove Q3 enterprise pipeline?"})}),n.jsxs("div",{style:{border:`1px solid ${Pd}`,borderRadius:"12px",padding:"0.9rem 1rem"},children:[n.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.7rem",marginBottom:"0.85rem"},children:[{v:"$1.8M",l:"Enterprise pipeline"},{v:"62%",l:"From 3 campaigns"}].map(e=>n.jsxs("div",{style:{background:"#f5f7fa",borderRadius:"10px",padding:"0.7rem 0.6rem",textAlign:"center"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.7rem",fontWeight:700,color:sa,lineHeight:1},children:e.v}),n.jsx("p",{style:{margin:"0.35rem 0 0 0",fontSize:"0.85rem",color:Dr,fontWeight:600},children:e.l})]},e.l))}),n.jsx("p",{style:{margin:"0 0 0.5rem 0",fontSize:"0.78rem",fontWeight:700,color:Dr,letterSpacing:"0.04em",textTransform:"uppercase"},children:"Grounded in"}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.4rem"},children:["Salesforce","Marketo","Gong"].map(e=>n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:600,color:bi,background:"#fff",border:`1px solid ${Pd}`,borderRadius:"999px",padding:"0.25rem 0.7rem"},children:e},e))})]}),n.jsx("p",{style:{margin:"0.9rem 0 0 0",fontSize:"0.85rem",color:Dr,lineHeight:1.45},children:"Natural-language question, evidence-backed answer — in the AI tool you already use."})]}),Xi="#2d6a4f",Kh="#509A79",UP="#347BD1",kd="#1b1f1c",jo="#5f6563",cH="#a1560b",yo="#eaeeea",Cy={background:"#fff",borderRadius:"16px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem 1.6rem",width:"100%",maxWidth:"560px",fontFamily:"Geist, sans-serif"},dH=()=>n.jsxs("div",{className:"pta-card",style:Cy,children:[n.jsx("div",{style:{background:"#f3f5f3",border:`1px solid ${yo}`,borderRadius:"14px 14px 14px 4px",padding:"0.85rem 1rem",fontSize:"1rem",fontWeight:600,color:kd,lineHeight:1.45}
3580,children:`"Build a follow-up tracker for last week's webinar leads."`}),n.jsx("svg",{className:"pta-connector",width:"100%",viewBox:"0 0 560 44",height:44,preserveAspectRatio:"none",style:{display:"block"},"aria-hidden":"true",children:n.jsx("path",{d:"M 60 0 C 60 28, 280 16, 280 44",fill:"none",stroke:Kh,strokeWidth:2,vectorEffect:"non-scaling-stroke"})}),n.jsxs("div",{style:{border:`1px solid ${yo}`,borderRadius:"12px",overflow:"hidden"},children:[n.jsxs("div",{style:{background:"#f5f7fa",padding:"0.7rem 0.9rem",borderBottom:`1px solid ${yo}`,display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx("span",{style:{display:"inline-flex",gap:"5px"},children:["#d7ddd9","#d7ddd9",Kh].map((e,t)=>n.jsx("span",{style:{width:"9px",height:"9px",borderRadius:"999px",background:e,display:"inline-block"}},t))}),n.jsx("span",{style:{fontSize:"0.95rem",fontWeight:700,color:kd},children:"Webinar Follow-Up Tracker"})]}),n.jsxs("div",{className:"pta-appbody",style:{padding:"1rem",display:"grid",gap:"0.85rem"},children:[n.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.7rem"},children:[{v:"142",l:"Leads"},{v:"88",l:"Worked"}].map(e=>n.jsxs("div",{className:"pta-stat",style:{background:"#f5f7fa",borderRadius:"10px",padding:"0.7rem 0.5rem",textAlign:"center"},children:[n.jsx("p",{className:"pta-stat-num",style:{margin:0,fontSize:"1.9rem",fontWeight:700,color:Xi,lineHeight:1},children:e.v}),n.jsx("p",{style:{margin:"0.35rem 0 0 0",fontSize:"0.9rem",color:jo,fontWeight:600},children:e.l})]},e.l))}),n.jsx("div",{style:{display:"grid",gap:"0.45rem"},children:[{who:"VP Ops, Acme",st:"Followed up"},{who:"Dir Eng, Globex",st:"Waiting 9d"},{who:"Head GTM, Initech",st:"Followed up"}].map(e=>n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",fontSize:"0.9rem",padding:"0.35rem 0",borderTop:`1px solid ${yo}`},children:[n.jsx("span",{style:{color:kd,fontWeight:600},children:e.who}),n.jsx("span",{style:{color:e.st.startsWith("Waiting")?cH:Xi,fontWeight:600},children:e.st})]},e.who))})]})]})]}),mpe=()=>{const e=(t,a,i,r)=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem",minHeight:"52px",background:"#fff",border:`1px solid ${yo}`,borderRadius:"12px",padding:"0.7rem 0.9rem"},children:[(()=>{const o=t;return n.jsx(o,{size:22,strokeWidth:2,color:Xi})})(),n.jsx("span",{style:{fontSize:"0.95rem",fontWeight:600,color:jo,flex:1},children:a}),r&&n.jsx("span",{style:{display:"inline-flex",marginRight:"0.4rem"},children:["#d7ddd9","#c4ccc7",Kh].map((o,l)=>n.jsx("span",{style:{width:"22px",height:"22px",borderRadius:"999px",background:o,border:"2px solid #fff",marginLeft:l===0?0:"-7px",display:"inline-block"}},l))}),n.jsxs("span",{style:{fontSize:"0.95rem",fontWeight:700,color:kd},children:[i," ▾"]})]});return n.jsxs("div",{style:{...Cy,maxWidth:"480px"},children:[n.jsxs("div",{style:{display:"grid",gap:"0.6rem"},children:[e(sM,"Who can view","Organization",!1),e(Qte,"Who can edit","Specific people (3)",!0)]}),n.jsxs("div",{style:{marginTop:"0.8rem",paddingTop:"0.8rem",borderTop:`1px solid ${yo}`,display:"flex",alignItems:"center",gap:"0.6rem"},children:[n.jsx(Uw,{size:20,strokeWidth:2,color:jo}),n.jsx("span",{style:{fontSize:"0.9rem",color:jo,flex:1},children:"Only the creator can change sharing"}),n.jsx("span",{style:{width:"38px",height:"22px",borderRadius:"999px",background:Xi,position:"relative",display:"inline-block"},children:n.jsx("span",{style:{position:"absolute",top:"3px",right:"3px",width:"16px",height:"16px",borderRadius:"999px",background:"#fff"}})})]})]})},fpe=()=>{const e=[{label:"Draft",tone:jo,fill:"#fff",border:jo,note:"v3 — you, now"},{label:"Sealed",tone:UP,fill:"#eef1f5",border:UP,note:"reviewed"},{label:"Active",tone:Xi,fill:"#e8f4ed",border:Xi,note:"team sees v2"}];return n.jsx("div",{style:{...Cy,maxWidth:"560px"},children:n.jsx("div",{style:{display:"flex",alignItems:"flex-start",justifyContent:"space-between",gap:"0.25rem"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"contents"},children:[n.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",flex:"0 0 auto",width:"120px"},children:[n.jsx("span",{style:{width:"48px",height:"48px",borderRadius:"999px",background:t.fill,border:`2px ${t.label==="Draft"?"dashed":"solid"} ${t.border}`,display:"inline-flex",alignItems:"center",justifyContent:"center",color:t.tone,fontWeight:700,fontSize:"1.15rem"},children:a+1}),n.jsx("p",{style:{margin:"0.6rem 0 0 0",fontSize:"1rem",fontWeight:700,color:t.tone},children:t.label}),n.jsx("p",{style:{margin:"0.2rem 0 0 0",fontSize:"0.9rem",color:jo,textAlign:"center",lineHeight:1.3},children:t.note})]}),a<e.length-1&&n.jsxs("svg",{width:"100%",viewBox:"0 0 80 24",height:24,preserveAspectRatio:"none",style:{flex:1,marginTop:"23px"},"aria-hidden":"true",children:[n.jsx("path",{d:"M 4 12 C 30 12, 50 12, 76 12",fill:"none",stroke:a===0?"#c4ccc7":Kh,strokeWidth:2,vectorEffect:"non-scaling-stroke"}),n.jsx("path",{d:"M 70 7 L 76 12 L 70 17",fill:"none",stroke:a===0?"#c4ccc7":Kh,strokeWidth:2,vectorEffect:"non-scaling-stroke"})]})]},t.label))})})},gpe=()=>n.jsxs("div",{style:Cy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"1.05rem",fontWeight:700,color:kd},children:"Pipeline Health Board"}),n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.4rem",fontSize:"0.85rem",fontWeight:700,color:Xi,background:"#e8f4ed",borderRadius:"999px",padding:"0.3rem 0.7rem"},children:[n.jsx("span",{style:{width:"8px",height:"8px",borderRadius:"999px",background:Xi,display:"inline-block"}}),"Live · synced just now"]})]}),n.jsxs("div",{style:{marginTop:"0.9rem",background:"#1b1f1c",borderRadius:"12px",padding:"0.9rem 1rem",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",fontSize:"0.95rem",color:"#cfe8db",lineHeight:1.6},children:["SELECT stage, sum(amount)",n.jsx("br",{}),"FROM opportunities ",n.jsx("span",{style:{color:"#7e9990"},children:"· via Miniapp SDK"})]}),n.jsxs("div",{style:{marginTop:"1rem",paddingTop:"0.9rem",borderTop:`1px solid ${yo}`,display:"flex",alignItems:"center",gap:"0.6rem",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace"},children:[n.jsx("span",{style:{fontSize:"0.95rem",color:jo,textDecoration:"line-through"},children:"export.csv"}),n.jsx("span",{style:{fontSize:"0.85rem",color:cH,fontFamily:"Geist, sans-serif"},children:"3 days old"})]})]}),ype=()=>n.jsxs("div",{style:Cy,children:[n.jsx("p",{style:{margin:"0 0 0.85rem 0",fontSize:"0.744rem",fontWeight:700,color:Xi,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Prompt to published app"}),n.jsx("div",{style:{background:"#f3f5f3",border:`1px solid ${yo}`,borderRadius:"14px 14px 14px 4px",padding:"0.8rem 0.95rem",fontSize:"0.98rem",fontWeight:600,color:kd,lineHeight:1.4},children:'"Build a churn-risk board for the CS team."'}),n.jsx("svg",{width:"100%",viewBox:"0 0 560 40",height:40,preserveAspectRatio:"none",style:{display:"block"},"aria-hidden":"true",children:n.jsx("path",{d:"M 60 0 C 60 26, 280 14, 280 40",fill:"none",stroke:Kh,strokeWidth:2,vectorEffect:"non-scaling-stroke"})}),n.jsxs("div",{style:{border:`1px solid ${yo}`,borderRadius:"12px",overflow:"hidden"},children:[n.jsxs("div",{style:{background:"#f5f7fa",padding:"0.7rem 0.9rem",borderBottom:`1px solid ${yo}`,display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"0.95rem",fontWeight:700,color:kd},children:"Churn Risk Board"}),n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.35rem",fontSize:"0.8rem",fontWeight:700,color:Xi},children:[n.jsx("span",{style:{width:"8px",height:"8px",borderRadius:"999px",background:Xi,display:"inline-block"}}),"Live · v3"]})]}),n.jsx("div",{style:{padding:"1rem",display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:"0.6rem"},children:[{v:"24",l:"At risk"},{v:"$3.4M",l:"Exposed ARR"},{v:"9",l:"Plays open"}].map(e=>n.jsxs("div",{style:{background:"#f5f7fa",borderRadius:"10px",padding:"0.65rem 0.4rem",textAlign:"center"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.4rem",fontWeight:700,color:Xi,lineHeight:1},children:e.v}),n.jsx("p",{style:{margin:"0.3rem 0 0 0",fontSize:"0.78rem",color:jo,fontWeight:600},children:e.l})]},e.l))})]}),n.jsx("p",{style:{margin:"0.9rem 0 0 0",fontSize:"0.85rem",color:jo,lineHeight:1.45},children:"Published to exactly the right people — no BI backlog, no shadow IT."})]}),Gi="#2d6a4f",J0="#347BD1",qM="#a1560b",ph="#c0392b",Ls="#1b1f1c",Xh="#5f6563",Ay={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},Id=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),bpe=()=>{const e=["14 calls","38 emails","3 stakeholders"];return n.jsxs("div",{style:Ay,children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:"0.65rem",borderBottom:"1px solid #eef1ef"}
3580,children:[n.jsx("h4",{style:{margin:0,fontSize:"1.2rem",fontWeight:700,color:Ls},children:"Acme Logistics"}),n.jsx("span",{style:{display:"inline-flex",padding:"0.2rem 0.55rem",borderRadius:"999px",fontSize:"0.744rem",fontWeight:700,background:"#f3e9d6",color:qM,whiteSpace:"nowrap"},children:"Closed-Lost"})]}),n.jsxs("div",{style:{marginTop:"0.85rem"},children:[n.jsx("p",{style:Id(Xh),children:"CRM picklist reason"}),n.jsx("p",{style:{margin:"0.3rem 0 0 0",fontSize:"1.05rem",fontWeight:700,color:Xh,textDecoration:"line-through",textDecorationColor:"#c0392b66"},children:"Price"})]}),n.jsx("div",{style:{textAlign:"center",color:"#cdd5d0",fontSize:"1.1rem",margin:"0.35rem 0"},children:"↓"}),n.jsxs("div",{style:{padding:"0.8rem 0.9rem",borderRadius:"10px",background:"#e8f4ed"},children:[n.jsx("p",{style:Id(Gi),children:"Reconstructed from the record"}),n.jsx("p",{style:{margin:"0.3rem 0 0 0",fontSize:"0.92rem",fontWeight:600,color:Ls,lineHeight:1.45},children:"Momentum stalled when the champion left in week 6. The integration gap they raised on the first call was never resolved."}),n.jsx("div",{style:{marginTop:"0.6rem",display:"flex",flexWrap:"wrap",gap:"0.3rem"},children:e.map(t=>n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,padding:"0.18rem 0.45rem",borderRadius:"999px",background:"#fff",color:Gi,border:`1px solid ${Gi}33`},children:t},t))})]})]})},vpe=()=>{const e=[{label:"Integration gaps",pct:31},{label:"Lost to incumbent",pct:24},{label:"Budget / timing",pct:19},{label:"Champion left",pct:14},{label:"Missing feature",pct:12}],t=31;return n.jsxs("div",{style:Ay,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",marginBottom:"0.2rem"},children:[n.jsx("p",{style:Id(J0),children:"Why deals are lost"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:600,color:Xh,fontStyle:"italic"},children:"142 losses · 4 quarters"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.7rem"},children:e.map((a,i)=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.25rem"},children:[n.jsx("span",{style:{fontSize:"0.864rem",fontWeight:700,color:Ls},children:a.label}),n.jsxs("span",{style:{fontSize:"0.84rem",fontWeight:700,color:Ls},children:[a.pct,"%"]})]}),n.jsx("div",{style:{height:"8px",background:"#eef1ef",borderRadius:"4px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${a.pct/t*100}%`,height:"100%",background:J0,opacity:1-i*.13,borderRadius:"4px"}})})]},a.label))})]})},xpe=()=>{const e=[{name:"Incumbent A",winRate:38,trend:"down"},{name:"Challenger B",winRate:61,trend:"up"},{name:"Legacy C",winRate:72,trend:"up"}],t=a=>a>=55?Gi:a>=45?qM:ph;return n.jsxs("div",{style:Ay,children:[n.jsx("p",{style:Id(J0),children:"Competitive win rate · head-to-head"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.45rem"},children:e.map(a=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 64px 20px",alignItems:"center",gap:"0.6rem",padding:"0.55rem 0.7rem",borderRadius:"8px",background:"#f5f7fa"},children:[n.jsx("span",{style:{fontSize:"0.9rem",fontWeight:700,color:Ls},children:a.name}),n.jsxs("span",{style:{fontSize:"0.95rem",fontWeight:700,color:t(a.winRate),textAlign:"right"},children:[a.winRate,"%"]}),n.jsx("span",{style:{fontSize:"0.85rem",color:a.trend==="up"?Gi:ph,textAlign:"center"},children:a.trend==="up"?"▲":"▼"})]},a.name))}),n.jsxs("div",{style:{marginTop:"0.85rem",padding:"0.65rem 0.75rem",borderRadius:"10px",background:"#e8f4ed"},children:[n.jsx("p",{style:Id(Gi),children:"What flips it"}),n.jsx("p",{style:{margin:"0.25rem 0 0 0",fontSize:"0.864rem",color:Ls,lineHeight:1.45},children:"You win when integration fit and ROI proof land before week 4."})]})]})},wpe=()=>{const e=[{team:"PMM",color:"#7a4a9e",bg:"#efe7f4",action:"Sharpen integration messaging",cost:"cited in 31% of losses"},{team:"Sales",color:J0,bg:"#eef5fa",action:"Objection play: incumbent switching cost",cost:"24% of losses"},{team:"Product",color:Gi,bg:"#e8f4ed",action:"Prioritize SSO gap",cost:"cost 9 deals"}];return n.jsxs("div",{style:Ay,children:[n.jsx("p",{style:Id(qM),children:"Findings â
3580†’ owners"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.55rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:"0.65rem",padding:"0.7rem 0.8rem",borderRadius:"10px",background:t.bg},children:[n.jsx("span",{style:{flexShrink:0,fontSize:"0.72rem",fontWeight:700,padding:"0.2rem 0.5rem",borderRadius:"999px",background:"#fff",color:t.color,border:`1px solid ${t.color}33`,minWidth:"58px",textAlign:"center"},children:t.team}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.88rem",fontWeight:600,color:Ls,lineHeight:1.35},children:t.action}),n.jsx("p",{style:{margin:"0.15rem 0 0 0",fontSize:"0.76rem",color:Xh},children:t.cost})]})]},t.team))})]})},kpe=()=>{const a=2*Math.PI*34,i=34/100*a,r=[{label:"ROI proven on the call",outcome:"Won",color:Gi},{label:"Champion left mid-cycle",outcome:"Lost",color:ph},{label:"Lost to a cheaper tool",outcome:"Lost",color:ph}];return n.jsxs("div",{style:Ay,children:[n.jsx("p",{style:Id(Gi),children:"Win-loss · 248 closed deals · last 4 quarters"}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"1.1rem",marginTop:"0.85rem"},children:[n.jsxs("svg",{width:"92",height:"92",viewBox:"0 0 96 96","aria-hidden":"true",style:{flexShrink:0},children:[n.jsx("circle",{cx:"48",cy:"48",r:34,fill:"none",stroke:"#eef1ee",strokeWidth:"10"}),n.jsx("circle",{cx:"48",cy:"48",r:34,fill:"none",stroke:Gi,strokeWidth:"10",strokeDasharray:`${i} ${a}`,strokeLinecap:"round",transform:"rotate(-90 48 48)"}),n.jsxs("text",{x:"48",y:"46",textAnchor:"middle",fontSize:"19",fontWeight:"700",fill:Ls,fontFamily:"'Geist', sans-serif",children:[34,"%"]}),n.jsx("text",{x:"48",y:"61",textAnchor:"middle",fontSize:"9",fill:Xh,fontFamily:"'Geist', sans-serif",children:"win rate"})]}),n.jsxs("div",{style:{flex:1,minWidth:0},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:"0.82rem"},children:[n.jsx("span",{style:{color:Gi,fontWeight:700},children:"84 won"}),n.jsx("span",{style:{color:ph,fontWeight:700},children:"164 lost"})]}),n.jsxs("div",{style:{display:"flex",height:"10px",borderRadius:"999px",overflow:"hidden",marginTop:"0.4rem",background:"#eef1ee"},children:[n.jsx("div",{style:{width:"34%",background:Gi}}),n.jsx("div",{style:{width:"66%",background:ph}})]}),n.jsx("p",{style:{margin:"0.55rem 0 0 0",fontSize:"0.76rem",color:Xh,lineHeight:1.4},children:"Every deal carries its real, evidence-backed reason, not a one-word picklist."})]})]}),n.jsx("div",{style:{marginTop:"0.95rem",display:"grid",gap:"0.45rem"},children:r.map(o=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",padding:"0.5rem 0.7rem",borderRadius:"9px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,width:"8px",height:"8px",borderRadius:"50%",background:o.color}}),n.jsx("span",{style:{flex:1,fontSize:"0.84rem",fontWeight:600,color:Ls},children:o.label}),n.jsx("span",{style:{flexShrink:0,fontSize:"0.72rem",fontWeight:700,color:o.color},children:o.outcome})]},o.label))})]})},Qi="#2d6a4f",ex="#347BD1",jpe="#a1560b",uH="#c0392b",cc="#1b1f1c",Us="#5f6563",Ty={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},a1=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),Spe=()=>{const e=[{label:"Members",value:"1,240",w:100},{label:"Qualified leads",value:"312",w:80},{label:"Opps created",value:"47",w:60},{label:"Reached a real stage",value:"31",w:46},{label:"Pipeline originated",value:"$2.4M",w:34},{label:"Revenue won",value:"$680K",w:24}];return n.jsxs("div",{style:Ty,children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",paddingBottom:"0.65rem",borderBottom:"1px solid #eef1ef"},children:[n.jsx("h4",{style:{margin:0,fontSize:"1.1rem",fontWeight:700,color:cc},children:"Spring Launch"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,padding:"0.2rem 0.55rem",borderRadius:"999px",background:"#e8f4ed",color:Qi},children:"Scored on pipeline"})]}),n.jsx("div",{style:{marginTop:"0.9rem",display:"grid",gap:"0.4rem"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"116px 1fr 52px",alignItems:"center",gap:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"0.76rem",fontWeight:600,color:Us,lineHeight:1.2},children:t.label}),n.jsx("div",{style:{display:"flex",justifyContent:"center"},children:n.jsx("div",{style:{width:`${t.w}%`,height:"16px",borderRadius:"3px",background:Qi,opacity:1-a*.11}})}),n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:700,color:cc,textAlign:"right"},children:t.value})]},t.label))}),n.jsxs("p",{style:{margin:"0.9rem 0 0 0",fontSize:"0.76rem",color:Us},children:["Open rate: ",n.jsx("span",{style:{textDecoration:"line-through"},children:"41%"})," not how this campaign is graded"]})]})},Cpe=()=>{const e=[{label:"Events",value:"$1.1M",pct:46,color:"#235d9c"},{label:"Email",value:"$620K",pct:26,color:"#347BD1"},{label:"Paid",value:"$410K",pct:17,color:"#6fa3d6"},{label:"Content",value:"$270K",pct:11,color:"#a9c8e8"}];return n.jsxs("div",{style:Ty,children:[n.jsx("p",{style:a1(ex),children:"One integrated program"}),n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",margin:"0.55rem 0 0.7rem 0"},children:[n.jsx("h4",{style:{margin:0,fontSize:"1.05rem",fontWeight:700,color:cc},children:"Q2 Demand Program"}),n.jsx("span",{style:{fontSize:"1.35rem",fontWeight:700,color:Qi},children:"$2.4M"})]}),n.jsx("div",{style:{display:"flex",height:"26px",borderRadius:"6px",overflow:"hidden"},children:e.map(t=>n.jsx("div",{style:{width:`${t.pct}%`,background:t.color}},t.label))}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.45rem 1rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.45rem"},children:[n.jsx("span",{style:{flexShrink:0,width:"10px",height:"10px",borderRadius:"3px",background:t.color}}),n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:600,color:cc},children:t.label}),n.jsx("span",{style:{marginLeft:"auto",fontSize:"0.8rem",fontWeight:700,color:Us},children:t.value})]},t.label))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:Us},children:"Channels rolled into one program, each still drillable."})]})},Ape=()=>{const e=[{name:"Field events",x:144,y:26,anchor:"start",best:!0},{name:"Webinar series",x:209,y:72,anchor:"start"},{name:"Content syndication",x:177,y:132,anchor:"start"},{name:"Paid search",x:341,y:116,anchor:"end"}];return n.jsxs("div",{style:Ty,children:[n.jsx("p",{style:a1(ex),children:"Programs · pipeline vs cost"}),n.jsxs("svg",{viewBox:"0 0 400 200",width:"100%",style:{display:"block",marginTop:"0.55rem"},children:[n.jsx("rect",{x:"40",y:"10",width:"150",height:"74",fill:Qi,opacity:"0.06",rx:"4"}),n.jsx("line",{x1:"40",y1:"10",x2:"40",y2:"170",stroke:"#dfe4e0",strokeWidth:"1.5"}),n.jsx("line",{x1:"40",y1:"170",x2:"388",y2:"170",stroke:"#dfe4e0",strokeWidth:"1.5"}),n.jsx("text",{x:"46",y:"22",fontSize:"10",fontWeight:"700",fill:Us,fontFamily:"'Geist', sans-serif",children:"Pipeline ↑"}),n.jsx("text",{x:"388",y:"190",fontSize:"10",fontWeight:"700",fill:Us,textAnchor:"end",fontFamily:"'Geist', sans-serif",children:"Cost / o
3580pp →"}),e.map(t=>{const a=t.best?Qi:t.name==="Paid search"?uH:ex,i=t.best?9:6,r=t.anchor==="end"?t.x-i-5:t.x+i+5;return n.jsxs("g",{children:[n.jsx("circle",{cx:t.x,cy:t.y,r:i,fill:a,opacity:t.best?1:.85}),n.jsx("text",{x:r,y:t.y+3.5,fontSize:"10.5",fontWeight:t.best?700:600,fill:t.best?Qi:cc,textAnchor:t.anchor,fontFamily:"'Geist', sans-serif",children:t.name})]},t.name)})]}),n.jsxs("p",{style:{margin:"0.4rem 0 0 0",fontSize:"0.8rem",color:cc},children:[n.jsx("span",{style:{fontWeight:700,color:Qi},children:"Field events"})," win the quadrant: most pipeline, lowest cost."]})]})},Tpe=()=>{const e=[{name:"Field events",verdict:"Keep",note:"$1.1M influenced · 20× pipeline per opp"},{name:"Webinar series",verdict:"Optimize",note:"Strong top-funnel, weak late-stage"},{name:"Tradeshow booth",verdict:"Stop",note:"$0 sourced across 6 quarters"}],t=a=>a==="Keep"?Qi:a==="Optimize"?jpe:uH;return n.jsxs("div",{style:Ty,children:[n.jsx("p",{style:a1(Qi),children:"Keep / optimize / stop · 2-year view"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.55rem"},children:e.map(a=>{const i=t(a.verdict);return n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem",padding:"0.7rem 0.8rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,fontSize:"0.72rem",fontWeight:800,letterSpacing:"0.09em",textTransform:"uppercase",padding:"0.3rem 0.5rem",borderRadius:"6px",border:`2px solid ${i}`,color:i,minWidth:"80px",textAlign:"center"},children:a.verdict}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.88rem",fontWeight:700,color:cc},children:a.name}),n.jsx("p",{style:{margin:"0.15rem 0 0 0",fontSize:"0.78rem",color:Us,lineHeight:1.35},children:a.note})]})]},a.name)})})]})},_pe=()=>{const e=[{value:"$6.4M",label:"pipeline influenced",color:Qi},{value:"18",label:"campaigns scored",color:cc},{value:"5.2×",label:"pipeline per $ spent",color:ex},{value:"Field events",label:"top program",color:Qi}];return n.jsxs("div",{style:Ty,children:[n.jsx("p",{style:a1(Qi),children:"Campaign portfolio · last 12 months"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.6rem"},children:e.map(t=>n.jsxs("div",{style:{padding:"0.8rem 0.9rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.35rem",fontWeight:800,color:t.color,lineHeight:1.1},children:t.value}),n.jsx("p",{style:{margin:"0.2rem 0 0 0",fontSize:"0.76rem",color:Us},children:t.label})]},t.label))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.78rem",color:Us,lineHeight:1.45},children:"Every program scored down the funnel on pipeline, not opens."})]})},ec="#2d6a4f",i1="#347BD1",Mpe="#a1560b",Epe="#c0392b",dc="#1b1f1c",Zi="#5f6563",_y={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},My=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),Rpe=()=>n.jsxs("div",{style:_y,children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginBottom:"0.7rem"},children:[n.jsx("p",{style:My(ec),children:"Pulled from a call"}),n.jsx("span",{style:{fontSize:"0.7rem",fontWeight:700,padding:"0.18rem 0.5rem",borderRadius:"999px",background:"#e8f4ed",color:ec},children:"Website-ready"})]}),n.jsx("div",{style:{padding:"0.85rem 0.95rem",borderRadius:"10px",background:"#f5f7fa"},children:n.jsx("p",{style:{margin:0,fontSize:"0.95rem",fontWeight:600,color:dc,lineHeight:1.5},children:"“We cut three days off every close because the data finally lived in one place.”"})}),n.jsxs("div",{style:{marginTop:"0.7rem",display:"flex",alignItems:"center",gap:"0.55rem"},children:[n.jsx("div",{style:{width:"30px",height:"30px",borderRadius:"999px",background:"#dce6f5",color:i1,display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.78rem",fontWeight:700},children:"DM"}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.82rem",fontWeight:700,color:dc},children:"Dana Morales · VP RevOps"}),n.jsx("p",{style:{margin:"0.1rem 0 0 0",fontSize:"0.74rem",color:Zi},children:"QBR call · 2:14 timestamp"})]})]})]}),Npe=({pct:e})=>{const a=2*Math.PI*13,i=e/100*a;
3580return n.jsxs("svg",{viewBox:"0 0 34 34",width:"38",height:"38",style:{flexShrink:0},children:[n.jsx("circle",{cx:"17",cy:"17",r:13,fill:"none",stroke:"#eef1ef",strokeWidth:"4"}),n.jsx("circle",{cx:"17",cy:"17",r:13,fill:"none",stroke:i1,strokeWidth:"4",strokeLinecap:"round",strokeDasharray:`${i} ${a}`,transform:"rotate(-90 17 17)"}),n.jsx("text",{x:"17",y:"20.5",fontSize:"9.5",fontWeight:"700",fill:dc,textAnchor:"middle",fontFamily:"'Geist', sans-serif",children:e})]})},Ope=()=>{const e=[{title:"ROI calculator",pipeline:"$1.8M",wonRate:92},{title:"Integration guide",pipeline:"$1.2M",wonRate:74},{title:"Security whitepaper",pipeline:"$640K",wonRate:58},{title:"Launch blog post",pipeline:"$90K",wonRate:12}];return n.jsxs("div",{style:_y,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",marginBottom:"0.2rem"},children:[n.jsx("p",{style:My(i1),children:"Top content by pipeline influence"}),n.jsx("span",{style:{fontSize:"0.7rem",fontWeight:600,color:Zi,fontStyle:"italic"},children:"not traffic"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem",padding:"0.55rem 0.7rem",borderRadius:"10px",background:a===0?"#e8f4ed":"#f5f7fa"},children:[n.jsx("span",{style:{flexShrink:0,width:"22px",height:"22px",borderRadius:"999px",background:a===0?ec:"#fff",color:a===0?"#fff":Zi,border:a===0?"none":"1px solid #dfe4e0",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.74rem",fontWeight:700},children:a+1}),n.jsxs("div",{style:{flexGrow:1,minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.86rem",fontWeight:700,color:dc},children:t.title}),n.jsxs("p",{style:{margin:"0.1rem 0 0 0",fontSize:"0.74rem",color:Zi},children:[t.pipeline," influenced"]})]}),n.jsx(Npe,{pct:t.wonRate})]},t.title))}),n.jsx("p",{style:{margin:"0.7rem 0 0 0",fontSize:"0.72rem",color:Zi},children:"Ring = % of won deals the asset appears in."})]})},Ppe=({color:e})=>n.jsxs("svg",{viewBox:"0 0 16 16",width:"15",height:"15",style:{flexShrink:0},children:[n.jsx("circle",{cx:"7",cy:"7",r:"4.5",fill:"none",stroke:e,strokeWidth:"1.6"}),n.jsx("line",{x1:"10.4",y1:"10.4",x2:"14",y2:"14",stroke:e,strokeWidth:"1.6",strokeLinecap:"round"})]}),Ipe=()=>{const e=[{question:"How does pricing scale past 500 seats?",asks:41},{question:"Does it replace our BI stack?",asks:28},{question:"What's the SOC 2 + HIPAA story?",asks:19}];return n.jsxs("div",{style:_y,children:[n.jsx("p",{style:My(Mpe),children:"Buyers keep asking · no page yet"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.55rem",padding:"0.6rem 0.7rem",borderRadius:"999px",background:"#f5f7fa",border:"1px solid #e7eae7"},children:[n.jsx(Ppe,{color:Zi}),n.jsx("p",{style:{margin:0,flexGrow:1,minWidth:0,fontSize:"0.84rem",fontWeight:600,color:dc},children:t.question}),n.jsx("span",{style:{flexShrink:0,fontSize:"0.66rem",fontWeight:700,padding:"0.16rem 0.45rem",borderRadius:"999px",background:"#f7e3e0",color:Epe,whiteSpace:"nowrap"},children:"No page"}),n.jsxs("span",{style:{flexShrink:0,fontSize:"0.74rem",fontWeight:700,color:Zi,whiteSpace:"nowrap"},children:[t.asks," asks"]})]},t.question))}),n.jsx("p",{style:{margin:"0.8rem 0 0 0",fontSize:"0.78rem",color:Zi},children:"Demand and precedent already in your data."})]})},Dpe=()=>{const e=[{label:"Brief",detail:"Topic + angle from unmet questions"},{label:"Proof pulled",detail:"Customer quotes + winning assets"},{label:"First draft",detail:"Grounded, ready to edit"}];return n.jsxs("div",{style:_y,children:[n.jsx("p",{style:My(ec),children:"MCP + Deep Research · draft stack"}),n.jsx("div",{style:{marginTop:"0.9rem",display:"grid",gap:"0.5rem"},children:e.map((t,a)=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",alignItems:"flex-start",gap:"0.65rem",padding:"0.7rem 0.8rem",borderRadius:"10px",background:a===e.length-1?"#e8f4ed":"#f5f7fa"},children:[n.jsx("span",{style:{flexShrink:0,width:"22px",height:"22px",borderRadius:"999px",background:"#fff",color:ec,border:`1px solid ${ec}44`,display:"flex",alignItems:"center",justifyContent:"center",fontSize:"0.74rem",fontWeight:700},children:a+1}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.88rem",fontWeight:700,color:dc},children:t.label}),n.jsx("p",{style:{margin:"0.12rem 0 0 0",fontSize:"0.76rem",color:Zi,lineHeight:1.35},children:t.detail})]})]}),a<e.length-1&&n.jsx("div",{style:{textAlign:"center",color:"#cdd5d0",fontSize:"0.95rem",margin:"0.1rem 0"},children:"↓"})]},t.label))})]})},Wpe=()=>{const e=[{label:"Case studies",pct:46,color:ec},{label:"Webinars",pct:31,color:i1},{label:"Blog & guides",pct:23,color:"#86b8df"}];return n.jsxs("div",{style:_y,children:[n.jsx("p",{style:My(ec),children:"Content library · influence on pipeline"}),n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.5rem",marginTop:"0.7rem"},children:[n.jsx("span",{style:{fontSize:"1.7rem",fontWeight:800,color:dc,lineHeight:1},children:"$3.1M"}),n.jsx("span",{style:{fontSize:"0.82rem",color:Zi},children:"influenced · 142 assets tracked"})]}),n.jsx("div",{style:{display:"flex",height:"14px",borderRadius:"999px",overflow:"hidden",marginTop:"0.85rem"},children:e.map(t=>n.jsx("div",{style:{width:`${t.pct}%`,background:t.color}},t.label))}),n.jsx("div",{style:{marginTop:"0.7rem",display:"grid",gap:"0.4rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx("span",{style:{flexShrink:0,width:"10px",height:"10px",borderRadius:"3px",background:t.color}}),n.jsx("span",{style:{flex:1,fontSize:"0.82rem",fontWeight:600,color:dc},children:t.label}),n.jsxs("span",{style:{flexShrink:0,fontSize:"0.82rem",fontWeight:700,color:Zi},children:[t.pct,"%"]})]},t.label))}),n.jsx("p",{style:{margin:"0.8rem 0 0 0",fontSize:"0.78rem",color:Zi,lineHeight:1.45},children:"Ranked by influence on pipeline, not page views."})]})},jd="#2d6a4f",Df="#347BD1",hH="#a1560b",tg="#c0392b",tS="#7a4a9e",Qh="#1b1f1c",uc="#5f6563",Ey={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Geist', sans-serif"},Ry=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),zpe=()=>{const e=[{label:"“One source of truth”",progressed:71},{label:"“Cut close time”",progressed:64},{label:"“Replaces your BI stack”",progressed:46},{label:"“AI-powered”",progressed:22}],t=a=>a>=55?jd:a>=40?hH:tg;return n.jsxs("div",{style:Ey,children:[n.jsx("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",marginBottom:"0.2rem"},children:n.jsx("p",{style:Ry(jd),children:"Talk tracks · % of deals that progressed"})}),n.jsx("p",{style:{margin:"0.1rem 0 0 0",fontSize:"0.7rem",color:uc,fontStyle:"italic"},children:"across 420 calls"}),n.jsx("div",{style:{marginTop:"0.95rem",display:"grid",gap:"0.9rem"},children:e.map(a=>{const i=t(a.progressed);return n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.35rem"},children:[n.jsx("span",{style:{fontSize:"0.84rem",fontWeight:600,color:Qh},children:a.label}),n.jsxs("span",{style:{fontSize:"0.82rem",fontWeight:700,color:i},children:[a.progressed,"%"]})]}),n.jsxs("div",{style:{position:"relative",height:"14px"},children:[n.jsx("div",{style:{position:"absolute",top:"50%",left:0,right:0,height:"2px",background:"#eef1ef",transform:"translateY(-50%)"}}),n.jsx("div",{style:{position:"absolute",top:"50%",left:`${a.progressed}%`,width:"14px",height:"14px",borderRadius:"999px",background:i,border:"2px s
3580olid #fff",boxShadow:`0 0 0 1.5px ${i}`,transform:"translate(-50%, -50%)"}})]})]},a.label)})})]})},Lpe=()=>{const e=[{label:"“Too expensive vs incumbent”",won:21,lost:37},{label:"“Worried about migration”",won:26,lost:18},{label:"“Need SSO / SCIM”",won:9,lost:22}],t=37;return n.jsxs("div",{style:Ey,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:Ry(Df),children:"Recurring objections"}),n.jsxs("span",{style:{fontSize:"0.7rem",fontWeight:700,color:uc},children:[n.jsx("span",{style:{color:jd},children:"won"})," · ",n.jsx("span",{style:{color:tg},children:"lost"})]})]}),n.jsx("div",{style:{marginTop:"0.9rem",display:"grid",gap:"0.85rem"},children:e.map(a=>n.jsxs("div",{children:[n.jsx("p",{style:{margin:"0 0 0.3rem 0",fontSize:"0.84rem",fontWeight:600,color:Qh},children:a.label}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",alignItems:"center"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"flex-end",gap:"0.4rem"},children:[n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:700,color:jd},children:a.won}),n.jsx("div",{style:{height:"12px",width:`${a.won/t*100}%`,background:jd,borderRadius:"3px 0 0 3px"}})]}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.4rem",borderLeft:"1px solid #dfe4e0"},children:[n.jsx("div",{style:{height:"12px",width:`${a.lost/t*100}%`,background:tg,borderRadius:"0 3px 3px 0"}}),n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:700,color:tg},children:a.lost})]})]})]},a.label))})]})},Upe=()=>{const e=[{label:"Customer webinars",value:"$880K",pipeline:100,reach:40},{label:"Founder LinkedIn",value:"$540K",pipeline:61,reach:78},{label:"Industry events",value:"$420K",pipeline:48,reach:30},{label:"Brand video",value:"$60K",pipeline:7,reach:100}];return n.jsxs("div",{style:Ey,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:Ry(Df),children:"Content & events"}),n.jsxs("span",{style:{fontSize:"0.7rem",fontWeight:700,color:uc},children:[n.jsx("span",{style:{color:Df},children:"pipeline"})," vs ",n.jsx("span",{style:{color:"#aeb4af"},children:"reach"})]})]}),n.jsx("div",{style:{marginTop:"0.9rem",display:"grid",gap:"0.8rem"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.3rem"},children:[n.jsx("span",{style:{fontSize:"0.84rem",fontWeight:600,color:Qh},children:t.label}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:Df},children:t.value})]}),n.jsxs("div",{style:{display:"grid",gap:"0.22rem"},children:[n.jsx("div",{style:{height:"7px",background:"#eef1ef",borderRadius:"4px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pipeline}%`,height:"100%",background:Df,borderRadius:"4px"}})}),n.jsx("div",{style:{height:"7px",background:"#eef1ef",borderRadius:"4px",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.reach}%`,height:"100%",background:"#c9cfca",borderRadius:"4px"}})})]})]},t.label))}),n.jsxs("p",{style:{margin:"0.8rem 0 0 0",fontSize:"0.78rem",color:uc},children:[n.jsx("span",{style:{fontWeight:700,color:Qh},children:"Brand video"})," drives reach, not pipeline."]})]})},Bpe=()=>{const e=[{label:"LinkedIn posts",value:320,display:"$320K",deals:"28 deals",color:"#7a4a9e"},{label:"Podcast appearances",value:210,display:"$210K",deals:"12 deals",color:"#9b6fb8"},{label:"Long-form essays",value:140,display:"$140K",deals:"9 deals",color:"#c3a6d6"}],t=e.reduce((o,l)=>o+l.value,0),a=30,i=2*Math.PI*a;let r=0;return n.jsxs("div",{style:Ey,children:[n.jsx("p",{style:Ry(tS),children:"Exec thought leadership · a channel"}),n.jsxs("div",{style:{marginTop:"0.85rem",display:"flex",alignItems:"center",gap:"1.1rem"},children:[n.jsxs("svg",{viewBox:"0 0 80 80",width:"92",height:"92",style:{flexShrink:0},children:[e.map(o=>{const l=o.value/t*i,d=n.jsx("circle",{cx:"40",cy:"40",r:a,fill:"none",stroke:o.color,strokeWidth:"14",strokeDasharray:`${l} ${i}`,strokeDashoffset:-r,transform:"rotate(-90 40 40)"},o.label);return r+=l,d}),n.jsx("text",{x:"40",y:"38",fontSize:"12",fontWeight:"700",fill:tS,textAnchor:"middle",fontFamily:"'Geist', sans-serif",children:"$670K"}),n.jsx("text",{x:"40",y:"49",fontSize:"6.5",fontWeight:"600",fill:uc,textAnchor:"middle",fontFamily:"'Geist', sans-serif",children:"influenced"})]}),n.jsx("div",{style:{flexGrow:1,display:"grid",gap:"0.55rem"},children:e.map(o=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx("span",{style:{flexShrink:0,width:"10px",height:"10px",borderRadius:"3px",background:o.color}}),n.jsxs("div",{style:{flexGrow:1,minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.82rem",fontWeight:700,color:Qh},children:o.label}),n.jsxs("p",{style:{margin:"0.05rem 0 0 0",fontSize:"0.72rem",color:uc},children:["in ",o.deals]})]}),n.jsx("span",{style:{flexShrink:0,fontSize:"0.84rem",fontWeight:700,color:tS},children:o.display})]},o.label))})]})]})},qpe=()=>{const e=[{tag:"Lands",label:"“One source of truth”",stat:"in 71% of won deals",color:jd},{tag:"Objection",label:"“Too hard to migrate”",stat:"raised in 1 of 3 calls",color:hH},{tag:"Competitor",label:"Acme BI",stat:"named in 44 losses",color:tg}];return n.jsxs("div",{style:Ey,children:[n.jsx("p",{style:Ry(jd),children:"What we heard · 420 sales calls"}),n.jsx("div",{style:{marginTop:"0.9rem",display:"grid",gap:"0.55rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem",padding:"0.7rem 0.8rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,fontSize:"0.68rem",fontWeight:800,letterSpacing:"0.07em",textTransform:"uppercase",padding:"0.28rem 0.5rem",borderRadius:"6px",background:`${t.color}14`,color:t.color,minWidth:"84px",textAlign:"center"},children:t.tag}),n.jsxs("div",{style:{flex:1,minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.9rem",fontWeight:700,color:Qh,lineHeight:1.25},children:t.label}),n.jsx("p",{style:{margin:"0.12rem 0 0 0",fontSize:"0.76rem",color:uc},children:t.stat})]})]},t.tag))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.78rem",color:uc,lineHeight:1.45},children:"Positioning backed by what reps and buyers actually said, not opinion."})]})},ui="#2d6a4f",pH="#347BD1",vr="#a1560b",mH="#c0392b",Sd="#1b1f1c",Hi="#5f6563",Ny={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"},Oy=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),nS=(e,t)=>n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:600,color:t,background:"#fafbfa",border:`1px solid ${t}33`,borderRadius:"999px",padding:"0.22rem 0.55rem"},children:e},e),$pe=()=>n.jsxs("div",{style:Ny,children:[n.jsx("p",{style:Oy(ui),children:"One open deal · two readings"}),n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",margin:"0.55rem 0 0.85rem 0"},children:[n.jsx("h4",{style:{margin:0,fontSize:"1.05rem",fontWeight:700,color:Sd},children:"Northwind Platform"}),n.jsx("span",{style:{fontSize:"0.95rem",fontWeight:700,color:Hi},children:"$180K"})]}),n.jsxs("div",{style:{display:"grid",gap:"0.6rem"},children:[n.jsxs("div",{style:{padding:"0.7rem 0.8rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.72rem",fontWeight:700,color:Hi,textTransform:"uppercase",letterSpacing:"0.04em"},children:"CRM stage"}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",marginTop:"0.35rem"},children:[n.jsx("span",{style:{fontSize:"1rem",fontWeight:700,color:Hi},children:"Commit"}),n.jsx("span",{style:{fontSize:"0.74rem",color:Hi},children:"rep-set Friday"})]})]}),n.jsxs("div",{style:{padding:"0.7rem 0.8rem",borderRadius:"10px",background:"#fdf4ec",border:`1px solid ${vr}33`},children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.72rem",fontWeight:700,color:vr,textTransform:"uppercase",letterSpacing:"0.04em"},children:"Upside signal"}),n.jsx("span",{style:{fontSize:"1.05rem",fontWeight:800,color:vr},children:"At risk · 54"})]}),n.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.4rem",marginTop:"0.55rem"}
3580,children:[nS("Champion quiet 14d",vr),nS("No economic buyer",mH),nS("Next step slipped 2×",vr)]})]})]}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.78rem",color:Hi,lineHeight:1.4},children:"The stage said commit. The deal says otherwise."})]}),Fpe=()=>{const e=[40,96,152,208,264,320];return n.jsxs("div",{style:Ny,children:[n.jsx("p",{style:Oy(vr),children:"Slip risk · flagged early"}),n.jsxs("svg",{viewBox:"0 0 380 150",width:"100%",style:{display:"block",marginTop:"0.6rem"},children:[n.jsx("line",{x1:"40",y1:"118",x2:"360",y2:"118",stroke:"#dfe4e0",strokeWidth:"1.5"}),e.map((t,a)=>n.jsxs("g",{children:[n.jsx("line",{x1:t,y1:"114",x2:t,y2:"122",stroke:"#cfd6d1",strokeWidth:"1.5"}),n.jsxs("text",{x:t,y:"138",fontSize:"9",fill:Hi,textAnchor:"middle",fontFamily:"'Space Grotesk', sans-serif",children:["W",a+1]})]},t)),n.jsx("rect",{x:"40",y:"86",width:"180",height:"14",rx:"4",fill:ui,opacity:"0.85"}),n.jsx("rect",{x:"220",y:"86",width:"140",height:"14",rx:"4",fill:"#e6ebe8"}),n.jsx("line",{x1:"152",y1:"34",x2:"152",y2:"100",stroke:vr,strokeWidth:"2",strokeDasharray:"4 3"}),n.jsx("circle",{cx:"152",cy:"30",r:"7",fill:vr}),n.jsx("text",{x:"152",y:"34",fontSize:"10",fontWeight:"800",fill:"#fff",textAnchor:"middle",fontFamily:"'Space Grotesk', sans-serif",children:"!"}),n.jsx("text",{x:"146",y:"20",fontSize:"10",fontWeight:"700",fill:vr,textAnchor:"end",fontFamily:"'Space Grotesk', sans-serif",children:"champion went quiet"}),n.jsx("text",{x:"360",y:"76",fontSize:"10",fontWeight:"700",fill:Hi,textAnchor:"end",fontFamily:"'Space Grotesk', sans-serif",children:"close date"})]}),n.jsxs("p",{style:{margin:"0.5rem 0 0 0",fontSize:"0.8rem",color:Sd,lineHeight:1.4},children:["Flagged ",n.jsx("span",{style:{fontWeight:700,color:vr},children:"41 days early"}),", while the quarter was still winnable."]})]})},Gpe=()=>{const e=[{name:"Jordan M.",value:"$1.2M",conf:82},{name:"Priya S.",value:"$980K",conf:74},{name:"Diego R.",value:"$1.4M",conf:88},{name:"Sam O.",value:"$640K",conf:61}];return n.jsxs("div",{style:Ny,children:[n.jsx("p",{style:Oy(pH),children:"Bottoms-up · evidence-backed"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"94px 1fr 58px",alignItems:"center",gap:"0.6rem"},children:[n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:600,color:Sd},children:t.name}),n.jsx("div",{style:{height:"10px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.conf}%`,height:"100%",background:ui}})}),n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:700,color:Sd,textAlign:"right"},children:t.value})]},t.name))}),n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:"0.85rem",paddingTop:"0.75rem",borderTop:"1px solid #eef1ef"},children:[n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:700,color:Sd},children:"Committed forecast"}),n.jsx("span",{style:{fontSize:"1.35rem",fontWeight:800,color:ui},children:"$4.2M"})]}),n.jsx("p",{style:{margin:"0.55rem 0 0 0",fontSize:"0.76rem",color:Hi},children:"Every rep's number backed by deal signal, still drillable underneath."})]})},Hpe=()=>{const e=[{label:"Worst case",value:"$2.9M",w:63,color:"#c9d6cf"},{label:"Likely",value:"$3.8M",w:83,color:ui},{label:"Best case",value:"$4.6M",w:100,color:"#8fb9a6"}];return n.jsxs("div",{style:Ny,children:[n.jsx("p",{style:Oy(ui),children:"Scenario · before the board call"}),n.jsx("div",{style:{marginTop:"0.9rem",display:"grid",gap:"0.7rem",position:"relative"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.25rem"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:600,color:Sd},children:t.label}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:Sd},children:t.value})]}),n.jsx("div",{style:{height:"16px",borderRadius:"5px",background:"#f1f4f2",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.w}%`,height:"100%",background:t.color}})})]},t.label))}),n.jsxs("div",{style:{marginTop:"0.9rem",padding:"0.55rem 0.7rem",borderRadius:"8px",background:"#e8f4ed",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:700,color:ui},children:"Number you commit"}),n.jsx("span",{style:{fontSize:"0.95rem",fontWeight:800,color:ui},children:"$3.6M"})]})]})},Ype=()=>n.jsxs("div",{style:Ny,children:[n.jsx("p",{style:Oy(ui),children:"This quarter · committed number"}),n.jsxs("div",{style:{marginTop:"0.85rem",display:"flex",alignItems:"baseline",gap:"0.6rem"},children:[n.jsx("span",{style:{fontSize:"2.4rem",fontWeight:700,color:ui,lineHeight:1},children:"$4.8M"}),n.jsx("span",{style:{fontSize:"0.9rem",fontWeight:600,color:Hi},children:"committed"})]}),n.jsxs("div",{style:{marginTop:"1rem"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",fontSize:"0.82rem",color:Hi,fontWeight:600,marginBottom:"0.35rem"},children:[n.jsx("span",{children:"$4.4M"}),n.jsx("span",{style:{color:pH,fontWeight:700},children:"82% confidence"}),n.jsx("span",{children:"$5.1M"})]}),n.jsxs("div",{style:{position:"relative",height:"10px",borderRadius:"999px",background:"#eef1ef"}
3580,children:[n.jsx("div",{style:{position:"absolute",left:"12%",right:"18%",top:0,bottom:0,borderRadius:"999px",background:`${ui}33`}}),n.jsx("div",{style:{position:"absolute",left:"58%",top:"-3px",width:"16px",height:"16px",borderRadius:"999px",background:ui,border:"2px solid #fff",boxShadow:"0 1px 4px rgba(27,31,28,0.2)"}})]})]}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:"0.6rem",marginTop:"1.1rem"},children:[{v:"31",l:"On track",c:ui},{v:"8",l:"Slipping",c:vr},{v:"4",l:"At risk",c:mH}].map(e=>n.jsxs("div",{style:{background:"#f5f7fa",borderRadius:"10px",padding:"0.65rem 0.4rem",textAlign:"center"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.5rem",fontWeight:700,color:e.c,lineHeight:1},children:e.v}),n.jsx("p",{style:{margin:"0.3rem 0 0 0",fontSize:"0.78rem",color:Hi,fontWeight:600},children:e.l})]},e.l))}),n.jsx("p",{style:{margin:"0.9rem 0 0 0",fontSize:"0.85rem",color:Hi,lineHeight:1.45},children:"Read from what's happening inside every open deal — not the stage a rep last updated."})]}),ra="#2d6a4f",U4="#347BD1",$M="#a1560b",Zh="#1b1f1c",Wr="#5f6563",Py={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"},Iy=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),Vpe=()=>{const e=[{rank:1,name:"Vertex Health",score:94,reason:"Competitor named on 3 calls"},{rank:2,name:"Lumen Retail",score:88,reason:"Pricing page ×4 · champion returned"},{rank:3,name:"Atlas Freight",score:81,reason:"Usage spike + inbound demo"},{rank:4,name:"Beacon Labs",score:76,reason:"Two repeat visitors, same account"}];return n.jsxs("div",{style:Py,children:[n.jsx("p",{style:Iy(ra),children:"In-market · ranked on your signal"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem",padding:"0.6rem 0.7rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,width:"22px",height:"22px",borderRadius:"6px",background:t.rank===1?ra:"#e6ebe8",color:t.rank===1?"#fff":Wr,fontSize:"0.78rem",fontWeight:800,display:"flex",alignItems:"center",justifyContent:"center"},children:t.rank}),n.jsxs("div",{style:{minWidth:0,flex:1},children:[n.jsx("p",{style:{margin:0,fontSize:"0.86rem",fontWeight:700,color:Zh},children:t.name}),n.jsx("p",{style:{margin:"0.1rem 0 0 0",fontSize:"0.74rem",color:Wr,lineHeight:1.3},children:t.reason})]}),n.jsx("span",{style:{flexShrink:0,fontSize:"0.95rem",fontWeight:800,color:ra},children:t.score})]},t.name))})]})},Kpe=()=>{const e=[{tag:"Problem",color:$M,items:["Manual reconciliation eats 2 days/close"]},{tag:"Comparing",color:U4,items:["Us vs Acme","Us vs status quo"]},{tag:"Outcome",color:ra,items:["Cut close time 40%","Audit-ready by Q3"]}];return n.jsxs("div",{style:Py,children:[n.jsx("p",{style:Iy(U4),children:"What this account keeps raising"}),n.jsx("h4",{style:{margin:"0.5rem 0 0.85rem 0",fontSize:"1.05rem",fontWeight:700,color:Zh},children:"Vertex Health"}),n.jsx("div",{style:{display:"grid",gap:"0.7rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",gap:"0.6rem",alignItems:"flex-start"},children:[n.jsx("span",{style:{flexShrink:0,fontSize:"0.68rem",fontWeight:800,textTransform:"uppercase",letterSpacing:"0.05em",color:t.color,background:`${t.color}14`,borderRadius:"6px",padding:"0.28rem 0.5rem",minWidth:"78px",textAlign:"center"},children:t.tag}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.4rem"},children:t.items.map(a=>n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:600,color:Zh,background:"#fafbfa",border:"1px solid #eef1ef",borderRadius:"999px",padding:"0.26rem 0.6rem"},children:a},a))})]},t.tag))}),n.jsx("p",{style:{margin:"0.9rem 0 0 0",fontSize:"0.76rem",color:Wr},children:"The first touch lands on this, not a templated sequence."})]})},Xpe=()=>n.jsxs("div",{style:Py,children:[n.jsx("p",{style:Iy(ra),children:"Inbound this week · routed on intent"}),n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.5rem",margin:"0.6rem 0 0.7rem 0"},children:[n.jsx("span",{style:{fontSize:"2rem",fontWeight:800,color:Zh,lineHeight:1},children:"124"}),n.jsx("span",{style:{fontSize:"0.82rem",color:Wr}
3580,children:"raw inbound leads"})]}),n.jsxs("div",{style:{display:"flex",height:"24px",borderRadius:"6px",overflow:"hidden"},children:[n.jsx("div",{style:{width:"14.5%",background:ra,display:"flex",alignItems:"center",justifyContent:"center"},children:n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:800,color:"#fff"},children:"18"})}),n.jsx("div",{style:{width:"85.5%",background:"#e6ebe8"}})]}),n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginTop:"0.4rem"},children:[n.jsx("span",{style:{fontSize:"0.76rem",fontWeight:700,color:ra},children:"Inside in-market accounts"}),n.jsx("span",{style:{fontSize:"0.76rem",color:Wr},children:"rest: nurture"})]}),n.jsxs("div",{style:{marginTop:"0.85rem",padding:"0.6rem 0.75rem",borderRadius:"10px",background:"#eef5f1",border:`1px solid ${ra}22`},children:[n.jsx("p",{style:{margin:0,fontSize:"0.8rem",fontWeight:700,color:ra},children:"+7 repeat visitors recovered"}),n.jsx("p",{style:{margin:"0.15rem 0 0 0",fontSize:"0.74rem",color:Wr,lineHeight:1.35},children:"Same accounts, never captured by a form. Now routed to a rep."})]})]}),Qpe=()=>{const e=[{name:"Vertex Health",delta:"added",note:"intent this week"},{name:"Lumen Retail",delta:"added",note:"champion returned"},{name:"Cedar Systems",delta:"held",note:"still in-market"},{name:"Orion Group",delta:"dropped",note:"signal cooled"}],t={added:ra,held:Wr,dropped:$M};return n.jsxs("div",{style:Py,children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between"},children:[n.jsx("p",{style:Iy(ra),children:"Target list · from live signal"}),n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.3rem",fontSize:"0.7rem",fontWeight:700,color:ra,background:"#e8f4ed",borderRadius:"999px",padding:"0.2rem 0.5rem"},children:[n.jsx("span",{style:{width:"6px",height:"6px",borderRadius:"999px",background:ra}}),"Updated 2m ago"]})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.45rem"},children:e.map(a=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",padding:"0.55rem 0.7rem",borderRadius:"9px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,fontSize:"0.66rem",fontWeight:800,textTransform:"uppercase",letterSpacing:"0.05em",color:t[a.delta],minWidth:"58px"},children:a.delta}),n.jsx("span",{style:{fontSize:"0.84rem",fontWeight:700,color:Zh},children:a.name}),n.jsx("span",{style:{marginLeft:"auto",fontSize:"0.74rem",color:Wr},children:a.note})]},a.name))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:Wr},children:"Reflects the intent showing up this week, not last quarter's export."})]})},Zpe=()=>{const e=[{name:"Northwind Systems",score:92,tag:"In-market",reason:"Pricing on 2 calls · repeat site visits"},{name:"Acme Robotics",score:87,tag:"Warming",reason:"Champion re-engaged · demo requested"},{name:"Delta Logistics",score:81,tag:"Warming",reason:"Usage up 40% · exec added"},{name:"Vertex Health",score:76,tag:"New",reason:"Inbound + competitor mention"}],t=a=>a==="In-market"?ra:a==="Warming"?$M:U4;return n.jsxs("div",{style:Py,children:[n.jsx("p",{style:Iy(ra),children:"In-market accounts · ranked on your signal"}),n.jsx("div",{style:{display:"grid",gap:"0.5rem",marginTop:"0.85rem"},children:e.map(a=>n.jsxs("div",{style:{border:"1px solid #e6ebe7",borderRadius:"12px",padding:"0.7rem 0.85rem"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.75rem"},children:[n.jsx("span",{style:{fontSize:"0.98rem",fontWeight:700,color:Zh},children:a.name}),n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,color:t(a.tag),background:"#fff",border:`1px solid ${t(a.tag)}33`,borderRadius:"999px",padding:"0.15rem 0.55rem",textTransform:"uppercase",letterSpacing:"0.03em"},children:a.tag}),n.jsx("span",{style:{fontSize:"1.15rem",fontWeight:700,color:ra,lineHeight:1},children:a.score})]})]}),n.jsx("p",{style:{margin:"0.35rem 0 0 0",fontSize:"0.85rem",color:Wr,lineHeight:1.4},children:a.reason})]},a.name))}),n.jsx("p",{style:{margin:"0.9rem 0 0 0",fontSize:"0.85rem",color:Wr,lineHeight:1.45},children:"Point demand at accounts already showing intent — not the whole list."})]})},hi="#2d6a4f",BP="#347BD1",B4="#a1560b",Mh="#c0392b",Dd="#1b1f1c",$a="#5f6563",Dy={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"},Wy=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),Jpe=()=>n.jsxs("div",{style:Dy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:Wy(hi),children:"Deal runbook · live"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:$a},children:"Atlas Freight · $220K"})]}),n.jsxs("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.6rem"},children:[n.jsxs("div",{style:{padding:"0.65rem 0.8rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.7rem",fontWeight:700,color:$a,textTransform:"uppercase",letterSpacing:"0.04em"},children:"Commitments"}),n.jsx("p",{style:{margin:"0.3rem 0 0 0",fontSize:"0.8rem",color:Dd,lineHeight:1.4},children:"Security review by Fri · pricing to CFO next week"})]}),n.jsxs("div",{style:{padding:"0.65rem 0.8rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.7rem",fontWeight:700,color:$a,textTransform:"uppercase",letterSpacing:"0.04em"},children:"Stakeholders"}),n.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.35rem",marginTop:"0.35rem"},children:[n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:600,color:hi,background:"#e8f4ed",borderRadius:"999px",padding:"0.22rem 0.5rem"},children:"Champion ✓"}),n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:600,color:hi,background:"#e8f4ed",borderRadius:"999px",padding:"0.22rem 0.5rem"},children:"IT lead ✓"}),n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:600,color:Mh,background:"#fbeceb",borderRadius:"999px",padding:"0.22rem 0.5rem"},children:"Economic buyer — missing"})]})]}),n.jsxs("div",{style:{padding:"0.65rem 0.8rem",borderRadius:"10px",background:"#eef5f1",border:`1px solid ${hi}22`},children:[n.jsx("p",{style:{margin:0,fontSize:"0.7rem",fontWeight:800,color:hi,textTransform:"uppercase",letterSpacing:"0.04em"},children:"Next best move"}),n.jsx("p",{style:{margin:"0.3rem 0 0 0",fontSize:"0.82rem",fontWeight:700,color:Dd,lineHeight:1.4},children:"Get champion to introduce the CFO before the security review closes."})]})]})]}),eme=()=>{const e=[{sev:Mh,risk:"Champion silent 14 days",deal:"Northwind"}
3580,{sev:B4,risk:"Competitor “Acme” named on last call",deal:"Lumen"},{sev:B4,risk:"Next step slipped 2×",deal:"Atlas"},{sev:Mh,risk:"No economic buyer engaged",deal:"Beacon"}];return n.jsxs("div",{style:Dy,children:[n.jsx("p",{style:Wy(Mh),children:"Deal-killers · caught early"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.65rem",padding:"0.6rem 0.75rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,width:"9px",height:"9px",borderRadius:"999px",background:t.sev}}),n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:600,color:Dd,flex:1,lineHeight:1.3},children:t.risk}),n.jsx("span",{style:{flexShrink:0,fontSize:"0.74rem",fontWeight:700,color:$a},children:t.deal})]},t.deal))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:$a},children:"Surfaced across the whole book, with the evidence attached."})]})},tme=()=>{const e=[{label:"Stalls at",value:"Pricing",note:"62% of stuck deals",color:B4},{label:"Top objection",value:"Security review",note:"hit on 9 of 12 deals",color:BP},{label:"Best move",value:"Exec intro",note:"+34% win when used",color:hi}];return n.jsxs("div",{style:Dy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:Wy(BP),children:"Coach on the pattern"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:$a},children:"Jordan M. · last 12 deals"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.55rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",padding:"0.65rem 0.8rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsxs("div",{style:{minWidth:"104px"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.68rem",fontWeight:700,color:$a,textTransform:"uppercase",letterSpacing:"0.04em"},children:t.label}),n.jsx("p",{style:{margin:"0.15rem 0 0 0",fontSize:"0.92rem",fontWeight:800,color:t.color},children:t.value})]}),n.jsx("span",{style:{fontSize:"0.76rem",color:$a,lineHeight:1.3},children:t.note})]},t.label))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:$a},children:"Coaching targets the habit, not the last call overheard."})]})},nme=()=>{const e=[{name:"Multi-thread before demo",win:68},{name:"Exec-to-exec intro",win:61},{name:"ROI model in the proposal",win:57}];return n.jsxs("div",{style:Dy,children:[n.jsx("p",{style:Wy(hi),children:"Winning plays · standardized"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.6rem"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.3rem"},children:[n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:700,color:Dd},children:t.name}),n.jsxs("span",{style:{fontSize:"0.82rem",fontWeight:800,color:hi},children:[t.win,"% win"]})]}),n.jsx("div",{style:{height:"10px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.win}%`,height:"100%",background:hi}})})]},t.name))}),n.jsxs("div",{style:{marginTop:"0.85rem",paddingTop:"0.7rem",borderTop:"1px solid #eef1ef",display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"0.76rem",color:$a},children:"Now in front of"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:800,color:Dd},children:"14 reps"}),n.jsx("span",{style:{fontSize:"0.76rem",color:$a},children:"on every open deal."})]})]})},ame=()=>{const e=[{label:"Loop in Legal on the MSA redlines",done:!0},{label:"Get CFO into the next call",done:!1},{label:"Send ROI recap the champion asked for",done:!1}];return n.jsxs("div",{style:Dy,children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",gap:"0.75rem"},children:[n.jsx("p",{style:Wy(hi),children:"Deal runbook · next best move"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,color:Mh,background:"#fff",border:`1px solid ${Mh}33`,borderRadius:"999px",padding:"0.15rem 0.55rem",textTransform:"uppercase",letterSpacing:"0.03em",whiteSpace:"nowrap"},children:"At risk"})]}),n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.75rem",marginTop:"0.75rem"},children:[n.jsx("span",{style:{fontSize:"1.05rem",fontWeight:700,color:Dd},children:"Acme Robotics"}),n.jsx("span",{style:{fontSize:"1.25rem",fontWeight:700,color:hi,lineHeight:1},children:"$180K"})]}),n.jsx("p",{style:{margin:"0.3rem 0 0 0",fontSize:"0.85rem",color:$a},children:"Stage 4 · slipped 11 days · economic buyer not yet engaged"}),n.jsx("div",{style:{display:"grid",gap:"0.5rem",marginTop:"0.9rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",border:"1px solid #e6ebe7",borderRadius:"10px",padding:"0.6rem 0.75rem"},children:[n.jsx("span",{style:{width:"18px",height:"18px",borderRadius:"999px",flexShrink:0,background:t.done?hi:"#fff",border:`2px solid ${t.done?hi:"#c7cfc9"}
3580`,display:"inline-flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:"0.7rem",fontWeight:700},children:t.done?"✓":""}),n.jsx("span",{style:{fontSize:"0.9rem",fontWeight:600,color:t.done?$a:Dd,textDecoration:t.done?"line-through":"none"},children:t.label})]},t.label))}),n.jsx("p",{style:{margin:"0.9rem 0 0 0",fontSize:"0.85rem",color:$a,lineHeight:1.45},children:"Built from every call, email, and meeting on the deal — not a manager's memory."})]})},Ts="#2d6a4f",wg="#347BD1",q4="#a1560b",ime="#c0392b",kg="#1b1f1c",hc="#5f6563",r1={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"},o1=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),rme=()=>{const e=[{role:"Champion",depth:92,label:"deep"},{role:"Economic buyer",depth:64,label:"some"},{role:"IT / Security",depth:28,label:"shallow"},{role:"Legal",depth:0,label:"no thread"}],t=a=>a>=70?Ts:a>=40?wg:a>0?q4:ime;return n.jsxs("div",{style:r1,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:o1(Ts),children:"Buying group · engagement depth"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:hc},children:"Vertex Health"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.55rem"},children:e.map(a=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"110px 1fr 66px",alignItems:"center",gap:"0.6rem"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:600,color:kg},children:a.role}),n.jsx("div",{style:{height:"12px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${Math.max(a.depth,3)}%`,height:"100%",background:t(a.depth)}})}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,color:t(a.depth),textAlign:"right"},children:a.label})]},a.role))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:hc},children:"Depth measured on real calls and threads, not logged contacts."})]})},ome=()=>{const e=[{name:"Vertex Health",from:"Aware",to:"Evaluating",moved:!0,note:""},{name:"Atlas Freight",from:"Evaluating",to:"In procurement",moved:!0,note:""},{name:"Lumen Retail",from:"Evaluating",to:"Evaluating",moved:!1,note:"stalled 24d"}];return n.jsxs("div",{style:r1,children:[n.jsx("p",{style:o1(wg),children:"Account progression · 30 days"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.55rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",padding:"0.65rem 0.75rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,fontSize:"0.95rem",fontWeight:800,color:t.moved?Ts:q4,width:"18px",textAlign:"center"},children:t.moved?"▲":"—"}),n.jsxs("div",{style:{minWidth:0,flex:1},children:[n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:kg},children:t.name}),n.jsxs("p",{style:{margin:"0.12rem 0 0 0",fontSize:"0.74rem",color:hc},children:[t.from," ",n.jsx("span",{style:{color:"#c2c9c4"},children:"→"})," ",t.to,t.note?n.jsxs("span",{style:{color:q4,fontWeight:600},children:[" · ",t.note]}):null]})]})]},t.name))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:hc},children:"Progression is the metric, not impressions."})]})},sme=()=>{const e=[{who:"Marketing",what:"ABM ad → VP Ops",color:wg},{who:"Sales",what:"Discovery call → Champion",color:Ts},{who:"Marketing",what:"Webinar invite → CFO",color:wg},{who:"Sales",what:"Exec intro → CFO",color:Ts}];return n.jsxs("div",{style:r1,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:o1(Ts),children:"One account · marketing + sales"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:hc},children:"Atlas Freight"})]}),n.jsxs("div",{style:{marginTop:"0.9rem",position:"relative",paddingLeft:"0.5rem"},children:[n.jsx("div",{style:{position:"absolute",left:"6px",top:"6px",bottom:"6px",width:"2px",background:"#e6ebe8"}}),n.jsx("div",{style:{display:"grid",gap:"0.6rem"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.65rem"},children:[n.jsx("span",{style:{flexShrink:0,width:"12px",height:"12px",borderRadius:"999px",background:t.color,zIndex:1,marginLeft:"-0.5px"}}),n.jsx("span",{style:{flexShrink:0,fontSize:"0.66rem",fontWeight:800,textTransform:"uppercase",letterSpacing:"0.04em",color:t.color,minWidth:"70px"},children:t.who}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:600,color:kg},children:t.what})]},a))})]}),n.jsx("p",{style:{margin:"0.9rem 0 0 0",fontSize:"0.76rem",color:hc},children:"Air cover and outbound hit the same stakeholders."})]})},lme=()=>{const e=[{value:"$240K",label:"program spend",color:kg},{value:"$3.1M",label:"pipeline created",color:Ts},{value:"12.9×",label:"return on spend",color:wg}],t=[{label:"Enterprise tier",pct:58,value:"$1.8M"},{label:"Mid-market tier",pct:42,value:"$1.3M"}];return n.jsxs("div",{style:r1,children:[n.jsx("p",{style:o1(Ts),children:"Program · pipeline created"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gridTemplateColumns:"1fr 1fr 1fr",gap:"0.5rem"},children:e.map(a=>n.jsxs("div",{style:{padding:"0.7rem 0.6rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.2rem",fontWeight:800,color:a.color,lineHeight:1.05},children:a.value}),n.jsx("p",{style:{margin:"0.2rem 0 0 0",fontSize:"0.7rem",color:hc,lineHeight:1.25},children:a.label})]},a.label))}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:t.map(a=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.25rem"},children:[n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:600,color:kg},children:a.label}),n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:700,color:hc},children:a.value})]}),n.jsx("div",{style:{height:"10px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${a.pct}%`,height:"100%",background:Ts}})})]},a.label))})]})},cme=()=>{const e=[{value:"128",label:"engaged accounts",color:"#2d6a4f"},{value:"41",label:"progressing stage",color:"#1b1f1c"},{value:"$3.1M",label:"program pipeline",color:"#347BD1"},{value:"+14pp",label:"win-rate lift",color:"#2d6a4f"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27,31,28,0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:"#2d6a4f",letterSpacing:"0.05em",textTransform:"uppercase"},children:"Target account program · this quarter"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.6rem"},children:e.map(t=>n.jsxs("div",{style:{padding:"0.8rem 0.9rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.35rem",fontWeight:800,color:t.color,lineHeight:1.1},children:t.value}),n.jsx("p",{style:{margin:"0.2rem 0 0 0",fontSize:"0.76rem",color:"#5f6563"},children:t.label})]},t.label))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.78rem",color:"#5f6563",lineHeight:1.45},children:"The whole program on one scorecard, measured on movement, not clicks."})]})},Jh="#2d6a4f",dme="#347BD1",qP="#a1560b",mh="#c0392b",Wd="#1b1f1c",_s="#5f6563",s1={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"},l1=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),ume=()=>{const e=[{platform:"Google Ads",claim:"142 conv."},{platform:"LinkedIn",claim:"96 conv."},{platform:"Meta",claim:"88 conv."}];return n.jsxs("div",{style:s1,children:[n.jsx("p",{style:l1(mh),children:"Platform claims vs CRM truth"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.4rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",padding:"0.5rem 0.75rem",borderRadius:"9px",background:"#fafbfa"},children:[n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:600,color:Wd},children:t.platform}),n.jsxs("span",{style:{fontSize:"0.8rem",fontWeight:700,color:_s},children:["claims ",n.jsx("span",{style:{color:mh},children:t.claim})]})]},t.platform))}),n.jsx("div",{style:{textAlign:"center",fontSize:"0.9rem",color:"#c2c9c4",margin:"0.5rem 0"},children:"↓"}),n.jsxs("div",{style:{padding:"0.75rem 0.85rem",borderRadius:"10px",background:"#eef5f1",border:`1px solid ${Jh}22`},children:[n.jsx("p",{style:{margin:0,fontSize:"0.72rem",fontWeight:700,color:Jh,textTransform:"uppercase",letterSpacing:"0.04em"},children:"Real influenced pipeline"}),n.jsxs("p",{style:{margin:"0.25rem 0 0 0",fontSize:"1.25rem",fontWeight:800,color:Wd},children:["$1.4M ",n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:600,color:_s},children:"across 38 deals"})]})]})]})},hme=()=>{const e=[{from:"Direct",to:"Paid social",value:"$320K"},{from:"Unknown",to:"Paid search",value:"$210K"},{from:"Direct",to:"Retargeting",value:"$140K"}];return n.jsxs("div",{style:s1,children:[n.jsx("p",{style:l1(dme),children:"Recovered · pixels missed these"}),n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.5rem",margin:"0.6rem 0 0.8rem 0"},children:[n.jsx("span",{style:{fontSize:"1.9rem",fontWeight:800,color:Wd,lineHeight:1},children:"34%"}),n.jsx("span",{style:{fontSize:"0.8rem",color:_s,lineHeight:1.3},children:"of paid touches were lost to “direct / unknown”"})]}),n.jsx("div",{style:{display:"grid",gap:"0.45rem"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",padding:"0.55rem 0.7rem",borderRadius:"9px",background:"#fafbfa"},children:[n.jsx("span",{style:{fontSize:"0.76rem",fontWeight:600,color:_s,textDecoration:"line-through"},children:t.from}),n.jsx("span",{style:{color:"#c2c9c4",fontSize:"0.8rem"},children:"→"}),n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:700,color:Jh},children:t.to}),n.jsx("span",{style:{marginLeft:"auto",fontSize:"0.8rem",fontWeight:700,color:Wd},children:t.value})]},a))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:_s},children:"Credited back to the deals they actually influenced."})]})},pme=()=>{const e=[{name:"Paid search",cpl:34,cpo:88,flip:!1},{name:"Content syndication",cpl:22,cpo:96,flip:!0},{name:"Paid social",cpl:48,cpo:61,flip:!1}];return n.jsxs("div",{style:s1,children:[n.jsx("p",{style:l1(Jh),children:"Cost per real opportunity"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.75rem"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.3rem"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:Wd},children:t.name}),t.flip?n.jsx("span",{style:{fontSize:"0.68rem",fontWeight:700,color:qP},children:"looks cheap, isn’t"}):null]}),n.jsxs("div",{style:{display:"grid",gap:"0.25rem"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"0.64rem",color:_s,width:"34px"},children:"CPL"}),n.jsx("div",{style:{flex:1,height:"9px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.cpl}%`,height:"100%",background:"#c9d6cf"}})})]}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"0.64rem",color:_s,width:"34px"},children:"CPO"}),n.jsx("div",{style:{flex:1,height:"9px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.cpo}%`,height:"100%",background:t.flip?qP:Jh}})})]})]})]},t.name))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:_s},children:"CPL flatters volume. Cost per opp tells the truth."})]})},mme=()=>{const e=[{name:"“crm software” keyword",spend:"$18K",pipe:"$0"},{name:"Display retarget · cold",spend:"$24K",pipe:"$0"},{name:"Trade pub sponsorship",spend:"$20K",pipe:"$0"}];return n.jsxs("div",{style:s1,children:[n.jsx("p",{style:l1(mh),children:"Demand waste · flagged to cut"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.45rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",padding:"0.6rem 0.75rem",borderRadius:"10px",background:"#fbeceb"},children:[n.jsxs("div",{style:{minWidth:0,flex:1},children:[n.jsx("p",{style:{margin:0,fontSize:"0.82rem",fontWeight:700,color:Wd},children:t.name}),n.jsxs("p",{style:{margin:"0.1rem 0 0 0",fontSize:"0.74rem",color:_s},children:[t.spend," spent · ",n.jsxs("span",{style:{color:mh,fontWeight:700},children:[t.pipe," pipeline"]})]})]}),n.jsx("span",{style:{flexShrink:0,fontSize:"0.68rem",fontWeight:800,textTransform:"uppercase",letterSpacing:"0.05em",color:mh,border:`2px solid ${mh}`,borderRadius:"6px",padding:"0.24rem 0.5rem"},children:"Cut"})]},t.name))}),n.jsxs("div",{style:{marginTop:"0.85rem",paddingTop:"0.7rem",borderTop:"1px solid #eef1ef",display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:700,color:Wd},children:"Reclaimable this cycle"}),n.jsx("span",{style:{fontSize:"1.1rem",fontWeight:800,color:Jh},children:"$62K"})]})]})},fme=()=>{const e=[{value:"$480K",label:"paid spend",color:"#1b1f1c"},{value:"$2.6M",label:"sourced pipeline",color:"#2d6a4f"},{value:"5.4×",label:"pipeline per $",color:"#347BD1"},{value:"$310",label:"cost per opp",color:"#1b1f1c"}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27,31,28,0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.744rem",fontWeight:700,color:"#2d6a4f",letterSpacing:"0.05em",textTransform:"uppercase"},children:"Paid media · pipeline efficiency"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.6rem"},children:e.map(t=>n.jsxs("div",{style:{padding:"0.8rem 0.9rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.35rem",fontWeight:800,color:t.color,lineHeight:1.1},children:t.value}),n.jsx("p",{style:{margin:"0.2rem 0 0 0",fontSize:"0.76rem",color:"#5f6563"},children:t.label})]},t.label))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.78rem",color:"#5f6563",lineHeight:1.45},children:"Spend judged on the pipeline it created, not the clicks it bought."})]})},ma="#2d6a4f",ng="#347BD1",tx="#a1560b",gme="#c0392b",ep="#1b1f1c",So="#5f6563",zy={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"},Ly=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),$4=e=>e>=80?ma:e>=60?ng:e>=40?tx:So,yme=({n:e})=>n.jsx("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:"34px",height:"34px",borderRadius:"999px",flexShrink:0,fontSize:"0.86rem",fontWeight:800,color:$4(e),background:`${$4(e)}14`},children:e}),bme=()=>{const e=[{name:"Northgate Systems",n:88,note:"High priority"},{name:"Summit Technologies",n:86,note:"High priority"},{name:"Crestline Transit",n:71,note:"Medium"},{name:"Vanguard Freight",n:54,note:"Monitor"}];return n.jsxs("div",{style:zy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:Ly(ma),children:"Expansion readiness · scored"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:So},children:"50 accounts"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem",padding:"0.55rem 0.7rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx(yme,{n:t.n}),n.jsx("span",{style:{fontSize:"0.84rem",fontWeight:700,color:ep,flex:1,lineHeight:1.3},children:t.name}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,color:$4(
3580t.n)},children:t.note})]},t.name))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:So},children:"Scored on land-deal shape, buying-group depth, and post-land engagement."})]})},vme=()=>n.jsxs("div",{style:zy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:Ly(ng),children:"Whitespace · Northgate Systems"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:800,color:ma},children:"$700K–$2.8M"})]}),n.jsxs("div",{style:{marginTop:"0.85rem",display:"flex",flexWrap:"wrap",gap:"0.4rem"},children:[n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:600,color:ma,background:"#e8f4ed",borderRadius:"999px",padding:"0.24rem 0.55rem"},children:"Analytics tier — owned"}),n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:600,color:ng,background:"#eaf0f7",borderRadius:"999px",padding:"0.24rem 0.55rem"},children:"Automation — open"}),n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:600,color:ng,background:"#eaf0f7",borderRadius:"999px",padding:"0.24rem 0.55rem"},children:"2 more seats — open"})]}),n.jsxs("div",{style:{marginTop:"0.9rem",padding:"0.7rem 0.85rem",borderRadius:"10px",background:"#eef5f1",border:`1px solid ${ma}22`},children:[n.jsx("p",{style:{margin:0,fontSize:"0.7rem",fontWeight:800,color:ma,textTransform:"uppercase",letterSpacing:"0.04em"},children:"Recommended play"}),n.jsx("p",{style:{margin:"0.3rem 0 0 0",fontSize:"0.82rem",fontWeight:700,color:ep,lineHeight:1.4},children:"Multi-thread to Ops before renewal — automation champion already active."})]})]}),xme=()=>{const e=[{sev:ma,label:"Champion engaged",note:"3 touches this month"},{sev:tx,label:"Usage flat 60 days",note:"watch before ask"},{sev:gme,label:"Exec sponsor left",note:"re-anchor first"}];return n.jsxs("div",{style:zy,children:[n.jsx("p",{style:Ly(tx),children:"Read the risk first"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.65rem",padding:"0.6rem 0.75rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,width:"9px",height:"9px",borderRadius:"999px",background:t.sev}}),n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:700,color:ep,flex:1,lineHeight:1.3},children:t.label}),n.jsx("span",{style:{flexShrink:0,fontSize:"0.72rem",fontWeight:600,color:So},children:t.note})]},t.label))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:So},children:"Protect the base you have before you try to grow it."})]})},wme=()=>{const e=[{label:"High (80+)",count:5,color:ma,pct:100},{label:"Medium (60–79)",count:13,color:ng,pct:68},{label:"Monitor (40–59)",count:21,color:tx,pct:44},{label:"Low (<40)",count:11,color:So,pct:24}];return n.jsxs("div",{style:zy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:Ly(ma),children:"Whole book · ranked"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:So},children:"Export CSV"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.6rem"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.3rem"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:ep},children:t.label}),n.jsxs("span",{style:{fontSize:"0.8rem",fontWeight:800,color:t.color},children:[t.count," accts"]})]}),n.jsx("div",{style:{height:"10px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:t.color}})})]},t.label))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:So},children:"Cross-sell runs against all 50, not whoever came up in the review."})]})},kme=()=>{const e=[{label:"Buying-group depth",pct:92},{label:"Post-land engagement",pct:78},{label:"Whitespace fit",pct:84}];return n.jsxs("div",{style:zy,children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",gap:"0.75rem"},children:[n.jsx("p",{style:Ly(ma),children:"Expansion readiness · account"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:800,color:ma,background:"#e8f4ed",borderRadius:"999px",padding:"0.15rem 0.55rem",textTransform:"uppercase",letterSpacing:"0.03em",whiteSpace:"nowrap"},children:"High priority"})]}),n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.6rem",marginTop:"0.75rem"},children:[n.jsx("span",{style:{fontSize:"2rem",fontWeight:800,color:ma,lineHeight:1},children:"88"}),n.jsx("span",{style:{fontSize:"0.9rem",color:So},children:"readiness · Northgate Systems"})]}),n.jsx("div",{style:{display:"grid",gap:"0.5rem",marginTop:"0.9rem"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.25rem"},children:[n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:600,color:ep},children:t.label}),n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:700,color:ma},children:t.pct})]}),n.jsx("div",{style:{height:"8px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:ma}})})]},t.label))}),n.jsxs("div",{style:{marginTop:"0.9rem",paddingTop:"0.7rem",borderTop:"1px solid #eef1ef",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:ep},children:"Est. value"}),n.jsx("span",{style:{fontSize:"0.95rem",fontWeight:800,color:ma},children:"$700K–$2.8M"})]}),n.jsx("p",{style:{margin:"0.7rem 0 0 0",fontSize:"0.82rem",color:So,lineHeight:1.45},children:"Scored from land deal, engagement, and whitespace — with the play and evidence attached."})]})},rd="#2d6a4f",fH="#347BD1",aS="#a1560b",Gl="#c0392b",tp="#1b1f1c",nr="#5f6563",Uy={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"}
3580,By=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),jme=()=>{const e=[{stage:"Discovery → Eval",inflated:71,resolved:52},{stage:"Eval → Proposal",inflated:64,resolved:48},{stage:"Proposal → Won",inflated:58,resolved:31}];return n.jsxs("div",{style:Uy,children:[n.jsx("p",{style:By(fH),children:"Resolved-or-past · not inflated"}),n.jsxs("div",{style:{display:"flex",gap:"0.9rem",margin:"0.7rem 0 0.2rem 0"},children:[n.jsxs("span",{style:{fontSize:"0.72rem",fontWeight:700,color:nr},children:[n.jsx("span",{style:{display:"inline-block",width:9,height:9,borderRadius:2,background:"#c7d2cc",marginRight:5}}),"Inflated (all open)"]}),n.jsxs("span",{style:{fontSize:"0.72rem",fontWeight:700,color:rd},children:[n.jsx("span",{style:{display:"inline-block",width:9,height:9,borderRadius:2,background:rd,marginRight:5}}),"Resolved"]})]}),n.jsx("div",{style:{marginTop:"0.6rem",display:"grid",gap:"0.7rem"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.3rem"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:tp},children:t.stage}),n.jsxs("span",{style:{fontSize:"0.78rem",fontWeight:800,color:rd},children:[t.resolved,"%"]})]}),n.jsxs("div",{style:{position:"relative",height:"12px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:[n.jsx("div",{style:{position:"absolute",inset:0,width:`${t.inflated}%`,background:"#c7d2cc"}}),n.jsx("div",{style:{position:"absolute",inset:0,width:`${t.resolved}%`,background:rd}})]})]},t.stage))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:nr},children:"Open deals stop flattering the rate. This is what really happened."})]})},Sme=()=>n.jsxs("div",{style:Uy,children:[n.jsx("p",{style:By(Gl),children:"Bottleneck · found"}),n.jsxs("div",{style:{marginTop:"0.85rem",padding:"0.9rem 1rem",borderRadius:"12px",background:"#fbeceb",border:`1px solid ${Gl}22`},children:[n.jsx("p",{style:{margin:0,fontSize:"0.78rem",fontWeight:700,color:nr},children:"Worst-converting transition"}),n.jsx("p",{style:{margin:"0.35rem 0 0 0",fontSize:"1.05rem",fontWeight:800,color:tp},children:"Proposal → Closed Won"}),n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.5rem",marginTop:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"1.7rem",fontWeight:800,color:Gl,lineHeight:1},children:"31%"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:Gl},children:"vs 52% at prior stages"})]})]}),n.jsxs("div",{style:{marginTop:"0.85rem",display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:800,color:tp},children:"$1.9M"}),n.jsx("span",{style:{fontSize:"0.78rem",color:nr},children:"in pipeline stuck at this one step."})]}),n.jsx("p",{style:{margin:"0.5rem 0 0 0",fontSize:"0.76rem",color:nr},children:"Put your energy here, not spread across five stages."})]}),Cme=()=>{const e=[{stage:"Discovery",days:9,pct:30,slow:!1},{stage:"Evaluation",days:14,pct:47,slow:!1},{stage:"Proposal",days:31,pct:100,slow:!0},{stage:"Negotiation",days:12,pct:40,slow:!1}];return n.jsxs("div",{style:Uy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:By(aS),children:"Time in stage · median days"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:nr},children:"Last 2 quarters"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.6rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem"},children:[n.jsx("span",{style:{minWidth:"84px",fontSize:"0.8rem",fontWeight:700,color:tp},children:t.stage}),n.jsx("div",{style:{flex:1,height:"10px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:t.slow?aS:"#c7d2cc"}})}),n.jsxs("span",{style:{minWidth:"44px",textAlign:"right",fontSize:"0.8rem",fontWeight:800,color:t.slow?aS:nr},children:[t.days,"d"]})]},t.stage))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:nr},children:"Proposal converts fine but ages 31 days — a velocity leak, not a rate leak."})]})},Ame=()=>{const e=["Proposal → Won is the bottleneck at 31%.","Deals age 31 days in Proposal — 2× any other stage.","Enterprise converts 18pts lower than Commercial."];return n.jsxs("div",{style:Uy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:By(rd),children:"Key takeaways · auto"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,color:nr},children:"Record type · Q filter"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"flex",gap:"0.6rem",padding:"0.6rem 0.75rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,width:"18px",height:"18px",borderRadius:"999px",background:"#e8f4ed",color:rd,fontSize:"0.7rem",fontWeight:800,display:"inline-flex",alignItems:"center",justifyContent:"center"},children:a+1}),n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:600,color:tp,lineHeight:1.35},children:t})]},a))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:nr},children:"Self-serve and current, not an analyst's quarterly deck."})]})},Tme=()=>{const e=[{label:"Lead",pct:100,conv:null},{label:"Discovery",pct:62,conv:"62%"},{label:"Evaluation",pct:41,conv:"52%"},{label:"Proposal",pct:27,conv:"48%"},{label:"Closed Won",pct:12,conv:"31%",bottleneck:!0}];return n.jsxs("div",{style:Uy,children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",ga
3580p:"0.75rem"},children:[n.jsx("p",{style:By(fH),children:"Funnel · resolved conversion"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:800,color:Gl,background:"#fff",border:`1px solid ${Gl}33`,borderRadius:"999px",padding:"0.15rem 0.55rem",textTransform:"uppercase",letterSpacing:"0.03em",whiteSpace:"nowrap"},children:"Bottleneck flagged"})]}),n.jsx("div",{style:{marginTop:"0.9rem",display:"grid",gap:"0.45rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem"},children:[n.jsx("span",{style:{minWidth:"88px",fontSize:"0.78rem",fontWeight:700,color:tp},children:t.label}),n.jsx("div",{style:{flex:1,height:"16px",borderRadius:"6px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:t.bottleneck?Gl:rd,borderRadius:"6px"}})}),n.jsx("span",{style:{minWidth:"42px",textAlign:"right",fontSize:"0.76rem",fontWeight:700,color:t.bottleneck?Gl:nr},children:t.conv??"—"})]},t.label))}),n.jsx("p",{style:{margin:"0.9rem 0 0 0",fontSize:"0.82rem",color:nr,lineHeight:1.45},children:"Measured on deals that resolved or advanced — so the rate is real, and the break is obvious."})]})},pi="#2d6a4f",FM="#347BD1",gH="#a1560b",np="#c0392b",zd="#1b1f1c",Co="#5f6563",qy={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"},$y=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),_me=()=>n.jsxs("div",{style:qy,children:[n.jsx("p",{style:$y(pi),children:"Speed-to-lead · this month"}),n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.6rem",marginTop:"0.7rem"},children:[n.jsx("span",{style:{fontSize:"2rem",fontWeight:800,color:pi,lineHeight:1},children:"2h 14m"}),n.jsx("span",{style:{fontSize:"0.85rem",color:Co},children:"median follow-up"})]}),n.jsxs("div",{style:{marginTop:"0.95rem",display:"grid",gap:"0.5rem"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",padding:"0.6rem 0.75rem",borderRadius:"10px",background:"#eef5f1"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:zd},children:"Fastest · Priya S."}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:800,color:pi},children:"6 min"})]}),n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",padding:"0.6rem 0.75rem",borderRadius:"10px",background:"#fbeceb"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:zd},children:"Slowest · Dev R."}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:800,color:np},children:"2d 9h"})]})]}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:Co},children:"The standard you talk about is finally a number you can see."})]}),Mme=()=>{const e=[{name:"Dev R.",waiting:7,oldest:"2d"},{name:"Marta L.",waiting:4,oldest:"1d"},{name:"Sam K.",waiting:2,oldest:"9h"}];return n.jsxs("div",{style:qy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:$y(np),children:"Needs follow-up · by owner"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:800,color:np},children:"13 waiting"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem",padding:"0.6rem 0.75rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,width:"26px",height:"26px",borderRadius:"999px",background:"#e8f4ed",color:pi,fontSize:"0.72rem",fontWeight:800,display:"inline-flex",alignItems:"center",justifyContent:"center"},children:t.name.charAt(0)}),n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:700,color:zd,flex:1},children:t.name}),n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:800,color:zd},children:t.waiting}),n.jsxs("span",{style:{fontSize:"0.72rem",fontWeight:600,color:Co},children:["oldest ",t.oldest]})]},t.name))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:Co},children:"Every rep knows exactly who's still waiting on them."})]})},Eme=()=>{const e=[{name:"Priya S.",time:"6 min",pct:100,color:pi},{name:"Sam K.",time:"48 min",pct:74,color:pi},{name:"Marta L.",time:"3h 20m",pct:46,color:gH},{name:"Dev R.",time:"2d 9h",pct:16,color:np}];return n.jsxs("div",{style:qy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:$y(FM),children:"Leaderboard · by rep"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,color:Co},children:"Rep · campaign · month"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.6rem"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.3rem"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:zd},children:t.name}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:800,color:t.color},children:t.time})]}),n.jsx("div",{style:{height:"10px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:t.color}})})]},t.name))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:Co},children:"Coach the slow reps, recognize the ones setting the pace."})]})},Rme=()=>{const e=[{name:"Webinar · AI in GTM",worked:94,color:pi},{name:"Gated report",worked:71,color:FM},{name:"Trade show list",worked:38,color:np}];return n.jsxs("div",{style:qy,children:[n.jsx("p",{style:$y(pi),children:"Follow-up · by campaign"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.65rem"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.3rem"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:zd},children:t.name}),n.jsxs("span",{style:{fontSize:"0.78rem",fontWeight:800,color:t.color},children:[t.worked,"% worked"]})]}),n.jsx("div",{style:{height:"10px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.worked}%`,height:"100%",background:t.color}})})]},t.name))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:Co},children:"The trade-show list generates leads and loses them to a slow hand-off."})]})},Nme=()=>{const e=[{label:"< 15 min",pct:34,color:pi},{label:"15–60 min",pct:22,color:pi},{label:"1–4 hrs",pct:18,color:FM},{label:"4–24 hrs",pct:14,color:gH},{label:"> 1 day",pct:12,color:np}];return n.jsxs("div",{style:qy,children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",ga
3580p:"0.75rem"},children:[n.jsx("p",{style:$y(pi),children:"Speed-to-lead · overview"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:800,color:pi,background:"#e8f4ed",borderRadius:"999px",padding:"0.15rem 0.55rem",textTransform:"uppercase",letterSpacing:"0.03em",whiteSpace:"nowrap"},children:"On the clock"})]}),n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.6rem",marginTop:"0.75rem"},children:[n.jsx("span",{style:{fontSize:"2rem",fontWeight:800,color:pi,lineHeight:1},children:"2h 14m"}),n.jsx("span",{style:{fontSize:"0.9rem",color:Co},children:"median · 312 leads"})]}),n.jsx("div",{style:{marginTop:"0.95rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem"},children:[n.jsx("span",{style:{minWidth:"78px",fontSize:"0.76rem",fontWeight:700,color:zd},children:t.label}),n.jsx("div",{style:{flex:1,height:"10px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct*2.6}%`,height:"100%",background:t.color}})}),n.jsxs("span",{style:{minWidth:"34px",textAlign:"right",fontSize:"0.76rem",fontWeight:700,color:Co},children:[t.pct,"%"]})]},t.label))}),n.jsx("p",{style:{margin:"0.9rem 0 0 0",fontSize:"0.82rem",color:Co,lineHeight:1.45},children:"Reach every lead before interest cools — and see the 12% that slip past a day."})]})},Ha="#2d6a4f",GM="#347BD1",Ome="#a1560b",Ld="#1b1f1c",zr="#5f6563",Fy={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"},Gy=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),Pme=()=>n.jsxs("div",{style:Fy,children:[n.jsx("p",{style:Gy(Ha),children:"Pulled from a call · ready to use"}),n.jsxs("div",{style:{marginTop:"0.85rem",padding:"1rem 1.1rem",borderRadius:"12px",background:"#eef5f1",position:"relative"},children:[n.jsx("span",{style:{position:"absolute",top:"-0.2rem",left:"0.6rem",fontSize:"2.6rem",color:`${Ha}44`,fontFamily:"Georgia, serif",lineHeight:1},children:"“"}),n.jsx("p",{style:{margin:"0.6rem 0 0 0",fontSize:"0.92rem",fontWeight:600,color:Ld,lineHeight:1.45},children:"Rollout was the fastest we've ever done — live in days, not months."})]}),n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",marginTop:"0.8rem"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:Ld},children:"VP Ops · Brightwave Health"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,color:GM},children:"QBR · Mar 12"})]}),n.jsx("p",{style:{margin:"0.75rem 0 0 0",fontSize:"0.76rem",color:zr},children:"No new interview booked — the perfect line already existed."})]}),Ime=()=>{const e=[{name:"Brightwave Health",ok:!0,note:"Logo + name approved"},{name:"Harbor Financial",ok:!0,note:"Quote only, no logo"},{name:"Cobalt Software",ok:!1,note:"No public use"}];return n.jsxs("div",{style:Fy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:Gy(GM),children:"Logo-use rights · from CRM"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:800,color:Ha},children:"7 approved"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.65rem",padding:"0.6rem 0.75rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,width:"20px",height:"20px",borderRadius:"999px",background:t.ok?"#e8f4ed":"#f0f0ef",color:t.ok?Ha:zr,fontSize:"0.72rem",fontWeight:800,display:"inline-flex",alignItems:"center",justifyContent:"center"},children:t.ok?"✓":"✕"}),n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:700,color:Ld,flex:1},children:t.name}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:600,color:t.ok?Ha:zr},children:t.note})]},t.name))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:zr},children:"Know who you can name before you hit publish."})]})},Dme=()=>{const e=["Speed","ROI","Onboarding","Support","Security"];return n.jsxs("div",{style:Fy,children:[n.jsx("p",{style:Gy(Ha),children:"Search · every quote & account"}),n.jsxs("div",{style:{marginTop:"0.85rem",display:"flex",alignItems:"center",gap:"0.5rem",padding:"0.6rem 0.8rem",borderRadius:"999px",border:"1px solid #e6ebe7",background:"#fafbfa"},children:[n.jsx("span",{style:{fontSize:"0.85rem",color:zr},children:"⚲"}),n.jsx("span",{style:{fontSize:"0.85rem",fontWeight:600,color:Ld},children:"time to value"}),n.jsx("span",{style:{marginLeft:"auto",fontSize:"0.74rem",fontWeight:700,color:Ha},children:"9 matches"})]}),n.jsx("div",{style:{marginTop:"0.8rem",display:"flex",flexWrap:"wrap",gap:"0.4rem"},children:e.map((t,a)=>n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:600,color:a===0?"#fff":Ld,background:a===0?Ha:"#f0f2f0",borderRadius:"999px",padding:"0.26rem 0.6rem"},children:t},t))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:zr},children:"Filter by company or theme and find the proof in seconds."})]})},Wme=()=>{const e=[{text:"Made us smarter operators overnight.",who:"Meridian Retail",c:Ha},{text:"Cut reporting from hours to clicks.",who:"Lumen Analytics",c:GM},{text:"Finally, proof our board trusts.",who:"Pinnacle Fitness",c:Ome}];return n.jsxs("div",{style:Fy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:Gy(Ha),children:"Voice-of-customer wall"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,color:Ha},children:"+3 new this week"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{padding:"0.65rem 0.8rem",borderRadius:"10px",background:"#fafbfa",borderLeft:`3px solid ${t.c}`},children:[n.jsxs("p",{style:{margin:0,fontSize:"0.82rem",fontWeight:600,color:Ld,lineHeight:1.35},children:["“",t.text,"”"]}),n.jsx("p",{style:{margin:"0.3rem 0 0 0",fontSize:"0.72rem",fontWeight:700,color:zr},children:t.who})]},t.who))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:zr},children:"Pulls from new conversations — never frozen at launch."})]})},zme=()=>{const e=[{n:"14",label:"Quotes"},{n:"10",label:"Companies"},{n:"7",label:"Logo-approved"}];return n.jsxs("div",{style:Fy,children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",ga
3580p:"0.75rem"},children:[n.jsx("p",{style:Gy(Ha),children:"Customer proof · live wall"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:800,color:Ha,background:"#e8f4ed",borderRadius:"999px",padding:"0.15rem 0.55rem",textTransform:"uppercase",letterSpacing:"0.03em",whiteSpace:"nowrap"},children:"From your calls"})]}),n.jsx("div",{style:{display:"flex",gap:"0.6rem",marginTop:"0.85rem"},children:e.map(t=>n.jsxs("div",{style:{flex:1,textAlign:"center",padding:"0.7rem 0.4rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("div",{style:{fontSize:"1.4rem",fontWeight:800,color:Ha,lineHeight:1},children:t.n}),n.jsx("div",{style:{fontSize:"0.68rem",fontWeight:700,color:zr,textTransform:"uppercase",letterSpacing:"0.03em",marginTop:"0.3rem"},children:t.label})]},t.label))}),n.jsxs("div",{style:{marginTop:"0.85rem",padding:"0.85rem 1rem",borderRadius:"12px",background:"#eef5f1"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.9rem",fontWeight:600,color:Ld,lineHeight:1.45},children:"“What used to take hours I 
3580now do in a few clicks.”"}),n.jsx("p",{style:{margin:"0.4rem 0 0 0",fontSize:"0.74rem",fontWeight:700,color:zr},children:"Head of Ops · Vertex Robotics · logo approved"})]}),n.jsx("p",{style:{margin:"0.75rem 0 0 0",fontSize:"0.82rem",color:zr,lineHeight:1.45},children:"Website-ready quotes, each tagged with the rights to use them."})]})},Cd="#2d6a4f",yH="#347BD1",Eh="#a1560b",jg="#c0392b",ap="#1b1f1c",Ao="#5f6563",Hy={background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.25rem 1.4rem",width:"100%",maxWidth:"460px",fontFamily:"'Space Grotesk', sans-serif"},Yy=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),Lme=()=>{const e=[{label:"Deals touched by launch",value:"68",note:"closed + open"},{label:"Avg engagement vs baseline",value:"+41%",note:"above benchmark",up:!0},{label:"Top journey archetype",value:"Champion-led",note:"in 44% of wins"}];return n.jsxs("div",{style:Hy,children:[n.jsx("p",{style:Yy(Cd),children:"Read from the deals · not activity"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem",padding:"0.65rem 0.8rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsxs("div",{style:{flex:1},children:[n.jsx("p",{style:{margin:0,fontSize:"0.68rem",fontWeight:700,color:Ao,textTransform:"uppercase",letterSpacing:"0.04em"},children:t.label}),n.jsx("p",{style:{margin:"0.15rem 0 0 0",fontSize:"0.95rem",fontWeight:800,color:t.up?Cd:ap},children:t.value})]}),n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:600,color:Ao,textAlign:"right",maxWidth:"110px",lineHeight:1.3},children:t.note})]},t.label))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:Ao},children:"How the launch lands in the funnel — not how busy the motion looks."})]})},Ume=()=>{const e=[{msg:"“Replaces 3 point tools”",pct:82,color:Cd},{msg:"“Live in days”",pct:67,color:Cd},{msg:"“AI-native”",pct:34,color:Eh}];return n.jsxs("div",{style:Hy,children:[n.jsx("p",{style:Yy(yH),children:"Messaging · what's landing"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.65rem"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.3rem"},children:[n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:ap},children:t.msg}),n.jsxs("span",{style:{fontSize:"0.78rem",fontWeight:800,color:t.color},children:[t.pct,"% resonance"]})]}),n.jsx("div",{style:{height:"10px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:t.color}})})]},t.msg))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:Ao},children:"Double down on what resonates before the next wave."})]})},Bme=()=>{const e=[{sev:jg,label:"Price vs incumbent bundle",n:"9 deals"},{sev:Eh,label:"Migration effort concern",n:"6 deals"},{sev:Eh,label:"Missing SSO at launch",n:"4 deals"}];return n.jsxs("div",{style:Hy,children:[n.jsx("p",{style:Yy(jg),children:"Loss patterns · as deals resolve"}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.65rem",padding:"0.6rem 0.75rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,width:"9px",height:"9px",borderRadius:"999px",background:t.sev}}),n.jsx("span",{style:{fontSize:"0.82rem",fontWeight:700,color:ap,flex:1,lineHeight:1.3},children:t.label}),n.jsx("span",{style:{flexShrink:0,fontSize:"0.72rem",fontWeight:700,color:Ao},children:t.n})]},t.label))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:Ao},children:"Adjust positioning mid-launch — not in the retro."})]})},qme=()=>{const e=[{deal:"Atlas Freight · $220K",risk:"Stalled 12d in eval",color:jg},{deal:"Lumen · $140K",risk:"Champion went quiet",color:Eh},{deal:"Cobalt · $95K",risk:"Competitor re-entered",color:Eh}];return n.jsxs("div",{style:Hy,children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between"},children:[n.jsx("p",{style:Yy(Eh),children:"Pipeline at risk · now"}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:800,color:jg},children:"$455K"})]}),n.jsx("div",{style:{marginTop:"0.85rem",display:"grid",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.65rem",padding:"0.6rem 0.75rem",borderRadius:"10px",background:"#fafbfa"},children:[n.jsx("span",{style:{flexShrink:0,width:"9px",height:"9px",borderRadius:"999px",background:t.color}}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:ap,flex:1,lineHeight:1.3},children:t.deal}),n.jsx("span",{style:{flexShrink:0,fontSize:"0.72rem",fontWeight:600,color:Ao,maxWidth:"120px",textAlign:"right"},children:t.risk})]},t.deal))}),n.jsx("p",{style:{margin:"0.85rem 0 0 0",fontSize:"0.76rem",color:Ao},children:"Save the at-risk revenue while there's still time."})]})},$me=()=>{const e=[{label:"Messaging resonance",pct:74,color:Cd},{label:"Win rate on launch deals",pct:58,color:yH},{label:"Pipeline at risk",pct:22,color:jg}];return n.jsxs("div",{style:Hy,children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start",ga
3580p:"0.75rem"},children:[n.jsx("p",{style:Yy(Cd),children:"Launch scorecard · in flight"}),n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:800,color:Cd,background:"#e8f4ed",borderRadius:"999px",padding:"0.15rem 0.55rem",textTransform:"uppercase",letterSpacing:"0.03em",whiteSpace:"nowrap"},children:"Day 18"})]}),n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.6rem",marginTop:"0.75rem"},children:[n.jsx("span",{style:{fontSize:"1.15rem",fontWeight:700,color:ap},children:"Atlas 2.0 launch"}),n.jsx("span",{style:{fontSize:"0.85rem",color:Ao},children:"· 68 deals touched"})]}),n.jsx("div",{style:{display:"grid",gap:"0.55rem",marginTop:"0.9rem"},children:e.map(t=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginBottom:"0.25rem"},children:[n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:600,color:ap},children:t.label}),n.jsxs("span",{style:{fontSize:"0.78rem",fontWeight:800,color:t.color},children:[t.pct,"%"]})]}),n.jsx("div",{style:{height:"8px",borderRadius:"999px",background:"#eef1ef",overflow:"hidden"},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:t.color}})})]},t.label))}),n.jsx("p",{style:{margin:"0.9rem 0 0 0",fontSize:"0.82rem",color:Ao,lineHeight:1.45},children:"Read from real deals while there's still time to change the outcome."})]})},Fme={"green-light":se.greenLight,"green-soft":se.greenLight,cream:se.cream,"blue-soft":"#eaf0f7","purple-soft":"#efeaf7",ivory:"#faf8f2"},Gme=({slug:e})=>{const t=_M(e),a=M.useRef(null),[i,r]=M.useState("loading");return M.useEffect(()=>{const o=a.current;if(!t||!o)return;let l=!0,d=null;const u=new AbortController;return r("loading"),KG(o,e,{signal:u.signal}).then(h=>{if(!l){h();return}d=h,r("ready")}).catch(h=>{l&&(console.error(h),r("error"))}),()=>{l=!1,u.abort(),d&&d()}},[e,t]),t?n.jsxs(Ce,{id:"see-it-in-action",children:[n.jsx("span",{className:"it-eyebrow",style:{display:"inline-block",color:se.greenSoft,border:`1px solid ${se.border}`,borderRadius:"999px",padding:"0.25rem 0.85rem",marginBottom:"1.1rem",background:"#fff"},children:"Live example · built on Upside"}),n.jsx(De,{children:"See it in action"}),n.jsx(We,{style:{marginTop:"0.9rem"},children:"A working miniapp on representative data, embedded right here. Scroll it, click through it, then open the full example."}),n.jsxs("div",{style:{marginTop:"1.75rem",background:"#fff",borderRadius:"16px",border:"1px solid #2d6a4f",overflow:"hidden",boxShadow:"0 18px 48px rgba(27,31,28,0.12)"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",padding:"0.65rem 0.95rem",borderBottom:`1px solid ${se.border}`,background:se.bgSoft},children:[n.jsxs("div",{style:{display:"flex",gap:"0.42rem",flex:"0 0 auto"},children:[n.jsx("span",{style:{width:11,height:11,borderRadius:"50%",background:"#ff5f57"}}),n.jsx("span",{style:{width:11,height:11,borderRadius:"50%",background:"#febc2e"}}),n.jsx("span",{style:{width:11,height:11,borderRadius:"50%",background:"#28c840"}})]}),n.jsx("div",{style:{flex:1,display:"flex",justifyContent:"center",minWidth:0},children:n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.45rem",fontFamily:"'Space Grotesk', sans-serif",fontSize:"0.78rem",fontWeight:500,color:se.muted,background:"#fff",border:`1px solid ${se.border}`,borderRadius:"999px",padding:"0.22rem 0.85rem",maxWidth:"100%",overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:[n.jsx("span",{style:{width:6,height:6,borderRadius:"50%",background:se.greenSoft,flex:"0 0 auto"}}),t.title," · ",t.category]})}),n.jsx("div",{style:{width:45,flex:"0 0 auto"},"aria-hidden":"true"})]}),n.jsxs("div",{style:{position:"relative",aspectRatio:"16 / 10",minHeight:"340px",overflow:"hidden",background:"#fff",transform:"translateZ(0)"},children:[n.jsx("div",{style:{position:"absolute",inset:0,overflowY:"auto",WebkitOverflowScrolling:"touch"},children:n.jsx("div",{ref:a,style:{visibility:i==="ready"?"visible":"hidden"}})}),i==="loading"&&n.jsx("div",{"aria-hidden":"true",style:{position:"absolute",inset:0,display:"flex",alignItems:"center",justifyContent:"center",padding:"3rem 1.5rem",textAlign:"center",color:"#5b6360",background:"#fff"},className:"body-m",children:"Loading example…"}),i==="error"&&n.jsx("div",{style:{padding:"2rem 1.5rem"},children:n.jsxs("p",{className:"body-m",style:{margin:0},children:["This example could not be loaded."," ",n.jsx(J,{to:xa(t.slug),style:{color:"#2d6a4f",fontWeight:600},children:"Open it in the examples library →"})]})})]})]}),n.jsx("div",{style:{marginTop:"1.25rem"},children:n.jsx(Yh,{label:"Explore the full example",href:xa(t.slug)})})]}):null},Hme=()=>{var h,m,f;const{slug:e}=Ta(),t=e?RM(e):void 0,a=e?XG(e):void 0;if(!t||!a)return n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"Solution Not Found",canonicalUrl:`https://upside.tech/use-cases/${e??""}`}),n.jsx("section",{id:"hero",style:{position:"relative",marginTop:"-65px",background:"#fafafa",borderBottom:"1px solid #eaeeea",overflow:"hidden"},children:n.jsxs("div",{style:{maxWidth:840,margin:"0 auto",padding:"148px 40px 84px",textAlign:"center"},children:[n.jsx("h1",{style:{margin:0,fontSize:"clamp(34px, 6vw, 62px)",lineHeight:1.04,fontWeight:600,color:"#1b1f1c",letterSpacing:"-0.03em",maxWidth:"760px",marginInline:"auto",textWrap:"balance"},children:"Solution Not Found"}),n.jsx("p",{style:{margin:"24px auto 0",fontSize:"19px",lineHeight:1.6,color:"#5f6563",maxWidth:"600px",textWrap:"pretty"},children:"The solution you're looking for doesn't exist yet."})]})}),n.jsx("div",{className:"container",children:n.jsx("div",{className:"content",children:n.jsx("section",{className:"section",children:n.jsx(J,{to:"/",className:"cta w-button",children:"Back to Home"})})})})]});const i=EM.find(y=>y.key===t.category),r=`${(i==null?void 0:i.eyebrow)??"Upside"} · ${t.title}`,o=(h=a.spotlight)!=null&&h.caseStudySlug?{label:`Read the ${a.spotlight.company} story →`,href:`/case-studies/${a.spotlight.caseStudySlug}`}:a.embeddedApp?{label:"See it in action →",href:"#see-it-in-action"}:void 0,l=(m=a.spotlight)!=null&&m.caseStudySlug&&a.embeddedApp?n.jsx(Yh,{label:"See it in action →",href:"#see-it-in-action"}):void 0,d=(f=a.spotlight)==null?void 0:f.company.toLowerCase().replace(/[^a-z0-9]/g,""),u=d?zs[d]:void 0;
3580return n.jsxs(Wo,{navVariant:"light",seo:{title:t.title,description:t.description,canonical:`https://upside.tech/use-cases/${t.slug}`,ogImage:t.ogImage},children:[n.jsx(Vs,{breadcrumbRoot:{label:"Use cases",href:"/use-cases"},eyebrow:r,headline:a.hero.headline,sub:a.hero.subhead,secondary:o,extraCta:l,visual:a.heroVisual?$P(a.heroVisual):void 0,wideVisual:a.heroVisual==="opportunities-table"}),a.features.map((y,b)=>{const x=$P(y.visualType,y.visualChip,y.image,y.imageAlt),k=(y.visualChip??`Capability ${b+1}`).toUpperCase(),v=b%2===1;return x?n.jsx(If,{num:b+1,label:k,heading:y.heading,lead:y.body,blurbs:[],visual:x,flip:v,alt:v,artBg:y.accentColor?Fme[y.accentColor]:void 0},y.heading):n.jsxs(Ce,{alt:v,children:[n.jsxs("span",{className:"pf-stage-label",children:[n.jsx("span",{className:"pf-stage-num",children:b+1}),k]}),n.jsx(De,{style:{margin:"0.6rem 0 0.6rem 0"},children:y.heading}),n.jsx(We,{children:GP(y.body)})]},y.heading)}),a.embeddedApp&&n.jsx(Gme,{slug:a.embeddedApp},a.embeddedApp),a.spotlight&&n.jsx(Ce,{center:!0,children:n.jsx(Nd,{logo:u,quote:a.spotlight.quote,cite:n.jsxs(n.Fragment,{children:[n.jsx("strong",{children:a.spotlight.name}),", ",a.spotlight.title," · ",a.spotlight.company]}),link:a.spotlight.caseStudySlug?{label:`Read the ${a.spotlight.company} story`,href:`/case-studies/${a.spotlight.caseStudySlug}`}:void 0})}),a.impact&&a.impact.items.length>0&&n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"Impact"}),a.impact.heading&&n.jsx(De,{style:{margin:"0.9rem 0 0.6rem"},children:a.impact.heading}),a.impact.eyebrow&&n.jsx(We,{children:a.impact.eyebrow}),n.jsx(Ws,{cards:a.impact.items.map(y=>({num:y.accent,title:y.headline,body:GP(y.body)}))})]}),a.testimonials&&a.testimonials.length>0&&(()=>{const[y]=a.testimonials,b=x=>[x.title,x.company].filter(Boolean).join(" · ");return n.jsx(Ce,{center:!0,children:n.jsx(Nd,{quote:y.quote,cite:n.jsxs(n.Fragment,{children:[n.jsx("strong",{children:y.name}),b(y)?`, ${b(y)}`:""]})})})})(),(()=>{const y=NM().filter(b=>b.category===t.category&&b.slug!==t.slug).slice(0,6);return y.length===0?null:n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Related"}),n.jsx(De,{style:{margin:"0.9rem 0 0.6rem"},children:"Related use cases"}),n.jsx(Ws,{cards:y.map(b=>({title:b.title,body:b.tagline,href:`/use-cases/${b.slug}`}))})]})})(),a.faqs&&a.faqs.length>0&&n.jsxs(Ce,{alt:!0,children:[n.jsx("script",{type:"application/ld+json",dangerouslySetInnerHTML:{__html:JSON.stringify({"@context":"https://schema.org","@type":"FAQPage",mainEntity:a.faqs.map(y=>({"@type":"Question",name:y.question,acceptedAnswer:{"@type":"Answer",text:y.answer}}))})}}),n.jsx(zo,{badge:"FAQs",heading:"Questions? Answers.",items:a.faqs.map(y=>({q:y.question,a:y.answer}))})]}),n.jsx(Xs,{heading:a.cta.headline,sub:a.cta.subhead??"",secondary:{label:"Take the interactive tour",href:"/interactive-demo"}})]})},$P=(e,t,a,i)=>{switch(e){case"venn-discovery":return n.jsx(Lue,{});case"search-themes-bar":return n.jsx(Uue,{});case"opportunity-modal":return n.jsx(Bue,{});case"opportunities-table":return n.jsx(que,{});case"llm-citation-traffic":return n.jsx(Fue,{});case"events-deals-table":return n.jsx(Gue,{});case"event-format-bars":return n.jsx(Hue,{});case"sourced-vs-influenced":return n.jsx(Yue,{});case"event-activation-timeline":return n.jsx(Vue,{});case"event-attendance-detected":return n.jsx(Xue,{});case"referrer-directory":return n.jsx(ahe,{});case"referrer-network":return n.jsx(ihe,{});case"champion-alert":return n.jsx(rhe,{});case"champion-job-change-stat":return n.jsx(ohe,{});case"top-referrers-list":return n.jsx(she,{});case"referral-flywheel":return n.jsx(lhe,{});case"advocate-scorecard":return n.jsx(che,{});case"milestone-timeline":return n.jsx(dhe,{});case"milestone-examples":return n.jsx(yhe,{});case"hidden-touchpoints-stats":return n.jsx(uhe,{});case"custom-channels-list":return n.jsx(hhe,{});case"segmented-attribution-bar":return n.jsx(phe,{});case"persona-resolution":return n.jsx(whe,{});case"buying-group-detection":return n.jsx(khe,{});case"touchpoint-direction":return n.jsx(jhe,{});case"email-chain-reconstruction":return n.jsx(She,{});case"channel-report-card":return n.jsx(Ahe,{});case"webpage-revenue":return n.jsx(The,{});case"account-health-card":return n.jsx(_he,{});case"email-outcomes":return n.jsx(Mhe,{});
3580case"inbound-drivers":return n.jsx(Ehe,{});case"cmo-dashboard":return n.jsx(nH,{});case"attribution-breakdown":return n.jsx(Whe,{});case"keep-optimize-stop":return n.jsx(zhe,{});case"page-report-card":return n.jsx(Bhe,{});case"page-list-comparison":return n.jsx(qhe,{});case"page-benchmark":return n.jsx($he,{});case"case-study-pipeline":return n.jsx(Fhe,{});case"content-automation-stack":return n.jsx(Ghe,{});case"send-time-heatmap":return n.jsx(Khe,{});case"rep-email-effectiveness":return n.jsx(Xhe,{});case"nurture-sequence-roi":return n.jsx(Qhe,{});case"year-in-review-wrapped":return n.jsx(Lhe,{});case"win-back-sales-kit":return n.jsx(Jhe,{});case"next-best-play":return n.jsx(epe,{});case"customer-dossier":return n.jsx(tpe,{});case"multi-threading-dashboard":return n.jsx(npe,{});case"messaging-adherence":return n.jsx(ape,{});case"attendance-detection-sources":return n.jsx(Kue,{});case"activation-after-event":return n.jsx(Que,{});case"in-cycle-event-influence":return n.jsx(Zue,{});case"attendee-context-panel":return n.jsx(Jue,{});case"organic-social-by-platform":return n.jsx(ipe,{});case"founder-content-channel":return n.jsx(rpe,{});case"at-risk-alert-card":return n.jsx(Rhe,{});case"missing-pages-from-voice":return n.jsx(Hhe,{});case"unified-foundation":return n.jsx(sH,{});case"mcp-agent-hub":return n.jsx(lH,{});case"query-answer-evidence":return n.jsx(cpe,{});case"librarian-answer":return n.jsx(upe,{});case"in-app-agent":return n.jsx(hpe,{});case"security-posture":return n.jsx(dpe,{});case"prompt-to-app":return n.jsx(dH,{});case"app-permissions":return n.jsx(mpe,{});case"version-lifecycle":return n.jsx(fpe,{});case"live-data-app":return n.jsx(gpe,{});case"event-followup-status":return n.jsx(the,{});case"smart-invite-list":return n.jsx(nhe,{});case"deal-reason-reconstruct":return n.jsx(bpe,{});case"loss-patterns":return n.jsx(vpe,{});case"competitive-scorecard":return n.jsx(xpe,{});case"win-loss-routing":return n.jsx(wpe,{});case"campaign-scorecard":return n.jsx(Spe,{});case"campaign-rollup":return n.jsx(Cpe,{});case"program-comparison":return n.jsx(Ape,{});case"campaign-verdict":return n.jsx(Tpe,{});case"customer-quote-find":return n.jsx(Rpe,{});case"content-influence-rank":return n.jsx(Ope,{});case"content-gap-queue":return n.jsx(Ipe,{});case"content-draft-pipeline":return n.jsx(Dpe,{});case"messaging-lands":return n.jsx(zpe,{});case"objection-rank":return n.jsx(Lpe,{});case"channel-performance-compare":return n.jsx(Upe,{});case"exec-channel":return n.jsx(Bpe,{});case"messaging-overview":return n.jsx(qpe,{});case"win-loss-overview":return n.jsx(kpe,{});case"campaign-overview":return n.jsx(_pe,{});case"content-overview":return n.jsx(Wpe,{});case"attribution-overview":return n.jsx(xhe,{});case"abm-overview":return n.jsx(cme,{});case"pm-overview":return n.jsx(fme,{});case"ask-overview":return n.jsx(ppe,{});case"gtm-apps-overview":return n.jsx(ype,{});case"pg-overview":return n.jsx(Zpe,{});case"de-overview":return n.jsx(ame,{});case"pf-overview":return n.jsx(Ype,{});case"pf-signal-vs-stage":return n.jsx($pe,{});case"pf-slip-early-warning":return n.jsx(Fpe,{});case"pf-bottoms-up-rollup":return n.jsx(Gpe,{});case"pf-scenario-bars":return n.jsx(Hpe,{});case"pg-intent-ranking":return n.jsx(Vpe,{});case"pg-account-themes":return n.jsx(Kpe,{});case"pg-inbound-router":return n.jsx(Xpe,{});case"pg-live-target-list":return n.jsx(Qpe,{});case"de-deal-runbook":return n.jsx(Jpe,{});case"de-risk-alerts":return n.jsx(eme,{});case"de-rep-patterns":return n.jsx(tme,{});case"de-winning-plays":return n.jsx(nme,{});case"abm-engagement-depth":return n.jsx(rme,{});case"abm-stage-movement":return n.jsx(ome,{});case"abm-one-account-view":return n.jsx(sme,{});case"abm-program-roi":return n.jsx(lme,{});case"pm-paid-to-pipeline":return n.jsx(ume,{});case"pm-recovered-touches":return n.jsx(hme,{});case"pm-cost-per-opp":return n.jsx(pme,{});case"pm-demand-waste":return n.jsx(mme,{});case"ex-overview":return n.jsx(kme,{});case"ex-readiness-score":return n.jsx(bme,{});case"ex-whitespace-plays":return n.jsx(vme,{});case"ex-risk-signal":return n.jsx(xme,{});case"ex-book-ranking":return n.jsx(wme,{});case"fc-overview":return n.jsx(Tme,{});case"fc-resolved-funnel":return n.jsx(jme,{});case"fc-bottleneck":return n.jsx(Sme,{});case"fc-time-in-stage":return n.jsx(Cme,{});case"fc-takeaways":return n.jsx(Ame,{});case"sl-overview":return n.jsx(Nme,{});case"sl-response-time":return n.jsx(_me,{});case"sl-needs-followup":return n.jsx(Mme,{});case"sl-leaderboard":return n.jsx(Eme,{});case"sl-campaign-status":return n.jsx(Rme,{});case"ca-overview":return n.jsx(zme,{});case"ca-quote-card":return n.jsx(Pme,{});case"ca-logo-rights":return n.jsx(Ime,{});case"ca-search":return n.jsx(Dme,{});case"ca-quote-wall":return n.jsx(Wme,{});case"li-overview":return n.jsx($me,{});case"li-deal-read":return n.jsx(Lme,{});case"li-messaging":return n.jsx(Ume,{});case"li-loss-patterns":return n.jsx(Bme,{});case"li-pipeline-risk":return n.jsx(qme,{});case"chip":default:return a?n.jsx("img",{src:a,alt:i??"Visual",loading:"lazy",style:{width:"100%",height:"auto",borderRadius:"10px"}}):t?n.jsx($ue,{label:t}):null}},Uv={mcp:"/platform/mcp",deepResearch:"/platform/deep-research",miniapps:"/platform/miniapps",pipedash:"/platform/pipedash"},FP=/(Upside MCP|Deep Research Agents|Deep Research|[Mm]ini-apps|[Mm]ini-app|Pipedash)/,Yme=e=>e==="Upside MCP"?Uv.mcp:e==="Deep Research Agents"||e==="Deep Research"?Uv.deepResearch:/^[Mm]ini-apps?$/.test(e)?Uv.miniapps:e==="Pipedash"?Uv.pipedash:null,GP=e=>FP.test(e)?e.split(FP).map((t,a)=>{const i=Yme(t);return i?n.jsx(J,{to:i,style:{color:"#2d6a4f",fontWeight:600,textDecoration:"underline",textUnderlineOffset:"2px"},children:t},a):t}):e,Vme=()=>{const e=NM();return n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"Use Cases",description:"See how modern B2B teams use Upside: ask questions of unified GTM data in the AI tool of your choice, publish internal apps, run the right play on every account, and measure what actually drives pipeline.",canonicalUrl:"https://upside.tech/use-cases"}),n.jsx(Hr,{eyebrow:"Use Cases",title:"Use Cases",description:n.jsxs(n.Fragment,{children:["Ask better questions, ship internal tools, and measure",n.jsx("br",{}),"what works, all on one clean data foundation."]})}),n.jsx("style",{children:`
3581        .solution-hub-card:focus-visible {
3582          outline: 2px solid #2d6a4f;
3583          outline-offset: 3px;
3584        }
3585        /* Two-column row: header on the left, cards on the right.
3586           Stacks vertically below 880px so mobile keeps the header
3587           above its cards. */
3588        .solution-hub-row {
3589          /* .section is a centered flex column, so rows shrink-to-fit and
3590             each ends up a different width. Force full width so all card
3591             grids align across categories. */
3592          width: 100%;
3593          display: grid;
3594          /* Fixed header column (not minmax) so every category row's card
3595             grid starts at the same x and tiles are identical width. */
3596          grid-template-columns: 260px 1fr;
3597          gap: clamp(1.5rem, 3vw, 2.5rem);
3598          align-items: start;
3599          padding: clamp(1.5rem, 3vw, 2.25rem) 0;
3600          border-top: 1px solid #eaeeea;
3601        }
3602        .solution-hub-row:first-of-type { border-top: none; padding-top: 0; }
3603        .solution-hub-row:last-of-type { padding-bottom: 0; }
3604        @media (max-width: 880px) {
3605          .solution-hub-row {
3606            grid-template-columns: 1fr;
3607            gap: 1.25rem;
3608          }
3609        }
3610        @media (max-width: 560px) {
3611          .solution-hub-cards {
3612            grid-template-columns: 1fr !important;
3613          }
3614        }
3615      `}),n.jsx("div",{className:"container",children:n.jsx("div",{className:"content",children:n.jsx("section",{className:"section",style:{paddingBottom:"clamp(2rem, 6vw, 4rem)"},children:EM.map(t=>{const a=e.filter(i=>i.category===t.key);return a.length===0?null:n.jsx(Kme,{category:t,cards:a},t.key)})})})})]})},Kme=({category:e,cards:t})=>
3615n.jsxs("div",{className:"solution-hub-row",id:`category-${e.key}`,children:[n.jsxs("header",{children:[n.jsx("p",{style:{fontSize:"0.75rem",fontWeight:700,color:"#2d6a4f",letterSpacing:"0.08em",textTransform:"uppercase",margin:"0 0 0.4rem 0"},children:e.eyebrow}),n.jsx("h2",{style:{fontSize:"clamp(1.35rem, 2.2vw, 1.65rem)",fontWeight:700,margin:"0 0 0.5rem 0",color:"#1b1f1c",fontFamily:"'Geist', sans-serif",lineHeight:1.2},children:e.heading}),n.jsx("p",{style:{margin:0,fontSize:"0.875rem",color:"#5f6563",lineHeight:1.5},children:e.subhead})]}),n.jsx("div",{className:"solution-hub-cards",style:{display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:"0.85rem"},children:t.map(a=>n.jsx(Xme,{solution:a,hoverShadow:e.hoverShadow},a.slug))})]}),Xme=({solution:e,hoverShadow:t})=>{const[a,i]=M.useState(!1),r=ca(e.iconName);return n.jsxs(J,{to:`/use-cases/${e.slug}`,className:"solution-hub-card",onMouseEnter:()=>i(!0),onMouseLeave:()=>i(!1),onFocus:()=>i(!0),onBlur:()=>i(!1),style:{background:"#ffffff",border:"none",borderRadius:"12px",padding:"1rem 1.1rem",display:"flex",flexDirection:"column",gap:"0.55rem",textDecoration:"none",color:"inherit",transition:"transform 0.18s ease, box-shadow 0.18s ease",transform:a?"translateY(-2px)":"translateY(0)",boxShadow:a?t:"0 1px 3px rgba(27, 31, 28, 0.05)",outline:"none",minHeight:"140px"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[r?n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"32px",height:"32px",borderRadius:"8px",background:"#f4f6f3",color:"#1b1f1c",flexShrink:0},children:n.jsx(r,{size:18,strokeWidth:2})}):n.jsx("span",{}),n.jsx(vy,{size:18,strokeWidth:2,color:"#1b1f1c",style:{transform:a?"translateX(3px)":"translateX(0)",transition:"transform 0.18s ease"}})]}),n.jsxs("div",{style:{marginTop:"auto"},children:[n.jsx("h3",{style:{fontSize:"1.05rem",fontWeight:700,margin:"0 0 0.35rem 0",color:"#1b1f1c",lineHeight:1.25,fontFamily:"'Geist', sans-serif"},children:e.title}),n.jsx("p",{style:{margin:0,fontSize:"0.85rem",color:"#5f6563",lineHeight:1.45},children:e.tagline})]})]})},Qme={"green-light":"#e8f4ed","green-soft":"#d9ead3",cream:"#f5eedc","blue-soft":"#e4edf5","purple-soft":"#ece7f5",ivory:"#fffff0"},Zme={"green-light":"#1f5238","green-soft":"#1f5238",cream:"#7a5a1f","blue-soft":"#2c4a6e","purple-soft":"#4a3b6e",ivory:"#394142"},bH=e=>Qme[e??"green-light"],vH=e=>Zme[e??"green-light"],HP=4,Jme=({pillars:e,personaNavLabel:t})=>{if(e.length===0)return null;const a=t.replace(/^For\s+/i,"");return n.jsxs("section",{style:{padding:"clamp(3rem, 6vw, 5rem) clamp(1.25rem, 5vw, 4rem)",background:se.bgSoft},children:[n.jsx("style",{children:`
3616        .persona-pillar-tile:focus-visible {
3617          outline: 2px solid #2d6a4f;
3618          outline-offset: 3px;
3619        }
3620      `}),n.jsxs("div",{style:{maxWidth:"1100px",margin:"0 auto"},children:[n.jsxs("div",{style:{textAlign:"center",marginBottom:"2.5rem",display:"flex",flexDirection:"column",alignItems:"center"},children:[n.jsx(Ie,{children:"Use cases"}),n.jsxs("h2",{className:"it-title",style:{color:se.text,margin:"0.9rem 0 0.75rem"},children:["What ",a," use Upside for"]}),n.jsx("p",{style:{margin:"0 auto",maxWidth:"640px",fontSize:"0.95rem",color:se.muted,lineHeight:1.55},children:"Each tile opens the full pillar page with how-it-works, customer proof, and the data behind the use case."})]}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(320px, 1fr))",gap:"1.5rem"},children:e.map(i=>n.jsx(efe,{pillar:i},i.slug))})]})]})},efe=({pillar:e})=>{const[t,a]=M.useState(!1),i=e.accentColorKey,r=bH(i),o=vH(i),l=ca(e.iconName),[d,u]=M.useState(!1),h=XG(e.slug),m=(h==null?void 0:h.relatedUseCases)??[],f=m.slice(0,HP),y=m.slice(HP),b=y.length;return n.jsxs(J,{to:`/use-cases/${e.slug}`,className:"persona-pillar-tile",onMouseEnter:()=>a(!0),onMouseLeave:()=>{a(!1),u(!1)},onFocus:()=>a(!0),onBlur:()=>{a(!1),u(!1)},style:{position:"relative",zIndex:d?100:1,display:"flex",flexDirection:"column",gap:"1rem",background:r,borderRadius:"16px",padding:"1.5rem",textDecoration:"none",color:"inherit",border:`1px solid ${t?o:"transparent"}`,transform:t?"translateY(-2px)":"translateY(0)",boxShadow:t?"0 8px 24px rgba(27, 31, 28, 0.08)":"0 1px 2px rgba(27, 31, 28, 0.03)",transition:"transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease",outline:"none"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[l?n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"44px",height:"44px",borderRadius:"10px",background:"#ffffff",color:o,flexShrink:0},children:n.jsx(l,{size:22,strokeWidth:2})}):n.jsx("span",{}),n.jsx(vy,{size:20,strokeWidth:2,color:o,style:{transform:t?"translateX(4px)":"translateX(0)",transition:"transform 0.18s ease"}})]}),n.jsxs("div",{children:[n.jsx("h3",{style:{fontSize:"1.15rem",fontWeight:700,margin:"0 0 0.4rem 0",color:"#1b1f1c",lineHeight:1.25,fontFamily:"'Geist', sans-serif"},children:e.title}),n.jsx("p",{style:{margin:0,fontSize:"0.875rem",color:"#394142",lineHeight:1.5},children:e.tagline})]}),m.length>0&&n.jsxs("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.4rem",marginTop:"auto"},children:[f.map(x=>n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:500,color:o,background:"rgba(255, 255, 255, 0.7)",border:"1px solid rgba(255, 255, 255, 0.9)",padding:"0.3rem 0.65rem",borderRadius:"999px",lineHeight:1.3,whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},title:x.title,children:x.title},x.title)),b>0&&n.jsxs("span",{onMouseEnter:()=>u(!0),onMouseLeave:()=>u(!1),onFocus:()=>u(!0),onBlur:()=>u(!1),onClick:x=>{x.preventDefault(),x.stopPropagation(),u(k=>!k)},tabIndex:-1,style:{position:"relative",display:"inline-flex",alignItems:"center",cursor:"pointer"},children:[n.jsxs("span",{style:{fontSize:"0.72rem",fontWeight:600,color:o,background:d?"rgba(255, 255, 255, 0.85)":"rgba(255, 255, 255, 0.4)",border:`1px dashed ${o}`,padding:"0.3rem 0.55rem",borderRadius:"999px",lineHeight:1.3,opacity:d?1:.85,transition:"opacity 0.15s ease, background 0.15s ease"},children:["+ ",b," more"]}),d&&n.jsxs("div",{role:"tooltip",style:{position:"absolute",bottom:"calc(100% + 6px)",left:"50%",transform:"translateX(-50%)",minWidth:"180px",maxWidth:"280px",background:"#ffffff",border:`1px solid ${se.border}`,borderRadius:"12px",padding:"0.65rem",boxShadow:"0 12px 32px rgba(27, 31, 28, 0.12)",display:"flex",flexWrap:"wrap",gap:"0.35rem",zIndex:10,pointerEvents:"none"},children:[y.map(x=>n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:500,color:o,background:r,border:`1px solid ${r}`,padding:"0.3rem 0.65rem",borderRadius:"999px",lineHeight:1.3,whiteSpace:"normal",overflowWrap:"anywhere"},children:x.title},x.title)),n.jsx("span",{"aria-hidden":"true",style:{position:"absolute",top:"100%",left:"50%",transform:"translateX(-50%)",width:0,height:0,borderLeft:"6px solid transparent",borderRight:"6px solid transparent",borderTop:"6px solid #ffffff",filter:"drop-shadow(0 1px 0 #eaeeea)"}})]})]})]})]})},tfe=({currentSlug:e})=>{const t=OM().filter(a=>a.slug!==e);return t.length===0?null:n.jsxs("section",{style:{padding:"clamp(3rem, 6vw, 5rem) clamp(1.25rem, 5vw, 4rem)",background:"#fff",borderTop:`1px solid ${se.border}`},children:[n.jsx("style",{children:`
3621        .other-persona-card:focus-visible {
3622          outline: 2px solid #2d6a4f;
3623          outline-offset: 3px;
3624        }
3625      `}),n.jsxs("div",{style:{maxWidth:"1100px",margin:"0 auto"},children:[n.jsxs("div",{style:{textAlign:"center",marginBottom:"2rem",display:"flex",flexDirection:"column",alignItems:"center"},children:[n.jsx(Ie,{children:"Other teams"}),n.jsx("h2",{className:"it-title-sm",style:{color:se.text,margin:"0.9rem 0 0"},children:"Upside for the rest of the revenue org"})]}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",justifyContent:"center",gap:"1.25rem"},children:t.map(a=>n.jsx(nfe,{persona:a},a.slug))})]})]})},nfe=({persona:e})=>{const[t,a]=M.useState(!1),i=bH(e.accentColorKey),r=vH(e.accentColorKey),o=ca(e.iconName);return n.jsxs(J,{to:`/for/${e.slug}`,className:"other-persona-card",onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),onFocus:()=>a(!0),onBlur:()=>a(!1),style:{position:"relative",display:"flex",flexDirection:"column",gap:"0.85rem",flex:"1 1 280px",maxWidth:"350px",background:i,borderRadius:"16px",padding:"1.4rem",textDecoration:"none",color:"inherit",border:`1px solid ${t?r:"transparent"}`,transform:t?"translateY(-2px)":"translateY(0)",boxShadow:t?"0 8px 24px rgba(27, 31, 28, 0.08)":"0 1px 2px rgba(27, 31, 28, 0.03)",transition:"transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease",outline:"none"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"flex-start"},children:[o?n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"40px",height:"40px",borderRadius:"10px",background:"#ffffff",color:r,flexShrink:0},children:n.jsx(o,{size:20,strokeWidth:2})}):n.jsx("span",{}),n.jsx(vy,{size:20,strokeWidth:2,color:r,style:{transform:t?"translateX(4px)":"translateX(0)",transition:"transform 0.18s ease"}})]}),n.jsxs("div",{children:[n.jsx("h3",{style:{fontSize:"1.05rem",fontWeight:700,margin:"0 0 0.3rem 0",color:"#1b1f1c",lineHeight:1.25,fontFamily:"'Geist', sans-serif"},children:e.navLabel}),e.tagline&&n.jsx("p",{style:{margin:0,fontSize:"0.85rem",color:"#394142",lineHeight:1.5},children:e.tagline})]})]})},afe=()=>{const{slug:e}=Ta(),t=e?cle(e):void 0;if(!t)return n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"Not Found"}),n.jsxs("section",{style:{padding:"6rem 2rem",textAlign:"center"},children:[n.jsx("h1",{children:"Persona not found"}),n.jsx(J,{to:"/use-cases",children:"See all use cases"})]})]});const a=t.relatedUseCaseSlugs.map(i=>RM(i)).filter(i=>!!i);return n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:t.hero.headline,description:t.hero.subhead,canonicalUrl:`https://upside.tech/for/${t.slug}`}),n.jsx("style",{children:fG}),n.jsx("section",{style:{marginTop:"-65px",padding:"clamp(8.5rem, 9vw, 9rem) clamp(1.25rem, 5vw, 4rem) clamp(2.5rem, 5vw, 4rem)",background:"#fff",borderBottom:`1px solid ${se.border}`,textAlign:"center"},children:n.jsxs("div",{style:{maxWidth:"820px",margin:"0 auto",display:"flex",flexDirection:"column",alignItems:"center"},children:[n.jsxs("nav",{"aria-label":"Breadcrumb",style:{display:"flex",alignItems:"center",justifyContent:"center",gap:"0.5rem",marginBottom:"1.15rem",fontFamily:"Geist, sans-serif",fontSize:"0.9rem",fontWeight:500},children:[n.jsx("span",{style:{color:se.muted},children:"Solutions"}),n.jsx("span",{"aria-hidden":"true",style:{color:"#c1c9c4"},children:"/"}),n.jsx("span",{style:{color:se.muted},children:t.navLabel})]}),n.jsx("h1",{className:"it-display",style:{color:se.text,margin:"0 0 1.1rem 0"},children:t.hero.headline}),n.jsx("p",{className:"it-lead",style:{color:se.muted,margin:"0 0 1.75rem 0",maxWidth:"60ch"},children:t.hero.subhead}),n.jsx("div",{style:{display:"flex",gap:"1rem",flexWrap:"wrap",alignItems:"center",justifyContent:"center"},children:n.jsx(J,{to:Wt,className:"cta cc-large w-button",children:"Request demo"})})]})}),n.jsx(Jme,{pillars:a,personaNavLabel:t.navLabel}),t.outcomes&&t.outcomes.length>0&&n.jsx("section",{style:{padding:"clamp(3rem, 6vw, 5rem) clamp(1.25rem, 5vw, 4rem)",background:"#fff"},children:n.jsxs("div",{style:{maxWidth:"1100px",margin:"0 auto"},children:[n.jsxs("div",{style:{textAlign:"center",marginBottom:"2.5rem",display:"flex",flexDirection:"column",alignItems:"center"},children:[n.jsx(Ie,{children:"What you get"}),n.jsxs("h2",{className:"it-title",style:{color:se.text,margin:"0.9rem 0 0"},children:["Outcomes ",t.navLabel.replace(/^For\s+/i,"")," care about"]})]}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(260px, 1fr))",gap:"1.25rem"},children:t.outcomes.map(i=>n.jsxs("div",{style:{background:se.bgSoft,borderRadius:"14px",padding:"1.75rem",border:`1px solid ${se.border}`},children:[n.jsx("h3",{style:{fontSize:"1.0625rem",fontWeight:700,margin:"0 0 0.5rem 0",color:se.text,fontFamily:"'Geist', sans-serif",lineHeight:1.3},children:i.headline}),n.jsx("p",{style:{margin:0,fontSize:"0.9rem",color:se.muted,lineHeight:1.55},children:i.body})]},i.headline))})]})}),n.jsx("section",{style:{padding:"clamp(2.5rem, 4.5vw, 3.5rem) clamp(1.25rem, 5vw, 4rem)",background:se.bgSoft},children:n.jsxs("div",{style:{maxWidth:"1100px",margin:"0 auto"},children:[n.jsxs("div",{style:{textAlign:"center",marginBottom:"2rem",display:"flex",flexDirection:"column",alignItems:"center"},children:[n.jsx(Ie,{children:"User map"}),n.jsx("h2",{className:"it-title-sm",style:{color:se.text,margin:"0.9rem 0 0"},children:"Who on the team it's for"}),n.jsx("p",{style:{margin:"0.65rem auto 0",maxWidth:"560px",fontSize:"0.875rem",color:se.muted,lineHeight:1.5},children:"Each role linked to its primary use case. Click any with an arrow to open the pillar page."})]}),n.jsx("style",{children:`
3626            .role-mini-tile:focus-visible {
3627              outline: 2px solid #2d6a4f;
3628              outline-offset: 3px;
3629            }
3630          `}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",justifyContent:"center",gap:"0.85rem"},children:t.roles.map(i=>n.jsx(ife,{role:i},i.title))})]})}),n.jsx(tfe,{currentSlug:t.slug})]})},ife=({role:e})=>{const[t,a]=M.useState(!1),i=!!e.useCaseSlug,r=e.useCaseSlug?RM(e.useCaseSlug):void 0,o=i?ca(r==null?void 0:r.iconName):null,l={background:"#ffffff",border:`1px solid ${t&&i?"#c9cfcb":se.border}`,borderRadius:"12px",padding:"0.95rem 1.05rem",display:"flex",flexDirection:"column",gap:"0.55rem",textDecoration:"none",color:"inherit",curs
3630or:i?"pointer":"default",transition:"transform 0.18s ease, box-shadow 0.18s ease, border-color 0.18s ease",transform:t&&i?"translateY(-1px)":"translateY(0)",boxShadow:t&&i?"0 6px 16px rgba(27, 31, 28, 0.06)":"0 1px 1px rgba(27, 31, 28, 0.02)",flex:"1 1 220px",minWidth:"200px",maxWidth:"260px",outline:"none",opacity:i?1:.85},d=n.jsxs(n.Fragment,{children:[i&&n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center"},children:[o?n.jsx("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",width:"30px",height:"30px",borderRadius:"8px",background:"#f4f6f3",color:"#1b1f1c",flexShrink:0},children:n.jsx(o,{size:16,strokeWidth:2})}):n.jsx("span",{}),n.jsx(vy,{size:16,strokeWidth:2,color:"#1b1f1c",style:{transform:t?"translateX(3px)":"translateX(0)",transition:"transform 0.18s ease"}})]}),n.jsxs("div",{children:[n.jsx("h3",{style:{fontSize:"0.875rem",fontWeight:700,margin:"0 0 0.25rem 0",color:se.text,lineHeight:1.3,fontFamily:"'Geist', sans-serif"},children:e.title}),n.jsx("p",{style:{margin:0,fontSize:"0.78rem",color:se.muted,lineHeight:1.45},children:e.description})]})]});return i&&e.useCaseSlug?n.jsx(J,{to:`/use-cases/${e.useCaseSlug}`,className:"role-mini-tile",onMouseEnter:()=>a(!0),onMouseLeave:()=>a(!1),onFocus:()=>a(!0),onBlur:()=>a(!1),style:l,children:d}):n.jsx("div",{style:l,children:d})},li="#2d6a4f",To="#509A79",ks="#347BD1",F4="#a1560b",ip="#1b1f1c",Ud="#5f6563",Dl="#e6ebe7",ps="#c4ccc7",rfe="0 8px 30px rgba(27, 31, 28, 0.08)",xH={background:"#fff",borderRadius:"14px",boxShadow:rfe,fontFamily:"Geist, sans-serif",width:"100%"},G4="ui-monospace, 'SF Mono', Menlo, monospace",ofe=()=>{const e=[{label:"To do",color:ks},{label:"In progress",color:"#E6774A"},{label:"Done",color:To}],t=["Objection patterns","Funnel velocity","Winning deal themes"],a=["Catch me up on a key account","Compare campaign performance","Build a miniapp","Investigate a deal slip"];return n.jsxs("div",{style:{...xH,width:560,maxWidth:"100%",overflow:"hidden",border:`1px solid ${Dl}`},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.45rem",padding:"0.7rem 0.95rem",borderBottom:`1px solid ${Dl}`,background:"#fafbfc"},children:[n.jsx("span",{style:{width:10,height:10,borderRadius:999,background:"#e0e3e1"}}),n.jsx("span",{style:{width:10,height:10,borderRadius:999,background:"#e0e3e1"}}),n.jsx("span",{style:{width:10,height:10,borderRadius:999,background:"#e0e3e1"}})]}),n.jsxs("div",{className:"als-body",style:{display:"flex",minHeight:320},children:[n.jsxs("div",{className:"als-rail",style:{flex:"0 0 160px",background:"#f4f6f4",borderRight:`1px solid ${Dl}`,padding:"0.9rem 0.8rem"},children:[n.jsx("div",{style:{background:li,color:"#fff",borderRadius:9,textAlign:"center",fontSize:"0.9rem",fontWeight:700,padding:"0.5rem 0",marginBottom:"0.9rem"},children:"+ New session"}),e.map(i=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",padding:"0.32rem 0",fontSize:"0.9rem",color:Ud,fontWeight:600},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:999,background:i.color,flexShrink:0}}),i.label]},i.label)),n.jsx("div",{style:{borderTop:"1px dashed #d7dee6",margin:"0.7rem 0"}}),t.map(i=>n.jsx("div",{style:{fontSize:"0.9rem",color:Ud,padding:"0.28rem 0",lineHeight:1.25,fontWeight:500},children:i},i))]}),n.jsxs("div",{className:"als-main",style:{flex:1,minWidth:0,padding:"1.5rem 1.25rem 1.1rem",textAlign:"center",display:"flex",flexDirection:"column"},children:[n.jsx("div",{style:{color:To,fontSize:"1.5rem",fontWeight:700,lineHeight:1},children:"✦"}),n.jsx("p",{className:"als-heading",style:{margin:"0.4rem 0 1.1rem",fontFamily:"'Geist', sans-serif",fontSize:"1.35rem",fontWeight:700,color:ip},children:"What should we investigate?"}),n.jsx("div",{className:"als-cards",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.6rem",textAlign:"left"},children:a.map(i=>n.jsx("div",{style:{border:`1px solid ${Dl}`,borderRadius:11,padding:"0.7rem 0.75rem",minHeight:56,background:"#fff",display:"flex",alignItems:"center"},children:n.jsx("div",{style:{fontSize:"0.9rem",fontWeight:600,color:ip,lineHeight:1.25},children:i})},i))})]})]}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",borderTop:`1px solid ${Dl}`,padding:"0.8rem 0.95rem",background:"#fafbfc"},children:[n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.4rem",border:"1px solid #c9d2cc",borderRadius:999,padding:"0.35rem 0.7rem",fontSize:"0.9rem",fontWeight:700,color:ks,whiteSpace:"nowrap"},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:999,background:ks}}),"Supervised"]}),n.jsx("span",{style:{flex:1,height:12,borderRadius:999,background:"#eaeeea"}}),n.jsx("span",{style:{background:li,color:"#fff",borderRadius:8,padding:"0.4rem 0.8rem",fontSize:"0.9rem",fontWeight:700,whiteSpace:"nowrap"},children:"Send"})]})]})},sfe=()=>{const u=y=>({flex:"0 0 262px",boxSizing:"border-box",minHeight:118,background:y?"#f2faf6":"#fff",border:`1.5px solid ${y?li:ks}`,borderRadius:14,padding:"1.05rem 0.9rem",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"0.7rem",textAlign:"center"}),h={minHeight:26,display:"flex",alignItems:"center",justifyContent:"center",gap:"0.4rem",fontFamily:"'Geist', sans-serif",fontSize:"1.02rem",fontWeight:700,lineHeight:1.15},m={minHeight:26,display:"flex",alignItems:"center",justifyContent:"center",gap:"0.35rem",flexWrap:"wrap"},f=y=>n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:600,color:ip,background:"#fff",border:`1px solid ${Dl}`,borderRadius:999,padding:"0.18rem 0.6rem",whiteSpace:"nowrap"},children:y},y);return n.jsxs("div",{style:{width:620,maxWidth:"100%",fontFamily:"Geist, sans-serif"},children:[n.jsxs("div",{className:"tp-entry",style:{display:"flex",width:"100%",alignItems:"stretch"},children:[n.jsxs("div",{className:"tp-box",style:u(!0),children:[n.jsxs("span",{style:{...h,color:li},children:[n.jsx("img",{src:"/images/upside-icon-green.svg",alt:"",style:{height:20,width:"auto"}}),"Run the hosted agent"]}),n.jsx("span",{style:m,children:n.jsx("span",{style:{fontSize:"0.7rem",fontWeight:700,color:li,background:"#fff",border:"1px solid #bcdccb",borderRadius:999,padding:"0.18rem 0.6rem",textTransform:"uppercase",letterSpacing:"0.06em"},children:"Start here"})})]}),n.jsxs("div",{className:"tp-grad",style:{flex:1,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"0.4rem",padding:"0 0.2rem"},children:[n.jsxs("span",{style:{fontSize:"0.6rem",fontWeight:700,color:Ud,textTransform:"uppercase",letterSpacing:"0.07em",lineHeight:1.2,textAlign:"center"},children:["graduate",n.jsx("br",{}),"anytime"]}),n.jsxs("svg",{className:"tp-grad-arrow",width:"100%",height:"14",viewBox:"0 0 64 14",preserveAspectRatio:"none","aria-hidden":"true",style:{display:"block",maxWidth:64},children:[n.jsx("path",{d:"M2 7 H56",stroke:ps,strokeWidth:2,fill:"none",vectorEffect:"non-scaling-stroke"}),n.jsx("path",{d:"M49 3 L57 7 L49 11",stroke:ps,strokeWidth:2,fill:"none",strokeLinejoin:"round",strokeLinecap:"round",vectorEffect:"non-scaling-stroke"})]})]}),n.jsxs("div",{className:"tp-box",style:u(!1),children:[n.jsx("span",{style:{...h,color:ks},children:"Bring your own AI"}
3630),n.jsx("span",{style:m,children:["Claude","Cursor","Codex"].map(f)})]})]}),n.jsxs("svg",{className:"tp-fan",width:"100%",viewBox:"0 0 620 60",height:60,preserveAspectRatio:"none",style:{display:"block"},"aria-hidden":"true",children:[n.jsx("path",{d:"M 131 0 C 131 38, 310 20, 310 60",fill:"none",stroke:ps,strokeWidth:2,vectorEffect:"non-scaling-stroke"}),n.jsx("path",{d:"M 489 0 C 489 38, 310 20, 310 60",fill:"none",stroke:ps,strokeWidth:2,vectorEffect:"non-scaling-stroke"})]}),n.jsxs("svg",{className:"tp-conn-v",width:"24",height:"34",viewBox:"0 0 24 34","aria-hidden":"true",style:{display:"none",margin:"0.2rem auto"},children:[n.jsx("path",{d:"M 12 0 L 12 26",fill:"none",stroke:ps,strokeWidth:2}),n.jsx("path",{d:"M 5 19 L 12 26 L 19 19",fill:"none",stroke:ps,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsx("div",{style:{display:"flex",justifyContent:"center"},children:n.jsxs("div",{className:"tp-surface",style:{width:360,boxSizing:"border-box",display:"flex",alignItems:"center",justifyContent:"center",gap:"0.55rem",minHeight:56,background:"#e8f4ed",border:`1.5px solid ${li}`,borderRadius:999,padding:"0.7rem 1.5rem"},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:999,background:li,flexShrink:0}}),n.jsx("span",{style:{fontFamily:"'Geist', sans-serif",fontWeight:700,fontSize:"1rem",color:li},children:"One MCP tool surface"})]})}),n.jsx("svg",{width:"100%",viewBox:"0 0 620 38",height:38,preserveAspectRatio:"none",style:{display:"block"},"aria-hidden":"true",children:n.jsx("path",{d:"M 310 0 L 310 38",fill:"none",stroke:To,strokeWidth:2.5,vectorEffect:"non-scaling-stroke"})}),n.jsx("div",{style:{display:"flex",justifyContent:"center"},children:n.jsxs("div",{className:"tp-foundation",style:{width:480,boxSizing:"border-box",minHeight:66,display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",gap:"0.25rem",padding:"0.9rem 1.25rem",background:li,borderRadius:14,boxShadow:"0 6px 20px rgba(45,106,79,0.18)"},children:[n.jsx("span",{style:{fontFamily:"'Geist', sans-serif",fontWeight:700,fontSize:"1.05rem",color:"#fff"},children:"Reconstructed data foundation"}),n.jsx("span",{style:{fontSize:"0.82rem",color:"rgba(255,255,255,0.75)"},children:"accounts · people · touchpoints · buying groups"})]})})]})},lfe=()=>{const e=[{name:"Supervised",tone:ks,foot:"default"},{name:"Plan",tone:li,foot:"multi-step"},{name:"Autonomous",tone:F4,foot:"opt-in"}];return n.jsxs("div",{style:{width:560,maxWidth:"100%",fontFamily:"Geist, sans-serif"},children:[n.jsx("div",{className:"md-modes",style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:"0.6rem"},children:e.map(t=>n.jsxs("div",{className:"md-tile",style:{background:"#fff",border:`1.5px solid ${t.tone}`,borderRadius:12,padding:"0.85rem 0.9rem",minHeight:56,display:"flex",flexDirection:"column",justifyContent:"center"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.45rem",fontSize:"1rem",fontWeight:700,color:t.tone},children:[n.jsx("span",{style:{width:9,height:9,borderRadius:999,background:t.tone,flexShrink:0}}),t.name]}),n.jsx("span",{className:"md-foot",style:{marginTop:"0.35rem",fontSize:"0.9rem",color:Ud},children:t.foot})]},t.name))}),n.jsxs("div",{style:{...xH,marginTop:"0.85rem",border:`1.5px solid ${ks}`,padding:"1rem 1.1rem",boxShadow:"none"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"0.6rem"},children:[n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.4rem",fontSize:"0.9rem",fontWeight:700,color:ks},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:999,background:ks}}),"Approve to run"]}),n.jsx("span",{style:{fontSize:"0.85rem",color:"#9aa0a6",fontFamily:G4},children:"2:31 PM"})]}),n.jsx("code",{style:{display:"block",fontSize:"0.9rem",fontFamily:G4,color:ip,background:"#f5f7fa",borderRadius:8,padding:"0.6rem 0.7rem",lineHeight:1.45,overflowWrap:"anywhere"},children:"mcp__upside__execute_sql · SELECT channel, COUNT(*) … WHERE created > '6 weeks ago'"}),n.jsxs("div",{className:"md-btns",style:{display:"flex",gap:"0.5rem",marginTop:"0.7rem"},children:[n.jsx("span",{style:{flex:1,textAlign:"center",fontSize:"0.9rem",fontWeight:700,borderRadius:8,padding:"0.45rem 0",border:"1px solid #c9d2cc",color:Ud},children:"Deny"}),n.jsx("span",{style:{flex:1,textAlign:"center",fontSize:"0.9rem",fontWeight:700,borderRadius:8,padding:"0.45rem 0",background:li,color:"#fff"},children:"Approve"}),n.jsx("span",{className:"md-btn-full",style:{flex:1,textAlign:"center",fontSize:"0.9rem",fontWeight:700,borderRadius:8,padding:"0.45rem 0",background:To,color:"#fff"},children:"Approve for session"})]})]})]})},cfe=()=>{const e=["channels","campaigns","funnel"],i=e.length,r=i*48+(i-1)*8,o=r/2,l=h=>h*56+48/2,d=({color:h,opacity:m,dir:f})=>n.jsx("svg",{className:"saf-fan",width:"100%",viewBox:`0 0 60 ${r}`,height:r,preserveAspectRatio:"none",style:{display:"block"},"aria-hidden":"true",children:e.map((y,b)=>{const x=l(b),k=f==="out"?`M 0 ${o} C 30 ${o}, 30 ${x}, 60 ${x}`:`M 0 ${x} C 30 ${x}, 30 ${o}, 60 ${o}`;return n.jsx("path",{d:k,fill:"none",stroke:h,strokeWidth:2,strokeOpacity:m,vectorEffect:"non-scaling-stroke"},b)})}),u=({tone:h,label:m})=>n.jsx("div",{style:{background:"#fff",border:`1.5px solid ${h}`,borderRadius:12,padding:"0 1rem",minHeight:56,display:"flex",alignItems:"center",justifyContent:"center",textAlign:"center",fontFamily:"'Geist', sans-serif",fontSize:"1rem",fontWeight:700,color:h},children:m});return n.jsxs("div",{className:"saf-flow",style:{width:600,maxWidth:"100%",fontFamily:"Geist, sans-serif",display:"grid",gridTemplateColumns:"1fr 60px 1.2fr 60px 1fr",alignItems:"center"},children:[n.jsx(u,{tone:Ud,label:"Main agent"}),n.jsx(d,{color:ps,opacity:1,dir:"out"}),n.jsxs("svg",{className:"saf-conn-v",width:"24",height:"30",viewBox:"0 0 24 30","aria-hidden":"true",style:{display:"none",margin:"0.1rem auto"},children:[n.jsx("path",{d:"M 12 0 L 12 22",fill:"none",stroke:ps,strokeWidth:2}),n.jsx("path",{d:"M 6 16 L 12 23 L 18 16",fill:"none",stroke:ps,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsx("div",{className:"saf-kids",style:{display:"flex",flexDirection:"column",gap:8},children:e.map(h=>n.jsxs("div",{style:{background:"#fff",border:`1px solid ${Dl}`,borderRadius:10,padding:"0 0.85rem",height:48,boxSizing:"border-box",display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx("span",{style:{fontSize:"0.82rem",fontFamily:G4,color:Ud}
3630,children:"sub-agent"}),n.jsx("span",{style:{fontSize:"0.95rem",fontWeight:600,color:ip},children:h})]},h))}),n.jsx(d,{color:To,opacity:.75,dir:"in"}),n.jsxs("svg",{className:"saf-conn-v",width:"24",height:"30",viewBox:"0 0 24 30","aria-hidden":"true",style:{display:"none",margin:"0.1rem auto"},children:[n.jsx("path",{d:"M 12 0 L 12 22",fill:"none",stroke:To,strokeWidth:2}),n.jsx("path",{d:"M 6 16 L 12 23 L 18 16",fill:"none",stroke:To,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsx(u,{tone:li,label:"Synthesis"})]})},dfe=()=>{const e=["external AI tool","standing prod credential","someone else's chat"],t=({label:i})=>n.jsx("div",{className:"rb-node",style:{flex:"1 1 0",minWidth:0,background:"#fff",border:`1px solid ${Dl}`,borderRadius:12,padding:"0 0.75rem",minHeight:56,display:"flex",alignItems:"center",justifyContent:"center",textAlign:"center",fontSize:"0.95rem",fontWeight:600,color:ip,lineHeight:1.25},children:i}),a=()=>n.jsxs(n.Fragment,{children:[n.jsx("svg",{className:"rb-link-h",width:"44",height:"56",viewBox:"0 0 44 56","aria-hidden":"true",style:{flexShrink:0,display:"block"},children:n.jsx("path",{d:"M 2 28 C 18 28, 26 28, 42 28",fill:"none",stroke:To,strokeWidth:2,strokeOpacity:.75})}),n.jsx("svg",{className:"rb-link-v",width:"24",height:"26",viewBox:"0 0 24 26","aria-hidden":"true",style:{display:"none",flexShrink:0},children:n.jsx("path",{d:"M 12 0 L 12 26",fill:"none",stroke:To,strokeWidth:2,strokeOpacity:.75})})]});return n.jsxs("div",{style:{width:600,maxWidth:"100%",fontFamily:"Geist, sans-serif"},children:[n.jsxs("div",{style:{border:`1.5px dashed ${To}`,borderRadius:16,padding:"1.1rem 1.1rem 1.25rem",background:"#fff"},children:[n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.4rem",marginBottom:"0.95rem",fontSize:"0.9rem",fontWeight:700,color:li},children:[n.jsx("img",{src:"/images/upside-icon-green.svg",alt:"",style:{height:18,width:"auto"}}),"Your tenant, in Upside’s AWS"]}),n.jsxs("div",{className:"rb-row",style:{display:"flex",alignItems:"center",gap:"0.2rem"},children:[n.jsx(t,{label:"Healed data foundation"}),n.jsx(a,{}),n.jsx(t,{label:"Hosted agent + sub-agents"}),n.jsx(a,{}),n.jsx(t,{label:"Answer, memo, or miniapp"})]})]}),n.jsxs("div",{style:{marginTop:"1.1rem",display:"flex",alignItems:"center",gap:"0.6rem",flexWrap:"wrap"},children:[n.jsx("span",{style:{fontSize:"0.9rem",fontWeight:700,color:F4},children:"Never crosses the line"}),n.jsx("div",{style:{display:"flex",gap:"0.5rem",flexWrap:"wrap"},children:e.map(i=>n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.35rem",fontSize:"0.9rem",color:F4,background:"#fff",border:"1px dashed #e0b48a",borderRadius:999,padding:"0.3rem 0.7rem"},children:[n.jsx("span",{style:{fontWeight:700},children:"✕"})," ",i]},i))})]})]})},Fa="#2d6a4f",HM="#509A79",H4="#347BD1",wH="#7a4a9e",c1="#a1560b",ad="#64748B",Vy="#1b1f1c",rp="#5f6563",ufe="0 8px 30px rgba(27, 31, 28, 0.08)",YM={background:"#fff",borderRadius:"14px",boxShadow:ufe,fontFamily:"'Geist', sans-serif",width:"100%"},VM={margin:0,fontSize:"0.82rem",fontWeight:700,color:Fa,letterSpacing:"0.06em",textTransform:"uppercase"},_0="ui-monospace, 'SF Mono', Menlo, monospace",hfe={org:{background:"#e8f5ef",color:Fa},schema:{background:"#FEF3C7",color:c1},doc:{background:"#eef1f4",color:ad}},ag=({tone:e,fact:t,cite:a})=>n.jsxs("div",{style:{display:"flex",gap:"0.65rem",alignItems:"flex-start",padding:"0.7rem 0",borderBottom:"1px solid #eaeeea"},children:[n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.03em",padding:"0.18rem 0.55rem",borderRadius:999,whiteSpace:"nowrap",marginTop:"0.1rem",...hfe[e]},children:e}),n.jsxs("span",{style:{fontSize:"0.95rem",color:Vy,lineHeight:1.45,flex:1},children:[t,n.jsx("span",{style:{display:"block",fontSize:"0.82rem",color:rp,marginTop:"0.2rem"},children:a})]})]}),pfe=()=>{const e=({color:t})=>n.jsx("svg",{className:"cq-connector",width:"100%",height:34,viewBox:"0 0 440 34",preserveAspectRatio:"none",style:{display:"block"},"aria-hidden":"true",children:n.jsx("path",{d:"M 220 0 C 220 22, 220 12, 220 34",fill:"none",stroke:t,strokeWidth:2,vectorEffect:"non-scaling-stroke"})});return n.jsxs("div",{className:"cq-card",style:{...YM,padding:"1.6rem",maxWidth:"560px",fontFamily:"Geist, sans-serif"},children:[n.jsx("div",{className:"cq-toggle",style:{display:"flex",gap:"0.4rem",marginBottom:"0.85rem"}
3630,children:["Claude","Cursor","Upside agent"].map(t=>{const a=t==="Cursor";return n.jsx("span",{style:{fontSize:"0.9rem",fontWeight:600,padding:"0.32rem 0.75rem",borderRadius:999,background:a?H4:"#f5f7fa",color:a?"#fff":rp,border:a?`1px solid ${H4}`:"1px solid #eaeeea"},children:t},t)})}),n.jsx("div",{className:"cq-question",style:{background:"#fff",border:"1px solid #eaeeea",borderRadius:"14px 14px 14px 4px",padding:"0.85rem 1.1rem",fontSize:"1.1rem",fontWeight:600,color:Vy,lineHeight:1.4},children:"“How much new pipeline did we create in Q1?”"}),n.jsx(e,{color:"#c4ccc7"}),n.jsx("div",{style:{textAlign:"center"},children:n.jsx("span",{className:"cq-consult",style:{fontFamily:_0,fontSize:"0.95rem",fontWeight:600,color:ad,background:"#f5f7fa",border:"1px solid #eaeeea",borderRadius:8,padding:"0.4rem 0.75rem",display:"inline-block"},children:"consult_librarian( intent )"})}),n.jsx(e,{color:HM}),n.jsxs("div",{className:"cq-coaches",style:{background:"#fff",border:`1.5px solid ${Fa}`,borderRadius:14,padding:"0.85rem 1.1rem"},children:[n.jsx("p",{style:{...VM,color:Fa,marginBottom:"0.3rem"},children:"Radiant coaches"}),n.jsx(ag,{tone:"org",fact:n.jsx(n.Fragment,{children:"Fiscal year starts Feb 1. “Q1” here is Feb to Apr."}),cite:"from finance calendar doc"}),n.jsx(ag,{tone:"org",fact:n.jsx(n.Fragment,{children:"“New pipeline” = opps reaching Stage 2 (SAL), type New Business. Renewals are a separate record type."}),cite:"curated by RevOps"}),n.jsx(ag,{tone:"schema",fact:n.jsxs(n.Fragment,{children:["Filter on ",n.jsx("code",{style:{fontFamily:_0,fontSize:"0.9rem"},children:"stage_2_entered_at"}),", not"," ",n.jsx("code",{style:{fontFamily:_0,fontSize:"0.9rem"},children:"created_at"}),"."]}),cite:"seen on a prior failed query"})]})]})},mfe=()=>{const e=({level:i,example:r,win:o,color:l,overridden:d})=>n.jsxs("div",{style:{position:"relative",background:"#fff",border:`1.5px solid ${d?"#eaeeea":l}`,borderRadius:14,padding:"0.85rem 6rem 0.85rem 1rem",minHeight:56,opacity:d?.85:1},children:[n.jsx("p",{style:{...VM,color:d?ad:l,margin:0},children:i}),n.jsx("p",{style:{margin:"0.25rem 0 0",fontSize:"0.95rem",color:Vy,lineHeight:1.4},children:r}),n.jsx("span",{style:{position:"absolute",right:"0.85rem",top:"50%",transform:"translateY(-50%)",fontSize:"0.9rem",fontWeight:700,textAlign:"right",color:d?ad:Fa,lineHeight:1.1},children:o})]}),t=[{tag:"before",label:"consult_librarian fires",color:Fa},{tag:"query",label:"runs against the right defs",color:ad},{tag:"after · coming",label:"coaching appended if it breaks",color:c1,dim:!0}],a=({color:i,dim:r})=>n.jsx("svg",{className:"cc-hop",width:28,height:48,viewBox:"0 0 28 48",style:{display:"block",flexShrink:0},"aria-hidden":"true",children:n.jsx("path",{d:"M 0 24 C 14 24, 14 24, 28 24",fill:"none",stroke:i,strokeWidth:2,strokeOpacity:r?.45:1,vectorEffect:"non-scaling-stroke"})});return n.jsxs("div",{style:{...YM,padding:"1.6rem",maxWidth:"580px",fontFamily:"Geist, sans-serif"},children:[n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"0.6rem"},children:[n.jsx(e,{level:"Platform · all orgs",example:"Default touchpoint types, channel taxonomy, standard stage names.",win:"overridden",color:ad,overridden:!0}),n.jsx(e,{level:"Your organization",example:n.jsx(n.Fragment,{children:"Fiscal year starts Feb 1 · “New pipeline” = Stage 2, New Business · renewals excluded."}),win:"wins ✓",color:Fa})]}),n.jsx("div",{className:"cc-timing",style:{display:"flex",alignItems:"stretch",marginTop:"1.2rem"},children:t.map((i,r)=>n.jsxs("div",{style:{display:"contents"},children:[n.jsxs("div",{className:"cc-tnode",style:{flex:"1 1 0",minWidth:0,textAlign:"center",background:"#fff",border:`1.5px solid ${i.dim?"#eaeeea":i.color}`,borderRadius:12,padding:"0.6rem 0.6rem",opacity:i.dim?.7:1},children:[n.jsx("span",{style:{display:"block",fontSize:"0.74rem",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.04em",color:ad,marginBottom:"0.2rem"},children:i.tag}),n.jsx("span",{style:{fontSize:"0.9rem",color:rp,lineHeight:1.3},children:i.label})]}),r<t.length-1&&n.jsx(a,{color:HM,dim:t[r+1].dim})]},i.tag))})]})},ffe=()=>{const e=[{who:"RevOps",client:"Cursor",q:"New pipeline in Q1?",color:H4},{who:"Demand gen",client:"Claude",q:"How much Q1 pipeline did we create?",color:wH},{who:"Finance",client:"Upside agent",q:"Q1 new-business pipeline?",color:c1}],t=600,a=12,i=50,r=(d,u)=>{const h=(t-a*(u-1))/u;return d*(h+a)+h/2},o=({n:d})=>n.jsx("svg",{width:"100%",viewBox:`0 0 ${t} ${i}`,height:i,preserveAspectRatio:"none",style:{display:"block"},"aria-hidden":"true",children:Array.from({length:d}).map((u,h)=>{const m=r(h,d);return n.jsx("path",{d:`M ${m} 0 C ${m} ${i*.55}, ${t/2} ${i*.45}, ${t/2} ${i}`,fill:"none",stroke:"#c4ccc7",strokeWidth:2,vectorEffect:"non-scaling-stroke"},h)})}),l=()=>n.jsx("svg",{width:"100%",height:i,viewBox:`0 0 ${t} ${i}`,preserveAspectRatio:"none",style:{display:"block"},"aria-hidden":"true",children:n.jsx("path",{d:`M ${t/2} 0 C ${t/2} ${i*.5}, ${t/2} ${i*.5}, ${t/2} ${i}`,fill:"none",stroke:HM,strokeWidth:2,vectorEffect:"non-scaling-stroke"})});return n.jsxs("div",{style:{width:t,maxWidth:"100%",fontFamily:"Geist, sans-serif"},children:[n.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${e.length}, 1fr)`,gap:a},children:e.map(d=>n.jsxs("div",{style:{minWidth:0,background:"#fff",border:"1px solid #eaeeea",borderRadius:12,padding:"0.75rem 0.85rem"},children:[n.jsxs("span",{style:{fontSize:"0.78rem",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.04em",color:d.color},children:[d.who," · ",d.client]}),n.jsxs("p",{style:{margin:"0.35rem 0 0",fontSize:"0.95rem",color:Vy,lineHeight:1.4,fontWeight:600},children:["“",d.q,"”"]})]}
3630,d.who))}),n.jsx(o,{n:e.length}),n.jsxs("div",{style:{background:"#fff",border:`1.5px solid ${Fa}`,borderRadius:14,padding:"0.7rem 1.1rem"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.55rem",justifyContent:"center",marginBottom:"0.1rem"},children:[n.jsx("img",{src:"/images/upside-icon.svg",alt:"",style:{height:22,width:"auto"}}),n.jsx("span",{style:{fontFamily:"'Geist', sans-serif",fontWeight:700,fontSize:"1.05rem",color:Fa},children:"Radiant"})]}),n.jsx(ag,{tone:"org",fact:n.jsx(n.Fragment,{children:"Fiscal year starts Feb 1. “Q1” is Feb to Apr."}),cite:"org convention"}),n.jsx(ag,{tone:"org",fact:n.jsx(n.Fragment,{children:"“New pipeline” = opps reaching Stage 2 (SAL), type New Business. Renewals excluded."}),cite:"org convention"})]}),n.jsx(l,{}),n.jsx("div",{style:{display:"flex",justifyContent:"center"},children:n.jsxs("div",{style:{background:"#fff",border:`1.5px solid ${Fa}`,borderRadius:14,padding:"0.85rem 1.4rem",textAlign:"center",minWidth:280},children:[n.jsx("span",{style:{fontSize:"0.9rem",fontWeight:600,color:rp},children:"Q1 new-pipeline number"}),n.jsx("div",{style:{fontFamily:"'Geist', sans-serif",fontSize:"2.1rem",fontWeight:700,color:Fa,lineHeight:1.1},children:"$1.84M"}),n.jsx("span",{style:{fontSize:"0.9rem",fontWeight:600,color:rp},children:"three phrasings, one number"})]})})]})},gfe=()=>{const e=[{fact:"Fiscal year starts Feb 1; “Q1” = Feb–Apr.",who:"curated",status:"active"},{fact:"“New pipeline” = Stage 2 (SAL), type New Business.",who:"curated",status:"active"},{fact:"Join opps to accounts on account_18, not account_id (legacy field is null after 2024).",who:"mined",status:"review"},{fact:"Queries grouping by “region” should map APAC + ANZ together for this org.",who:"mined",status:"review"}],t={curated:{background:"#e8f5ef",color:Fa},mined:{background:"#ede7f6",color:wH}};return n.jsxs("div",{style:{...YM,padding:"1.6rem",maxWidth:"620px",fontFamily:"Geist, sans-serif"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.4rem"},children:[n.jsx("p",{style:{...VM,color:Fa,margin:0},children:"Knowledge library · Acme Co"}),n.jsx("span",{style:{fontFamily:_0,fontSize:"0.9rem",fontWeight:600,color:rp},children:"v14 · 218 active"})]}),e.map((a,i)=>{const r=a.status==="review";return n.jsxs("div",{className:"kl-row",style:{display:"flex",alignItems:"center",gap:"0.7rem",minHeight:52,padding:"0.7rem 0",borderBottom:i<e.length-1?"1px solid #eaeeea":"none"},children:[n.jsx("span",{className:"kl-fact",style:{fontSize:"0.95rem",color:Vy,flex:1,lineHeight:1.4},children:a.fact}),n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.03em",padding:"0.18rem 0.55rem",borderRadius:999,whiteSpace:"nowrap",...t[a.who]},children:a.who}),n.jsx("span",{style:{fontSize:"0.8rem",fontWeight:700,color:"#fff",background:r?c1:Fa,borderRadius:8,padding:"0.22rem 0.6rem",whiteSpace:"nowrap"},children:r?"review":"active ✓"})]},i)})]})},ar="#2d6a4f",ru="#509A79",Ky="#347BD1",KM="#7a4a9e",mi="#a1560b",Xy="#64748B",ka="#1b1f1c",Vn="#5f6563",yfe="0 8px 30px rgba(27, 31, 28, 0.08)",Zp={background:"#fff",borderRadius:"14px",boxShadow:yfe,fontFamily:"'Geist', sans-serif",width:"100%"},op={margin:0,fontSize:"0.82rem",fontWeight:700,color:Ky,letterSpacing:"0.06em",textTransform:"uppercase"},vi="ui-monospace, 'SF Mono', Menlo, monospace",bfe=()=>n.jsx("div",{style:{display:"flex",gap:"1rem",flexWrap:"wrap",justifyContent:"center",fontSize:"0.9rem",color:Vn},children:[["Tracked",ru],["Extracted",mi],["Inferred",Xy]].map(([e,t])=>n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.4rem"},children:[n.jsx("span",{style:{width:10,height:10,borderRadius:999,background:t}}),e]},e))}),vfe=()=>{const e=[{label:"Marketing",pct:53,color:ru},{label:"Inferred pool",pct:22,color:Xy},{label:"SDR",pct:15,color:Ky},{label:"3rd-party",pct:10,color:mi}],t=280,a=t/2,i=t/2,r=132,o=78,l=(m,f)=>{const y=(f-90)*Math.PI/180;return[a+m*Math.cos(y),i+m*Math.sin(y)]},d=(m,f,y,b)=>{const x=f-m>180?1:0,[k,v]=l(b,m),[j,T]=l(b,f),[A,C]=l(y,f),[_,E]=l(y,m);return`M${k},${v} A${b},${b} 0 ${x} 1 ${j},${T} L${A},${C} A${y},${y} 0 ${x} 0 ${_},${E} Z`};let u=0;const h=e.map(m=>{const f=u*3.6;u+=m.pct;const y=u*3.6,b=(f+y)/2,[x,k]=l((r+o)/2,b);return{...m,start:f,end:y,lx:x,ly:k}});return n.jsxs("div",{className:"dp-card",style:{...Zp,padding:"1.75rem",maxWidth:"440px"},children:[n.jsxs("div",{className:"dp-head",style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"1rem"},children:[n.jsx("p",{style:{...op,color:ar},children:"Dealprint"}),n.jsx("span",{style:{fontFamily:vi,fontSize:"0.9rem",color:Vn},children:"Prime Analytics · $70.7K"})]}),n.jsxs("svg",{viewBox:`0 0 ${t} ${t}`,width:"100%",style:{maxHeight:280,display:"block",margin:"0 auto"},children:[h.map(m=>n.jsx("path",{d:d(m.start,m.end,o,r),fill:m.color,stroke:"#fff",strokeWidth:3},m.label)),h.map(m=>n.jsxs("text",{x:m.lx,y:m.ly,textAnchor:"middle",dominantBaseline:"middle",fontSize:"15",fontWeight:700,fill:"#fff",fontFamily:"'Geist', sans-serif",children:[m.pct,"%"]},`${m.label}-l`)),n.jsx("circle",{cx:a,cy:i,r:o-6,fill:"#fff",stroke:"#eef1ef",strokeWidth:2}),n.jsx("text",{x:a,y:i-6,textAnchor:"middle",fontSize:"18",fontWeight:700,fill:ka,fontFamily:"'Geist', sans-serif",children:"Prime"}),n.jsx("text",{x:a,y:i+18,textAnchor:"middle",fontSize:"16",fontWeight:600,fill:Vn,fontFamily:vi,children:"$70.7K"})]}),n.jsx("div",{style:{marginTop:"1.25rem",display:"flex",flexDirection:"column",gap:"0.55rem"},children:h.map(m=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",fontSize:"0.96rem"},children:[n.jsx("span",{style:{width:11,height:11,borderRadius:999,background:m.color,flexShrink:0}}),n.jsx("span",{style:{fontWeight:600,color:ka},children:m.label}),n.jsxs("span",{style:{marginLeft:"auto",color:Vn,fontFamily:vi,fontVariantNumeric:"tabular-nums"},children:[m.pct,"% · $",(70680*m.pct/100/1e3).toFixed(1),"K"]})]},`${m.label}-row`))})]})},xfe=[{date:"2022–’26",label:"Webinar program (6+ webinars / 5 yrs)",tag:{text:"source",tone:"src"}},{date:"2022–’25",label:"SDR outreach (multiple reps)"},{date:"2024",label:"Content + web engagement"},{date:"Feb ’26",label:"Goodyear peer recommendation",tag:{text:"extracted",tone:"ex"}},{date:"Jan ’26",label:"Demo-request form",tag:{text:"hand-raise",tone
3630:"hr"}}],wfe={src:{background:"#e8f5ef",color:ar},ex:{background:"#FEF3C7",color:mi},hr:{background:"#FEF3C7",color:mi}},YP=[{label:"Marketing · webinar program (source)",amt:"$21.2K",cite:"cited"},{label:"Marketing · content + web",amt:"$10.6K",cite:"cited"},{label:"SDR · outreach ×3",amt:"$10.6K",cite:"cited"},{label:"Third party · peer rec",amt:"$7.1K",cite:"extracted"},{label:"Inferred pool (4 drivers)",amt:"$15.6K",cite:"est."},{label:"Demo form (hand-raise)",amt:"$0",cite:"",dim:!0}],kfe=()=>n.jsxs(n.Fragment,{children:[n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.4rem",marginBottom:"0.85rem"},children:["Salesforce","Gong","email","web","webinars"].map(e=>n.jsx("span",{style:{fontFamily:vi,fontSize:"0.82rem",color:Vn,background:"#f1f3f1",borderRadius:999,padding:"0.2rem 0.6rem"},children:e},e))}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.6rem"},children:xfe.map((e,t)=>n.jsxs("div",{style:{display:"flex",gap:"0.5rem",alignItems:"baseline",flexWrap:"wrap"},children:[n.jsx("span",{style:{fontFamily:vi,fontSize:"0.82rem",fontWeight:700,color:Vn,minWidth:58,flexShrink:0},children:e.date}),n.jsx("span",{style:{fontSize:"0.92rem",color:ka,lineHeight:1.35,flex:1},children:e.label}),e.tag&&n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:700,padding:"0.1rem 0.45rem",borderRadius:5,textTransform:"uppercase",...wfe[e.tag.tone]},children:e.tag.text})]},t))})]}),jfe=()=>n.jsxs(n.Fragment,{children:[n.jsx("div",{style:{display:"flex",justifyContent:"space-around",marginBottom:"0.95rem"},children:["conic-gradient(#509A79 0 58%,#347BD1 58% 70%,#a1560b 70% 80%,#64748B 80% 100%)","conic-gradient(#509A79 0 47%,#347BD1 47% 67%,#a1560b 67% 79%,#64748B 79% 100%)","conic-gradient(#509A79 0 54%,#347BD1 54% 68%,#a1560b 68% 76%,#64748B 76% 100%)"].map((e,t)=>n.jsxs("div",{style:{textAlign:"center"},children:[n.jsx("div",{style:{width:54,height:54,borderRadius:999,background:e,margin:"0 auto 0.35rem",boxShadow:"0 0 0 2px #eef1ef"}}),n.jsxs("span",{style:{fontSize:"0.84rem",color:Vn},children:["Analyst ",t+1]})]},t))}),n.jsx("div",{style:{background:"#e8f4ed",borderRadius:10,padding:"0.7rem 0.85rem",textAlign:"center"},children:n.jsx("p",{style:{margin:0,fontSize:"0.92rem",fontWeight:700,color:ar,lineHeight:1.45},children:"Consensus → Mktg 53 / SDR 15 / 3rd-party 10 / Pool 22"})})]}),Sfe=()=>n.jsxs(n.Fragment,{children:[YP.map((e,t)=>n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.5rem",padding:"0.5rem 0",borderBottom:t<YP.length-1?"1px solid #eef1ef":"none",opacity:e.dim?.55:1},children:[n.jsx("span",{style:{fontSize:"0.92rem",color:ka,flex:1,lineHeight:1.35},children:e.label}),n.jsx("span",{style:{fontFamily:vi,fontSize:"0.94rem",fontWeight:700,color:ka,whiteSpace:"nowrap"},children:e.amt}),e.cite&&n.jsx("span",{style:{fontSize:"0.72rem",fontWeight:700,textTransform:"uppercase",color:Vn,background:"#eef1f4",borderRadius:5,padding:"0.1rem 0.4rem"},children:e.cite})]},t)),n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",marginTop:"0.75rem",fontSize:"0.96rem",fontWeight:700,color:ar},children:[n.jsx("span",{children:"= 100% of credit"}),n.jsx("span",{style:{fontFamily:vi},children:"$70.7K"})]})]}),Cfe=[n.jsx(kfe,{}),n.jsx(jfe,{}),n.jsx(Sfe,{})],Afe=({steps:e})=>n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(300px, 1fr))",gap:"1rem",marginTop:"1.75rem",alignItems:"stretch"},children:e.map((t,a)=>n.jsxs("div",{style:{border:"1px solid #e6ebe7",borderRadius:16,padding:"1.35rem 1.5rem",background:"#fff",display:"flex",flexDirection:"column"},children:[n.jsx("span",{className:"it-label",style:{color:ru},children:t.num}),n.jsx("div",{className:"it-card-title",style:{color:ka,margin:"0.4rem 0 0.5rem"},children:t.heading}),n.jsx("p",{className:"it-body-sm",style:{color:Vn,margin:"0 0 1.2rem"},children:t.body}),n.jsx("div",{style:{borderTop:"1px solid #eef1ef",paddingTop:"1.2rem",marginTop:"auto"},children:Cfe[a]})]},t.heading))}),Tfe=()=>{const e=[{name:"Webinar",pct:30,color:ru},{name:"Content",pct:15,color:"#6cae90"},{name:"SDR",pct:15,color:Ky}
3630,{name:"Peer rec",pct:10,color:mi},{name:"Email",pct:8,color:KM},{name:"Pool",pct:22,color:Xy}];return n.jsxs("div",{style:{...Zp,padding:"1.75rem",maxWidth:"560px"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline"},children:[n.jsx("p",{style:{...op,color:ar},children:"Prime Analytics"}),n.jsx("span",{style:{fontFamily:vi,fontSize:"0.9rem",color:Vn},children:"$70.7K"})]}),n.jsx("p",{style:{margin:"1.5rem 0 0.5rem",fontSize:"0.96rem",fontWeight:600,color:Vn},children:"Last-touch credit"}),n.jsx("div",{style:{display:"flex",height:48,borderRadius:10,overflow:"hidden",border:"1px solid #eaeeea"},children:n.jsx("div",{style:{flex:100,background:"#9aa0a6",display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:"0.96rem",fontWeight:600},children:"Demo-request form — 100%"})}),n.jsx("p",{style:{margin:"1.5rem 0 0.5rem",fontSize:"0.96rem",fontWeight:600,color:ar},children:"Pipedash — reasoned from evidence"}),n.jsx("div",{style:{display:"flex",height:48,borderRadius:10,overflow:"hidden",border:"1px solid #eaeeea"},children:e.map(t=>n.jsxs("div",{style:{flex:t.pct,minWidth:0,background:t.color,display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:"0.85rem",fontWeight:700,whiteSpace:"nowrap",overflow:"hidden",borderRight:"1px solid rgba(255,255,255,0.5)"},children:[t.pct,"%"]},t.name))}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.45rem 1rem",marginTop:"0.85rem"},children:e.map(t=>n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.4rem",fontSize:"0.9rem",color:Vn},children:[n.jsx("span",{style:{width:11,height:11,borderRadius:3,background:t.color,flexShrink:0}}),t.name," ",n.jsxs("span",{style:{color:ka,fontWeight:600},children:[t.pct,"%"]})]},t.name))})]})},_fe=()=>{const e=[{name:"Webinar program · 5 yrs, 6+ webinars · source",badge:"Tracked",amt:"$21,204",evidence:"6 webinar registrations logged, 2021–2026. On the demo call, Wendy: “I know of Flowlogic from the various webinars I've attended.”"},{name:"Marketing content + web engagement",amt:"$10,602",dim:!0},{name:"Annie @ Goodyear peer recommendation",badge:"Extracted",amt:"$7,068",evidence:"No CRM record. Demo notes: “They talked to Annie from Goodyear about Flowlogic.” A former-colleague recommendation, recovered from the conversation."},{name:"SDR outreach + demo follow-up (4 touches)",amt:"$10,602",dim:!0},{name:"Bulk email nurture",amt:"$5,654",dim:!0},{name:"Brand awareness · inferred pool",badge:"Inferred",amt:"~$2,333",evidence:"No discrete touchpoint. 3.5 years of marketing exposure across the buying group. Probabilistic share."},{name:"+ rest of inferred pool (3 drivers)",amt:"$13,217",dim:!0},{name:"Demo request form (hand-raise)",amt:"$0",dim:!0}],t={Tracked:{background:"#e8f5ef",color:ar},Extracted:{background:"#FEF3C7",color:mi},Inferred:{background:"#eef1f4",color:Xy}};return n.jsxs("div",{style:{...Zp,padding:"1.75rem",maxWidth:"600px"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"1rem"},children:[n.jsx("p",{style:{...op,color:ar},children:"Prime Analytics · credit allocation"}),n.jsx("span",{style:{fontFamily:vi,fontSize:"1.08rem",fontWeight:700,color:ka},children:"$70,680"})]}),e.map((a,i)=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",padding:"0.6rem 0",borderBottom:"1px solid #eef1ef",opacity:a.dim?.55:1},children:[n.jsx("span",{style:{fontSize:"0.96rem",color:ka,flex:1,lineHeight:1.4},children:a.name}),a.badge&&n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:700,textTransform:"uppercase",padding:"0.15rem 0.55rem",borderRadius:999,...t[a.badge]},children:a.badge}),n.jsx("span",{style:{fontFamily:vi,fontSize:"0.98rem",fontWeight:700,color:ka,whiteSpace:"nowrap"},children:a.amt})]}),a.evidence&&n.jsxs("div",{style:{background:"#1b1f1c",color:"#f3f3f0",fontSize:"0.9rem",lineHeight:1.5,padding:"0.7rem 0.85rem",borderRadius:10,margin:"0.5rem 0 0.7rem 1rem"},children:[n.jsx("span",{style:{fontSize:"0.7rem",fontWeight:700,textTransform:"uppercase",letterSpacing:"0.05em",opacity:.65,marginRight:"0.5rem"},children:"evidence"}),a.evidence]})]},i)),n.jsx("div",{style:{marginTop:"1.1rem"},children:n.jsx(bfe,{})})]})},Mfe=()=>{const e=[{who:"Marketing",time:"10:22 AM",color:ru,text:n.jsxs(n.Fragment,{children:["We drove ",n.jsx("strong",{children:"$33M"})," in pipeline in Q2. We beat targets! 🎉"]})},{who:"SDRs",time:"10:24 AM",color:Ky,text:n.jsxs(n.Fragment,{children:["Our team brought in ",n.jsx("strong",{children:"$41M"})," in meetings."]})},{who:"Sales",time:"10:25 AM",color:ar,text:n.jsxs(n.Fragment,{children:["FYI, the AEs created ",n.jsx("strong",{children:"$20M"})," of their deals 💰"]})},{who:"Partnerships",time:"10:27 AM",color:KM,text:n.jsxs(n.Fragment,{children:["Our intros sourced ",n.jsx("strong",{children:"$12M"})," in pipeline too."]})},{who:"CEO",time:"10:30 AM",color:mi,text:n.jsxs(n.Fragment,{children:["…that adds up to ",n.jsx("strong",{children:"$106M"}),", but we only have ",n.jsx("strong",{children:"$54M"})," in real pipeline. ",n.jsx("strong",{children:"What worked?! 🤔"})]})}];return n.jsxs("div",{style:{...Zp,padding:"0",maxWidth:"560px",overflow:"hidden"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.6rem",padding:"0.85rem 1.25rem",borderBottom:"1px solid #eef1ef",background:"#F5F7FA"},children:[n.jsxs("span",{style:{display:"flex",gap:6},children:[n.jsx("span",{style:{width:11,height:11,borderRadius:999,background:"#e2c0bd"}}),n.jsx("span",{style:{width:11,height:11,borderRadius:999,background:"#e6dcc0"}}),n.jsx("span",{style:{width:11,height:11,borderRadius:999,background:"#c6dccb"}})]}),n.jsx("span",{style:{fontFamily:vi,fontSize:"0.9rem",fontWeight:600,color:Vn},children:"# gtm-attribution"})]}),n.jsx("div",{style:{padding:"0.75rem 1.5rem 1.25rem"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"flex",gap:"0.85rem",padding:"0.7rem 0",borderBottom:a<e.length-1?"1px solid #f0f2f0":"none"},children:[n.jsx("div",{style:{width:38,height:38,borderRadius:9,background:t.color,flexShrink:0,display:"flex",alignItems:"center",justifyContent:"center",color:"#fff",fontSize:"1rem",fontWeight:700},children:t.who[0]}),n.jsxs("div",{children:[n.jsxs("div",{children:[n.jsx("span",{style:{fontSize:"1rem",fontWeight:700,color:ka},children:t.who}),n.jsx("span",{style:{fontFamily:vi,fontSize:"0.8rem",color:Vn,marginLeft:"0.5rem"},children:t.time})]}),n.jsx("div",{style:{fontSize:"1rem",color:"#394142",lineHeight:1.45,marginTop:"0.15rem"},children:t.text})]})]},a))})]})},Efe=()=>n.jsxs("div",{className:"os-card",style:{...Zp,padding:"1.75rem",maxWidth:"600px"},children:[n.jsx("div",{style:{display:"flex",justifyContent:"center",marginBottom:"1.5rem"},children:n.jsx("div",{className:"os-toggle",style:{display:"inline-flex",gap:3,border:"1px solid #d9dedb",borderRadius:999,padding:4,background:"#F5F7FA"},children:["Multi-Touch","Opportunity Source","Overview"].map(e=>n.jsx("span",{style:{fontSize:"0.9rem",fontWeight:600,padding:"0.4rem 0.9rem",borderRadius:999,background:e==="Opportunity Source"?ru:"transparent",color:e==="Opportunity Source"?"#fff":Vn,whiteSpace:"nowrap"},children:e},e))})}),n.jsxs("div",{className:"os-flow",style:{display:"flex",gap:"0.75rem",alignItems:"stretch",flexWrap:"wrap"},children:[n.jsxs("div",{style:{flex:"1 1 220px",minWidth:0,background:"#fff",border:`1.5px solid ${ar}`,borderRadius:14,padding:"1.1rem 1.2rem"},children:[n.jsx("p",{style:{...op,color:ar,margin:0},children:"Source · the cause"}),n.jsx("p",{style:{margin:"0.5rem 0 0.5rem",fontSize:"1.08rem",fontWeight:700,color:ka,lineHeight:1.3},children:"Webinar program · 5 years, 6+ webinars"}),n.jsx("p",{style:{margin:0,fontSize:"0.9rem",color:Vn,fontStyle:"italic",lineHeight:1.45},children:`Wendy: "I know of Flowlogic from the various webinars I've attended." (Jan 202
36306)`})]}),n.jsxs("svg",{className:"os-arrow-h",width:"40",height:"auto",viewBox:"0 0 40 80","aria-hidden":"true",style:{flexShrink:0,alignSelf:"center"},children:[n.jsx("path",{d:"M 2 40 C 16 40, 24 40, 38 40",fill:"none",stroke:mi,strokeWidth:2,strokeOpacity:.8}),n.jsx("path",{d:"M 31 34 L 38 40 L 31 46",fill:"none",stroke:mi,strokeWidth:2,strokeOpacity:.8})]}),n.jsxs("svg",{className:"os-arrow-v",width:"24",height:"30",viewBox:"0 0 24 30","aria-hidden":"true",style:{display:"none",flexShrink:0,alignSelf:"center"},children:[n.jsx("path",{d:"M 12 0 L 12 22",fill:"none",stroke:mi,strokeWidth:2,strokeOpacity:.8}),n.jsx("path",{d:"M 6 16 L 12 23 L 18 16",fill:"none",stroke:mi,strokeWidth:2,strokeOpacity:.8,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsxs("div",{style:{flex:"1 1 220px",minWidth:0,background:"#fff",border:"1.5px solid #eaddc6",borderRadius:14,padding:"1.1rem 1.2rem"},children:[n.jsx("p",{style:{...op,color:mi,margin:0},children:"Hand-raise · the action"}),n.jsx("p",{style:{margin:"0.5rem 0 0.5rem",fontSize:"1.08rem",fontWeight:700,color:ka,lineHeight:1.3},children:"Demo-request form · $0 credit"}),n.jsx("p",{style:{margin:0,fontSize:"0.9rem",color:Vn,fontStyle:"italic",lineHeight:1.45},children:"Jan 21, 2026 — the SDR-logged lead, but not the cause."})]})]})]}),Rfe=()=>{const e=[{name:"Direct Email",amt:"$490K",pct:100,color:ru},{name:"Meeting",amt:"$288K",pct:59,color:"#6cae90"},{name:"Content",amt:"$114K",pct:23,color:Ky},{name:"Web activity",amt:"$96K",pct:20,color:KM},{name:"Webinar",amt:"$89K",pct:18,color:mi},{name:"Bulk email",amt:"$68K",pct:14,color:Xy}];return n.jsxs("div",{style:{...Zp,padding:"1.75rem",maxWidth:"560px"},children:[n.jsx("p",{style:{...op,color:ar},children:"Channel ROI"}),n.jsx("div",{style:{marginTop:"1.25rem",display:"flex",flexDirection:"column",gap:"0.85rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[n.jsx("span",{style:{width:96,fontSize:"0.94rem",color:ka,textAlign:"right",flexShrink:0},children:t.name}),n.jsx("div",{style:{flex:1,background:"#f1f3f1",borderRadius:"0 5px 5px 0",height:22},children:n.jsx("div",{style:{width:`${t.pct}%`,height:"100%",background:t.color,borderRadius:"0 5px 5px 0"}})}),n.jsx("span",{style:{width:58,fontFamily:vi,fontSize:"0.94rem",fontWeight:700,color:ka,textAlign:"right",flexShrink:0},children:t.amt})]},t.name))})]})},Ar="#2d6a4f",xr="#509A79",d1="#347BD1",kH="#7a4a9e",jH="#a1560b",XM="#64748B",Bd="#1b1f1c",qd="#5f6563",Sg="#eaeeea",Nfe="0 8px 30px rgba(27, 31, 28, 0.08)",Qy={background:"#fff",borderRadius:"14px",boxShadow:Nfe,fontFamily:"'Geist', sans-serif",width:"100%"},No="ui-monospace, 'SF Mono', Menlo, monospace",SH={margin:0,fontSize:"0.78rem",fontWeight:700,letterSpacing:"0.06em",textTransform:"uppercase"},Ofe="#fdf5e3",Pfe="#fffdf5",Ife="#a1560b",Dfe=({label:e})=>n.jsx("span",{style:{fontFamily:No,fontSize:"0.78rem",fontWeight:700,color:Ar,background:"#e8f5ef",borderRadius:"5px",padding:"0.1rem 0.4rem",marginLeft:"0.4rem",whiteSpace:"nowrap"},children:e}),Wfe=()=>{const e=[{acct:"Ascend Academy",amount:"$117,750",competitor:"Cleartrace",src:"2 src",driver:"Price"},{acct:"AstraGen",amount:"$83,000",competitor:"Built in-house",src:"3 src",driver:"Build vs buy"},{acct:"Course5 Analytics",amount:"$72,000",competitor:"Cleartrace",src:"2 src",driver:"Feature gap"},{acct:"BuildConnect",amount:"$44,750",competitor:"Northstar",src:"2 src",driver:"Price"},{acct:"Homebase",amount:"$40,650",competitor:"No decision",src:"1 src",driver:"Stalled"}],t={fontSize:"0.8rem",fontWeight:700,letterSpacing:"0.02em",textTransform:"uppercase",color:qd,textAlign:"left",padding:"0.55rem 0.6rem",borderBottom:`2px solid ${Sg}`},a={...t,color:Ife,background:Ofe,borderBottomColor:"#e7c98b"},i={fontSize:"0.95rem",color:Bd,padding:"0.7rem 0.6rem",borderBottom:`1px solid ${Sg}`,lineHeight:1.25,verticalAlign:"top"},r={...i,background:Pfe};return n.jsxs("div",{className:"drr-card",style:{...Qy,padding:"1.35rem 1.35rem 1.5rem",maxWidth:"720px"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",gap:"0.5rem",marginBottom:"0.5rem",flexWrap:"wrap"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.3rem",fontWeight:700,color:Bd},children:"Closed-Lost — Q4"}),n.jsx("span",{style:{fontSize:"0.9rem",color:Ar,fontWeight:700},children:"✓ complete"})]}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.4rem",marginBottom:"0.9rem"},children:["38 records","4 AI fields"].map(o=>n.jsx("span",{style:{fontFamily:No,fontSize:"0.82rem",color:qd,background:"#f1f3f1",borderRadius:"999px",padding:"0.2rem 0.6rem",fontWeight:600},children:o},o))}),n.jsxs("table",{className:"drr-table",style:{width:"100%",borderCollapse:"collapse",tableLayout:"fixed"},children:[n.jsxs("colgroup",{children:[n.jsx("col",{className:"drr-c-acct",style:{width:"28%"}}),n.jsx("col",{className:"drr-c-amt",style:{width:"18%"}}),n.jsx("col",{className:"drr-c-comp",style:{width:"31%"}}),n.jsx("col",{className:"drr-c-driver",style:{width:"23%"}})]}),n.jsx("thead",{children:n.jsxs("tr",{children:[n.jsx("th",{style:t,children:"Opportunity"}),n.jsx("th",{className:"drr-amount",style:t,children:"Amount"}),n.jsx("th",{style:a,children:"★ Winning competitor"}),n.jsx("th",{className:"drr-driver",style:a,children:"★ Loss driver"})]})}),n.jsxs("tbody",{children:[e.map(o=>n.jsxs("tr",{children:[n.jsx("td",{style:{...i,color:d1,fontWeight:700},children:o.acct}),n.jsx("td",{className:"drr-amount",style:{...i,fontVariantNumeric:"tabular-nums",fontFamily:No,whiteSpace:"nowrap"},children:o.amount}),n.jsxs("td",{style:r,children:[o.competitor,n.jsx("wbr",{}),n.jsx(Dfe,{label:o.src})]}),n.jsx("td",{className:"drr-driver",style:r,children:o.driver})]},o.acct)),n.jsx("tr",{children:n.jsx("td",{style:{...i,color:"#aeb4bc",borderBottom:"none"},colSpan:4,children:"+ 33 more…"})})]})]})]})},zfe=()=>
3630{const e=[{n:"1",title:"Define the question",color:d1,chips:["Closed Lost, Q4","38 opps"]},{n:"2",title:"Run across the cohort",color:jH,chips:["38 parallel runs"]},{n:"3",title:"Read every source",color:XM,chips:["Salesforce","Gong","email","notes"]},{n:"4",title:"Land as cited fields",color:Ar,chips:["cited","queryable"]}];return n.jsxs("div",{style:{...Qy,padding:"1.5rem",maxWidth:"640px"},children:[n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:0},children:e.map((t,a)=>{var i;return n.jsxs("div",{children:[n.jsxs("div",{className:"cp-step",style:{background:"#fff",border:`1px solid ${Sg}`,borderRadius:"14px",padding:"0.9rem 1rem",display:"flex",alignItems:"center",gap:"0.85rem",minHeight:56},children:[n.jsx("span",{style:{width:30,height:30,borderRadius:999,background:t.color,color:"#fff",fontSize:"1rem",fontWeight:700,display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},children:t.n}),n.jsx("span",{style:{fontSize:"1.02rem",fontWeight:700,color:Bd,flexShrink:0},children:t.title}),n.jsx("div",{className:"cp-chips",style:{display:"flex",flexWrap:"wrap",gap:"0.35rem",marginLeft:"auto",justifyContent:"flex-end"},children:(i=t.chips)==null?void 0:i.map(r=>n.jsx("span",{style:{fontFamily:No,fontSize:"0.82rem",color:a===e.length-1?Ar:qd,background:a===e.length-1?"#e8f5ef":"#f1f3f1",borderRadius:"999px",padding:"0.15rem 0.55rem",fontWeight:600},children:r},r))})]}),a<e.length-1&&n.jsx("svg",{width:"100%",viewBox:"0 0 640 26",height:26,preserveAspectRatio:"none",style:{display:"block"},"aria-hidden":"true",children:n.jsx("path",{d:"M 320 0 C 320 13, 320 13, 320 26",fill:"none",stroke:a>=2?xr:"#c4ccc7",strokeWidth:2,vectorEffect:"non-scaling-stroke"})})]},t.n)})}),n.jsx("div",{style:{marginTop:"0.9rem",background:"#e8f5ef",border:`1px solid ${xr}`,borderRadius:"12px",padding:"0.85rem 1rem",fontSize:"1rem",fontWeight:700,color:Ar,lineHeight:1.35},children:"Most losses were to in-house builds, not a competitor."})]})},Lfe=()=>{const e=[{tag:"CRM · Loss Reason",text:"(blank)",color:XM,blank:!0},{tag:"Gong · Nov 28",text:"“…move forward with Cleartrace for the rollout.”",color:d1},{tag:"Email · procurement, Dec 2",text:"“…Cleartrace already approved on the MSA.”",color:kH}],t=96,a=10,i=60,r=e.length*t+(e.length-1)*a,o=r/2,l=d=>d*(t+a)+t/2;return n.jsx("div",{style:{...Qy,padding:"1.5rem",maxWidth:"620px"},children:n.jsxs("div",{className:"cs-flow",style:{display:"flex",alignItems:"center",gap:0},children:[n.jsx("div",{className:"afs-col",style:{flex:"0 0 auto",width:244,display:"flex",flexDirection:"column",gap:a},children:e.map(d=>n.jsxs("div",{style:{height:t,boxSizing:"border-box",display:"flex",flexDirection:"column",justifyContent:"center",background:"#fff",border:d.blank?`1.5px dashed ${Sg}`:`1.5px solid ${d.color}`,borderRadius:"12px",padding:"0 0.85rem"},children:[n.jsx("span",{style:{display:"block",fontFamily:No,fontSize:"0.8rem",fontWeight:700,color:qd,marginBottom:"0.25rem"},children:d.tag}),n.jsx("span",{style:{fontSize:"0.95rem",color:d.blank?"#aeb4bc":Bd,lineHeight:1.35},children:d.text})]},d.tag))}),n.jsx("svg",{className:"cs-conn-h",width:i,height:r,viewBox:`0 0 ${i} ${r}`,style:{flexShrink:0},"aria-hidden":"true",children:[1,2].map(d=>{const u=l(d);return n.jsx("path",{d:`M 0 ${u} C ${i*.5} ${u}, ${i*.5} ${o}, ${i} ${o}`,fill:"none",stroke:xr,strokeWidth:2,strokeOpacity:.85},d)})}),n.jsxs("svg",{className:"cs-conn-v",width:"24",height:"32",viewBox:"0 0 24 32","aria-hidden":"true",style:{display:"none",flexShrink:0,margin:"0 auto"},children:[n.jsx("path",{d:"M 12 0 L 12 24",fill:"none",stroke:xr,strokeWidth:2}),n.jsx("path",{d:"M 5 17 L 12 24 L 19 17",fill:"none",stroke:xr,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsxs("div",{style:{flex:"1 1 0",minWidth:"170px",background:"#e8f5ef",border:`2px solid ${xr}`,borderRadius:"14px",padding:"1rem 1.1rem"},children:[n.jsx("span",{style:{display:"block",...SH,fontSize:"0.8rem",color:Ar,marginBottom:"0.35rem"},children:"Winning competitor"}),n.jsx("span",{style:{fontSize:"1.7rem",fontWeight:700,color:Ar,fontFamily:"'Geist', sans-serif"},children:"Cleartrace"}),n.jsx("span",{style:{display:"block",marginTop:"0.45rem",fontFamily:No,fontSize:"0.85rem",color:xr,fontWeight:600},children:"cited · 2 sources"})]})]})})},Ufe=()=>n.jsx("div",{style:{...Qy,padding:"1.5rem",maxWidth:"420px"},children:n.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"stretch"},children:[n.jsxs("div",{style:{background:"#fff",border:`1px solid ${Sg}`,borderRadius:"12px",padding:"0.95rem 1.05rem"},children:[n.jsx("span",{style:{display:"block",fontFamily:No,fontSize:"0.8rem",fontWeight:700,color:qd,marginBottom:"0.4rem"}
3630,children:"Ascend Academy · $117,750"}),n.jsx("p",{style:{margin:0,fontSize:"0.95rem",color:Bd,lineHeight:1.4},children:"Drawn in by a Q3 webinar; single-threaded until the proposal. Price raised on the Nov 28 call."}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.35rem",marginTop:"0.65rem"},children:["Webinar","Q3 events"].map(e=>n.jsx("span",{style:{fontFamily:No,fontSize:"0.82rem",color:Ar,background:"#e8f5ef",border:"1px solid #9ec9b3",borderRadius:"999px",padding:"0.15rem 0.6rem",fontWeight:600},children:e},e))})]}),n.jsxs("svg",{width:"24",height:"46",viewBox:"0 0 24 46",style:{alignSelf:"center",flexShrink:0,margin:"0.35rem 0"},"aria-hidden":"true",children:[n.jsx("path",{d:"M 12 2 L 12 34",fill:"none",stroke:xr,strokeWidth:2,strokeLinecap:"round"}),n.jsx("path",{d:"M 5 27 L 12 36 L 19 27",fill:"none",stroke:xr,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsxs("div",{style:{background:"#e8f5ef",border:`2px solid ${xr}`,borderRadius:"14px",padding:"1rem 1.1rem"},children:[n.jsx("span",{style:{display:"block",...SH,fontSize:"0.8rem",color:Ar,marginBottom:"0.35rem"},children:"Dashboard metric"}),n.jsxs("span",{style:{fontSize:"0.95rem",color:Ar,fontWeight:600,lineHeight:1.35,display:"block"},children:["Opportunities citing ",n.jsx("b",{children:"Q3 events"})]}),n.jsx("span",{style:{display:"block",marginTop:"0.5rem",fontSize:"1.6rem",fontWeight:700,color:Ar,fontVariantNumeric:"tabular-nums"},children:"24 opps · $612K"})]})]})}),Bfe=()=>{const e=[{label:"Built in-house",n:11,color:XM},{label:"Cleartrace",n:9,color:xr},{label:"No decision / stalled",n:7,color:d1},{label:"Northstar",n:6,color:jH},{label:"Other / unclear",n:5,color:kH}],t=Math.max(...e.map(a=>a.n));return n.jsxs("div",{style:{...Qy,padding:"1.5rem",maxWidth:"620px"},children:[n.jsx("p",{style:{margin:"0 0 0.2rem",fontSize:"1.2rem",fontWeight:700,color:Bd},children:"Winning competitor"}),n.jsx("p",{style:{margin:"0 0 1rem",fontFamily:No,fontSize:"0.85rem",color:qd},children:"38 closed-lost deals"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.7rem"},children:e.map(a=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.75rem"},children:[n.jsx("span",{style:{width:"40%",maxWidth:"170px",textAlign:"right",fontSize:"0.95rem",color:qd,flexShrink:0},children:a.label}),n.jsxs("div",{style:{flex:1,display:"flex",alignItems:"center",gap:"0.6rem",minWidth:0},children:[n.jsx("div",{style:{height:"22px",borderRadius:"0 6px 6px 0",background:a.color,width:`${a.n/t*100}%`,minWidth:"10px"}}),n.jsx("span",{style:{fontSize:"1rem",fontWeight:700,color:Bd,fontVariantNumeric:"tabular-nums",fontFamily:No},children:a.n})]})]},a.label))})]})},Hl="#2d6a4f",QM="#509A79",CH="#347BD1",tc="#a1560b",AH="#64748B",Jp="#1b1f1c",Bs="#5f6563",u1="#eaeeea",qfe="0 8px 30px rgba(27, 31, 28, 0.08)",Zy={background:"#fff",borderRadius:"14px",boxShadow:qfe,fontFamily:"'Geist', sans-serif",width:"100%"},sp={margin:0,fontSize:"0.82rem",fontWeight:700,letterSpacing:"0.05em",textTransform:"uppercase"},$fe="ui-monospace, 'SF Mono', Menlo, monospace",Ffe=()=>{const e=[{lbl:"A question comes in",color:AH,body:n.jsxs(n.Fragment,{children:["“New account directors are ramping. Get them up to speed on their books, fast.”",n.jsx("span",{style:{display:"block",marginTop:"0.35rem",fontSize:"0.9rem",color:Bs},children:"— Head of GTM Ops"})]})},{lbl:"The Upside team takes it",color:Hl,body:"Already knows the data model. Has built this kind of work across dozens of datasets."},{lbl:"Built",color:tc,body:"An Account Dossier: per-account engagement history, buying signals, competitive landscape."},{lbl:"Deployed into the instance",color:CH,body:"Live on their data. Ramp time down, single-threaded deals flagged early."}];return n.jsxs("div",{style:{...Zy,padding:"1.4rem",maxWidth:"460px"},children:[n.jsx("p",{style:{...sp,color:Hl,textAlign:"center",marginBottom:"1rem"},children:"One engagement, start to finish"}),e.map((t,a)=>n.jsxs("div",{children:[n.jsxs("div",{style:{border:`1px solid ${u1}`,borderRadius:11,padding:"0.8rem 1rem",background:"#fff"},children:[n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.4rem",marginBottom:"0.4rem"},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:999,background:t.color,flexShrink:0}}),n.jsx("span",{style:{...sp,fontSize:"0.8rem",color:t.color},children:t.lbl})]}),n.jsx("p",{style:{margin:0,fontSize:"0.95rem",color:Jp,fontFamily:"'Geist', sans-serif",lineHeight:1.5},children:t.body})]}),a<e.length-1&&n.jsx("div",{style:{width:2,height:14,background:"#d8ded9",margin:"0 auto"}})]},t.lbl)),n.jsx("p",{style:{margin:"1rem 0 0",textAlign:"center",fontSize:"0.9rem",color:QM,fontWeight:600},children:"One annual line item, not an open invoice"})]})},Gfe=()=>{const e=({label:t,labelColor:a,unit:i,segments:r})=>n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.45rem"},children:[n.jsx("p",{style:{...sp,color:a},children:t}),n.jsx("span",{style:{fontSize:"0.9rem",color:Bs,fontFamily:"'Geist', sans-serif"},children:i})]}),n.jsx("div",{style:{display:"flex",borderRadius:"10px",overflow:"hidden",height:"52px",gap:"3px"},children:r.map((o,l)=>n.jsx("div",{style:{flex:`${o.flex} 1 0`,background:o.bg,color:o.color??"#fff",fontSize:"0.95rem",display:"flex",alignItems:"center",justifyContent:"center",fontWeight:600,fontFamily:"'Geist', sans-serif",textAlign:"center",padding:"0 0.6rem",borderRadius:"8px"},children:o.text},l))})]});return n.jsxs("div",{style:{...Zy,padding:"1.6rem",maxWidth:"600px",display:"flex",flexDirection:"column",gap:"1.4rem"},children:[n.jsx(e,{label:"New hire or consultant",labelColor:Bs,unit:"weeks",segments:[{flex:70,bg:"#c4ccc7",text:"ramp on the data model"},{flex:30,bg:AH,text:"analysis"}]}),n.jsx(e,{label:"Insight Engineering",labelColor:QM,unit:"days",segments:[{flex:50,bg:Hl,text:"analysis"},{flex:50,bg:"transparent"}]})]})},iS=({label:e,rows:t,flag:a})=>n.jsxs("div",{style:{marginTop:"0.9rem"},children:[n.jsx("p",{style:{...sp,color:Bs,marginBottom:"0.4rem"},children:e}),t.map(([i,r],o)=>n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:"0.5rem",fontSize:"0.95rem",fontFamily:"'Geist', sans-serif",padding:"0.45rem 0",borderBottom:o<t.length-1?`1px dotted ${u1}`:"none",color:a?tc:Jp},children:[n.jsx("span",{children:i}),n.jsx("span",{style:{color:a?tc:Bs,fontWeight:a?700:500},children:r})]},o))]}),Hfe=()=>n.jsxs("div",{style:{...Zy,padding:"1.5rem",maxWidth:"440px"},children:[n.jsxs("div",{style:{display:"flex",gap:"0.4rem",marginBottom:"1rem"},children:[n.jsx("span",{style:{width:11,height:11,borderRadius:"50%",background:"#e1e6e2"}}),n.jsx("span",{style:{width:11,height:11,borderRadius:"50%",background:"#e1e6e2"}}),n.jsx("span",{style:{width:11,height:11,borderRadius:"50%",background:"#e1e6e2"}})]}),n.jsx("p",{style:{...sp,color:tc},children:"Account Dossier"}),n.jsxs("p",{style:{margin:"0.4rem 0 0",fontSize:"1.25rem",fontWeight:700,color:Jp},children:["Atlas Robotics"," ",n.jsx("span",{style:{fontSize:"0.95rem",fontWeight:500,color:Bs}
3630,children:"· Enterprise · renewal Q3"})]}),n.jsx(iS,{label:"Engagement history",rows:[["Exec briefing, field event","Apr 9"],["Security review thread","May 2"]]}),n.jsx(iS,{label:"Buying signals",rows:[["Renewal date","Aug 14"],["Pricing discussion","open"]]}),n.jsx(iS,{label:"Competitive landscape",rows:[["Incumbent","entrenched"]]}),n.jsxs("div",{style:{marginTop:"0.9rem",display:"flex",justifyContent:"space-between",gap:"0.5rem",alignItems:"center",background:"#fdf4ec",border:`1px solid ${tc}33`,borderRadius:"10px",padding:"0.7rem 0.85rem",fontSize:"0.95rem",color:tc,fontWeight:700,fontFamily:"'Geist', sans-serif"},children:[n.jsx("span",{children:"⚠ Single-threaded: 2 contacts"}),n.jsx("span",{style:{fontSize:"0.78rem",textTransform:"uppercase",letterSpacing:"0.05em"},children:"flag"})]})]}),Bv=({lbl:e,color:t,sub:a,children:i})=>n.jsxs("div",{style:{border:`1px solid ${u1}`,borderRadius:"12px",padding:"1rem",background:"#fff",display:"flex",flexDirection:"column",gap:"0.4rem"},children:[n.jsx("p",{style:{...sp,color:t},children:e}),n.jsx("p",{style:{margin:"0 0 0.35rem",fontSize:"0.95rem",fontWeight:600,color:Jp,fontFamily:"'Geist', sans-serif"},children:a}),i]}),ls=({k:e,v:t})=>n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",gap:"0.5rem",fontSize:"0.92rem",fontFamily:"'Geist', sans-serif",color:Jp,padding:"0.25rem 0"},children:[n.jsx("span",{style:{color:Bs},children:e}),n.jsx("span",{style:{fontWeight:600,fontVariantNumeric:"tabular-nums",fontFamily:$fe},children:t})]}),Yfe=()=>n.jsx("div",{style:{...Zy,padding:"1.5rem",maxWidth:"640px"},children:n.jsxs("div",{className:"rg-grid",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.85rem"},children:[n.jsxs(Bv,{lbl:"Board-ready deck",color:tc,sub:"Persona win-rate",children:[n.jsx(ls,{k:"Exec-sponsored",v:"51%"}),n.jsx(ls,{k:"Champion-led",v:"38%"}),n.jsx(ls,{k:"Inbound",v:"22%"})]}),n.jsxs(Bv,{lbl:"Miniapp in your instance",color:Hl,sub:"Contact-role healing",children:[n.jsx("div",{style:{height:"12px",borderRadius:"7px",background:"#e3e7e3",position:"relative",margin:"0.5rem 0"},children:n.jsx("span",{style:{position:"absolute",inset:"0 38% 0 0",borderRadius:"7px",background:QM}})}),n.jsx("p",{style:{margin:0,fontSize:"0.9rem",color:Bs,fontFamily:"'Geist', sans-serif"},children:"runs live, not a one-off export"})]}),n.jsxs(Bv,{lbl:"Scoring model",color:CH,sub:"Upsell likelihood",children:[n.jsx(ls,{k:"Account A",v:"0.91"}),n.jsx(ls,{k:"Account B",v:"0.84"}),n.jsx(ls,{k:"Account C",v:"0.77"})]}),n.jsxs(Bv,{lbl:"Closed-lost analysis",color:tc,sub:"Why deals slipped",children:[n.jsx(ls,{k:"Price",v:"31%"}),n.jsx(ls,{k:"Timing",v:"24%"}),n.jsx(ls,{k:"Champion left",v:"18%"})]})]})}),Vfe=()=>{const e=[{icon:n.jsx("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:n.jsx("path",{d:"M21 12a8 8 0 0 1-11.5 7.2L4 20l0.9-5A8 8 0 1 1 21 12Z",stroke:Hl,strokeWidth:"1.8",strokeLinejoin:"round"})}),lbl:"Ongoing Slack support",sub:"A shared channel with the Upside team"},{icon:n.jsxs("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:[n.jsx("path",{d:"M4 12a8 8 0 0 1 13.7-5.6L20 8M20 4v4h-4",stroke:Hl,strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"}),n.jsx("path",{d:"M20 12a8 8 0 0 1-13.7 5.6L4 16M4 20v-4h4",stroke:Hl,strokeWidth:"1.8",strokeLinecap:"round",strokeLinejoin:"round"})]}),lbl:"Regular check-ins",sub:"Standing syncs to keep analyses pointed at what matters"},{icon:n.jsx("svg",{width:"22",height:"22",viewBox:"0 0 24 24",fill:"none","aria-hidden":"true",children:n.jsx("path",{d:"M14.7 6.3a4 4 0 0 0-5.4 5.4l-6 6 2 2 6-6a4 4 0 0 0 5.4-5.4l-2.3 2.3-2-2 2.3-2.3Z",stroke:Hl,strokeWidth:"1.8",strokeLinejoin:"round"})}),lbl:"On-demand projects",sub:"Board decks, models, miniapps, deep-research — on tap"}];return n.jsx("div",{style:{...Zy,padding:"1.5rem",maxWidth:"440px"},children:n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.7rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",gap:"0.85rem",alignItems:"center",border:`1px solid ${u1}`,borderRadius:"12px",padding:"0.85rem 1rem",background:"#fff",minHeight:56},children:[n.jsx("span",{style:{width:"42px",height:"42px",borderRadius:"11px",background:"#eef4f0",display:"inline-flex",alignItems:"center",justifyContent:"center",flexShrink:0},"aria-hidden":"true",children:t.icon}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"1.02rem",fontWeight:700,color:Jp},children:t.lbl}),n.jsx("p",{style:{margin:0,fontSize:"0.9rem",color:Bs,fontFamily:"'Geist', sans-serif",lineHeight:1.45},children:t.sub})]})]},t.lbl))})})},Kfe=[{slug:"data-foundation",title:"Data Foundation",iconName:"Database",accentColorKey:"green-light",desc:"Connect your systems in a few clicks. Upside reconstructs the full history of every deal, resolves your contacts into real buying groups, and heals the gaps, giving you one record of your go-to-market you can finally trust.",href:"/platform/data-foundation",visual:"unified-foundation"},{slug:"dashboard",title:"Dashboard",iconName:"LineChart",accentColorKey:"blue-soft",desc:"The whole account story, for your whole team. Pre-built explorers, list views, and report cards that answer the questions leadership asks, without writing a line of SQL.",href:"/platform/dashboard",visual:"dashboard"},{slug:"deep-research",title:"Deep Research",iconName:"Crosshair",accentColorKey:"purple-soft",desc:"Analyst-quality answers to questions that were never practical to ask. Run one analysis across a whole cohort of accounts in parallel, dozens or hundreds at a time, and get structured, comparable results back in a fraction of the time it would take one account at a time.",href:"/platform/deep-research",visual:"deep-research"},{slug:"pipedash",title:"Pipedash",iconName:"Network",accentColorKey:"blue-soft",desc:"Multi-touch attribution that survives the drill-in. Pipedash reasons over the full deal record, allocates credit in real dollars, and cites the evidence behind every number, so the answer holds up when finance asks.",href:"/platform/pipedash",visual:"dealprint"},{slug:"mcp",title:"MCP",iconName:"Workflow",accentColorKey:"green-soft",desc:"Your GTM data, inside the AI tools you already use. Query it, explore your accounts, and manage the platform from Claude, ChatGPT, Cursor, and more, all under your own permissions.",href:"/platform/mcp",visual:"mcp"},{slug:"miniapps",title:"Miniapps",iconName:"AppWindow",accentColorKey:"cream",desc:"Turn an insight into a tool the team can use. Describe what you want and get a custom app, deployed to your dashboard and wired to live data, no front-end project required.",href:"/platform/miniapps",visual:"prompt-to-app"},{slug:"upside-agent",title:"Upside Agent",iconName:"Bot",accentColorKey:"green-soft",desc:"All the power of Claude, focused on your data. Ask a question, watch it plan the work, and get the analysis back, safely sandboxed to your Upside environment.",href:"/platform/upside-agent",visual:"agent"},{slug:"radiant",title:"Radiant",iconName:"Sparkles",accentColorKey:"purple-soft",desc:"Keep your AI grounded in how your business actually works. Radiant is the active context layer every agent checks first, sharing your definitions, your pipeline structure, and your field meanings, so every team member asking equivalent questions gets equivalent answers instead of five quietly different ones.",href:"/platform/radiant",visual:"radiant"},{slug:"insight-engineering",title:"Insight Engineering",iconName:"Handshake",accentColorKey:"cream",desc:"GTM engineering on tap. Our analysts build and maintain your analytical surface for you, turning raw GTM data into the board-ready answers you need, on a standing annual engagement.",href:"/platform/insight-engineering",visual:"insight-eng"}],Xfe=e=>{switch(e){case"unified-foundation":return n.jsx(sH,{});case"dashboard":return n.jsx(nH,{});case"deep-research":return n.jsx(Wfe,{});case"dealprint":return n.jsx(vfe,{});case"mcp":return n.jsx(lH,{});case"prompt-to-app":return n.jsx(dH,{});case"agent":return n.jsx(ofe,{});case"radiant":return n.jsx(pfe,{});case"insight-eng":return n.jsx(Ffe,{});default:return null}},Qfe=[{company:"Cresta",logo:"/images/cresta_logo_upside_customer.svg",metric:"Weeks → 1 day",blurb:"Manual transcript review collapsed into deep research, powering every quarterly business review.",quote:"Like working with a therapist, a data consultant, a friend.",attribution:"Stephen Daniels, VP, GTM & Strategic Operations, Cresta",caseStudySlug:"cresta-from-attribution-to-ai-deep-research"},{company:"Graphite",logo:"/images/graphite_logo_upside_customer.svg",metric:"$10M+ · 53%",blurb
3630:"Hidden referral revenue uncovered, with over half of all deals traced to referrals that standard attribution never saw.",quote:"We stopped doing events because we didn't have data saying they were impactful. With Upside, we can see events are actually a massive flywheel for our business.",attribution:"Ethan Smith, CEO & Founder, Graphite",caseStudySlug:"graphite-uncovering-real-channels-behind-inbound-growth"}],Zfe=[{name:"Genesis",iconName:"Network",desc:"A pre-encoded GTM knowledge graph: entities and relationships, made legible for people and AI."},{name:"Mithril",iconName:"Layers",desc:"Enterprise permissions: data tenants sandboxed by role, so cross-boundary access is impossible."},{name:"Enrichment",iconName:"Users",desc:"Fill the firmographic and contact gaps in your record automatically."},{name:"Intent Signals",iconName:"Radio",desc:"Surface in-market buying signals across the accounts you care about."}],qv="clamp(3rem, 6vw, 4.5rem) clamp(1.25rem, 5vw, 4rem)",Jfe=()=>n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"The Upside Platform",description:"Everything in the Upside platform: the data foundation, dashboards, deep research, attribution, MCP, miniapps, agents, and more — the products GTM teams use to see what really happened in every deal and act on it.",canonicalUrl:"https://upside.tech/platform"}),n.jsx("style",{children:PM}),n.jsx("style",{children:`
3631        @media (max-width: 900px) {
3632          .platform-slide { grid-template-columns: 1fr !important; }
3633          .platform-slide .platform-slide-visual { order: 2 !important; min-height: 240px !important; }
3634          .platform-slide .platform-slide-text { order: 1 !important; }
3635          .platform-proof-grid { grid-template-columns: 1fr !important; }
3636          .platform-xlink-grid { grid-template-columns: 1fr !important; }
3637          /* 4-up "On the horizon" cards need ~165px each to fit; below 900px the
3638             4 tracks overflow their container, so drop to a comfortable 2-up. */
3639          .platform-coming-grid { grid-template-columns: 1fr 1fr !important; }
3640        }
3641        @media (max-width: 640px) {
3642          /* On phones the 2rem side padding on the slide-visual wrapper steals
3643             ~40px of width from already-tight faux-UI visuals. Trim the
3644             horizontal padding (keep vertical for drop-shadow room). Desktop
3645             keeps the inline 2rem. */
3646          .platform-slide-art { padding-left: 0.75rem !important; padding-right: 0.75rem !important; }
3647          /* On phones every slide visual fits its column (none need the
3648             horizontal scroller), so drop the overflow-x:auto clip entirely —
3649             otherwise it crops the visuals' drop-shadows on all four sides.
3650             overflow:visible shows the shadow without re-narrowing the visual. */
3651          .platform-slide-art { overflow: visible !important; }
3652          /* "On the horizon" cards: 2-up still wraps the body text hard on phones,
3653             so go single-column (1x4) for full-width, readable cards. */
3654          .platform-coming-grid { grid-template-columns: 1fr !important; }
3655        }
3656        @media (min-width: 641px) {
3657          /* The slide-visual wrapper is overflow-x:auto (so wide faux-UIs scroll),
3658             which forces overflow-y to clip too. The visuals' drop-shadow
3659             (0 8px 30px ≈ 38px below the card) was clipped by the 1.5rem bottom
3660             padding — give it desktop clearance. */
3661          .platform-slide-art { padding-top: 1.75rem !important; padding-bottom: 2.85rem !important; }
3662        }
3663      `}),n.jsx("section",{style:{marginTop:"-65px",padding:"clamp(8.5rem, 9vw, 9rem) clamp(1.25rem, 5vw, 4rem) clamp(2.5rem, 5vw, 4rem)",background:"#fff",borderBottom:"1px solid #eaeeea"},children:n.jsxs("div",{style:{maxWidth:"1440px",margin:"0 auto"},children:[n.jsx("span",{className:"it-eyebrow",style:{display:"inline-block",color:"#509a79",border:"1px solid #eaeeea",borderRadius:"999px",padding:"0.25rem 0.85rem",marginBottom:"1.25rem",background:"#fff"},children:"The Upside Platform"}),n.jsx("h1",{className:"it-display",style:{margin:"0 0 1.25rem 0",color:"#1b1f1c",maxWidth:"20ch"},children:"Everything in the Upside platform."}),n.jsx("p",{className:"it-lead",style:{margin:"0 0 1.75rem 0",color:"#394142",maxWidth:"60ch"},children:"The tools your go-to-market team needs to see what really happened in every deal, understand what worked, and act on it, all built on one foundation of trustworthy data."}),n.jsxs("div",{style:{display:"flex",gap:"0.75rem",flexWrap:"wrap",alignItems:"center"},children:[n.jsx(J,{to:Wt,className:"cta w-button",children:"Request a demo"}),n.jsx(Yh,{label:"See the products",href:"#available"})]})]})}),n.jsx("section",{style:{background:"#fafafa"},children:n.jsxs("div",{className:"pf-boxed",style:{maxWidth:"1440px",margin:"0 auto",padding:"clamp(2rem, 4vw, 2.75rem) clamp(1.1rem, 4vw, 3.25rem)",background:"#fff",textAlign:"center"},children:[n.jsx("p",{className:"it-label",style:{margin:"0 0 1.25rem 0",color:"#5f6563"},children:"Trusted by go-to-market teams at"}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"1rem 2.5rem",alignItems:"center",justifyContent:"center"},children:oa.map(e=>n.jsx("img",{src:e.src,alt:e.name,loading:"lazy",style:{height:`${e.height}px`,width:"auto",filter:"brightness(0)",opacity:.55}},e.name))})]})}),n.jsx("span",{id:"available","aria-hidden":"true"}),n.jsx("section",{style:{background:"#fafafa"},children:n.jsx("div",{className:"pf-boxed",style:{maxWidth:"1440px",margin:"0 auto",background:"#fff"},children:Kfe.map((e,t)=>{const a=ca(e.iconName),i=t%2===1;return n.jsx("div",{style:{borderBottom:"1px solid #eaeeea",background:i?"#fafafa":"#fff",padding:qv},children:n.jsxs("div",{className:"platform-slide",style:{maxWidth:"1296px",margin:"0 auto",display:"grid",gridTemplateColumns:"1fr 1fr",gap:"clamp(2rem, 5vw, 3.5rem)",alignItems:"center"},children:[n.jsxs("div",{className:"platform-slide-text",style:{order:i?2:1,minWidth:0},children:[n.jsx("div",{style:{display:"inline-flex",alignItems:"center",gap:"0.5rem",marginBottom:"0.9rem"},children:n.jsx("span",{style:{width:"32px",height:"32px",borderRadius:"9px",background:"#f1f3f1",display:"inline-flex",alignItems:"center",justifyContent:"center",color:"#2d6a4f"},children:a?n.jsx(a,{size:17,strokeWidth:1.9}):null})}),n.jsx("h2",{className:"it-title-sm",style:{margin:"0 0 0.85rem 0",color:"#1b1f1c"},children:e.title}),n.jsx("p",{className:"it-body",style:{margin:"0 0 1.25rem 0",color:"#394142",maxWidth:"48ch"},children:e.desc}),n.jsxs(J,{to:e.href,className:"it-body-sm",style:{fontWeight:700,color:"#2d6a4f",textDecoration:"none"},children:["Explore ",e.title," →"]})]}),n.jsx("div",{className:"platform-slide-visual",style:{order:i?1:2,minWidth:0,background:"transparent",minHeight:"320px",display:"flex",alignItems:"center",justifyContent:"center",padding:"clamp(0.75rem, 1.5vw, 1.25rem)"},children:n.jsx("div",{className:"platform-slide-art",style:{width:"100%",maxWidth:"100%",overflowX:"auto",display:"flex",justifyContent:"center",padding:"1.5rem 2rem"},children:Xfe(e.visual)})})]})},e.slug)})})}),n.jsx("section",{style:{background:"#fafafa"},children:n.jsxs("div",{className:"pf-boxed",style:{maxWidth:"1440px",margin:"0 auto",padding:qv,background:"#fafafa"},children:[n.jsx("h2",{className:"it-title",style:{margin:"0 0 0.6rem 0",color:"#1b1f1c"},children:"What teams find when the data is finally trustworthy."}),n.jsx("p",{className:"it-lead",style:{margin:"0 0 2rem 0",color:"#394142",maxWidth:"60ch"},children:"Two of the clearest examples of what the platform makes possible."}),n.jsx("div",{className:"platform-proof-grid",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1.5rem"},children:Qfe.map(e=>n.jsx(J,{to:`/case-studies/${e.caseStudySlug}`,className:"pf-card pf-card--nav pf-card__hit",style:{textDecoration:"none",color:"inherit",borderRadius:"16px",overflow:"hidden",height:"100%",display:"flex",flexDirection:"column"},children:n.jsxs("article",{style:{height:"100%",display:"flex",flexDirection:"column"},children:[n.jsxs("div",{style:{position:"relative",height:"150px",background:"linear-gradient(135deg, #2d6a4f, #509a79)",display:"flex",alignItems:"center",justifyContent:"center"},children:[n.jsx("img",{src:e.logo,alt:`${e.company} is an Upside Customer`,style:{position:"absolute",top:"0.95rem",left:"1.1rem",he
3663ight:"24px",width:"auto",maxWidth:"150px",filter:"brightness(0) invert(1)",opacity:.95}}),n.jsx("span",{style:{width:"46px",height:"46px",borderRadius:"999px",background:"rgba(255,255,255,0.92)",display:"flex",alignItems:"center",justifyContent:"center",color:"#2d6a4f",fontSize:"1rem"},"aria-hidden":"true",children:"▶"})]}),n.jsxs("div",{style:{padding:"1.25rem 1.4rem",display:"flex",flexDirection:"column",gap:"0.5rem",flex:1},children:[n.jsx("div",{style:{fontFamily:"Geist, sans-serif",fontWeight:700,fontSize:"1.5rem",color:"#2d6a4f",letterSpacing:"-0.01em"},children:e.metric}),n.jsx("p",{className:"it-body-sm",style:{margin:"0 0 0.35rem 0",color:"#5f6563"},children:e.blurb}),n.jsxs("blockquote",{className:"it-body",style:{margin:0,color:"#1b1f1c",textWrap:"pretty"},children:["“",e.quote,"”"]}),n.jsx("p",{className:"it-body-sm",style:{margin:"0.25rem 0 0 0",color:"#5f6563"},children:e.attribution}),n.jsx("span",{className:"it-body-sm",style:{marginTop:"auto",paddingTop:"0.6rem",fontWeight:700,color:"#2d6a4f"},children:n.jsx(Ds,{label:`Read the ${e.company} story`})})]})]})},e.company))})]})}),n.jsx("section",{style:{background:"#fafafa"},children:n.jsxs("div",{className:"pf-boxed",style:{maxWidth:"1440px",margin:"0 auto",padding:qv,background:"#fff"},children:[n.jsx("h2",{className:"it-title",style:{margin:"0 0 0.6rem 0",color:"#1b1f1c"},children:"On the horizon"}),n.jsx("p",{className:"it-lead",style:{margin:"0 0 2rem 0",color:"#394142",maxWidth:"60ch"},children:"A few of the things we’re building next."}),n.jsx("div",{className:"platform-coming-grid",style:{display:"grid",gridTemplateColumns:"repeat(4, minmax(0, 1fr))",gap:"1rem"},children:Zfe.map(e=>{const t=ca(e.iconName);return n.jsxs("div",{style:{border:"1px solid #eaeeea",borderRadius:"14px",padding:"1.25rem",background:"#fcfbfe",display:"flex",flexDirection:"column",gap:"1rem"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.5rem"},children:[n.jsx("span",{style:{width:"38px",height:"38px",borderRadius:"10px",background:"#f2eef7",display:"inline-flex",alignItems:"center",justifyContent:"center",color:"#7a4a9e",flexShrink:0},children:t&&n.jsx(t,{size:19,strokeWidth:1.8})}),n.jsx("span",{className:"it-label",style:{color:"#7a4a9e",background:"#f2eef7",borderRadius:"999px",padding:"0.2rem 0.55rem"},children:"Coming soon"})]}),n.jsxs("div",{children:[n.jsx("h3",{className:"it-card-title",style:{margin:"0 0 0.4rem 0",color:"#1b1f1c"},children:e.name}),n.jsx("p",{className:"it-body-sm",style:{margin:0,color:"#5f6563"},children:e.desc})]})]},e.name)})})]})}),n.jsx("section",{style:{background:"#fafafa"},children:n.jsxs("div",{className:"pf-boxed",style:{maxWidth:"1440px",margin:"0 auto",padding:qv,background:"#fafafa"},children:[n.jsx("h2",{className:"it-title",style:{margin:"0 0 0.6rem 0",color:"#1b1f1c"},children:"Prefer to start somewhere else?"}),n.jsx("p",{className:"it-lead",style:{margin:"0 0 2rem 0",color:"#394142",maxWidth:"62ch"},children:"The products above are the building blocks. You can also come at Upside by the job you’re trying to do, or proof from teams like yours."}),n.jsxs("div",{className:"platform-xlink-grid",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1rem"},children:[n.jsx(VP,{eyebrow:"By the job to be done",title:"Use Cases",body:"Attribution, account management, asking your GTM data, event and field marketing, and more.",href:"/use-cases",linkLabel:"Browse use cases"}),n.jsx(VP,{eyebrow:"By the proof",title:"Customers",body:"How real GTM teams put these products to work, and what changed when they did.",href:"/customers",linkLabel:"Read case studies"})]})]})}),n.jsx("section",{style:{background:"#fafafa"},children:n.jsx("div",{className:"pf-boxed",style:{maxWidth:"1440px",margin:"0 auto",padding:"clamp(3.5rem, 7vw, 5rem) clamp(1.1rem, 4vw, 3.25rem)",background:"#fff"},children:n.jsxs("div",{style:{maxWidth:"760px",margin:"0 auto",textAlign:"center"},children:[n.jsx("h2",{className:"it-title",style:{margin:"0 0 0.85rem 0",color:"#1b1f1c"},children:"See it on your own pipeline."}),n.jsx("p",{className:"it-lead",style:{margin:"0 auto 2rem",color:"#394142",maxWidth:"52ch"},children:"The fastest way to understand the platform is a guided demo on your own GTM data."}),n.jsxs("div",{style:{display:"flex",gap:"1.1rem",justifyContent:"center",flexWrap:"wrap",alignItems:"center"},children:[n.jsx(J,{to:Wt,className:"cta w-button",children:"Request a demo"}),n.jsx(Yh,{label:"Read customer stories",href:"/customers"})]})]})})})]}),VP=({eyebrow:e,title:t,body:a,href:i,linkLabel:r})=>n.jsxs(J,{to:i,className:"pf-card pf-card--nav pf-card__hit",style:{textDecoration:"none",color:"inherit",borderRadius:"16px",padding:"21px",height:"100%",display:"flex",flexDirection:"column",gap:"7px"},children:[n.jsx("span",{className:"it-label",style:{display:"block",color:"#509a79"},children:e}),n.jsx("h3",{className:"it-card-title",style:{margin:0,color:"#1b1f1c"},children:t}),n.jsx("p",{className:"it-body-sm",style:{margin:0,color:"#5f6563"},children:a}),n.jsx("span",{className:"it-body-sm",style:{marginTop:"auto",paddingTop:"8px",fontWeight:700,color:"#2d6a4f"},children:n.jsx(Ds,{label:r})})]}),Ms="#2d6a4f",bo="#509A79",od="#a1560b",_o="#1b1f1c",Tr="#5f6563",ege="0 8px 30px rgba(27, 31, 28, 0.08)",tge={background:"#fff",borderRadius:"14px",boxShadow:ege,fontFamily:"'Geist', sans-serif",width:"100%"},nge=()=>{const e=[{label:"CRM",Icon:Lw},{label:"Marketing",Icon:R$},{label:"Calls",Icon:Bw},{label:"Ad networks",Icon:P$},{label:"Intent / ABM",Icon:D$},{label:"Web",Icon:_$}],t=[{label:"Dashboard",Icon:oM},{label:"Pipedash",Icon:N$},{label:"Deep Research",Icon:A$},{label:"MCP",Icon:z$},{label:"Miniapps",Icon:w$}],a=660,i=10,r=62,o=(u,h)=>{const m=(a-i*(h-1))/h;return u*(m+i)+m/2},l=({label:u,Icon:h,accent:m})=>n.jsxs("div",{style:{height:52,display:"flex",alignItems:"center",justifyContent:"center",gap:"0.4rem",textAlign:"center",padding:"0 0.4rem",fontSize:"0.85rem",fontWeight:600,lineHeight:1.2,whiteSpace:"nowrap",color:m?Ms:Tr,background:"#fff",border:`1px solid ${m?"#bcdccb":"#e6ebe7"}`,borderRadius:11},children:[n.jsx(h,{size:16,strokeWidth:1.8,style:{flex:"0 0 auto",color:m?bo:"#9aa39e"},"aria-hidden":"true"}),u]}),d=({n:u,color:h,opacity:m,dir:f})=>n.jsx("svg",{width:"100%",viewBox:`0 0 ${a} ${r}`,height:r,preserveAspectRatio:"none",style:{display:"block"},"aria-hidden":"true",children:Array.from({length:u}).map((y,b)=>{const x=o(b,u),k=f==="in"?`M ${x} 0 C ${x} ${r*.55}, ${a/2} ${r*.45}, ${a/2} ${r}`:`M ${a/2} 0 C ${a/2} ${r*.45}, ${x} ${r*.55}, ${x} ${r}`;return n.jsx("path",{d:k,fill:"none",stroke:h,strokeWidth:2,strokeOpacity:m,vectorEffect:"non-scaling-stroke"},b)})});return n.jsxs("div",{style:{width:a,maxWidth:"100%",fontFamily:"Geist, sans-serif"},children:[n.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${e.length}, 1fr)`,gap:i},children:e.map(u=>n.jsx(l,{label:u.label,Icon:u.Icon},u.label))}),n.jsx(d,{n:e.length,color:"#c4ccc7",opacity:1,dir:"in"}),n.jsx("div",{style:{display:"flex",justifyContent:"center"},children:n.jsx("div",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",background:"#fff",border:`1.5px solid ${Ms}`,borderRadius:14,padding:"0.8rem 1.75rem",boxShadow:"0 2px 10px rgba(45,106,79,0.13)"},children:n.jsx("span",{style:{fontFamily:"'Geist', sans-serif",fontWeight:700,fontSize:"1.15rem",color:Ms,textAlign:"center"},children:"Data Foundation"})})}),n.jsx(d,{n:t.length,color:bo,opacity:.75,dir:"out"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:`repeat(${t.length}, 1fr)`,gap:i},children:t.map(u=>n.jsx(l,{label:u.label,Icon:u.Icon,accent:!0},u.label))})]})},age=()=>{const e=["Salesforce","HubSpot","Gong","Marketo"],t=["accounts","people","emails","meetings","calls","web","campaigns"],a={Salesforce:"/images/src-salesforce.png",HubSpot:"/images/src-hubspot.png",Gong:"/images/src-gong.png",Marketo:"/images/src-marketo.png"},i={height:22,width:"auto",maxWidth:24,objectFit:"contain",flexShrink:0,display:"block"};return n.jsxs("div",{className:"cs-flow",style:{width:600,maxWidth:"100%",fontFamily:"Geist, sans-serif",display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"10px",minWidth:0,flex:"1 1 0"},children:[e.map(r=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.55rem",he
3663ight:52,fontSize:"0.95rem",fontWeight:600,color:_o,background:"#fff",border:"1px solid #e6ebe7",borderRadius:"12px",padding:"0 0.85rem"},children:[n.jsx("img",{src:a[r],alt:"",style:i}),r]},r)),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.55rem",height:52,fontSize:"0.95rem",fontWeight:600,color:Tr,background:"#fff",border:"1px dashed #c9cec9",borderRadius:"12px",padding:"0 0.85rem"},children:[n.jsx("img",{src:"/images/src-rb2b.png",alt:"",style:i}),"RB2B",n.jsx("span",{style:{fontWeight:500,fontFamily:"ui-monospace, 'SF Mono', Menlo, monospace",fontSize:"0.8rem"},children:"webhook"})]})]}),n.jsxs("svg",{className:"cs-conn-h",width:"56",height:"300",viewBox:"0 0 56 300","aria-hidden":"true",style:{flexShrink:0,display:"block"},children:[[26,88,150,212,274].map((r,o)=>n.jsx("path",{d:`M 2 ${r} C 28 ${r}, 28 150, 54 150`,fill:"none",stroke:"#c4ccc7",strokeWidth:2},o)),n.jsx("path",{d:"M 47 143 L 54 150 L 47 157",fill:"none",stroke:bo,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsxs("svg",{className:"cs-conn-v",width:"24",height:"32",viewBox:"0 0 24 32","aria-hidden":"true",style:{display:"none",flexShrink:0,margin:"0 auto"},children:[n.jsx("path",{d:"M 12 0 L 12 24",fill:"none",stroke:"#c4ccc7",strokeWidth:2}),n.jsx("path",{d:"M 5 17 L 12 24 L 19 17",fill:"none",stroke:bo,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsxs("div",{style:{flex:"1 1 0",minWidth:0,background:"#fff",border:"1px solid #bcdccb",borderRadius:"14px",padding:"1.1rem 1.15rem",boxShadow:"0 2px 10px rgba(45,106,79,0.10)"},children:[n.jsx("p",{style:{margin:"0 0 0.2rem",fontSize:"1.15rem",fontWeight:700,color:_o},children:"Northwind"}),n.jsx("p",{style:{margin:"0 0 0.7rem",fontSize:"0.9rem",fontWeight:600,color:Ms},children:"one schema"}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.4rem"},children:t.map(r=>n.jsx("span",{style:{fontSize:"0.85rem",fontWeight:600,fontFamily:"ui-monospace, 'SF Mono', Menlo, monospace",color:Ms,background:"#fff",border:`1px solid ${Ms}55`,borderRadius:"7px",padding:"0.25rem 0.55rem"},children:r},r))})]})]})},ige=()=>{const e=[{sys:"Salesforce · Lead",label:"“John Okafor”"},{sys:"Salesforce · Contact",label:"“J. Okafor”"},{sys:"HubSpot · Contact",label:"[email protected]"},{sys:"Gong · participant",label:"speaker on 3 calls"}];return n.jsxs("div",{className:"cs-flow",style:{width:600,maxWidth:"100%",fontFamily:"Geist, sans-serif",display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"10px",flex:"1 1 0",minWidth:0},children:e.map(t=>n.jsxs("div",{style:{background:"#fff",border:"1px solid #e6ebe7",borderRadius:"12px",padding:"0.6rem 0.8rem",height:60,boxSizing:"border-box",display:"flex",flexDirection:"column",justifyContent:"center"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.78rem",fontWeight:700,color:Tr,fontFamily:"ui-monospace, 'SF Mono', Menlo, monospace"},children:t.sys}),n.jsx("p",{style:{margin:"0.2rem 0 0",fontSize:"0.95rem",color:_o,fontWeight:600},children:t.label})]},t.sys))}),n.jsxs("svg",{className:"cs-conn-h",width:"56",height:"270",viewBox:"0 0 56 270","aria-hidden":"true",style:{flexShrink:0,display:"block"},children:[[30,100,170,240].map((t,a)=>n.jsx("path",{d:`M 2 ${t} C 28 ${t}, 28 135, 54 135`,fill:"none",stroke:"#c4ccc7",strokeWidth:2},a)),n.jsx("path",{d:"M 47 128 L 54 135 L 47 142",fill:"none",stroke:bo,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsxs("svg",{className:"cs-conn-v",width:"24",height:"32",viewBox:"0 0 24 32","aria-hidden":"true",style:{display:"none",flexShrink:0,margin:"0 auto"},children:[n.jsx("path",{d:"M 12 0 L 12 24",fill:"none",stroke:"#c4ccc7",strokeWidth:2}),n.jsx("path",{d:"M 5 17 L 12 24 L 19 17",fill:"none",stroke:bo,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsxs("div",{style:{flex:"1 1 0",minWidth:0,background:"#fff",border:"1px solid #bcdccb",borderRadius:"14px",padding:"1.1rem 1.15rem",boxShadow:"0 2px 10px rgba(45,106,79,0.10)"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.25rem",fontWeight:700,color:_o},children:"John Okafor"}),n.jsx("p",{style:{margin:"0.25rem 0 0.7rem",fontSize:"0.95rem",color:Tr},children:"VP Operations"}),n.jsx("span",{style:{display:"inline-block",fontSize:"0.9rem",fontWeight:700,color:Ms},children:"1 canonical person"}),n.jsx("p",{style:{margin:"0.35rem 0 0",fontSize:"0.9rem",color:_o},children:"4 source records merged"})]})]})},rge=()=>{const e=[{date:"Jan 22",label:"Peer referral from a Comply exec",cite:"found in email: “…you should really talk to Northwind…”",recovered:!0},{date:"Feb 2",label:"Mentioned at an exec roundtable",cite:"named on call transcript, Feb 9",recovered:!0},{date:"Feb 10",label:"Demo request (form)",recovered:!1},{date:"Feb 18",label:"Intro call (Gong)",recovered:!1},{date:"Feb 24",label:"CFO looped in on a forwarded thread",cite:"inferred participant, no send record",recovered:!0},{date:"Mar 12",label:"Pricing review (meeting)",recovered:!1}];return n.jsxs("div",{style:{...tge,padding:"1.5rem",maxWidth:"560px",fontFamily:"Geist, sans-serif"},children:[n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"center",marginBottom:"1.1rem",flexWrap:"wrap",gap:"0.5rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.95rem",fontWeight:700,color:_o,fontFamily:"'Geist', sans-serif"},children:"Northwind deal timeline"}),n.jsxs("span",{style:{fontSize:"0.85rem",color:Tr,display:"inline-flex",gap:"0.85rem"},children:[n.jsxs("span",{children:[n.jsx("span",{style:{color:Tr},children:"●"})," logged"]}),n.jsxs("span",{children:[n.jsx("span",{style:{color:od},children:"◌"})," recovered"]})]})]}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.65rem"},children:e.map((t,a)=>n.jsxs("div",{style:{display:"flex",gap:"0.65rem",alignItems:"flex-start",background:t.recovered?"#fdf7ef":"#fff",border:`1px solid ${t.recovered?"#f0e0c6":"#e6ebe7"}`,borderRadius:"12px",padding:"0.7rem 0.85rem"},children:[n.jsx("span",{style:{color:t.recovered?od:Tr,fontSize:"0.85rem",lineHeight:1.5,flexShrink:0},children:t.recovered?"◌":"●"}),n.jsxs("div",{style:{minWidth:0},children:[n.jsxs("p",{style:{margin:0,fontSize:"0.95rem",color:_o},children:[n.jsx("b",{style:{color:t.recovered?od:_o,fontWeight:600},children:t.date})," · ",t.label]}),t.cite&&n.jsx("p",{style:{margin:"0.25rem 0 0",fontSize:"0.85rem",color:od,fontStyle:"italic",lineHeight:1.4},children:t.cite})]})]},a))})]})},oge=()=>{const e=[{name:"John Okafor",role:"VP Ops",source:"logged",recovered:!1},{name:"Dana Reyes",role:"Finance",source:"found in email",recovered:!0},{name:"Priya Shah",role:"Security",source:"named on call",recovered:!0},{name:"Marcus Hale",role:"Procurement",source:"found in email",recovered:!0}];return n.jsxs("div",{className:"cs-flow",style:{width:600,maxWidth:"100%",fontFamily:"Geist, sans-serif",display:"flex",alignItems:"center",gap:"0.5rem"},children:[n.jsxs("div",{style:{flexShrink:0},children:[n.jsx("p",{style:{margin:"0 0 0.4rem",fontSize:"0.9rem",fontWeight:700,color:Tr},children:"CRM Contact Role"}),n.jsxs("div",{style:{background:"#fff",border:"1px solid #e6ebe7",borderRadius:"12px",padding:"0.7rem 0.9rem",minHeight:52},children:[n.jsx("p",{style:{margin:0,fontSize:"0.95rem",fontWeight:700,color:_o},children:"John Okafor"}),n.jsx("p",{style:{margin:"0.15rem 0 0",fontSize:"0.85rem",color:Tr},children:"VP Ops"})]})]}),n.jsxs("svg",{className:"cs-conn-h",width:"48",height:"80",viewBox:"0 0 48 80","aria-hidden":"true",style:{flexShrink:0,display:"block"},children:[n.jsx("path",{d:"M 2 40 C 22 40, 26 40, 46 40",fill:"none",stroke:bo,strokeWidth:2}),n.jsx("path",{d:"M 39 33 L 46 40 L 39 47",fill:"none",stroke:bo,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsxs("svg",{className:"cs-conn-v",width:"24",height:"32",viewBox:"0 0 24 32","aria-hidden":"true",style:{display:"none",flexShrink:0,margin:"0 auto"},children:[n.jsx("path",{d:"M 12 0 L 12 24",fill:"none",stroke:bo,strokeWidth:2}),n.jsx("path",{d:"M 5 17 L 12 24 L 19 17",fill:"none",stroke:bo,strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsxs("div",{style:{flex:"1 1 0",minWidth:0,background:"#fff",border:"1px solid #bcdccb",borderRadius:"14px",padding:"1.1rem 1.15rem",boxShadow:"0 2px 10px rgba(45,106,79,0.10)"},children:[n.jsx("p",{style:{margin:"0 0 0.7rem",fontSize:"0.9rem",fontWeight:700,color:Ms},children:"Reconstructed buying group (9)"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"auto auto 1fr auto",alignItems:"center",columnGap:"0.7rem",fontSize:"0.9rem"},children:e.map((t,a)=>{const i={padding:"0.45rem 0",borderBottom:a===e.length-1?"none":"1px solid #eef1ef"};return n.jsxs("div",{style:{display:"contents"},children:[n.jsx("span",{style:{...i,color:t.recovered?od:Ms,fontSize:"0.7rem"},children:t.recovered?"◌":"●"}),n.jsx("span",{style:{...i,fontWeight:600,color:_o,whiteSpace:"nowrap"},children:t.name}),n.jsx("span",{style:{...i,color:Tr},children:t.role}),n.jsx("span",{style:{...i,textAlign:"right"},children:n.jsx("span",{style:{display:"inline-block",fontSize:"0.72rem",fontWeight:600,color:t.recovered?od:Tr,background:t.recovered?"#fdf1e3":"#f2f4f3",border:`1px solid ${t.recovered?"#f0d8b8":"#e6ebe7"}`,borderRadius:999,padding:"0.1rem 0.5rem",whiteSpace:"nowrap"},children:t.source})})]},t.name)}
3663)}),n.jsx("p",{style:{margin:"0.7rem 0 0",fontSize:"0.85rem",color:od,fontWeight:600},children:"+ 5 more recovered"})]})]})};function sge(){return n.jsxs(Wo,{seo:{title:"Data Foundation — The record everything else runs on",description:"Upside connects your GTM systems and rebuilds what your CRM never captured: the people, touchpoints, and buying groups behind every deal, reassembled into one record you can trust.",canonical:"https://upside.tech/platform/data-foundation"},children:[n.jsx(Vs,{eyebrow:"Data Foundation",headline:"See the whole of every deal.",sub:"Upside connects your GTM systems and rebuilds what your CRM never captured, or captured but never made sense of: the people, the touchpoints, and the buying groups behind every deal, reassembled into one record you can actually trust.",secondary:{label:"See how accounts are rebuilt",href:"#connect"},visual:n.jsx(yc,{src:"/images/platform/hero/data-foundation.png",alt:"Upside reconstructs the people, touchpoints, and buying groups behind every deal into one connected record."})}),n.jsxs(Ce,{alt:!0,center:!0,children:[n.jsx(Ie,{children:"Source of truth"}),n.jsx(De,{style:{margin:"0.9rem auto 0.85rem"},children:"One trustworthy record under every decision."}),n.jsx(We,{style:{margin:"0 auto"},children:"Your dashboards, models, and agents all sit on top of your data. When the layer underneath is wrong, every answer inherits the error."}),n.jsx("div",{style:{marginTop:"2.5rem",display:"flex",justifyContent:"center"},children:n.jsx("div",{className:"pf-art pf-art-scroll",style:{maxWidth:"760px"},children:n.jsx(nge,{})})})]}),n.jsx(Ce,{children:n.jsxs("div",{className:"pf-grid",children:[n.jsxs("div",{className:"pf-grid-copy",style:{minWidth:0},children:[n.jsx(Ie,{children:"Data blind spots"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Reconstruct what your CRM never recorded."}),n.jsx(We,{children:"Your CRM was built to run deals, not remember them. AI turned those structural gaps into the thing holding everything back. The same kinds of gaps show up in every CRM."}),n.jsx(We,{style:{marginTop:"1.5rem"},children:"None of this is a discipline problem your team can fix by logging more carefully, or by kicking off another CRM cleanup next quarter. It is structural."})]}),n.jsx("div",{className:"pf-grid-art",style:{minWidth:0},children:n.jsx(Tle,{items:[{lead:"The same person, counted more than once.",rest:"A Lead in Salesforce, a Contact in HubSpot, a name on a Gong call, and often more, all treated as different people."},{lead:"The touchpoints no one logged.",rest:"The intro on a call, the referral in an email, the meeting that closed it: routinely never reach the CRM."},{lead:"An incomplete buying committee.",rest:"Many of the people who actually decided the deal were never added to the opportunity."},{lead:"The wrong dates, not just missing ones.",rest:"Fields get overwritten in place, and marketing tools stamp when a record synced, not when the thing actually happened."}]})})]})}),n.jsx(If,{id:"connect",alt:!0,label:"Connect",heading:"Turn on the sources. Map nothing by hand.",lead:"Getting to good data usually starts with a quarter of data engineering, before anyone sees a single clean record.",blurbs:[{icon:"Plug",lead:"Connect, don’t build.",rest:"Native connectors for the major GTM systems, plus webhook ingestion for the long tail that has none. A few OAuth clicks, no pipelines to maintain."},{icon:"Search",lead:"Crawled, not just synced.",rest:"Upside’s forensic reconstruction then indexes your systems the way a search engine crawls the web: every email, meeting, call, and record into one shared schema."}],visual:n.jsx(age,{}),caption:n.jsxs(n.Fragment,{children:[n.jsx("strong",{children:"Connectors in, one schema out."})," Guided OAuth for the native ones, webhook ingest for the rest, then Upside crawls and indexes it all. Illustrative example account."]})}),n.jsx(If,{flip:!0,label:"Resolve",heading:"One person. One record.",lead:"One real person is scattered across your systems, a Lead here, a Contact there, a name on a call, and counted as several different people.",blurbs:[{icon:"Users",lead:"One canonical identity.",rest:"Upside collapses those fragments into one person, and keeps doing it as new data lands, so anal
3663ytics count real people instead of system artifacts."},{icon:"Building2",lead:"Across companies, too.",rest:"The same logic recognizes a person who appears in two different account datasets as one human, not two."}],visual:n.jsx(ige,{}),caption:n.jsxs(n.Fragment,{children:[n.jsx("strong",{children:"Persona deduplication."})," Source records that are the same person — a Salesforce Lead and Contact, plus matches scattered across other tools — all converge into one reconciled identity. Illustrative example."]})}),n.jsx(If,{alt:!0,label:"Recover",heading:"Every touchpoint, even the ones no one logged.",lead:"Most of what happens on a deal never gets logged, so attribution and account scoring run on a fraction of the story.",blurbs:[{icon:"FileText",lead:"It reads what was never logged.",rest:"Upside extracts the interactions buried in email threads, call transcripts, and CRM notes, and adds them to the timeline."},{icon:"Mail",lead:"Email threads, reassembled.",rest:"A six-reply forwarded chain stops reading as one touchpoint; inferred participants (“Tom said:” with no send record) are added as real contacts."},{icon:"Calendar",lead:"Dated to when it happened.",rest:"Each recovered touchpoint is placed by the date in the email or transcript it came from, not the date a system happened to sync it."},{icon:"Workflow",lead:"No new logging discipline.",rest:"Recovery happens in the pipeline, not in a habit you have to enforce on reps and marketers."}],visual:n.jsx(rge,{}),caption:n.jsxs(n.Fragment,{children:[n.jsx("strong",{children:"Recovered timeline."})," Solid rows were in the CRM; open-circle rows were rebuilt from emails, transcripts, and notes, each carrying the evidence it came from. Illustrative example."]})}),n.jsx(If,{flip:!0,label:"Reassemble",heading:"The whole buying committee.",lead:"B2B deals are decided by a committee, but much of that committee never makes it into the CRM.",blurbs:[{icon:"Activity",lead:"Stitched from real activity.",rest:"Upside rebuilds the full group across CRM records, email threads, and call transcripts, including the stakeholders a rep never added."},{icon:"Route",lead:"Both paths walked.",rest:"Direct account contacts and opportunity roles, so no one in the room gets dropped."}],visual:n.jsx(oge,{}),caption:n.jsxs(n.Fragment,{children:[n.jsx("strong",{children:"Buying group healing."})," The one logged contact plus the stakeholders nobody added, each tagged with how they were found and their inferred role. Illustrative example."]})}),n.jsx(Ce,{center:!0,children:n.jsx(Nd,{logo:zs.graphite,quote:"We had no idea how many people were referring deals to us. Upside looked at all of the data and showed us the full picture.",cite:n.jsxs(n.Fragment,{children:[n.jsx("strong",{children:"Ethan Smith"})," — CEO & Founder, Graphite"]})})}),n.jsxs(Ce,{alt:!0,children:[n.jsxs("div",{className:"pf-grid",children:[n.jsxs("div",{className:"pf-grid-copy",style:{minWidth:0},children:[n.jsx(Ie,{children:"Platform"}),n.jsx(De,{style:{margin:"0.9rem 0 0"},children:"The layer the rest of the platform runs on."})]}),n.jsx("div",{className:"pf-grid-art",style:{minWidth:0,alignSelf:"center"},children:n.jsx(We,{children:"Every other Upside capability runs on this same reconstructed record, which is what lets the numbers trace back to a source."})})]}),n.jsx(Ks,{cards:[{dir:"Powers",title:"Pipedash & Deep Research",body:"Attribution and analyst-quality research run on the reconstructed record, not raw CRM exports.",links:[{label:"Pipedash",href:"/platform/pipedash"},{label:"Deep Research",href:"/platform/deep-research"}]},{dir:"Surfaced in",title:"Dashboard",body:"Account timelines, explorers, and report cards render the healed data, with provenance back to source.",links:[{label:"Dashboard",href:"/platform/dashboard"}]},{dir:"Open via",title:"MCP & Miniapps",body:"Query the foundation from Claude, Cursor, or your own tools, and ship results as interactive apps.",links:[{label:"MCP",href:"/platform/mcp"},{label:"Miniapps",href:"/platform/miniapps"}]}]})]}),n.jsx(Ce,{children:n.jsx(zo,{badge:"FAQs",heading:"Questions? Answers.",sub:"The details behind how Upside reconstructs your GTM data, and where it fits alongside the tools you already run.",items:[{q:"Isn’t this just a CDP, a reverse-ETL tool, or our data warehouse?",a:"Those move data; Upside makes it correct. A warehouse or CDP will faithfully replicate the duplicates, missing touchpoints, and incomplete buying groups that already exist in y
3663our source systems. Upside runs a reconstruction and healing pipeline on top: it resolves identities, recovers the interactions that were never logged, reassembles buying groups, and classifies activity, then serves the result as a normalized record. It is the layer between your systems and your analysis, not another place to store the same raw data."},{q:"Do we need a data team to set this up?",a:"No. Sources connect through guided OAuth flows, with no ETL infrastructure to build and no field mapping to maintain. The reconstruction and healing run automatically once data is flowing, so you do not need a data engineer to stand it up or keep it clean."},{q:"Does this replace our CRM?",a:"No. Upside reads from Salesforce, HubSpot, and the rest of your stack and leaves them as your systems of record. Nothing changes about how reps and marketers work. Upside builds a reconstructed, unified record alongside your CRM, not in place of it."},{q:"What happens to our history when we switch a GTM tool?",a:"It stays. Your data lives in Upside’s foundation, not the tools it came from, so when you swap one system for another, say Marketo for HubSpot, the history is already here. Upside stitches the new system onto the old, reporting spans the cutover on one timeline, and the record outlives the source’s own retention limits."},{q:"How do you recover touchpoints that were never logged? Is that just guessing?",a:"No. Recovery is evidence-based: a touchpoint is added because it appears in an email thread, a call transcript, or a CRM note, and the record keeps the citation for where it came from. Where something is genuinely inferred rather than evidenced, it is labeled as inferred. The point is a more complete record you can audit, not a more optimistic one."}]})}),n.jsx(Xs,{heading:"Build your GTM on data you can trust.",sub:"Book a demo and see what your team can build, automate, and finally answer once your GTM data is something you trust."})]})}const KP=1240,rS=712;function lge({src:e="/demo-tour/index.html?embed=1",onHeight:t}){const a=M.useRef(null),[i,r]=M.useState(1);return M.useEffect(()=>{const o=()=>{if(a.current){const d=a.current.offsetWidth/KP;r(d),t==null||t(rS*d)}};o();const l=new ResizeObserver(o);return a.current&&l.observe(a.current),()=>l.disconnect()},[t]),n.jsx("div",{children:n.jsx("div",{ref:a,style:{width:"100%",height:`${rS*i}px`,position:"relative",overflow:"hidden"},children:n.jsx("iframe",{src:e,title:"Upside Interactive Demo",loading:"lazy",allow:"fullscreen",style:{width:`${KP}px`,height:`${rS}px`,border:"none",display:"block",transformOrigin:"top left",transform:`scale(${i})`}})})})}const Gn="#2d6a4f",nx="#509A79",pc="#347BD1",TH="#7a4a9e",_r="#a1560b",_H="#64748B",xi="#1b1f1c",$d="#5f6563",lp="#e6ebe7",cge="0 8px 30px rgba(27, 31, 28, 0.08)",Jy={background:"#fff",borderRadius:"14px",boxShadow:cge,fontFamily:"'Geist', sans-serif",width:"100%"},dh=(e,t)=>({fontSize:"0.84rem",fontWeight:700,padding:"0.22rem 0.6rem",borderRadius:999,background:e,color:t,whiteSpace:"nowrap"}),sd="ui-monospace, 'SF Mono', Menlo, monospace",h1={margin:0,fontSize:"0.82rem",fontWeight:700,color:$d,textTransform:"uppercase",letterSpacing:"0.05em"},eb={...Jy,padding:"1.2rem 1.25rem",width:"100%",maxWidth:"400px",fontFamily:"Geist, sans-serif"},dge=()=>n.jsxs("div",{style:eb,children:[n.jsx("p",{style:{...h1,color:pc},children:"Account Explorer"}),n.jsx("div",{style:{marginTop:"0.8rem",display:"flex",flexDirection:"column",gap:"0.6rem"},children:[["email","Mar 14",pc],["call","Mar 18",Gn],["meeting","Mar 21",TH],["web visit","Mar 22",_r]].map(([e,t,a])=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.55rem"},children:[n.jsx("span",{style:{width:9,height:9,borderRadius:999,background:a,flexShrink:0}}),n.jsx("span",{style:{fontSize:"0.92rem",color:xi,flex:1},children:e}),n.jsx("span",{style:{fontSize:"0.82rem",color:$d,fontFamily:sd},children:t})]},e))})]}),uge=()=>n.jsxs("div",{style:{...eb,display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",textAlign:"center"},children:[n.jsx("div",{style:{width:48,height:48,borderRadius:999,background:"#e8f4ed",display:"flex",alignItems:"center",justifyContent:"center",color:Gn},children:n.jsxs("svg",{width:"24",height:"24",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",children:[n.jsx("circle",{cx:"12",cy:"8",r:"3.5"}),n.jsx("path",{d:"M5 20c0-3.9 3.1-7 7-7s7 3.1 7 7"})]})}),n.jsx("p",{style:{margin:"0.6rem 0 0.2rem",fontSize:"1.06rem",fontWeight:700,color:xi,fontFamily:"'Geist', sans-serif"},children:"Marcus Chen"}),n.jsx("p",{style:{margin:0,fontSize:"0.9rem",color:$d},children:"3 accounts · 5 opps · 28 touchpoints"}),n.jsx("p",{style:{...h1,marginTop:"0.7rem"},children:"Person Explorer"})]}),hge=()=>n.jsxs("div",{style:eb,children:[n.jsx("p",{style:{...h1,color:Gn},children:"Account minimap"}),n.jsxs("svg",{viewBox:"0 0 250 64",width:"100%",height:"64",style:{marginTop:"0.6rem"},children:[n.jsx("line",{x1:"4",y1:"54",x2:"246",y2:"54",stroke:lp,strokeWidth:"2"}
3663),n.jsx("polyline",{points:"4,48 42,40 82,26 122,30 162,18 202,22 246,12",fill:"none",stroke:Gn,strokeWidth:"2.5",strokeLinejoin:"round",strokeLinecap:"round"}),n.jsx("rect",{x:"122",y:"57",width:"124",height:"6",rx:"3",fill:_r,opacity:"0.5"}),n.jsx("circle",{cx:"20",cy:"46",r:"3",fill:pc}),n.jsx("circle",{cx:"54",cy:"38",r:"3",fill:Gn}),n.jsx("circle",{cx:"94",cy:"28",r:"3",fill:Gn}),n.jsx("circle",{cx:"142",cy:"27",r:"3",fill:pc}),n.jsx("circle",{cx:"184",cy:"19",r:"3",fill:Gn}),n.jsx("circle",{cx:"224",cy:"14",r:"3",fill:Gn})]})]}),pge=()=>n.jsxs("div",{style:{...eb,display:"flex",flexDirection:"column",justifyContent:"center"},children:[n.jsx("p",{style:{...h1,color:_r},children:"Pre-call prep"}),n.jsx("div",{style:{marginTop:"0.65rem",background:"#e8f5ef",borderRadius:12,padding:"0.85rem 0.9rem"},children:n.jsx("p",{style:{margin:0,fontSize:"0.96rem",fontWeight:700,color:Gn,lineHeight:1.4},children:"412 touchpoints · last active 3d ago · 2 open opps"})})]}),mge=()=>n.jsxs("div",{style:eb,children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.7rem",marginBottom:"0.6rem"},children:[n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:6},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:999,background:"#cfd6d1"}}),n.jsx("span",{style:{width:8,height:8,borderRadius:999,background:"#cfd6d1"}}),n.jsx("span",{style:{width:11,height:11,borderRadius:999,background:_r,boxShadow:`0 0 0 4px ${_r}22`}}),n.jsx("span",{style:{width:8,height:8,borderRadius:999,background:"#cfd6d1"}}),n.jsx("span",{style:{width:8,height:8,borderRadius:999,background:"#cfd6d1"}})]}),n.jsx("span",{style:{...dh("#fdf1e2",_r)},children:"Milestone analysis"})]}),n.jsx("p",{style:{margin:0,fontSize:"0.96rem",color:xi,lineHeight:1.45},children:n.jsx("strong",{style:{color:_r},children:"Webinar attendance activated the deal"})})]}),fge=()=>{const e=[{acct:"Pied Piper",opp:"$673K",eng:"412",infl:"4",heat:"8.4",hot:!0},{acct:"Meridian Energy",opp:"$931K",eng:"318",infl:"3",heat:"7.1",hot:!0},{acct:"Crestview Resources",opp:"$75K",eng:"96",infl:"1",heat:"3.2"}],t="1.5fr 0.8fr 0.7fr 0.7fr 0.7fr";return n.jsxs("div",{style:{...Jy,padding:"1.4rem",maxWidth:"600px",fontFamily:"Geist, sans-serif"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"space-between",gap:"0.5rem",marginBottom:"0.9rem",flexWrap:"wrap"},children:[n.jsx("p",{style:{margin:0,fontFamily:"'Geist', sans-serif",fontSize:"1.06rem",fontWeight:700,color:xi},children:"Accounts · saved view"}),n.jsx("span",{style:{...dh("#fdf1e2",_r),border:`1px solid ${_r}33`},children:"Run analyses (3)"})]}),n.jsxs("div",{style:{display:"flex",gap:"0.45rem",flexWrap:"wrap",marginBottom:"0.9rem"},children:[n.jsx("span",{style:dh("#e8f5ef",Gn),children:"open opps"}),n.jsx("span",{style:dh("#e8f5ef",Gn),children:"engagements > 5"}),n.jsx("span",{style:dh("#e4edf5",pc),children:"+ formula column"})]}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:t,gap:"0.4rem",fontSize:"0.82rem",fontWeight:700,color:$d,padding:"0 0 0.5rem",borderBottom:`1px solid ${lp}`},children:[n.jsx("span",{children:"Account"}),n.jsx("span",{children:"Open opp"}),n.jsx("span",{children:"Eng."}),n.jsx("span",{children:"Infl."}),n.jsx("span",{style:{textAlign:"right"},children:"Heat ƒ"})]}),e.map(a=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:t,gap:"0.4rem",alignItems:"center",fontSize:"0.92rem",color:xi,padding:"0.6rem 0",borderBottom:`1px solid ${lp}`},children:[n.jsx("span",{children:a.acct}),n.jsx("span",{style:{fontFamily:sd},children:a.opp}),n.jsx("span",{style:{fontFamily:sd},children:a.eng}),n.jsx("span",{style:{fontFamily:sd},children:a.infl}),n.jsx("span",{style:{textAlign:"right"},children:n.jsx("span",{style:{...dh(a.hot?"#e8f5ef":"#fdf1e2",a.hot?Gn:_r)},children:a.heat})})]},a.acct)),n.jsx("p",{style:{margin:"0.9rem 0 0",fontSize:"0.88rem",color:$d},children:n.jsx("span",{style:{color:pc,fontWeight:600,fontFamily:sd},children:"app.upside.tech/s/8fk2"})})]})},gge=()=>{const e=[{value:"$673K",label:"influenced pipeline",delta:"▲ 42% vs. peer avg",up:!0},{value:"9",label:"sourced opps",delta:"▲ 3 vs. peer avg",up:!0},{value:"112",label:"people engaged",delta:"▼ 18% vs. peer avg",up:!1},{value:"14",label:"accounts activated",delta:"▲ 27% vs. peer avg",up:!0}];return n.jsxs("div",{style:{...Jy,padding:"1.6rem",maxWidth:"560px",fontFamily:"Geist, sans-serif"},children:[n.jsx("p",{style:{margin:"0 0 1.1rem",fontFamily:"'Geist', sans-serif",fontSize:"1.06rem",fontWeight:700,color:xi},children:"Report card · “Q3 Webinar Series”"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"0.7rem"},children:e.map(t=>n.jsxs("div",{style:{background:"#fff",border:`1px solid ${lp}`,borderRadius:12,padding:"0.95rem 1rem"},children:[n.jsx("p",{style:{margin:0,fontFamily:"'Geist', sans-serif",fontSize:"1.5rem",fontWeight:700,color:xi},children:t.value}),n.jsx("p",{style:{margin:"0.2rem 0 0.4rem",fontSize:"0.88rem",color:$d},children:t.label}),n.jsx("p",{style:{margin:0,fontSize:"0.84rem",fontWeight:700,color:t.up?Gn:_r},children:t.delta})]},t.label))})]})},yge=()=>{const e=[{name:"opportunities_influenced",group:"green"},{name:"sourced_opportunities",group:"green"},{name:"progressed_opportunities",group:"green"},{name:"accounts_activated",group:"blue"},{name:"accounts_reactivated",group:"blue"},{name:"accounts_engaged",group:"blue"},{name:"people_engaged",group:"slate"},{name:"total_engagements",group:"slate"},{name:"opportunities_influenced_won",group:"slate"},{name:"+12 more",group:"slate"}],t={green:["#e8f5ef",Gn],blue:["#e4edf5",pc],slate:["#eef1f4",_H]};return n.jsxs("div",{style:{...Jy,padding:"1.6rem",maxWidth:"560px",fontFamily:"Geist, sans-serif"},children:[n.jsx("p",{style:{margin:"0 0 1.1rem",fontFamily:"'Geist', sans-serif",fontSize:"1.06rem",fontWeight:700,color:xi},children:"Standing metric library"}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.5rem"},children:e.map(a=>{const[i,r]=t[a.group];return n.jsx("span",{style:{fontSize:"0.9rem",fontWeight:600,padding:"0.35rem 0.7rem",borderRadius:9,background:i,color:r,fontFamily:sd},children:a.name},a.name)})})]})},bge=()=>{const e=[{cond:["utm_source = linkedin","utm_medium = paid"],bucket:"LinkedIn Paid Social",tone:["#e8f5ef",Gn]},{cond:["utm_source = linkedin","medium = organic"],bucket:"LinkedIn Organic",tone:["#e4edf5",pc]},{cond:["referrer ~ “webinar”","has spend"],bucket:"Field & Webinars",tone:["#eef1f4",_H]}];return n.jsxs("div",{style:{...Jy,padding:"1.6rem",maxWidth:"600px",fontFamily:"Geist, sans-serif"},children:[n.jsx("p",{style:{margin:"0 0 1.2rem",fontFamily:"'Geist', sans-serif",fontSize:"1.06rem",fontWeight:700,color:xi},children:"Channel rules"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.85rem"},children:e.map(t=>{const[a,i]=t.tone;return n.jsxs("div",{className:"cr-rule",style:{display:"flex",alignItems:"center",gap:"0.4rem",flexWrap:"wrap"},children:[n.jsx("div",{className:"cr-cond",style:{flex:"1 1 0",minWidth:0,border:`1px solid ${lp}`,borderRadius:12,padding:"0.65rem 0.8rem",background:"#fff"},children:t.cond.map((r,o)=>n.jsxs("p",{style:{margin:0,fontSize:"0.9rem",color:$d,lineHeight:1.6},children:[n.jsx("span",{style:{fontWeight:700,color:xi},children:o===0?"IF ":"AND "}),n.jsx("code",{style:{color:xi,fontFamily:sd,fontSize:"0.86rem"},children:r})]},r))}),n.jsxs("svg",{className:"cr-arrow",width:"40",height:"24",viewBox:"0 0 40 24","aria-hidden":"true",style:{flexShrink:0}
3663,children:[n.jsx("path",{d:"M 2 12 C 16 12, 24 12, 36 12",fill:"none",stroke:nx,strokeWidth:"2"}),n.jsx("path",{d:"M 30 7 L 37 12 L 30 17",fill:"none",stroke:nx,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsx("span",{style:{fontSize:"0.92rem",fontWeight:700,padding:"0.45rem 0.85rem",borderRadius:999,background:a,color:i},children:t.bucket})]},t.bucket)})})]})},vge=()=>n.jsx("div",{style:{width:"100%",maxWidth:"600px",fontFamily:"Geist, sans-serif"},children:n.jsxs("div",{style:{display:"flex",gap:"0.4rem",alignItems:"stretch",flexWrap:"wrap"},children:[n.jsxs("div",{style:{flex:"1 1 0",minWidth:0,background:"#fff",border:`1px solid ${lp}`,borderRadius:14,padding:"1rem 1.1rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.82rem",fontWeight:700,color:TH,textTransform:"uppercase",letterSpacing:"0.05em"},children:"Agent"}),n.jsxs("p",{style:{margin:"0.5rem 0 0",fontSize:"0.96rem",color:xi,lineHeight:1.45},children:["“The Q3 webinar influenced ",n.jsx("strong",{children:"$673K"})," across 9 opportunities.”"]})]}),n.jsxs("svg",{width:"44",height:"20",viewBox:"0 0 44 20","aria-hidden":"true",style:{alignSelf:"center",flexShrink:0},children:[n.jsx("path",{d:"M 3 10 H 38",fill:"none",stroke:nx,strokeWidth:"2",strokeLinecap:"round"}),n.jsx("path",{d:"M 32 4 L 40 10 L 32 16",fill:"none",stroke:nx,strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsxs("div",{style:{flex:"1 1 0",minWidth:0,background:"#fff",border:`1.5px solid ${Gn}`,borderRadius:14,padding:"1rem 1.1rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.82rem",fontWeight:700,color:Gn,textTransform:"uppercase",letterSpacing:"0.05em"},children:"Dashboard · the record"}),n.jsxs("p",{style:{margin:"0.5rem 0 0",fontSize:"0.96rem",color:xi,lineHeight:1.45},children:["The same ",n.jsx("strong",{children:"$673K"}),", broken into 9 opportunities — click any to its source."]})]})]})});function xge(){return n.jsx("div",{style:{position:"relative",width:"100%",aspectRatio:"1248 / 702",borderRadius:"16px",overflow:"hidden",backgroundImage:"url(/images/platform/hero/dashboard-backdrop.png)",backgroundSize:"cover",backgroundPosition:"center"},children:n.jsx("div",{style:{position:"absolute",top:"4%",left:"5%",width:"90%",height:"92%",borderRadius:"10px",overflow:"hidden",background:"#fff",boxShadow:"0 30px 60px -12px rgba(12,30,32,0.35), 0 8px 20px -6px rgba(12,30,32,0.22)"},children:n.jsx(lge,{})})})}function wge(){return n.jsxs(Wo,{seo:{title:"Dashboard — GTM analytics everyone can use",description:"Pre-built views of every account, campaign, and channel, readable by the whole team without SQL. Every number traces back to the same record the rest of the platform runs on.",canonical:"https://upside.tech/platform/dashboard"},children:[n.jsxs("section",{style:{marginTop:"-65px",padding:"clamp(8.5rem, 9vw, 9rem) clamp(1.25rem, 3vw, 3rem) clamp(3rem, 6vw, 5rem)",background:"#fff",borderBottom:`1px solid ${se.border}`},children:[n.jsx("div",{style:{maxWidth:"1296px",margin:"0 auto"},children:n.jsxs("div",{style:{maxWidth:"768px",margin:"0 auto",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center"},children:[n.jsxs("nav",{"aria-label":"Breadcrumb",style:{display:"flex",alignItems:"center",justifyContent:"center",gap:"0.5rem",marginBottom:"1.15rem",fontFamily:"Geist, sans-serif",fontSize:"0.9rem",fontWeight:500},children:[n.jsx(J,{to:"/platform",style:{color:se.muted,textDecoration:"none"},children:"Platform"}),n.jsx("span",{"aria-hidden":"true",style:{color:"#c1c9c4"},children:"/"}),n.jsx("span",{style:{color:se.muted},children:"Dashboard"})]}),n.jsx("h1",{className:"it-display",style:{color:se.text,margin:"0 0 1.1rem 0"},children:"GTM analytics everyone can use."}),n.jsx("p",{className:"it-lead",style:{color:se.muted,margin:"0 0 1.75rem 0",maxWidth:"60ch"},children:"Pre-built views of every account, campaign, and channel, readable by the whole team without SQL. Every number traces back to the same record the rest of the platform runs on."}),n.jsxs("div",{style:{display:"flex",gap:"1rem",flexWrap:"wrap",alignItems:"center",justifyContent:"center"},children:[n.jsx(J,{to:Wt,className:"cta cc-large w-button",children:"Request demo"}),n.jsx(gG,{label:"See how it works",href:"/interactive-demo"})]})]})}),n.jsx("div",{style:{maxWidth:"1440px",margin:"clamp(3rem, 6vw, 6rem) auto 0"},children:n.jsx(xge,{})})]}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"The problem"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Analytics without the analyst."}),n.jsx(We,{children:"Getting answers out of GTM data has usually meant going through a specialist: the person who writes the SQL, builds the report, or drives the AI. That puts a gap between the team and its own numbers."}),n.jsx(We,{style:{marginTop:"0.875rem"},children:"The Upside dashboard closes the gap. Anyone on the team can use it without that specialist, and it doubles as the audit console for everything else Upside does: the reference implementation that renders your GTM data in a known-good, traceable format, so an answer from an AI analysis can be checked against it before the team acts on it."})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Account Explorer"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"See everything that happened on an account."}),n.jsx(We,{children:"Upside’s Account Explorer and Person Explorer assemble every touchpoint, deal, buying-group member, and AI-detected milestone into one view, drawn from the full record 
3663instead of CRM logs alone."}),[{lead:"Account Explorer.",rest:"One pane for everything Upside knows about a company: a cross-team log of every email, meeting, call, web visit, and CRM action, including the touches that carry no attribution credit.",visual:n.jsx(dge,{})},{lead:"Person Explorer.",rest:"The same complete history for an individual contact: associated accounts, opportunity roles, and every detected touchpoint, whether or not a rep remembered to log it.",visual:n.jsx(uge,{})},{lead:"The minimap.",rest:"A visual timeline alongside the table: touchpoints classified by bid versus engagement, opportunity bars, and an engagement-velocity line that shows where momentum built or faded.",visual:n.jsx(hge,{})},{lead:"Built for pre-call prep.",rest:"A rep pulls up the full account or contact history in seconds, instead of scrambling through CRM notes, call recordings, and email threads before a discovery or renewal call.",visual:n.jsx(pge,{})},{lead:"Milestone analyses, in context.",rest:"AI-detected milestones flag what activated or progressed each deal, cited to the touchpoints behind it, right on the timeline. They also roll up as a metric: count every opportunity where a campaign or channel was a milestone driver, and aggregate it in a report card or list view.",visual:n.jsx(mge,{})}].map((e,t)=>n.jsxs("div",{className:`pf-grid${t%2===1?" flip":""}`,style:{marginTop:t===0?"1.9rem":"2.25rem",alignItems:"center"},children:[n.jsx("div",{className:"pf-grid-copy",style:{minWidth:0},children:n.jsxs("p",{className:"it-body",style:{color:se.text,margin:0},children:[n.jsx("span",{className:"it-leadin",children:e.lead})," ",n.jsx("span",{style:{color:se.muted},children:e.rest})]})}),n.jsx("div",{className:"pf-grid-art",style:{display:"flex",justifyContent:"center",minWidth:0},children:n.jsx("div",{className:"pf-art pf-art-fit",children:e.visual})})]},e.lead))]}),n.jsx(gs,{alt:!0,flip:!0,artFit:!0,eyebrow:"List views",head:"Build the report you need, no SQL required.",sub:"Filterable, sortable grids across every entity: accounts, people, salespeople, campaigns, channels, webpages, and opportunities. Slice by relation and metric filters, add formula columns, save and share the view.",visual:n.jsx(fge,{}),children:n.jsx(Rn,{items:[{lead:"Relation and metric filters.",rest:"“Accounts associated with open opps.” “Campaigns that influenced pipeline this quarter.” Multi-condition views that would otherwise need a custom report or a warehouse query, built point-and-click.",icon:"Filter"},{lead:"Formula columns.",rest:"Define derived fields right in the grid with spreadsheet-style expressions, so standard calculated metrics don’t require an external BI layer.",icon:"Calculator"},{lead:"Saved and shareable.",rest:"Every filtered view gets a stable share link, so it becomes a durable reference you can bookmark or drop into Slack, not a one-off query that breaks when you reload.",icon:"Share2"},{lead:"From list to analysis.",rest:"Export any set to CSV, or select opportunities and trigger AI analyses on them in bulk, straight from the list.",icon:"Download"}]})}),n.jsx(gs,{eyebrow:"Report cards",head:"Did this campaign (or channel, or web page) actually matter?",sub:"Per-entity report cards for campaigns, channels, custom channels, web pages, and salespeople tie upstream activity to pipeline outcomes.",visual:n.jsx(gge,{}),children:n.jsx(Rn,{items:[{lead:"Outcomes, not just activity.",rest:"Influenced pipeline, sourced opportunities, accounts activated, people engaged, computed for every campaign, channel, page, and rep, instead of stopping at opens and clicks.",icon:"Target"},{lead:"Benchmark Comparison.",rest:"Place any metric side-by-side with comparable peers. A campaign that outperformed three similar campaigns reads very differently from one judged in isolation.",icon:"BarChart3"},{lead:"Drill down to the deals.",rest:"Every report card opens into the underlying account and opportunity lists, so a number is a starting point for the next question, not a dead end.",icon:"Search"}]})}),n.jsxs(gs,{alt:!0,flip:!0,eyebrow:"Preset metrics",head:"Meaningful metrics on day one.",sub:"Over 20 pre-calculated GTM metrics ship ready to use, with one canonical definition applied across every explorer, list, and report card. No modeling project before the first number appears.",visual:n.jsx(yge,{}),children:[n.jsx(Rn,{items:[{lead:"Standard measures, already built.",rest:"BI tools make you define every metric before a dashboard ships, often weeks of work before a single number is visible. Upside inverts that: standard GTM measures are live immediately, and custom formula columns handle the edge cases.",icon:"Sigma"},{lead:"One definition, everywhere.",rest:"“Opportunities influenced” means the same thing in a campaign report card, a channel explorer, and a list filter, so two teams asking the same question get the same number.",icon:"BookOpen"},{lead:"Auditable by design.",rest:"Every figure has a traceable definition rather than a formula living in someone’s spreadsheet, which is what makes it defensible when finance drills in.",icon:"FileCheck"}]}),n.jsx(yG,{logo:zs.dscout,children:n.jsxs("p",{className:"it-body",style:{color:se.muted,margin:0},children:[n.jsx("span",{className:"it-title-sm",style:{color:se.text,display:"block",marginBottom:"0.4rem"},children:"100s of hours saved"}),"on onboarding and reporting. Dscout was live and pulling reports in under a day.",n.jsxs("span",{className:"it-body-sm",style:{display:"block",marginTop:"0.6rem",color:se.muted},children:["Kate Johnson, CMO, Dscout  · "," ",n.jsx("a",{href:"/case-studies/dscout-driving-confident-growth-with-upside",style:{color:se.green,fontWeight:600,textDecoration:"none"},children:"Read the Dscout story →"})]})]})})]}),n.jsx(gs,{artFit:!0,eyebrow:"Custom channels",head:"Your channel taxonomy, your rules.",sub:"A rules engine that classifies touchpoints into the channel buckets your team actually uses, across LinkedIn, Google Ads, Meta, Reddit, email, and every connected source, in real time.",visual:n.jsx(bge,{}),children:n.jsx(Rn,{items:[{lead:"Channels that match how you work.",rest:"Build named buckets from UTM parameters, engagement signals, and spend data, then split or combine them however your programs are actually organized.",icon:"Tags"},{lead:"Real-time, not reprocessed.",rest:"Rule changes apply instantly, with no multi-day recalculation lag and no stale classifications sitting around while a job runs.",icon:"Zap"},{lead:"Bring your channel rules with you.",rest:"Import your Marketo Measure (Bizible) channel definitions as they are. The same rules run on Upside’s cleaned, fuller data, so they now catch the touchpoints the old setup missed.",icon:"Upload"},{lead:"Every channel gets a report card.",rest:"Each custom channel and sub-channel comes with the same full set of Upside metrics as the system-defined channels, so a custom grouping is a first-class view, not a second-class one.",icon:"Radio"}]})}),n.jsx(gs,{alt:!0,flip:!0,eyebrow:"Receipts",head:"The audit console behind every answer.",sub:"The dashboard shows every figure in a known-good, human-readable format, traceable to its source. When an AI analysis or agent hands your team a number, this is where they confirm it’s right before anyone acts on it.",visual:n.jsx(vge,{}),children:n.jsx(Rn,{items:[{lead:"A check on the AI.",rest:"When Deep Research or an agent returns a finding, the dashboard shows the underlying record 
3663it was built from, in a format your team already reads. Trust it, or catch it, before it drives a decision.",icon:"ShieldCheck"},{lead:"Provenance on every metric.",rest:"Drill from a campaign’s influenced pipeline down to the specific opportunities and touchpoints behind it. The supporting evidence is one click away, not buried in a report someone built two quarters ago.",icon:"GitBranch"},{lead:"One consistent definition.",rest:"Preset metrics are computed the same way on every surface, so the number an agent quotes and the number on the report card are the same number.",icon:"Sigma"},{lead:"The cross-team record, auditable.",rest:"The activity log in Account Explorer shows every team’s touch on an account, so it’s the record itself that’s auditable, not just a summary of it.",icon:"ClipboardList"}]})}),n.jsx(Ce,{center:!0,children:n.jsx(Nd,{logo:zs.syndio,quote:"Self-serve campaign performance numbers without MOPS tickets.",cite:n.jsxs(n.Fragment,{children:["Amy Wellersdick — Director of Marketing Ops, Syndio",n.jsxs("span",{className:"it-body-sm",style:{display:"block",marginTop:"1rem",color:se.muted},children:["Data bottlenecks eliminated  ·  ",n.jsx("strong",{children:"1 GTM function"})," strategically restructured"]})]}),link:{label:"Read the Syndio story",href:"/case-studies/syndio-driving-strategic-gtm-decisions-with-upside"}})}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Platform"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"A window onto the shared record for everyone on the team."}),n.jsx(We,{children:"Every dashboard surface reads from the one reconstructed record the rest of Upside runs on, so its views stay consistent with each other and the deeper analyses have somewhere to land."}),n.jsx(Ks,{cards:[{dir:"Runs on",title:"Data Foundation",body:"The unified, healed touchpoint record and buying-group detection every dashboard surface reads from.",links:[{label:"Data Foundation",href:"/platform/data-foundation"}]},{dir:"Surfaces results from",title:"Pipedash & Deep Research",body:"Pipedash attribution and AI milestone analyses appear right inside account and campaign views; trigger them in bulk from any list.",links:[{label:"Pipedash",href:"/platform/pipedash"},{label:"Deep Research",href:"/platform/deep-research"}]},{dir:"Extend & query via",title:"MCP & Miniapps",body:"Query the same data from Claude or Cursor, or ship a custom view to the team as a miniapp.",links:[{label:"MCP",href:"/platform/mcp"},{label:"Miniapps",href:"/platform/miniapps"}]}]}),n.jsxs("p",{className:"it-body-sm",style:{color:se.muted,marginTop:"1.5rem"},children:["Equipping the whole revenue team with self-serve GTM analytics? See the use case:"," ",n.jsx("a",{href:"/use-cases",style:{color:se.green,fontWeight:600,textDecoration:"none"},children:"GTM analytics for the whole team →"})]})]}),n.jsx(Ce,{alt:!0,children:n.jsx(zo,{badge:"FAQs",heading:"Questions? Answers.",sub:"The practical details, and where this fits alongside the systems your team already runs.",items:[{q:"How is this different from the BI tool and CRM reports we already have?",a:"Those tools report on whatever the CRM logged, and each one models its metrics separately, which is how you end up with three numbers for the same question. The dashboard reads from one healed record of what actually happened, including touchpoints the CRM never captured, and every surface computes from the same metric definitions. The difference shows up the first time two teams pull the same number and it matches."},{q:"Do we need to know SQL, or have a data team, to use it?",a:"No. Relation and metric filters, formula columns, and saved views give a point-and-click path to the kind of multi-condition analysis that usually requires a custom report or a warehouse query. Standard GTM metrics are pre-built and live on day one; a data team is not a prerequisite for getting answers."},{q:"Who can access it, and how many seats do we get?",a:"There are no seat limits and no per-user license math: everyone in your organization can log in and explore the same data. That is deliberate, because a source of truth only works if the whole team can actually see it."},{q:"Will these numbers hold up when finance checks them?",a:"Yes. Every metric drills down to the specific opportunities and touchpoints behind it, every preset metric has one traceable definition used everywhere, and the cross-team activity log shows provenance back to the source system. The number and its evidence are the same click apart."},{q:"Does it replace our existing dashboards and BI tool?",a:"For GTM analytics, it replaces the patchwork of CRM reports and hand-built dashboards that produce inconsistent numbers. For genuinely custom modeling, List Views export to CSV and the same data is queryable via MCP, so the dashboard can be the consistent source layer underneath whatever else you run."}]})}),n.jsxs(Ce,{center:!0,children:[n.jsx(De,{style:{margin:"0 0 0.85rem 0"},children:"See your own pipeline in one place."}),n.jsx("p",{className:"it-lead",style:{color:se.muted,margin:"0 auto 1.75rem",maxWidth:"60ch"},children:"Bring one of your own accounts and watch it come together in a single view. Or click through the live tour first."}),n.jsxs("div",{style:{display:"flex",gap:"1.1rem",flexWrap:"wrap",justifyContent:"center",alignItems:"center"},children:[n.jsx(J,{to:Wt,className:"cta cc-large w-button",children:"Request a demo"}),n.jsx(Yh,{label:"Take the interactive tour",href:"/interactive-demo"})]})]})]})}function kge(){return n.jsxs(Wo,{seo:{title:"Deep Research — Analyst answers, as structured data",description:"Ask one question across a whole cohort of deals. Upside reads the calls, emails, and CRM records for every record, then returns the answer as cited, queryable columns.",canonical:"https://upside.tech/platform/deep-research"},children:[n.jsx(Vs,{eyebrow:"Deep Research",headline:"Analyst answers, as structured data.",sub:"Ask one question across a whole cohort of deals. Upside reads the calls, emails, and CRM records for every record, then returns the answer as cited, queryable columns.",visual:n.jsx(yc,{src:"/images/platform/hero/deep-research.png",alt:"One question asked across a cohort of deals, returned as cited, queryable columns."})}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"The problem"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Get the answers that were always in your data."}),n.jsx(We,{children:"The answers live in calls, emails, and notes, but pulling them out meant weeks of manual reading. The questions that mattered went unasked."}),n.jsx(Jw,{headers:["Reading it the old way","Deep Research"],rows:[["Dashboards and BI report only on structured CRM fields","Reads structured and unstructured data together: calls, emails, notes, fields"],["A qualitative question means an analyst reads records one by one","Runs the same question across the whole cohort at once"],["The answer is a one-off deck, stale the day it ships","The answer lands as structured fields you can filter, join, and query"],["”Trust me, I read the calls” with no way to check","Every value cites the evidence it was drawn from"]]})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"How it works"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"How it works"}),n.jsx(We,{children:"The same four steps run on a cohort of any size, from a single account to every closed deal in a quarter."}),n.jsx(aa,{artBg:se.greenLight,visual:n.jsx(zfe,{}),caption:n.jsxs(n.Fragment,{children:["The four steps on the real worked example: a closed-lost question becomes a cited field on every deal, and the cohort rolls up to a finding leadership can act on. The roll-up sentence is a sample synthesis on demo data, marked ",n.jsx("i",{children:"illustrative"}),". Hooli demo org · sample report."]})})]}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"AI fields"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Turn a question into a column."}),n.jsx(We,{children:"AI Fields are user-defined, AI-computed columns. Describe what you want to know in plain language, and Upside computes it across every matching record from the calls, emails, and CRM history, then stores the result as structured data you can filter and aggregate like any other field."}),n.jsx(Rn,{items:[{lead:"Defined in words, returned as data.",icon:"Database",rest:"“Did this deal include a security review?” or “Which competitor was mentioned?” goes in as a sentence;
3663 the output is a queryable value on every record."},{lead:"Materialized, not trapped in a chat.",icon:"Table",rest:"Values land in the data model per entity, so you can filter a closed-lost set by winning competitor the same way you filter by deal size."},{lead:"A new dimension without an engineering sprint.",icon:"Columns3",rest:"Analysts add fields directly. The analytical surface grows as fast as you can describe what to measure."},{lead:"Consistent across the whole set.",icon:"Repeat",rest:"The same definition runs on every record, so the column means the same thing in row 1 and row 500."}]}),n.jsx(aa,{visual:n.jsx(Lfe,{}),caption:n.jsx(n.Fragment,{children:"How one AI-field cell gets computed: the structured CRM field is empty, but the answer is in a call and an email. Upside synthesizes the value and keeps the citations. Competitor name is a sample value. Hooli demo org · sample values."})})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Templates"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Pre-built analyses, no methodology to design."}),n.jsx(We,{children:"Some answers do not need a custom field, they need a standard analysis. Template Analyses ship the methodology and the infrastructure, so a team can run a real analysis the same day they onboard, on demand, in bulk across a filtered set, or on a schedule against new records."}),n.jsxs("div",{className:"pf-grid",style:{marginTop:"1.75rem"},children:[n.jsx("div",{className:"pf-grid-copy",style:{display:"flex",flexDirection:"column",gap:"1rem",minWidth:0},children:[{title:"Milestone Analyses",Icon:Xte,body:"The story of the key moments leading up to an opportunity’s activation: what drew the buyer in, who got involved, and which channels and campaigns contributed, drawn from calls and emails rather than CRM fields. It ships with touchpoint, channel, and campaign citations as structured columns."},{title:"Direction Analyses",Icon:Pte,body:"A computed direction tag on each deal: inbound, meaning they came to you, or outbound, meaning you went and found them. Backed by the same evidence and stored as a queryable dimension you can filter and group by."}].map(e=>n.jsxs("div",{style:{border:`1px solid ${se.border}`,borderRadius:"16px",padding:"1.35rem 1.5rem",background:"#fff"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.65rem",margin:"0 0 0.5rem 0"},children:[n.jsx("span",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:38,height:38,borderRadius:"10px",background:"#e8f5ef",color:se.green,flexShrink:0},children:n.jsx(e.Icon,{size:20,strokeWidth:2,"aria-hidden":!0})}),n.jsx("div",{className:"it-card-title",style:{color:se.text},children:e.title})]}),n.jsx("p",{className:"it-body-sm",style:{color:se.muted,margin:0},children:e.body})]},e.title))}),n.jsx("div",{className:"pf-grid-art",style:{display:"flex",justifyContent:"center",alignItems:"center",minWidth:0},children:n.jsx("div",{className:"pf-art",children:n.jsx(Ufe,{})})})]}),n.jsx(Rn,{items:[{lead:"The influences become dashboard metrics.",icon:"LineChart",rest:"Because every milestone analysis cites its channels and campaigns as structured columns, the dashboard rolls them up: see every opportunity where a given campaign or channel was cited in a milestone analysis, and track that count as a metric like any other."},{lead:"The methodology is built in.",icon:"ClipboardList",rest:"Each analysis type ships with its method and infrastructure already validated, so you get a real analysis the day you onboard instead of a project to design first."}]})]}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"Receipts"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Built to be trusted at scale."}),n.jsx(We,{children:"Qualitative analysis is only useful if you can trust it without re-reading the source, and if it holds up across hundreds of records, not just the first few. Every value Upside computes carries its evidence and lands as real data."}),n.jsx(Rn,{items:[{lead:"Cited to the source.",icon:"FileCheck",rest:"Each field and analysis links to the specific calls, emails, and records it was drawn from, so any value can be checked in one click."},{lead:"Consistent at scale.",icon:"Layers",rest:"Each record is its own parallel job, so a cohort of hundreds reads as cleanly as a cohort of three, instead of one agent drifting as it grinds down a long list."},{lead:"An opinion you can audit.",icon:"Eye",rest:"Outputs carry a stated read, not just a label, so a reviewer can see why the analysis landed where it did."},{lead:"Structured, not prose.",icon:"Columns3",rest:"Results land as real columns you can filter, sort, and j
3663oin against pipeline data, in the dashboard or over MCP, not a one-off spreadsheet."},{lead:"Auto-refresh.",icon:"RefreshCw",coming:!0,rest:"A report keeps itself current as new records match its criteria, instead of being a point-in-time snapshot."}]}),n.jsx(aa,{visual:n.jsx(Bfe,{}),caption:n.jsxs(n.Fragment,{children:["The cohort rolled up to a finding, with the audit trail intact: the bar is the pattern, but every count traces back to cited deals and the exact transcript line. Sample counts on demo data, marked ",n.jsx("i",{children:"illustrative"}),". Hooli demo org · sample values."]})})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Proof"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"What teams found when they asked."}),n.jsx(We,{children:"Two questions a dashboard could never answer, and what the work turned up."}),n.jsx(e1,{cards:[{logo:{src:"/images/cresta_logo_upside_customer.svg",alt:"Cresta is an Upside Customer",height:34},label:"Case study",heading:"Every QBR now runs on Deep Research.",body:"Cresta replaced weeks of manual Gong-transcript review with Deep Research that scores every deal and surfaces why it moved. The work that used to take an analyst weeks now lands in about a day, and it powers every Quarterly Business Review.",chips:["Weeks → 1 day"],link:{label:"Read the Cresta story",href:"/case-studies/cresta-from-attribution-to-ai-deep-research"}},{logo:{src:"/images/assembled_logo_upside_customer.svg",alt:"Assembled is an Upside Customer",height:30},label:"Case study",heading:"Found a growth channel no one had measured.",body:"Running Deep Research across the buyer journey surfaced a complete milestone analysis from Gong that Salesforce never showed, and turned up 30k+ previously hidden contacts and a brand-new AEO growth channel the team had never tracked.",quote:"We are able to see a complete milestone analysis with data pulled from Gong we wouldn’t ever be able to see in Salesforce.",who:n.jsxs(n.Fragment,{children:[n.jsx("strong",{children:"Lindsey Marymont"})," · Head of Demand Generation, Assembled"]}),link:{label:"Read the Assembled story",href:"/case-studies/assembled-from-attribution-guesswork-to-pipeline-surge"}}]})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Platform"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Where Deep Research sits in the platform."}),n.jsx(We,{children:"Deep Research reads from the one reconstructed record every Upside product shares, and its outputs flow back into the surfaces the team already uses, so a finding can be checked against the deals behind it."}),n.jsx(Ks,{cards:[{dir:"Runs on",title:"Data Foundation",body:"The unified, healed history of every account: calls, emails, fields, and buying groups that the analysis reads from.",links:[{label:"Data Foundation",href:"/platform/data-foundation"}]},{dir:"Explore results in",title:"Dashboard",body:"Report pages, account timelines, and list views where AI fields and milestone analyses live alongside the rest of the account story.",links:[{label:"Dashboard",href:"/platform/dashboard"}]},{dir:"Query & build via",title:"MCP & Miniapps",body:"Pull analysis results into Claude, Cursor, or ChatGPT, and deliver a report as an interactive app the team can act on.",links:[{label:"MCP",href:"/platform/mcp"},{label:"Miniapps",href:"/platform/miniapps"}]}]}),n.jsx(Cle,{children:n.jsxs("p",{className:"it-body",style:{color:se.muted,margin:0},children:[n.jsx("span",{className:"it-leadin",style:{color:se.text},children:"Putting it to work?"})," See how teams use it for account and deal intelligence."," ",n.jsx("a",{href:"/use-cases/account-management",style:{color:se.green,fontWeight:600,textDecoration:"none"},children:"Explore the use case →"})]})})]}),n.jsx(Ce,{alt:!0,children:n.jsx(zo,{badge:"FAQs",heading:"Questions? Answers.",sub:"The practical details, and where this fits alongside the systems your team already runs.",items:[{q:"How is this different from our BI tool or dashboards?",a:"BI reports on the structured fields your CRM happened to capture. Deep Research reads the unstructured record too, the calls, emails, and notes where most of the real signal lives, and turns it into structured fields you can then report on. It runs upstream of BI, not instead of it: the columns it produces are joinable with everything you already analyze."},{q:"Does this replace our analyst?",a:"It does the part that never scaled: reading every record. Your analyst stops spending weeks tagging transcripts and starts working from a cohort that is already structured and cited, asking the next question instead of doing the manual pass first."},{q:"How do we know the answers are right?",a:"Every value cites the specific calls, emails, and records it was drawn from, and carries a stated opinion rather than a bare label. You can check any cell in one click, and because the same definition runs on every record, the column means the same thing across the whole set."},{q:"Can it handle a large cohort without the quality dropping off?",a:"Yes. Each record is analyzed as its own focused job, run in parallel, so the last deal in a set of hundreds gets the same depth as the first. That is the difference between a real cohort answer and a summary that thins out toward the bottom."},{q:"What does it need from us to run?",a:"It runs on the Upside data foundation. Connecting your systems is an OAuth step, not a data-engineering project, and once your calls, emails, and CRM data are flowing you pick a cohort and a question and the analysis runs."}]})}),n.jsx(Xs,{heading:"Ask the question you stopped asking.",sub:"Bring a cohort you have always wondered about, a quarter of closed-lost deals, a segment that keeps stalling, and watch the answer come back as cited data."})]})}const XP={label:"Explore an example report →",src:"/embeds/pipedash-mta-dashboard.html",title:"Pipedash — example multi-touch attribution report"};function jge(){return n.jsxs(Wo,{seo:{title:"Pipedash — Attribution that survives scrutiny",description:"Every multi-touch model splits credit across touchpoints. Pipedash decides that split by reasoning over the full record of a qualified opportunity, and cites the evidence for every dollar.",canonical:"https://upside.tech/platform/pipedash"},children:[n.jsx(Vs,{eyebrow:"Pipedash",headline:"Attribution that survives scrutiny.",sub:"Every multi-touch model splits credit across touchpoints. Pipedash decides that split by reasoning over the full record of a qualified opportunity, and cites the evidence for every dollar.",extraCta:n.jsx(iP,{...XP}),visual:n.jsx(yc,{src:"/images/platform/hero/pipedash.png",alt:"Multi-touch attribution splitting credit across a qualified opportunity, with evidence cited for every dollar."})}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"The problem"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"There has never been a golden age of B2B attribution… until now."}),n.jsx(We,{children:"Legacy multi-touch models were a reasonable answer for an old game. They assume the CRM record is the truth, then pour position-based weights over it: 40% to the first touch, 40% to the last, the middle splits the rest, and so on. But a fourteen-month enterprise deal with three logged touchpoints isn’t a data set; it’s a rounding error with a dashboard."}),n.jsx(Jw,{headers:["Legacy multi-touch models","Pipedash"],rows:[["Only credit what the CRM happened to log","Reconstructs the full record, including what was never logged, and cites it"],["Credit follows position: first touch, last touch, fixed weights","Credit follows evidence: reasoning over what actually moved the deal"],["Allocations are a model assumption","Allocations trace to specific, cited touchpoints"],["Falls apart the moment a director drills in","Built to survive the drill-in"]]})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"How it works"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"How Pipedash works"}),n.jsx(Afe,{steps:[{num:"STEP 1",label:"Reconstruct the deal",heading:"Reconstruct the deal",body:"Pipedash starts from Upside’s data foundation: every email, meeting, event, web visit, and CRM record for the opportunity, unified into one labeled timeline, including the buying group members nobody logged."},{num:"STEP 2",label:"Reason like an analyst team",heading:"Reason like an analyst team",body:"A team of independent AI analysts each reads the full history and argues for an allocation. A consensus judge weighs the quality of their reasoning, not just the vote count, and escalates when they disagree. Every allocation ships with the reasoning behind it."},{num:"STEP 3",label:"Report in dollars",heading:"Report in dollars",body:"The output is a full attribution report: 100% of credit allocated across touchpoints and cited. What genuinely can’t be tied to a discrete touchpoint, like brand awareness, still earns credit as a non-touchpoint deal influence rather than being forced into a fal
3663se number."}]})]}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"Methodology"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Credit follows the evidence, not the calendar."}),n.jsx(We,{children:"Position-based models hand credit to whoever showed up first or last. Pipedash reads the actual deal history and allocates credit the way the touchpoints actually worked together to move the deal forward: the field event, the SDR sequence, and the paid search that each did part of the job."}),n.jsx(Rn,{items:[{lead:"Dollars, not points.",rest:"Credit is allocated against deal value, so outputs read as input dollars mapped to output dollars, the framing a channel-level ROI model, a budget review, or a board deck actually needs.",icon:"Calculator"},{lead:"A fair read on every program.",rest:"Because credit reflects what actually moved the deal, the programs doing real work, including the early, hard-to-track ones, show up accurately instead of being eclipsed by whatever got the last click.",icon:"Eye"},{lead:"One model, every team.",rest:"Marketing, SDR, sales, and partner credit come out of a single shared allocation, taking the politics out of “who sourced this deal.”",icon:"Users"},{lead:"Prescriptive, not just descriptive.",rest:"Because allocations aggregate cleanly, Pipedash can support reallocation recommendations: where the next dollar of spend would have earned more.",icon:"Target"}]}),n.jsx(aa,{visual:n.jsx(Tfe,{}),caption:n.jsxs(n.Fragment,{children:[n.jsx("span",{style:{fontWeight:700,color:se.text},children:"Same deal · Prime Analytics, $70.7K."})," The same closed deal, two ways. Last-touch hands ",n.jsx("strong",{children:"100% to the demo form"}),"; Pipedash gives that form $0 and credits the ",n.jsx("strong",{children:"5-year webinar program (30%)"})," as the real source, with the rest spread across what actually moved the deal. Same 100%, sized by evidence — not by which touch landed last."]})})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Signals"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Every signal counts, even the ones the CRM missed."}),n.jsx(We,{children:"Most attribution systems only credit what was logged. Pipedash works from three kinds of signal:"}),n.jsx(Ws,{cards:[{title:"Tracked",body:"Captured in your source systems: CRM, marketing automation (HubSpot, Marketo), and the like. The touchpoints already on the record."},{title:"Extracted",body:"Never logged as a touchpoint, but recovered from unstructured data: a third-party recommendation surfaced from a sales conversation, a stakeholder pulled out of a forwarded email thread. Real engagement the systems never recorded."},{title:"Inferred",body:"No discrete touchpoint exists or ever could, like brand awareness or readiness to buy, but signals indicate it was in play and part of why the deal happened."}]}),n.jsx(We,{style:{marginTop:"1.5rem"},children:"When a deal closes after fourteen months and the CRM shows three touches, the tracked layer alone tells a misleading story. Extracted and inferred signals fill in what actually happened: ungated content that surfaces when it’s mentioned in a reply, the event that drove no trackable conversion but shaped the deal anyway."}),n.jsx(aa,{visual:n.jsx(_fe,{}),caption:n.jsxs(n.Fragment,{children:[n.jsx("span",{style:{fontWeight:700,color:se.text},children:"Illustrative · from the sample report."})," How the three signal types show up ",n.jsx("strong",{children:"in the product"}),": each credit line carries its evidence in a hover tooltip — Tracked, Extracted, or Inferred. Written as the evidence reads in the attribution report (clean records, not marketing); from the Prime Analytics sample deal, lightly edited."]})})]}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"Single source"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"And when someone demands a single source, give them the one you can defend."}),n.jsx(We,{children:"Sometimes the CFO or the board wants one source per deal. Pipedash gives you the one that survives scrutiny, separating the hand-raise (the moment the buyer acted: the demo request, the inbound email) from the source (what actually drove them to act: the field event, the referral, the content). When you name a single source, you name the cause, not the last click."}),n.jsx(aa,{visual:n.jsx(Mfe,{}),caption:n.jsxs(n.Fragment,{children:[n.jsx("span",{style:{fontWeight:700,color:se.text},children:"Existing homepage component."})," The “everyone claims credit, the math doesn’t add up” thread — the moment the CFO stops trusting the dashboards and demands one real number per deal. Numbers scaled to the enterprise ICP (claimed ≈ 2× the real pipeline)."]})}),n.jsx(Rn,{items:[{lead:"The cause, not the coincidence.",rest:"The source is whatever truly drove the buyer to act, not the tracked touch that happened to land right before the form.",icon:"Crosshair"},{lead:"A single source you can defend.",rest:"Both the hand-raise and the source trace to specific evidence, so the one number you report up stands on the same footing as the full attribution.",icon:"ShieldCheck"}]}),n.jsx(aa,{visual:n.jsx(Efe,{}),caption:n.jsxs(n.Fragment,{children:[n.jsx("span",{style:{fontWeight:700,color:se.text},children:"Real example · report on file."})," The same Prime Analytics deal in the report’s ",n.jsx("strong",{children:"Opportunity Source"})," view (toggled from Multi-Touch up top): the full Dealprint collapses to the one defensible source — the 5-year webinar program — while the demo-request form that “converted” stays at ",n.jsx("strong",{children:"$0"})," (the hand-raise, not the cause). Flip back to Multi-Touch and credit fans back out across every touchpoint."]})})]}),n.jsx(Ce,{center:!0,children:n.jsx(Nd,{quote:"Our sales leaders were VERY excited about this, and they can be hard to impress. They had me bring up a couple deals that they knew, and they’re like, ‘oh, it’s not going to pick up this one.’ And there’s one where it had picked up that someone had a connection from, like, an alumni association. They said: ‘that was it! How did it know?!’",cite:"— Marketing Operations leader, enterprise logistics customer"})}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Roll-ups"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"The same numbers, rolled up to the channel, team, campaign, and more."}),n.jsx(We,{children:"Every per-deal allocation aggregates the way you’d expect from any multi-touch model: into channel ROI, team contribution, campaign performance, and so on. The difference isn’t the roll-up, it’s that the numbers underneath are reasoned from evidence and cited. So the channel report survives the same drill-in a single deal does, all the way back to the touchpoint."}),n.jsx(aa,{visual:n.jsx(Rfe,{}),caption:n.jsxs(n.Fragment,{children:[n.jsx("span",{style:{fontWeight:700,color:se.text},children:"Real aggregate · report on file."})," The same per-deal allocations roll up into the channel / team / campaign views leadership budgets from — real numbers from the sample report. Same math as a single Dealprint, zoomed out, and every bar drills back down to the cited deal
3663s underneath."]})})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Platform"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Attribution that runs on the whole record."}),n.jsx(We,{children:"Pipedash reasons over the same reconstructed record every other Upside product does, which is what lets a number trace all the way back to the touchpoint behind it."}),n.jsx(Ks,{cards:[{dir:"Runs on",title:"Data Foundation",body:"The unified touchpoint spine and buying-group detection Pipedash reads from.",links:[{label:"Data Foundation",href:"/platform/data-foundation"}]},{dir:"Explore results in",title:"Dashboard",body:"Account timelines and report cards where attribution lives alongside the rest of the account story.",links:[{label:"Dashboard",href:"/platform/dashboard"}]},{dir:"Build & query via",title:"MCP & Miniapps",body:"Query attribution from Claude or Cursor; deliver results as interactive apps for the team.",links:[{label:"MCP",href:"/platform/mcp"},{label:"Miniapps",href:"/platform/miniapps"}]}]})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Proof"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Proof the numbers survive scrutiny."}),n.jsx(We,{children:"Two teams that pointed full-journey attribution at deals they thought they understood, and changed what they did next."}),n.jsx(e1,{cards:[{logo:{src:"/images/graphite_logo_upside_customer.svg",alt:"Graphite is an Upside Customer",height:34},label:"53% of deals came from referrals standard systems never saw",heading:"$10M+ referral revenue uncovered",body:"Graphite’s last-touch reporting showed no value from events, so they stopped running them. Full-journey reconstruction surfaced $10M+ in hidden referral revenue and traced over half of all deals back to referrals, and the events program restarted on the evidence.",chips:[],quote:"We stopped doing events because we didn’t have data saying they were impactful. With Upside, we can see events are actually a massive flywheel for our business.",who:n.jsxs(n.Fragment,{children:[n.jsx("strong",{children:"Ethan Smith"})," · CEO & Founder, Graphite"]}),link:{label:"Read the Graphite story",href:"/case-studies/graphite-uncovering-real-channels-behind-inbound-growth"}},{logo:{src:"/images/cresta_logo_upside_customer.svg",alt:"Cresta is an Upside Customer",height:34},label:"Attribution that holds up on messy enterprise cycles",heading:"Defensible, deal by deal",body:"Long, multi-stakeholder enterprise deals are exactly where tidy models break. Cresta’s reconstruction holds up against the deals their team actually remembers.",chips:[],quote:"Real life is messy. Enterprise cycles are messy. Upside accurately reflects that messy reality, which I think is rare and was impossible before.",who:n.jsxs(n.Fragment,{children:[n.jsx("strong",{children:"Stephen Daniels"})," · VP, GTM & Strategic Operations, Cresta"]}),link:{label:"Read the Cresta story",href:"/case-studies/cresta-from-attribution-to-ai-deep-research"}}]})]}),n.jsx(Ce,{alt:!0,children:n.jsx(zo,{badge:"FAQs",heading:"Questions? Answers.",sub:"The practical details, and where this fits alongside the systems your team already runs.",items:[{q:"How is this different from the attribution tools we’ve already tried?",a:"Tools like the ones you’ve probably used apply positional weights to whatever the CRM logged. Pipedash starts earlier, reconstructing what actually happened on the deal, including signals the CRM never captured, then allocating credit by reasoning over that full record. The difference shows up the first time someone asks “why did this channel get credit?” and the answer is a citation instead of a model assumption."},{q:"Does credit really add up to 100%?",a:"Yes: per deal, across every touchpoint, including across the independent consistency runs. Like any multi-touch model the allocation sums to 100%. What’s different is that Pipedash decides the split by reasoning over evidence, so the numbers stay comparable and aggregate cleanly."},{q:"What happens when the evidence is thin?",a:"Pipedash tells you. Anything that can’t be tied to a citable touchpoint goes into an explicit unattributed pool with labeled, probabilistic subdivisions, not into false-precision line items. The pool’s size is itself a useful read on how much of your pipeline creation is happening outside what gets logged."},{q:"Can finance actually audit this?",a:"Every allocation traces to 
3663specific touchpoints; every analysis documents how many passes ran, where they diverged, and why the synthesis landed where it did. It’s the same standard of rigor finance applies to other material decisions."},{q:"What does Pipedash need from us to run?",a:"Pipedash runs on the Upside data foundation, which connects to your existing systems in a few OAuth clicks: no field mapping, no migration. Once your data is flowing, analyses run on the deals you choose."}]})}),n.jsx(Xs,{heading:"See a deal you thought you understood.",sub:"The fastest way to evaluate Pipedash is to watch it reconstruct a deal you already know the story of.",extraCta:n.jsx(iP,{...XP})})]})}const oS="#2d6a4f",sS="#509A79",QP="#1b1f1c",Sge="ui-monospace, 'SF Mono', Menlo, Consolas, monospace",Cge=()=>{const e=["Claude","ChatGPT","Cursor","Notion AI","Glean","Dust"],t={Claude:"/images/llm-claude.webp",ChatGPT:"/images/llm-chatgpt.jpg",Cursor:"/images/llm-cursor.png","Notion AI":"/images/llm-notion.png",Glean:"/images/llm-glean.png",Dust:"/images/llm-dust.png"},a=92,i=64,r=48,o=10,l=e.length,d=l*r+(l-1)*o,u=d/2,h=m=>m*(r+o)+r/2;return n.jsxs("div",{className:"op-flow",style:{width:620,maxWidth:"100%",fontFamily:"Geist, sans-serif",display:"flex",alignItems:"center",gap:0},children:[n.jsx("div",{className:"op-clients",style:{flex:"0 0 auto",width:168,display:"flex",flexDirection:"column",gap:o},children:e.map(m=>n.jsxs("div",{style:{height:r,boxSizing:"border-box",display:"flex",alignItems:"center",gap:"0.6rem",background:"#fff",border:"1px solid #e6ebe7",borderRadius:"10px",padding:"0 0.8rem"},children:[t[m]?n.jsx("img",{src:t[m],alt:"",style:{width:22,height:22,borderRadius:5,objectFit:"contain",flexShrink:0}}):n.jsx("span",{style:{width:22,height:22,borderRadius:5,background:"#eef1f4",color:"#3a4250",display:"inline-flex",alignItems:"center",justifyContent:"center",fontSize:"0.8rem",fontWeight:700,flexShrink:0},children:m.trim()[0]}),n.jsx("span",{style:{fontSize:"0.92rem",fontWeight:600,color:QP,whiteSpace:"nowrap"},children:m})]},m))}),n.jsx("svg",{className:"op-fan-h",width:a,height:d,viewBox:`0 0 ${a} ${d}`,style:{flex:"0 0 auto"},"aria-hidden":"true",children:e.map((m,f)=>{const y=h(f);return n.jsx("path",{d:`M 0 ${y} C ${a*.5} ${y}, ${a*.5} ${u}, ${a} ${u}`,fill:"none",stroke:sS,strokeWidth:2,strokeOpacity:.8},f)})}),n.jsxs("svg",{className:"op-fan-v",width:"24",height:"30",viewBox:"0 0 24 30","aria-hidden":"true",style:{display:"none",flexShrink:0},children:[n.jsx("path",{d:"M 12 0 L 12 22",fill:"none",stroke:sS,strokeWidth:2,strokeOpacity:.8}),n.jsx("path",{d:"M 6 16 L 12 23 L 18 16",fill:"none",stroke:sS,strokeWidth:2,strokeOpacity:.8,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsxs("div",{style:{flex:"0 0 auto",background:"#fff",border:`1.5px solid ${oS}`,borderRadius:"14px",padding:"0.95rem 1rem",textAlign:"center",boxShadow:"0 2px 10px rgba(45,106,79,0.13)",minWidth:132},children:[n.jsx("div",{style:{display:"inline-flex",color:oS,marginBottom:"0.3rem"},children:n.jsx(O$,{size:24,strokeWidth:2})}),n.jsx("div",{style:{fontFamily:"'Geist', sans-serif",fontSize:"1.15rem",fontWeight:700,color:oS,lineHeight:1.1},children:"Upside MCP"}),n.jsx("div",{style:{fontFamily:Sge,fontSize:"0.82rem",color:"#5f8a76",marginTop:"0.25rem"},children:"one endpoint"})]}),n.jsx("svg",{className:"op-grey-h",width:i,height:d,viewBox:`0 0 ${i} ${d}`,style:{flex:"0 0 auto"},"aria-hidden":"true",children:n.jsx("path",{d:`M 0 ${u} L ${i} ${u}`,fill:"none",stroke:"#c4ccc7",strokeWidth:2})}),n.jsxs("svg",{className:"op-grey-v",width:"24",height:"30",viewBox:"0 0 24 30","aria-hidden":"true",style:{display:"none",flexShrink:0},children:[n.jsx("path",{d:"M 12 0 L 12 22",fill:"none",stroke:"#c4ccc7",strokeWidth:2}),n.jsx("path",{d:"M 6 16 L 12 23 L 18 16",fill:"none",stroke:"#c4ccc7",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})]}),n.jsxs("div",{style:{flex:"0 0 auto",width:150,background:"#fff",border:"1px solid #e6ebe7",borderRadius:"14px",padding:"0.9rem",textAlign:"center"},children:[n.jsx("div",{style:{display:"inline-flex",color:"#3a4250",marginBottom:"0.35rem"},children:n.jsx(Lw,{size:24,strokeWidth:1.75})}),n.jsx("div",{style:{fontSize:"0.98rem",fontWeight:700,color:QP,lineHeight:1.2},children:"Healed data foundation"})]})]})};function Age(){return n.jsxs(Wo,{seo:{title:"MCP — Your data, in the AI tools you already use",description:"Upside’s MCP interface connects Claude, ChatGPT, Cursor, and the rest of your AI stack to one endpoint over the same healed go-to-market data foundation that powers every Upside dashboard and report. Ask, build, and ship without leaving your workflow.",canonical:"https://upside.tech/platform/mcp"},children:[n.jsx(Vs,{eyebrow:"MCP",headline:"Your data, in the AI tools you already use.",sub:"Upside’s MCP interface connects Claude, ChatGPT, Cursor, and the rest of your AI stack to one endpoint over the same healed go-to-market data foundation that powers every Upside dashboard and report. Ask, build, and ship without leaving your workflow.",secondary:{label:"See the tool list →",href:"#tools"},visual:n.jsx(yc,{src:"/images/platform/hero/mcp.png",alt:"An Upside MCP session inside Claude, querying the healed GTM data foundation."})}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"How it works"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"One pipe, every AI tool, the same foundation."}),n.jsx(We,{children:"Whatever AI client your team reaches for connects to the same MCP endpoint, and that endpoint reads the same healed foundation as the rest of Upside. Connect once, and the surface area is whatever your team can build."}),n.jsx("div",{style:{marginTop:"2rem",display:"flex",justifyContent:"center"},children:n.jsx("div",{style:{background:"transparent",padding:"2rem",width:"100%",maxWidth:"760px",display:"flex",justifyContent:"center",overflowX:"auto"},children:n.jsx(Cge,{})})}),n.jsx(_le,{cards:[{num:"1",label:"CONNECT",heading:"Authorize once",body:"Connect your AI client to Upside over OAuth. It acts as you, sees only your workspace, and the connection can be revoked at any time."},{num:"2",label:"ASK",heading:"Work in plain language",body:"Ask questions, search conversations, and run analyses in the same thread where you are already reasoning. The agent reads your schema before it queries."},{num:"3",label:"BUILD",heading:"Ship it to the team",body:"Turn a useful answer into a published miniapp, or save a convention so the next query gets it right. The work persists past the conversation."}]})]}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"The problem"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Point your AI at data that’s actually correct."}),n.jsx(We,{children:"Pointed straight at the CRM, an AI client reasons over duplicated contacts and unlogged touchpoints. The answer comes back confident and wrong."}),n.jsx(Jw,{headers:["Point an AI client straight at your systems","Connect the client through Upside’s MCP"],rows:[["Stitches Salesforce, HubSpot, Gong, and the warehouse together on the fly, however the model guesses","Reads one pre-compiled record that already reconciles every source"],["Reasons over duplicated contacts and conflicting fields","Reasons over a deduplicated, healed layer"],["Can only see what a rep remembered to log","Searches the emails and transcripts the CRM never captured"],["Guesses at your schema and field conventions","Reads your schema and conventions before querying"],["A separate, ungoverned path for every tool","One connection, authenticated as you, scoped to your workspace"]]}),n.jsx(We,{style:{marginTop:"1.5rem"},children:"Upside does the reconciling first. Instead of pointing the model at a dozen systems and hoping it untangles them, you hand it one legible, pre-compiled record of what actually happened. The AI tool is the interface; Upside is the data layer underneath."})]}),n.jsxs(Ce,{alt:!0,id:"tools",children:[n.jsx(Ie,{children:"The toolbox"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"The Upside toolbox for agents."}),n.jsx(We,{children:"The MCP interface is a real set of tools, not a black box. Each one is the same building block our own agents use, exposed to whatever client you connect. Here is the working roster."}),n.jsx(Mle,{cards:[{heading:"Ask the librarian first",toolName:"consult_librarian.",body:"Before the agent queries, it asks Radiant for this org’s conventions, the right field names, your fiscal calendar, stage definitions that differ from the defaults, so the query runs on your ground truth instead of generic guesses. Enforced as a mandatory step, not a suggestion."},{heading:"Query in plain language",toolName:"execute_sql.",body:n.jsxs(n.Fragment,{children:["Ask “which enterprise accounts had no meetings in Q1?” and the agent writes the SQL, runs it against your unified warehouse, and returns the answer in the thread. No SQL required from you, and full introspection (",n.jsx("span",{style:{fontFamily:"ui-monospace, 'SF Mono', Menlo, Consolas, monospace"},children:"SHOW TABLES"}),", ",n.jsx("span",{style:{fontFamily:"ui-monospace, 'SF Mono', Menlo, Consolas, monospace"},children:"DESCRIBE"}),") so the agent can orient first."]})},{heading:"Search the unstructured record",toolName:"search_communications.",body:"Full-text and semantic search across ingested emails and meeting transcripts. A search for “champion going dark” finds the right exchange even when those words never appear, linked back to the account, contact, and opportunity."},{heading:"Read the platform docs",toolName:"list_docs · read_doc.",body:"The agent pulls Upside’s schema and tool documentation on its own, so it understands your field names and data rules instead of guessing. Fewer silent errors, no pasting schema into every prompt."},{heading:"Teach it your conventions",toolName:"create_knowledge_entry · list_knowledge_entr
3663ies.",body:"When a query gets something wrong, save the correct convention as a knowledge entry, in context, from the same thread. The librarian reads it on the next query, so the mistake does not happen twice."},{heading:"Build and publish miniapps",toolName:"workspace_create · workspace_write_file · miniapp_create · miniapp_version_create.",body:"Build the app’s files in an isolated workspace, then deploy them as a versioned, shareable dashboard, scoped to specific users or the whole org, built from the conversation."},{heading:"Trigger an analysis over a cohort",comingSoon:!0,toolName:"trigger_remote_analysis.",body:"Start any of Upside’s registered analyses, from Pipedash attribution to Deep Research report types, over a cohort scoped by a SQL query or a list of IDs, without leaving your AI tool. Results will run in Upside and land back there, cited, alongside everything else."}]})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Proof"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Already in production."}),n.jsx(We,{children:"Two teams connected the MCP to tools they already ran, and put it to work inside a week."}),n.jsx(e1,{cards:[{logo:{src:"/images/comply-logo.png",alt:"Comply",height:46},label:"Case study",heading:"Three miniapps, built in minutes.",body:"Comply’s ops team built three AI miniapps directly on the Upside MCP and demoed them at a GTM Engineers webinar. No BI ticket, no engineers. All of it ran on one healed record: 27.5M+ touchpoints across 18 self-serve users.",chips:["27.5M+ touchpoints unified","18 self-serve users"],quote:"Honestly, the first time I found a huge use case for AI for me. A tool that has the data organized, and I can query it thinking the way I think.",who:n.jsxs(n.Fragment,{children:[n.jsx("strong",{children:"Carl Gunlefinger"})," · Senior Marketing Operations Manager, Comply"]}),link:{label:"Read the Comply story",href:"/case-studies/comply-from-unfiltered-salesforce-data-to-marketing-intelligence"}},{logo:{src:"/images/assembled_logo_upside_customer.svg",alt:"Assembled is an Upside Customer",height:30},label:"Case study",heading:"Their own AI tool, twice as accurate.",body:"Assembled pointed Dust, the AI tool their team already ran, at the Upside MCP. Pipeline queries came back about 2x more accurate and complete than querying Salesforce directly. In the first week, Dust made 2,300+ MCP calls across the CEO, marketing, and ops.",chips:["~2x more accurate vs. Salesforce","2,300+ MCP calls, week one"],quote:"Things that used to take me hours to pull, I’m getting them in Upside in minutes. Instead of having to pick what questions to ask based on how long it will take to get a verifiable answer, with a quick MCP search, I’m uncovering issues I didn’t even know existed.",who:n.jsxs(n.Fragment,{children:[n.jsx("strong",{children:"Lindsey Marymont"})," · Head of Demand Generation, Assembled"]}),link:{label:"Read the Assembled story",href:"/case-studies/assembled-from-attribution-guesswork-to-pipeline-surge"}}]})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Platform"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"One surface of the platform."}),n.jsx(We,{children:"MCP is how you reach Upside from outside Upside, over the same reconstructed foundation the dashboard and the reports read from, so a question asked over MCP comes back matching what the team sees in the UI."}),n.jsx(Ks,{cards:[{dir:"Runs on",title:"Data Foundation",body:"The unified, healed record every MCP query reads from.",links:[{label:"Data Foundation",href:"/platform/data-foundation"}]},{dir:"Build & publish via",title:"Miniapps",body:"Turn a query into a shareable dashboard, deployed from your AI client.",links:[{label:"Miniapps",href:"/platform/miniapps"}]},{dir:"Explore results in",title:"Dashboard",body:"The same data, as pre-built explorers and report cards for the whole team.",links:[{label:"Dashboard",href:"/platform/dashboard"}]},{dir:"Coached by",title:"Radiant",body:"The knowledge library your agent consults before acting. Manage the library over MCP today; the active memory layer is coming.",links:[{label:"Radiant",href:"/platform/radiant"}]},{dir:"Run analyses with",title:"Deep Research",body:"Structured, cited analyses you can trigger and read back.",links:[{label:"Deep Research",href:"/platform/deep-research"}]},{dir:"See it in a workflow",title:"AI-native GTM workflows",body:"How teams wire Upside into the AI tools they already run.",links:[{label:"AI-native GTM workflows",href:"/use-cases"}]}]})]}),n.jsx(Ce,{alt:!0,children:n.jsx(zo,{badge:"FAQs",heading:"Questions? Answers.",sub:"The practical details, and where this fits alongside the systems your team already runs.",items:[{q:"How is this different from just connecting Claude to S
3663alesforce?",a:"The connection is the easy part; the data underneath is the difference. Pointed straight at the CRM, an AI client reasons over duplicated contacts, half-filled fields, and touchpoints nobody logged. Upside heals and unifies that data first, and adds the emails and transcripts the CRM never captured, so the same question is answered against a clean, unified record instead of raw CRM exports."},{q:"Which AI tools can connect?",a:"Any MCP-compatible client. Today that includes Claude, ChatGPT, Cursor, Notion AI, Glean, and Dust, and the list grows as the standard does. The same endpoint serves all of them, so there is nothing to rebuild per tool."},{q:"Do I need to know SQL?",a:"No. You ask in plain language and the agent writes and runs the read-only SQL for you. If you do write SQL, the full read-only surface is there, including schema introspection, so technical users can script and reproduce analyses."},{q:"What can the AI actually see, and can it change anything?",a:"It sees only the workspace of the user who connected it, and queries run read-only, so they can never modify your data. Connections authenticate as you over OAuth and can be revoked at any time. There is no shared service account."},{q:"Does this replace the dashboard?",a:"No. It’s the same data foundation reached a different way. Some of your team will live in the dashboard’s explorers and report cards; others will stay in their AI tools and query over MCP. Both read the same source of truth, so the numbers match."}]})}),n.jsx(Xs,{heading:"Connect Upside to the tools you already use.",sub:"Ask your own hardest question, in your own AI client, against your own data.",secondary:{label:"See the tool list →",href:"#tools"}})]})}const Mo="#2d6a4f",Tge="#347BD1",MH="#64748B",p1="#1b1f1c",cp="#5f6563",_ge="0 8px 30px rgba(27, 31, 28, 0.08)",EH={background:"#fff",borderRadius:"14px",boxShadow:_ge,fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"480px"},Mge=e=>({margin:0,fontSize:"0.744rem",fontWeight:700,color:e,letterSpacing:"0.05em",textTransform:"uppercase"}),Ege="ui-monospace, 'SF Mono', Menlo, Consolas, monospace",RH="#e6ebe7",ZM={fontSize:"0.68rem",fontWeight:700,letterSpacing:"0.05em",textTransform:"uppercase",color:cp},Rge=()=>n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[n.jsx("span",{style:ZM,children:"Your prompt"}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",border:"1px solid #d7dde1",borderRadius:"12px",background:"#fff",padding:"0.5rem 0.5rem 0.5rem 0.8rem"},children:[n.jsx("span",{style:{flex:1,minWidth:0,fontSize:"0.9rem",color:"#3a4250",lineHeight:1.4,fontFamily:"Geist, sans-serif"},children:"Build a win-back tracker for our closed-lost deals"}),n.jsx("span",{"aria-hidden":"true",style:{flex:"0 0 auto",display:"inline-flex",alignItems:"center",justifyContent:"center",width:28,height:28,borderRadius:999,background:Mo,color:"#fff"},children:n.jsx(vte,{size:16,strokeWidth:2.5})})]})]}),Nge=()=>{const e=["execute_sql","workspace_write_file","miniapp_create"];return n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[n.jsx("span",{style:ZM,children:"Agent · MCP tool calls"}),n.jsx("div",{style:{border:`1px solid ${RH}`,borderRadius:"12px",background:"#fff",padding:"0.7rem 0.8rem",display:"flex",flexDirection:"column",gap:"0.42rem"},children:e.map(t=>n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",fontFamily:Ege,fontSize:"0.82rem"},children:[n.jsx("span",{"aria-hidden":"true",style:{flex:"0 0 auto",display:"inline-flex",alignItems:"center",justifyContent:"center",width:14,height:14,borderRadius:999,background:"#e3f0e9",color:Mo,fontSize:"0.55rem",fontWeight:900},children:"✓"}),n.jsxs("span",{style:{color:p1,fontWeight:700,minWidth:0,wordBreak:"break-word"},children:[t,n.jsx("span",{style:{color:"#b3b9c2"},children:"()"})]})]},t))})]})},Oge=()=>n.jsxs("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:[n.jsx("span",{style:ZM,children:"Live in the dashboard"}),n.jsxs("div",{style:{border:`1px solid ${RH}`,borderRadius:"12px",background:"#fff",overflow:"hidden"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.35rem",padding:"0.45rem 0.65rem",borderBottom:"1px solid #eef1ef",background:"#fafbfa"},children:[n.jsx("span",{style:{width:7,height:7,borderRadius:999,background:"#e0e4e1"}}),n.jsx("span",{style:{width:7,height:7,borderRadius:999,background:"#e0e4e1"}}),n.jsx("span",{style:{width:7,height:7,borderRadius:999,background:"#e0e4e1"}}),n.jsx("span",{style:{marginLeft:"0.3rem",fontSize:"0.72rem",fontWeight:700,color:cp},children:"Upside dashboard"})]}),n.jsxs("div",{style:{padding:"0.75rem 0.8rem",display:"flex",alignItems:"center",gap:"0.6rem"}
3663,children:[n.jsx("span",{style:{flex:"0 0 auto",width:34,height:34,borderRadius:"9px",background:"#e8f4ed",color:Mo,display:"inline-flex",alignItems:"center",justifyContent:"center"},children:n.jsx(M$,{size:18,strokeWidth:2,"aria-hidden":"true"})}),n.jsxs("div",{style:{minWidth:0,flex:1},children:[n.jsx("div",{style:{fontSize:"0.9rem",fontWeight:700,color:p1,lineHeight:1.2},children:"Win-Back Tracker"}),n.jsx("div",{style:{fontSize:"0.74rem",color:cp,fontFamily:"Geist, sans-serif"},children:"v3 · shared with the team"})]}),n.jsxs("span",{style:{flex:"0 0 auto",display:"inline-flex",alignItems:"center",gap:"0.25rem",fontSize:"0.7rem",fontWeight:700,color:Mo,background:"#e3f0e9",borderRadius:"999px",padding:"0.15rem 0.5rem"},children:[n.jsx(C$,{size:11,strokeWidth:3,"aria-hidden":"true"})," Published"]})]})]})]}),Pge=()=>{const e=(t,a,i,r,o)=>n.jsxs("div",{style:{flex:1,minWidth:0,background:"#fff",border:`1px solid ${o?"#e6ebe7":"#bcdccb"}`,borderRadius:"14px",padding:"1.1rem 1.2rem",display:"flex",flexDirection:"column",gap:"0.6rem"},children:[n.jsx("p",{style:Mge(t),children:a}),n.jsx("p",{style:{margin:0,fontSize:"1.1rem",fontWeight:700,color:p1,lineHeight:1.25},children:i}),n.jsx("p",{style:{margin:0,fontSize:"0.94rem",color:o?cp:Mo,fontWeight:600,lineHeight:1.45},children:r})]});return n.jsx("div",{style:{...EH,padding:"1.4rem 1.5rem",maxWidth:"600px"},children:n.jsxs("div",{className:"ovm-row",style:{display:"flex",alignItems:"stretch",gap:"0.85rem"},children:[e(MH,"The old way","File a request → BI backlog","Weeks later: a static export, already stale",!0),n.jsx("div",{className:"ovm-vs",style:{display:"flex",alignItems:"center",color:"#b9c0c8",fontWeight:700,fontSize:"1rem",fontFamily:"'Geist', sans-serif"},children:"vs"}),e(Mo,"A miniapp","Describe it → live app","Same day, querying current data",!1)]})})},Ige=()=>{const e=[{Icon:T$,accent:MH,soft:"#eef1f4",border:"#dde2e6",h:"Shareable report",d:"A point-in-time snapshot, published and sent as a link.",tag:"Static",level:1},{Icon:oM,accent:Tge,soft:"#eaf2fb",border:"#bcd2ec",h:"Report with live data",d:"Re-queries the foundation each time it opens, so the numbers stay current.",tag:"Live data",level:2},{Icon:lne,accent:Mo,soft:"#e8f4ed",border:"#bcdccb",h:"Full interactive tool",d:"Filters, inputs, and drill-downs the team operates day to day.",tag:"Interactive",level:3}];return n.jsx("div",{style:{...EH,padding:"1.5rem 1.6rem",maxWidth:"560px"},children:n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.8rem"},children:e.map(t=>{const a=t.Icon;return n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"1rem",background:"#fff",border:`1px solid ${t.border}`,borderRadius:"14px",padding:"0.95rem 1.05rem"}
3663,children:[n.jsx("span",{style:{flex:"0 0 auto",width:42,height:42,borderRadius:"11px",background:t.soft,color:t.accent,display:"inline-flex",alignItems:"center",justifyContent:"center"},children:n.jsx(a,{size:21,strokeWidth:2,"aria-hidden":"true"})}),n.jsxs("div",{style:{minWidth:0,flex:1},children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",gap:"0.5rem",flexWrap:"wrap"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.02rem",fontWeight:700,color:t.accent,lineHeight:1.2},children:t.h}),n.jsx("span",{style:{fontFamily:"Geist, sans-serif",fontSize:"0.68rem",fontWeight:700,letterSpacing:"0.04em",textTransform:"uppercase",color:t.accent,background:t.soft,borderRadius:"5px",padding:"0.1rem 0.4rem"},children:t.tag})]}),n.jsx("p",{style:{margin:"0.25rem 0 0 0",fontSize:"0.9rem",color:cp,lineHeight:1.4,fontFamily:"Geist, sans-serif"},children:t.d})]}),n.jsx("span",{style:{flex:"0 0 auto",display:"inline-flex",alignItems:"flex-end",gap:"3px",height:22},"aria-hidden":"true",children:[0,1,2].map(i=>n.jsx("span",{style:{width:5,height:`${9+i*6}px`,borderRadius:"2px",background:i<t.level?t.accent:"#e3e7ea"}},i))})]},t.h)})})})},Dge=6,Wge=()=>{const e=Ed.slice(0,Dge);return n.jsxs("div",{children:[n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(340px, 1fr))",gap:"28px"},children:e.map(t=>n.jsxs(J,{to:xa(t.slug),className:"pf-card pf-card--nav pf-card__hit",style:{textAlign:"left",textDecoration:"none",borderRadius:"16px",padding:"15px 17px",display:"flex",flexDirection:"column",gap:"8px",fontFamily:"'Geist', sans-serif"},children:[n.jsx("div",{style:{height:"120px",background:"#F5F7FA",border:"1px solid #eaeeea",borderRadius:"10px",overflow:"hidden"},children:n.jsx("img",{src:t.thumbnail,alt:"",loading:"lazy",style:{width:"100%",height:"100%",objectFit:"cover",display:"block"}})}),n.jsxs("div",{children:[n.jsx("span",{style:{display:"block",fontSize:"10px",lineHeight:"14px",fontWeight:700,letterSpacing:"0.06em",textTransform:"uppercase",color:Mo},children:t.category}),n.jsx("p",{style:{margin:"3px 0 0 0",fontSize:"16px",fontWeight:700,color:p1,lineHeight:"20px"},children:t.title}),n.jsx("p",{style:{margin:"5px 0 0 0",fontSize:"13px",color:cp,lineHeight:"19px",display:"-webkit-box",WebkitLineClamp:2,WebkitBoxOrient:"vertical",overflow:"hidden"},children:t.description})]}),n.jsx("span",{style:{marginTop:"auto",fontSize:"13px",lineHeight:"18px",fontWeight:700,color:Mo},children:n.jsx(Ds,{label:"View example"})})]},t.slug))}),n.jsx("div",{style:{marginTop:"1.75rem",textAlign:"center"},children:n.jsx(J,{to:xa(),style:{display:"inline-flex",alignItems:"center",gap:"0.4rem",fontFamily:"'Geist', sans-serif",fontSize:"1rem",fontWeight:700,color:Mo,textDecoration:"none"},children:"See all examples →"})})]})};function zge(){return n.jsxs(Wo,{seo:{title:"Miniapps — tools your team builds in an afternoon",description:"Miniapps are interactive apps that live inside your Upside dashboard and query your healed GTM data live. Describe the tool you need in Claude, Cursor, or Upside’s hosted agent, and it deploys for the whole team, no engineering sprint, no BI project.",canonical:"https://upside.tech/platform/miniapps"},children:[n.jsx(Vs,{eyebrow:"Miniapps",headline:"Miniapps your team builds in an afternoon.",sub:"Miniapps are interactive applications that live inside your Upside dashboard and query your healed GTM data live. Describe the tool you need in Claude, Cursor, or Upside’s hosted agent, and it deploys for the whole team, no engineering sprint, no BI project, and no more passing AI-generated HTML files back and forth over email.",secondary:{label:"Explore an example miniapp →",href:"#miniapp-gallery"},visual:n.jsx(yc,{src:"/images/platform/hero/miniapps.png",alt:"A Win-Back Tracker miniapp running live inside the Upside dashboard on healed GTM data."})}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"The problem"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Custom views, without the queue."}),n.jsx(We,{children:"Analytics tools promise build-your-own, then hand you a quarter of setup and a spot in the analyst’s backlog, so the view you needed never ships."}),n.jsx(aa,{visual:n.jsx(Pge,{}),caption:n.jsx(n.Fragment,{children:"The shift this page is about: a request that vanishes into a queue and comes back stale, versus a working app the same day that stays live."})})]}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"How it works"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"How a miniapp gets built."}),n.jsx(We,{children:"Describe what you need, let the agent build it against your data, and ship it to the dashboard."}
3663),n.jsx(Ws,{cards:[{num:"STEP 1",title:"Describe the app you want",body:"In Claude or Cursor over MCP, or Upside’s own hosted agent right inside the dashboard. State the question and what the app should let people do.",visual:n.jsx(Rge,{})},{num:"STEP 2",title:"The agent builds it",body:"It writes a self-contained app and wires it to your data with the Miniapp SDK: live queries, dashboard navigation, downloads. You shape the logic; the framework handles hosting and sandboxing.",visual:n.jsx(Nge,{})},{num:"STEP 3",title:"Ship it to the dashboard",body:"Publish a versioned release into your Upside dashboard, scoped to the right people. It runs alongside your built-in analyses, on the same data.",visual:n.jsx(Oge,{})}]})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Capabilities"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"You write the logic. Upside handles the rest."}),n.jsx(We,{children:"Miniapps are the building layer. Upside provides the SDK, the hosting, and the data plumbing; what you bring is the question and the application logic."}),n.jsx(Rn,{items:[{lead:"Built from a conversation.",rest:"Describe the tool in Claude, Cursor, or ChatGPT over MCP, and the agent writes the app, wires the queries, and publishes it. No engineering sprint, no BI request in the queue.",icon:"MessageSquare"},{lead:"Live data, not a saved export.",rest:"Each app issues SQL against your unified, healed warehouse on every load. The view reflects the current state of the business, not a snapshot someone forgot to refresh.",icon:"Database"},{lead:"Self-contained and sandboxed.",rest:"Each miniapp runs in a sandboxed iframe, and Upside handles hosting, serving, and isolation. There is no separate deployment infrastru
3663cture to stand up.",icon:"Boxes"},{lead:"The SDK does the plumbing.",rest:"Dashboard navigation, query execution, and downloads are exposed through the Miniapp SDK, so what you write is the logic, not the infrastructure underneath it.",icon:"Plug"},{lead:"The same data quality as everything else.",rest:"Because apps read the same healed layer as your analyses and attribution, their outputs carry the same guarantees, not a parallel, drifting source of truth.",icon:"ShieldCheck"}]})]}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"Collaboration"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Made to be shared and built on."}),n.jsx(We,{children:"A miniapp is a durable team asset, not a throwaway. Once it works, version it, share it with the right people, and let a teammate build the next version on top."}),n.jsx(Rn,{items:[{lead:"Versioned, with roll-back.",rest:"Every change is a new version. Preview or roll back to any earlier one, so experimenting is safe and nothing gets lost.",icon:"GitBranch"},{lead:"Shared on purpose.",rest:"Set who can view and who can edit independently, from just you to the whole org, so an app can become a team standard without becoming everyone's to change.",icon:"Users"},{lead:"Built on, not rebuilt.",rest:"A teammate can take a working version and build an improved one, or something new, on top of it, instead of starting from scratch.",icon:"Blocks"},{lead:"Edited where you already work.",rest:"Update an app from your AI tools over MCP or from Upside's hosted agent in the dashboard, then publish the new version to the team.",icon:"RefreshCw"}]})]}),n.jsx(gs,{eyebrow:"The range",head:"From a one-page report to a tool the team runs.",sub:"The same framework spans a range of apps. Most start simple and grow as the question gets sharper.",visual:n.jsx(Ige,{})}),n.jsxs(Ce,{id:"miniapp-gallery",alt:!0,children:[n.jsx(Ie,{children:"Gallery"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"A gallery of what teams build."}),n.jsx("div",{style:{marginTop:"1.75rem"},children:n.jsx(Wge,{})})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Proof"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Tools and reports crafted by the people closest to the work."}),n.jsx(We,{children:"With the data foundation already in place, the team closest to the question can build the tool that answers it."}),n.jsxs(yG,{logo:zs.comply,children:[n.jsx("span",{className:"it-label",style:{color:se.greenSoft},children:"Self-serve attribution"}),n.jsx("p",{className:"it-body",style:{color:se.muted,margin:"0.55rem 0 0 0"},children:"Comply’s marketing operations team built their own custom AI miniapps on the Upside MCP: the tools they wanted, made by the people who needed them, on the same foundation the rest of their analytics runs on."}),n.jsx("p",{style:{margin:"0.875rem 0 0 0"},children:n.jsx(J,{to:"/case-studies/comply-from-unfiltered-salesforce-data-to-marketing-intelligence",className:"it-body-sm pf-card__link",style:{color:se.green,fontWeight:600,textDecoration:"none"},children:n.jsx(Ds,{label:"Read the Comply story"})})})]})]}),n.jsx(Ce,{center:!0,children:n.jsx(Nd,{logo:zs.servicetitan,quote:"We had this idea on Tuesday. I had a draft done Wednesday and then built this out fully for all the accounts on Thursday. That was literally just like pressing a couple buttons and letting it run.",cite:"— Matt Grebow, ServiceTitan"})}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Platform"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Where miniapps fit in the platform."}),n.jsx(We,{children:"Miniapps are where the rest of Upside becomes something the whole team can use. They are built through one surface, run on another, and live in a third."}),n.jsx(Ks,{cards:[{dir:"Built & published via",title:"MCP",body:"The interface AI coding tools use to write, version, and publish a miniapp from a conversation.",links:[{label:"MCP",href:"/platform/mcp"}]},{dir:"Runs on",title:"Data Foundation",body:"The unified, healed warehouse every app queries live, so outputs carry the same guarantees as the rest of Upside.",links:[{label:"Data Foundation",href:"/platform/data-foundation"}]},{dir:"Lives in",title:"Dashboard",body:"Where a published app runs alongside your built-in explorers and analyses, scoped to the right people.",links:[{label:"Dashboard",href:"/platform/dashboard"}]}]})]}),n.jsx(Ce,{alt:!0,children:n.jsx(zo,{badge:"FAQs",heading:"Questions? Answers.",sub:"The practical details, and where this fits alongside the systems your team already runs.",items:[{q:"Do we need engineers to build these?",a:"No. If you can describe the tool you want, in Upside’s hosted agent or a tool like Claude or Cursor, you can ship one. The agent writes the app and wires it to your data through the Miniapp SDK; Upside hosts and sandboxes it."},{q:"How is this different from embedding a BI dashboard?",a:"A miniapp is not a saved report or an iframe pointed at a separate BI tool. It runs inside your Upside dashboard, queries your healed data live on every load, ships with version history and granular sharing, and reads the same source of truth as your other analyses. There is no second stack to license or keep in sync."},{q:"How is this different from app builders like v0, Lovable, Replit, or Superblocks?",a:"They’re good tools, and a miniapp isn’t trying to replace one your team already prefers. It just makes getting started easy: a real app on your live GTM data, inside Upside, with no extra platform to onboard. Already have a builder you love? You can reach the same Upside data from it over MCP."},{q:"Is the data live, or a snapshot?",a:"Live. Each app issues SQL against your unified warehouse when it loads, so it reflects the current state of the business. You can also build a deliberately static report when a fixed snapshot is what you want."},{q:"Who can see what we build?",a:"Exactly who you choose. View and edit access are set separately on each app, anywhere from just you to your whole org, and the same rules apply in the dashboard and over MCP."},{q:"What happens when our data model changes?",a:"Because apps query the same healed data layer everything else reads from, they follow it. There is no separate export to re-map. If a query needs updating, you create a new version and promote it when it’s ready, with the old version preserved in history."}]})}),n.jsx(Xs,{heading:"Build the one you’ve been asking for.",sub:"Bring the report your team keeps requesting, and watch it become an app on your own data."})]})}function Lge(){return n.jsxs(Wo,{seo:{title:"Radiant — An active context layer for your agents",description:"Most institutional-knowledge layers are passive stores an agent has to remember to read. Radiant is active: it fires before any agent touches your Upside data, coaches each query with how your organization’s data actually works, and remembers what it learns.",canonical:"https://upside.tech/platform/radiant"},children:[n.jsx(Vs,{eyebrow:"Radiant",headline:"An active context layer for your agents.",sub:"Most institutional-knowledge layers are passive stores an agent has to remember to read. Radiant is active: it fires before any agent touches your Upside data, coaches each query with how your organization’s data actually works, and remembers what it learns, so the tenth question lands better than the first.",secondary:{label:"See how it works ↓",href:"#how-it-works"},visual:n.jsx(yc,{src:"/images/platform/hero/radiant.png",alt:"Radiant coaching a query with the context an agent needs before it touches your data."})}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"The problem"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Teach every agent how your data works."}),n.jsx(We,{children:"An off-the-shelf AI model knows the textbook definition of a stage, a segment, or a fiscal quarter, but not yours. It returns a clean number that’s wrong, and no one catches it."}),n.jsx(Rn,{items:[{lead:"Generic priors, specific errors.",rest:"Field values that exist in Salesforce but aren’t used by your organization. A fiscal year that starts in February. A “qualified” stage that means 
3663something different on your pipeline than the default. None of it is in the model’s training data.",icon:"Target"},{lead:"The knowledge lives in people’s heads.",rest:"The one analyst who knows the gotchas can’t sit in every agent’s context window. A pasted data dictionary goes stale the week after someone writes it, and only helps the person who pasted it.",icon:"Brain"},{lead:"Wrong is worse than slow.",rest:"An agent that’s confidently wrong erodes trust in every answer that comes after it. The failure isn’t an error message; it’s a plausible number with no warning label.",icon:"ShieldCheck"},{lead:"It compounds the more you use AI.",rest:"Every new client, every new teammate, every new automation starts the briefing over from scratch, unless the context lives somewhere the agents can reach on their own.",icon:"Repeat"}]})]}),n.jsxs(Ce,{id:"how-it-works",children:[n.jsx(Ie,{children:"How it works"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"A coach, not a lookup."}),n.jsx(We,{children:"Instead of hoping the agent already knows your conventions, Radiant makes the agent state its intent, then coaches it toward the right answer."}),n.jsx(Ws,{cards:[{num:"BEFORE",title:"Consult before the query",body:"Calling Upside’s MCP triggers Radiant automatically. The agent states its intent and gets back the org-specific facts that matter for this query: definitions, field semantics, and assumptions that would have produced a silent error."},{num:"DURING",title:"Coach from the right layer",body:"Platform conventions and your organization’s ground truth combine, and your org’s definitions take precedence over the platform defaults. The agent works from how your team actually defines things, not from a generic assumption."},{num:"AFTER",title:n.jsxs(n.Fragment,{children:["Coach the retry ",n.jsx(N4,{label:"COMING"})]}),body:"When a query fails or returns nothing, Radiant appends what it knows about why that class of query tends to break for your org, so the agent’s next attempt is informed instead of a blind retry."}]}),n.jsx(aa,{visual:n.jsx(mfe,{}),caption:n.jsxs(n.Fragment,{children:["Two ideas in one sketch: the ",n.jsx("b",{children:"cascade"})," (platform default vs. your org’s ground truth, your org wins) and the ",n.jsx("b",{children:"timing"})," of a single tool call (coach before, run, and correct after). Post-query correction is the faded “after” node, marked ",n.jsx("b",{children:"coming"}),". Layer contents are ",n.jsx("b",{children:"illustrative"})," of the kinds of entries Radiant holds."]})})]}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"Consistency"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Everyone works from the same definitions."}),n.jsx(We,{children:"AI insights are never word-for-word identical, but when two people ask the same question and get meaningfully different answers, that's a problem. With Upside, every agent consults Radiant first. So they start from the same fiscal calendar, the same stage and segment rules, and the same field meanings."}),n.jsx(aa,{artBg:se.greenLight,visual:n.jsx(ffe,{}),caption:n.jsxs(n.Fragment,{children:['Three people, three AI clients, the same question. Each agent consults Radiant before answering, so all three apply the same fiscal calendar and the same "new pipeline" definition. The wording of each answer still varies; the number underneath agrees. The $1.84M figure is ',n.jsx("b",{children:"illustrative"}),"."]})})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Capabilities"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Three ways Radiant keeps agents right."}),n.jsx(We,{children:"Three capabilities, one active context layer. Each makes the agents you already use more correct about your business, without anyone having to remember to brief them."}),n.jsx(Ws,{cards:[{title:"Coaching, enforced",body:"The consult step isn’t a suggestion the client can skip. It’s enforced before a query runs, so coaching happens by default, not when someone remembers to ask for it. The same librarian reaches Claude, Cursor, and Upside’s own agent."},{title:"A library your team builds",body:"Add a fact the moment you hit the need for it, from inside the same AI workflow, no separate tool. Entries are tagged, versioned, and tied to the query or document that confirmed them. Memory persists across sessions, so multi-week work picks up where it left off."},{title:n.jsxs(n.Fragment,{children:["Knowledge that mines itself ",n.jsx(N4,{label:"COMING"})]}),body:"A background agent reads how agents have worked with your data, the questions, the failures, the corrections, and proposes candidate entries from the patterns. Every proposal lands in the same review queue. The agent proposes; a person approves."}]}),n.jsx(aa,{artBg:se.cream,visual:n.jsx(gfe,{}),caption:n.jsxs(n.Fragment,{children:["How the library reads in-product: ",n.jsx("b",{children:"active"}),", verified entries plus a ",n.jsx("b",{children:"review queue"})," of candidates, some curated by a person, some ",n.jsx("b",{children:"mined"})," from real usage. The mined rows are gated behind human review (mining is ",n.jsx("b",{children:"Coming Soon"})," in the DB; shown here as the direction). Entry text is ",n.jsx("b",{children:"illustrative"}),"."]})})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Platform"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"What Radiant stands on."}),n.jsx(We,{children:"Radiant coaches against the same reconstructed record the rest of Upside runs on, and reaches your agents through the same open interface."}),n.jsx(Ks,{cards:[{dir:"Fires through",title:"MCP",body:"Every call to Upside’s MCP triggers Radiant first, so coaching reaches any connected client.",links:[{label:"MCP",href:"/platform/mcp"}]},{dir:"Coaches against",title:"Data Foundation",body:"The unified, healed record and your org’s conventions are the ground truth Radiant teaches agents about.",links:[{label:"Data Foundation",href:"/platform/data-foundation"}]},{dir:"Manage it in",title:"Dashboard",body:"Curate the knowledge library and review the queue from the same place your team explores accounts.",links:[{label:"Dashboard",href:"/platform/dashboard"}]}]}),n.jsxs(We,{style:{marginTop:"1.75rem"},children:["Building agents and workflows on your GTM data? Radiant is the layer that keeps them correct."," ",n.jsx("a",{href:"/use-cases",style:{color:se.green,fontWeight:600,textDecoration:"none"},children:"See AI-native GTM workflows →"})]})]}),n.jsx(Ce,{alt:!0,children:n.jsx(zo,{badge:"FAQs",heading:"Questions? Answers.",sub:"The practical details, and where this fits alongside the systems your team already runs.",items:[{q:"How is this different from other context-layer products?",a:"Most context layers are passive: a knowledge store an agent has to remember to query, that returns whatever it is asked for. Radiant is an active agent. Before any query runs, Radiant works out what this agent needs to know for the task in front of it and delivers that coaching automatically, whether or not the agent thought to ask. The difference is a reference shelf versus a librarian who stops you on the way in and asks what you are trying to do."},{q:"How is this different from the memory built into Claude, Codex, and other AI tools?",a:"Those memories live inside one tool and one user’s account. They remember your past chats, not your company’s data conventions, and nothing carries over to the next tool or the next teammate. Radiant is model- and client-agnostic: a shared, active context layer that sits behind Upside’s MCP, so the same coaching reaches Claude, Cursor, Codex, and your own agents. Radiant holds your organization’s ground truth across the team, and is consulted before a query runs rather than recalled if the model happens to."},{q:"How is this different from giving my agent a system prompt or a data dictionary?",a:"A pasted data dictionary is static, lives in one person’s context window, and goe
3663s stale. Radiant is a service every client consults automatically: the consult step is enforced before the query runs, the knowledge is shared across everyone in your org, and it gets more complete as people use it. The agent doesn’t have to remember to read it."},{q:"Can one user’s context leak into another’s?",a:"No. Knowledge and memory are scoped by organization and user. Org-level conventions are shared within your org by design; an individual’s conversation history stays with that user. Access follows the same isolation as the rest of the platform."}]})}),n.jsx(Xs,{heading:"Make every agent fluent in your data.",sub:"The context your best analyst would give them, applied to every query automatically."})]})}function Uge(){return n.jsxs(Wo,{seo:{title:"Upside Agent — A frontier-grade AI agent you’re actually allowed to use",description:"Upside’s hosted agent gives your team frontier-grade agentic analysis on your GTM data, running securely inside the platform — the version security signs off on, with zero setup.",canonical:"https://upside.tech/platform/upside-agent"},children:[n.jsx(Vs,{eyebrow:"The Upside Agent",headline:"A frontier-grade AI agent you’re actually allowed to use.",sub:"Today, the best way to work your GTM data is to point a cutting-edge AI tool straight at it. When security gets nervous about Claude Code, or you don’t have budget for everyone to get licenses yet, Upside’s agent gives you that same agentic analysis, hosted securely within the Upside platform.",secondary:{label:"Or connect your own AI tools →",href:"/platform/mcp"},visual:n.jsx(yc,{src:"/images/platform/hero/upside-agent.png",alt:"The Upside Agent launch surface, ready to run frontier-grade analysis securely inside the platform."})}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"The problem"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Clear the last two blockers to AI on your data."}),n.jsx(We,{children:"Pointing a capable agent at your GTM data is the unlock everyone wants. Two things get in the way, and you’re probably hitting one or both."}),n.jsx(Rn,{items:[{lead:"Not enough seats.",icon:"Users",rest:"Tools like Claude Code and Cursor are expensive, and adoption is uneven. Getting one into every GTM person’s hands can be slow, and licensing the whole org is a budget conversation, not a quick win."},{lead:"No way in.",icon:"Lock",rest:"Even when people have those tools, they often can’t point them at production GTM data. Security may not approve a standing connection from an outside AI tool to your CRM, so the data and the AI don’t actually meet."}]})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"The bridge"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"The bridge to AI-native GTM."}),n.jsx(We,{children:"Upside’s agent is the one we host for you, running inside the platform on your reconstructed data foundation. Nothing connects to your data from the outside, which is exactly what lets a security team sign off. And this is no walled garden: when you’re ready, leverage all the same Upside tools and data through agents like Claude or Cursor over MCP."}),n.jsx(aa,{visual:n.jsx(sfe,{}),caption:n.jsx(n.Fragment,{children:"The relationship that makes the agent make sense: bringing your own AI tool over MCP is the power path; the hosted agent is the same capability for teams who can’t take that path yet. Start on the hosted agent, graduate to your own harness when you’re ready, same foundation either way."})}),n.jsx(Rn,{items:[{lead:"Start today, not next quarter.",icon:"Zap",rest:"No additional tool to procure, no connection for security to review, no pipeline to stand up. The agent is already in the dashboard your team uses."},{lead:"Graduate when you’re ready.",icon:"GitBranch",rest:"Many users move on to a dedicated harness like Claude Code or Cursor over MCP. That’s the point: the data foundation and tools come with you."}]})]}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"Modes of trust"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Run the agent at the level of trust you choose."}),n.jsx(We,{children:"Supervised mode, the default, surfaces every action for approval before it runs. Plan mode has the agent propose its whole approach first. Autonomous runs validated work without prompts. One toggle, changeable any time."}),n.jsx(aa,{visual:n.jsx(lfe,{}),caption:n.jsx(n.Fragment,{children:"The three modes with the exact descriptions a user sees on hover, plus a Supervised approval card: every tool call is approve, approve-for-session, or deny."})})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"How it works"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Ask a question. Get an investigation."}),n.jsx(We,{children:"The questions that matter, why pipeline slipped last quarter, what your lost deals had in common, aren’t a single lookup. The agent works them the way an analyst would, pulling from your structured data and from what was actually said in calls and emails, taking as many steps as the question needs, and coming back with a conclusion and the evidence behind it."}),n.jsx(Rn,{items:[{lead:"Structured and unstructured, together.",icon:"Layers",rest:"The agent queries your warehouse and searches your communications in the same investigation, because what really happened in a deal lives in transcripts as often as in CRM fields."},{lead:"Parallel when the work is big.",icon:"Network",rest:"Complex questions get decomposed into focused sub-analyses that run at the same time, each in its own isolated context, then synthesized into one answer. A quarterly analysis that took an analyst days runs as a single session."},{lead:"A question, not a guess.",icon:"MessageSquare",rest:"When a request is ambiguous, the agent asks a focused clarifying question instead of guessing, so the QBR one-pager comes back built for the audience you actually meant."}]}),n.jsx(aa,{visual:n.jsx(cfe,{}),caption:n.jsx(n.Fragment,{children:"How one complex question becomes several parallel lines of analysis and a single synthesis. The sub-agent layer is invisible to the user; what’s visible is a complete answer faster than a sequential investigation."})})]}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"Persistence"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Close the tab. The agent keeps working."}
3663),n.jsx(We,{children:"GTM investigations are long-running and high-value, and they rarely finish in one sitting. Upside’s agent runs in the cloud, not in your browser, so an analysis you kick off keeps going after you close your laptop, and the conversation is waiting where you left it when you come back."}),n.jsx(Ws,{cards:[{title:"Survives interruptions",body:"A closed tab, a dropped connection, or a server restart does not lose your work. The agent runs as a persistent cloud session, not a page that dies with the window."},{title:"Resumes the thread",body:"Reconnect days or weeks later and the conversation picks up with full context, scoped to you and your organization. No re-explaining the data, no repeating prior instructions."}]})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"The toolkit"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"A full investigative toolkit."}),n.jsx(We,{children:"The agent runs the same kind of harness your engineers get from Claude Code or Cursor: planning its approach, asking when a request is ambiguous, calling real tools, and splitting hard work across sub-agents."}),n.jsx(Ws,{cards:[{title:"Plan mode",body:"Proposes a structured plan, the goal, the steps, the tools it will use, and what it won’t touch, then waits for your approval before running."},{title:"Clarifying questions",body:"When a request is ambiguous, the agent asks a focused multiple-choice or free-text question instead of guessing."},{title:"Parallel sub-agents",body:"Splits a big question into focused sub-analyses that run at once, each in its own isolated context, then synthesizes a single answer."},{title:"Real tool use",body:"Queries your warehouse, searches calls and emails, writes memos, and builds miniapps, calling the same tools an external client reaches over MCP."},{title:"Approvals you control",body:"Every tool call can require an explicit approve or deny in Supervised mode, or run hands-off once a workflow is trusted."},{title:"Persistent sessions",body:"Runs in the cloud, so the agent keeps working after you close the tab, picking the conversation back up later with full context."}]})]}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"Security"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Architecture that won’t make security reviewers nervous."}),n.jsx(We,{children:"Everything the agent does happens inside Upside’s environment. There is no third-party AI tool holding a standing credential to your production systems, and no employee copying data into a chat window to get an answer. The properties a reviewer cares about are designed in, not toggled on."}),n.jsx(aa,{visual:n.jsx(dfe,{}),caption:n.jsx(n.Fragment,{children:"The residency boundary: the foundation, the agent, and its sub-agents all run inside your Upside tenant in Upside’s AWS environment. Nothing in the loop hands your data to a third-party AI provider."})}),n.jsx(Rn,{items:[{lead:"Nothing to turn on.",icon:"ShieldCheck",rest:"Tenant isolation, identity-scoped access, and data residency are invariants of the platform, not security features a customer has to configure correctly."},{lead:"An authorization record, not a log.",icon:"FileCheck",rest:"In Supervised mode every action the agent takes is something a person explicitly approved."}]})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Platform"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Runs on the platform. Open to the rest of it."}),n.jsx(We,{children:"The hosted agent has the same capabilities that other AI tools get over MCP, reasoning over the same reconstructed foundation and calling the same tool surface, so whichever path you take, you are on one system."}),n.jsx(Ks,{cards:[{dir:"Runs on",title:"Data Foundation",body:"The reconstructed, unified record the agent reasons over, so its answers trace back to a source.",links:[{label:"Data Foundation",href:"/platform/data-foundation"}]},{dir:"Connect your own client via",title:"MCP",body:"The same tool surface, open to Claude, Cursor, and ChatGPT from outside.",links:[{label:"MCP",href:"/platform/mcp"}]},{dir:"Ships its outputs as",title:"Miniapps",body:"Interactive apps the agent builds and deploys into the dashboard.",links:[{label:"Miniapps",href:"/platform/miniapps"}]}]})]}),n.jsx(Ce,{center:!0,children:n.jsx(Nd,{logo:zs.comply,quote:"I haven’t seen a single case where I followed the data trail and found something wrong. I’ve stopped checking.",cite:"— Carl Gunlefinger, Senior Marketing Operations Manager, Comply",link:{label:"Read the Comply story",href:"/case-studies/comply-from-unfiltered-salesforce-data-to-marketing-intelligence"}})}),n.jsx(Ce,{alt:!0,children:n.jsx(zo,{badge:"FAQs",heading:"Questions? Answers.",sub:"The practical details, and where this fits alongside the systems your team already runs.",items:[{q:"How is this different from connecting Claude or Cursor over MCP?",a:"They’re the same capability, reached two ways. Over MCP you point your own AI client at Upside; the hosted agent is that same thing, run for you inside the platform. Use whichever fits: the hosted agent when you want zero setup or your security team won’t approve an outside connection, your own client when you’d rather work in a tool you already use. Same data, same tools underneath either way."},{q:"Does our data leave Upside to an AI provider?",a:"The agent and its sub-agents run inside your Upside tenant in Upside’s environment. No external AI tool gets a standing credential to your systems, and no one has to copy data into a separate chat to get an answer. Tenant isolation, identity-scoped access, and data residency are designed in."},{q:"How do we keep the agent from doing something we didn’t intend?",a:"You choose the mode. Supervised, the default, surfaces every tool call for approval before it runs. Plan mode makes the agent propose its full approach for your review before executing. Autonomous runs validated workflows without prompts. The mode is a single toggle, changeable any time, so you can tighten or loosen the leash per workflow."},{q:"Does this replace our dashboard?",a:"No. The dashboard answers the common questions with pre-built explorers and reports; the agent handles the long tail, the ad-hoc investigations that need querying, cross-referencing, and an opinion. They run on the same data, side by side."},{q:"What can’t the agent do?",a:"The agent is an analyst, not a general-purpose coding assistant or a workflow scheduler. It investigates GTM data and builds interactive miniapps inside Upside, but does not edit arbitrary files or run recurring automated jobs. For scheduled or event-driven automation, point a dedicated workflow platform at Upside’s tool surface."}]})}),n.jsx(Xs,{heading:"Bring a question you’ve never been able to answer.",sub:"Watch the agent investigate a question off your own roadmap, live, inside the dashboard."})]})}const Bge="/case-studies/cresta-from-attribution-to-ai-deep-research",qge="/case-studies/syndio-driving-strategic-gtm-decisions-with-upside";function $ge(){return n.jsxs(Wo,{seo:{title:"Insight Engineering — Expert analysis, on tap",description:"Insight Engineering is the Upside team you bring in when a question is too high-stakes, or your team too stretched, to run it in-house. They return it as finished work on your own data: board decks, custom models, and miniapps, deployed into your instance in days.",canonical:"https://upside.tech/platform/insight-engineering"},children:[n.jsx(Vs,{eyebrow:"Insight Engineering",headline:"Expert analysis, on tap.",sub:"Insight Engineering is the Upside team you bring in when a question is too high-stakes, or your team too stretched, to run it in-house. They return it as finished work on your own data: board decks, custom models, and miniapps, deployed into your instance in days.",visual:n.jsx(yc,{src:"/images/platform/hero/insight-engineering.png",alt:"Finished analyst work — board decks, custom models, and miniapps — delivered into your Upside instance."})}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"When to call us in"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"You've got this. We're your backup."}),n.jsx(We,{children:"The platform is built so your team answers its own questions, builds its own apps, and runs 
3663its own analyses. Insight Engineering is who you call in when it counts: a high-stakes question you cannot get wrong, a stretch when you are short on time or hands, or an outside perspective on your GTM. And when you do call us in, it beats the alternatives."}),n.jsx(Jw,{headers:["The old way to get expert analysis","Insight Engineering"],rows:[["Hire and ramp an analyst, or wait in their queue","A team that already knows your data model and has run the analysis before"],["Open-ended consulting hours, billed as you go","Fixed scope, defined outputs, one annual line item"],["A static deck that’s stale the day it ships","Models and apps deployed into your instance, live on your data"],["Weeks to months to a first answer","Delivered in days"]]})]}),n.jsx(gs,{eyebrow:"The difference",head:"The team already knows your data.",sub:"The value of a unified data layer depends on the questions you ask of it. Insight Engineering is the team that knows how to ask them well, on your data, because they have done the equivalent work many times before.",visual:n.jsx(Gfe,{})}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"Example engagement"}),n.jsx(De,{style:{margin:"0.9rem 0 0.5rem 0"},children:"What is a typical engagement, start to finish?"}),n.jsxs("div",{className:"pf-grid",style:{marginTop:"1.75rem"},children:[n.jsx("div",{className:"pf-grid-copy",style:{display:"flex",flexDirection:"column",gap:"1.25rem",minWidth:0},children:[{label:"The situation",body:"A sales org was bringing on new account directors and needed them productive on their books immediately. The standard dashboards weren’t built for instant territory handoff, so the question went to Insight Engineering."},{label:"What IE delivered",body:"An Account Dossier: a single per-account view, built on the customer’s own data and deployed inside their instance."},{label:"The outcome",body:"New account directors got an instant, complete view of their territory instead of stitching it together from CRM reports. The same analysis flagged single-threaded deals early, so managers could coach toward multi-threading before a deal slipped."}].map(e=>n.jsxs("div",{children:[n.jsx("div",{style:{fontFamily:"Geist, sans-serif",fontWeight:700,fontSize:"0.78rem",letterSpacing:"0.06em",textTransform:"uppercase",color:se.greenSoft,marginBottom:"0.35rem"},children:e.label}),n.jsx("p",{className:"it-body",style:{color:se.muted,margin:0},children:e.body})]},e.label))}),n.jsx("div",{className:"pf-grid-art",style:{display:"flex",justifyContent:"center",alignItems:"center",minWidth:0},children:n.jsx("div",{className:"pf-art",children:n.jsx(Hfe,{})})})]})]}),n.jsx(gs,{artFit:!0,eyebrow:"The range",head:"Not just one kind of answer.",sub:"The work takes whatever shape the question needs, from a board deck to a model to an app, always built on your unified data and delivered where your team works.",visual:n.jsx(Yfe,{}),children:n.jsx(Rn,{items:[{lead:"Board-ready analysis.",rest:"Persona win-rate tables, channel heatmaps, and competitive displacement findings, built from your enriched opportunity data.",icon:"BarChart3"},{lead:"Custom miniapps, deployed in your instance.",rest:"Configured apps that run live on your data, like a contact-role healing app that corrects CRM gaps across the opportunity database, and that your team can keep evolving afterward just by describing the change to AI.",icon:"AppWindow"},{lead:"Predictive and scoring models.",rest:"Account scoring for expansion and upsell likelihood, ranked against your own pipeline.",icon:"LineChart"},{lead:"Inspector apps.",rest:"Account-level views like intent signals with no open opportunity yet, surfaced for the team to act on.",icon:"Eye"},{lead:"Deep-research investigations.",rest:"Closed-lost analyses and loss-pattern studies across hundreds of evaluated deals, returned as structured findings.",icon:"Microscope"}]})}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"Who it's for"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"Built for the people who own the number."}),n.jsx(We,{children:"Insight Engineering speaks to both tracks: the executive who needs a board-ready answer and the operator who needs a backstop."}),n.jsx(Ws,{cards:[{title:"For the revenue leader",body:"Board decks, QBRs, and pipeline reviews need custom analysis a 
3663standard dashboard can’t produce. The team handles the translation from raw GTM data to a board-ready output, with methodology and presentation already validated, and off your analyst’s deadline queue."},{title:"For the RevOps leader",body:"A backstop for analyses too important to get wrong and too complex to build quickly in self-serve: data quality investigations and custom apps that run inside your instance. The team can also teach you to replicate the work."},{title:"For the finance leader",body:"Procured as an annual line item, not variable consulting hours. Fixed cost, scope agreed in advance, outputs defined. An extension of platform value, not a separate professional-services relationship with open-ended billing."}]})]}),n.jsx(gs,{alt:!0,flip:!0,eyebrow:"What's included",head:"Always there, plus on demand.",sub:"Insight Engineering is an ongoing relationship, not a one-off invoice. Every engagement comes with a standing line to the Upside team, and bigger projects on tap when you need them.",visual:n.jsx(Vfe,{})}),n.jsxs(Ce,{alt:!0,children:[n.jsx(Ie,{children:"Proof"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"When teams bring us in."}),n.jsx(We,{children:"Cresta brought Insight Engineering the analysis behind every quarterly business review. Syndio used it to restructure a function."}),n.jsx(e1,{cards:[{logo:{...zs.cresta,height:34},heading:"Weeks of manual transcript review, collapsed into a single day.",body:"The analysis behind every quarterly business review, where the work became the engine of the QBR itself.",quote:"Like working with a therapist, a data consultant, a friend.",who:n.jsx(n.Fragment,{children:"Stephen Daniels — VP, GTM & Strategic Operations, Cresta"}),link:{label:"Read the Cresta story",href:Bge}},{logo:{...zs.syndio,height:36},heading:"Syndio: evidence that restructured a function.",body:"An Insight Engineering analysis of inbound versus outbound contribution gave Syndio the evidence to strategically restructure their ADR function, the kind of call an engagement can drive that a standard dashboard never surfaces.",link:{label:"Read the Syndio story",href:qge}}]})]}),n.jsxs(Ce,{children:[n.jsx(Ie,{children:"Platform"}),n.jsx(De,{style:{margin:"0.9rem 0 0.85rem"},children:"We work on the platform you already run."}),n.jsx(We,{children:"Insight Engineering is not a separate consultancy. It is the Upside team working on the same reconstructed data foundation the rest of the platform runs on, with the same tools."}),n.jsx(Ks,{cards:[{dir:"Built on",title:"Data Foundation",body:"Every engagement starts from your unified, healed GTM record.",links:[{label:"Data Foundation",href:"/platform/data-foundation"}]},{dir:"Delivered through",title:"Deep Research, Miniapps & Dashboard",body:"The same analytical engine and surfaces the platform ships, applied as a service.",links:[{label:"Deep Research",href:"/platform/deep-research"},{label:"Miniapps",href:"/platform/miniapps"}]}]}),n.jsxs("p",{className:"it-body-sm",style:{color:se.muted,marginTop:"1.25rem"},children:["Have a specific job in mind, like multi-touch attribution or a closed-lost deep dive? Start from the use case:"," ",n.jsx("a",{href:"/use-cases",style:{color:se.green,fontWeight:600,textDecoration:"none"},children:"Use Cases →"})]})]}),n.jsx(Ce,{alt:!0,children:n.jsx(zo,{badge:"FAQs",heading:"Questions? Answers.",sub:"The practical details, and where this fits alongside the systems your team already runs.",items:[{q:"Is this just consulting?",a:"No. The work is done by the team that built your data platform, on the same healed data, with the same tools, and it is priced as a fixed annual line item with defined scope, not open-ended hours. The outputs run in your instance, not in a vendor’s deck."},{q:"What can the Insight Engineering team build?",a:"Board decks, predictive and scoring models, miniapps that run live in your instance, and deep-research investigations like closed-lost analyses. If it can be built from your unified GTM data, it is in scope."},{q:"Do we own the outputs, and can we replicate them ourselves?",a:"Yes. Deliverables run in your instance and on your data. Some teams use a first engagement specifically to learn how to do the work in-house."},{q:"How fast is it?",a:"Most engagements come back in days rather than the weeks or months an equivalent internal project would take, because the team already knows your data model and has built comparable analyses before."},{q:"Does it replace our analyst team?",a:"No. It is a backstop for the analyses too important to get wrong or too complex to build quickly in self-serve, so your team’s time goes to the work only they can do."},{q:"How is it different from Deep Research?",a:"Deep Research is the self-serve product you run yourself. Insight Engineering is the team running it, and more, for you: scoping the question, designing the analysis, and deploying the result into your instance."}]})}),n.jsx(Xs,{heading:"Bring us the question you keep postponing.",sub:"Pick one real analysis your team hasn’t had time to run, and we’ll scope it with you."})]})}const Fge="#2d6a4f",Gge="#509a79",fh="#1b1f1c",NH="#5f6563",M0="#394142",Y4="#eaeeea",gf="#fafafa",Hge=()=>n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"Pricing",description:"Upside is a premium platform for teams that treat their go-to-market data as critical infrastru
3663cture. Pricing is a conversation, scoped to the data you connect and the outcomes you are after — no seats, ever.",canonicalUrl:"https://upside.tech/pricing"}),n.jsx("style",{children:`
3664        @media (max-width: 900px) {
3665          .pricing-hero-grid { grid-template-columns: 1fr !important; gap: 2.5rem !important; }
3666          .pricing-posture-blurbs { grid-template-columns: 1fr !important; }
3667        }
3668      `}),n.jsx("section",{style:{marginTop:"-65px",padding:"clamp(8.5rem, 9vw, 9rem) clamp(1.25rem, 5vw, 4rem) clamp(3.5rem, 6vw, 4rem)",background:gf,borderBottom:`1px solid ${Y4}`},children:n.jsxs("div",{className:"pricing-hero-grid",style:{maxWidth:"1296px",margin:"0 auto",display:"grid",gridTemplateColumns:"1.05fr 1fr",gap:"clamp(2rem, 5vw, 3.5rem)",alignItems:"center"},children:[n.jsxs("div",{style:{minWidth:0},children:[n.jsx("span",{className:"it-eyebrow",style:{display:"inline-block",color:Gge,border:`1px solid ${Y4}`,borderRadius:"999px",padding:"0.25rem 0.75rem",marginBottom:"1.25rem",background:"#fff"},children:"Pricing"}),n.jsx("h1",{className:"it-title",style:{margin:"0 0 1.25rem 0",color:fh},children:"Built for teams serious about GTM data."}),n.jsx("p",{className:"it-lead",style:{margin:0,color:M0,maxWidth:"32ch"},children:"Upside is a premium platform for teams that treat their go-to-market data as critical infrastructure. Tell us about all your data problems, and we will show you what it looks like to make your team Upside-powered."})]}),n.jsx(Yge,{})]})}),n.jsx("section",{style:{background:gf},children:n.jsxs("div",{className:"pf-boxed",style:{maxWidth:"1296px",margin:"0 auto",padding:"clamp(3rem, 6vw, 5rem) clamp(1.1rem, 4vw, 3.25rem)",background:"#fff"},children:[n.jsx("h2",{className:"it-title",style:{margin:"0 0 0.75rem 0",color:fh},children:"Pricing is a conversation, not a configurator."}),n.jsx("p",{className:"it-lead",style:{margin:0,color:M0,maxWidth:"60ch"},children:"Upside is an annual contract, scoped to the data you connect and the outcomes you are after."}),n.jsxs("div",{className:"pricing-posture-blurbs",style:{display:"grid",gridTemplateColumns:"1fr 1fr",gap:"1.25rem 2rem",marginTop:"2rem"},children:[n.jsx(ZP,{lead:"No seats, ever.",children:"You will never pay more for bringing another person into the work, so the whole team can use it."}),n.jsx(ZP,{lead:"One conversation to a real number.",children:"Tell us what you run on and what you want to answer, and we will scope it with you."})]})]})}),n.jsx("section",{style:{background:gf},children:n.jsx("div",{className:"pf-boxed",style:{maxWidth:"1296px",margin:"0 auto",padding:"clamp(3.5rem, 7vw, 5rem) clamp(1.1rem, 4vw, 3.25rem)",background:gf},children:n.jsxs("figure",{style:{maxWidth:"680px",margin:"0 auto",textAlign:"center"},children:[n.jsx("img",{src:"/images/assembled_logo_upside_customer.svg",alt:"Assembled is an Upside Customer",style:{height:26,width:"auto",display:"block",margin:"0 auto 1.5rem",filter:"brightness(0)",opacity:.68}}),n.jsx("blockquote",{className:"it-quote",style:{color:fh,margin:0,textWrap:"pretty"},children:"“The fact that Upside could work with imperfect data was the selling point. We knew our data wasn’t clean.”"}),n.jsx("figcaption",{className:"it-quote-cite",style:{color:NH,marginTop:"0.875rem"},children:"Lindsey Marymont, Head of Demand Generation, Assembled"}),n.jsx("p",{style:{marginTop:"1.25rem"},children:n.jsx("a",{href:"/case-studies/assembled-from-attribution-guesswork-to-pipeline-surge",style:{color:Fge,fontWeight:600,textDecoration:"none"},children:"Read the Assembled story →"})})]})})}),n.jsx("section",{style:{background:gf},children:n.jsx("div",{className:"pf-boxed",style:{maxWidth:"1296px",margin:"0 auto",padding:"clamp(3.5rem, 7vw, 5.5rem) clamp(1.1rem, 4vw, 3.25rem)",background:"#fff"},children:n.jsxs("div",{style:{maxWidth:"760px",margin:"0 auto",textAlign:"center"},children:[n.jsx("h2",{className:"it-title",style:{margin:"0 0 1rem 0",color:fh},children:"Let’s make your team Upside-powered."}),n.jsx("p",{className:"it-lead",style:{margin:"0 auto 2rem",color:M0,maxWidth:"60ch"},children:"Tell us about your data and what you are trying to answer. We will show you what Upside looks like for your team, and what it costs."}),n.jsx("div",{style:{display:"flex",justifyContent:"center"},children:n.jsx(J,{to:Wt,className:"cta w-button",children:"Book a demo"})})]})})})]}),ZP=({lead:e,children:t})=>n.jsxs("p",{className:"it-body",style:{margin:0,color:M0},children:[n.jsx("span",{className:"it-leadin",style:{color:fh},children:e})," ",t]}),Yge=()=>n.jsxs("div",{style:{border:`1px solid ${Y4}`,borderRadius:"14px",padding:"clamp(1.25rem, 3vw, 1.5rem)",background:"#fff",boxShadow:"0 1px 3px rgba(0,0,0,0.05)",minWidth:0},children:[n.jsx("div",{className:"it-card-title",style:{marginBottom:"0.2rem",color:fh},children:"Tell us about your data."}),n.jsx("p",{className:"it-body-sm",style:{color:NH,margin:"0 0 1.125rem 0"},children:"A few details and we will be in touch to scope it with you."}),n.jsx(Zw,{type:"demo"})]}),JP=["Attribution","Sales","Marketing"],Vge={Attribution:{tint:"rgba(52,123,209,0.10)",ink:"#2a5f9e"},Sales:{tint:"rgba(80,154,121,0.14)",ink:"#316851"},Marketing:{tint:"rgba(230,119,74,0.13)",ink:"#b0512a"}},Kge=e=>Vge[e]??{tint:"rgba(12,30,32,0.06)",ink:"#5a777d"},Xge=15,Qge=Zne(Ed,Qne(Xge)),Zge={"aeo-influence":"How AI engines move pipeline — citation traffic, call mentions and win-rate lift.","channel-analysis":"Which channels influenced closed-won, across the full buyer journey.","podcast-effect":"How a founder's podcast appearances move pipeline, as source and proof point.","web-attribution":"Every inbound traced from first-touch web channel to the last touch.","pipeline-source-attribution":"Where pipeline really comes from, on a de-duplicated account rollup.","send-time-optimizer":"The day-and-hour windows where outbound earns the most replies.","campaign-follow-up":"After a campaign engagement, how fast does sales follow up — and who's waiting?","sales-play-identifier":"Scores every account against the playbook: which play fits, and why.","intent-signals":"Accounts showing buying signals with no open opp, ranked by intent.","prospect-awareness":"How much each prospect already knows before the SDR call.","rep-scorecard":"Engagement and opportunity-influence metrics, by division and rep.","product-launch":"A win/loss deep-dive on a launch — benchmarks, loss patterns, risk.","deal-runbook":"Matches a live deal to its closest cohort and writes the next play.","product-pitch-tracker":"Which accounts were pitched the flagship, across an adoption funnel.","account-coverage-explorer":"Which modules are contracted vs used — coverage that spots whitespace.","funnel-conversion":"A resolved-or-past funnel that flags the real bottleneck.","pipeline-forecast":"Scores open opps against the winning profile for a weighted forecast.","expansion-readiness":"Scores customers on likelihood to expand across seven factors.","open-deals-forecast":"Every open deal scored — confidence tiers and a close timeline.","lost-deals-analysis":"Every closed-lost deal read against the winning playbook.","sales-activity-trends":"Calls, emails and meetings over time, with an activity heatmap.","inbound-leads-explorer":"Every inbound lead by status, source and ICP fit — plus a revive queue.","buying-group-explorer":"How group size, touchpoints and MQL status relate to win rate.","customer-quotes":"A voice-of-customer wall from call transcripts, with logo rights.","paid-media-impact":"How paid search and s
3668ocial turn spend into influenced pipeline.","integrated-campaign-performance":"Every program from members to closed-won, with side-by-side compare.","keep-optimize-stop":"Grades campaigns on whether a touch actually moved a deal forward.","messaging-themes":"The words that win vs the ones that stall, mined from calls.","enterprise-abm-tracker":"Target accounts through the ABM funnel, fused with buying signals.","prospect-question-themes":"Clusters prospect questions into themes, ranks content ideas by demand.","marketing-roi":"Board-level influenced pipeline and the pipe-to-spend ratio.","business-value-services":"CFO-ready case from the deal, the conversations, and a usage snapshot."},e9=(e,t)=>Zge[e]??t,Jge=[{n:"1",title:"Describe it",body:"Tell Claude, Cursor, or Upside's hosted agent the tool you need — in plain language, no spec required."},{n:"2",title:"Built on your data",body:"The app is generated against your healed, identity-resolved GTM data. The hard data work is already done."},{n:"3",title:"Publish to the team",body:"Ship it inside Upside with independent view and edit scopes. No BI backlog, no shadow IT."}],eye=()=>{const[e,t]=M.useState(""),[a,i]=JF(),[r,o]=M.useState("shuffled"),l=M.useMemo(()=>{const m=new Set(Ed.map(b=>b.category)),f=JP.filter(b=>m.has(b)),y=Array.from(m).filter(b=>!JP.includes(b));return["All",...f,...y]},[]),d=M.useMemo(()=>{const m=(a.get("category")||"").trim().toLowerCase();return m?l.find(f=>f!=="All"&&f.toLowerCase()===m)??"All":"All"},[a,l]),u=m=>{i(f=>{const y=new URLSearchParams(f);return m==="All"?y.delete("category"):y.set("category",m.toLowerCase()),y},{replace:!0})},h=M.useMemo(()=>{const m=e.trim().toLowerCase(),f=b=>m?[b.title,b.description,e9(b.slug,b.description),b.category,...b.tags??[]].join(" ").toLowerCase().includes(m):!0,y=Qge.filter(b=>(d==="All"||b.category===d)&&f(b));return r==="name"?y.slice().sort((b,x)=>b.title.localeCompare(x.title)):y},[e,d,r]);return n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"Miniapp Examples",description:"A working library of GTM apps you can build on Upside: interactive dashboards, heatmaps, scorers, and analyses built from go-to-market data by describing them to an agent.",canonicalUrl:`https://upside.tech${xa()}`,ogImage:sG()}),n.jsx("style",{children:`
3669        .mae-card { transition: transform .2s cubic-bezier(0.2,0,0,1), box-shadow .2s cubic-bezier(0.2,0,0,1); }
3670        .mae-card:hover { transform: translateY(-3px); box-shadow: 0 18px 40px rgba(12,30,32,0.13); }
3671        .mae-card img { transition: transform .35s cubic-bezier(0.2,0,0,1); }
3672        .mae-card:hover img { transform: scale(1.04); }
3673        @media (max-width: 860px) {
3674          .mae-hero { padding: 112px 22px 60px !important; }
3675          .mae-how { grid-template-columns: 1fr !important; }
3676        }
3677        @media (max-width: 520px) {
3678          .mae-cardgrid { grid-template-columns: 1fr !important; }
3679        }
3680      `}),n.jsx("section",{style:{position:"relative",marginTop:"-65px",background:"#fafafa",color:"#0c1e20",borderBottom:"1px solid #e6ebe7",overflow:"hidden"},children:n.jsxs("div",{className:"mae-hero",style:{maxWidth:"840px",margin:"0 auto",padding:"148px 40px 84px",textAlign:"center"},children:[n.jsx("div",{style:{fontSize:"12px",fontWeight:500,letterSpacing:"0.14em",textTransform:"uppercase",color:"#509a79"},children:"Miniapp Gallery"}),n.jsx("h1",{style:{fontSize:"clamp(34px, 6vw, 62px)",fontWeight:600,letterSpacing:"-0.03em",lineHeight:1.04,color:"#0c1e20",margin:"20px auto 0",maxWidth:"760px",textWrap:"balance"},children:"A working library of GTM apps."}),n.jsx("p",{style:{fontSize:"19px",lineHeight:1.6,color:"#5a777d",margin:"24px auto 0",maxWidth:"600px",textWrap:"pretty"},children:"Each one was built on go-to-market data by describing it to an agent — dashboards, heatmaps, scorers, and analyses. Read the index, open the one that answers your question."})]})}),n.jsxs("div",{style:{background:"#fafafa"},children:[n.jsx("div",{style:{position:"sticky",top:0,zIndex:10,background:"rgba(250,250,250,0.9)",backdropFilter:"blur(8px)",WebkitBackdropFilter:"blur(8px)",borderBottom:"1px solid rgba(12,30,32,0.08)",marginTop:"40px"},children:n.jsxs("div",{style:{maxWidth:"1200px",margin:"0 auto",padding:"16px 40px",display:"flex",flexWrap:"wrap",gap:"14px",alignItems:"center"},children:[n.jsxs("div",{style:{position:"relative",flex:"1 1 280px",minWidth:"220px"},children:[n.jsx("span",{"aria-hidden":"true",style:{position:"absolute",left:"15px",top:"50%",transform:"translateY(-50%)",color:"#8a9599",fontSize:"15px",pointerEvents:"none"},children:"⌕"}
3680),n.jsx("input",{type:"search",value:e,onChange:m=>t(m.target.value),placeholder:"Search apps by name, use case or tag…","aria-label":"Search miniapps",style:{width:"100%",height:"44px",padding:"0 16px 0 38px",fontSize:"15px",color:"#0c1e20",background:"#fff",border:"1px solid rgba(12,30,32,0.12)",borderRadius:"12px",outline:"none"}})]}),n.jsx("div",{style:{display:"flex",gap:"8px",flexWrap:"wrap"},children:l.map(m=>{const f=d===m;return n.jsx("button",{type:"button",onClick:()=>u(m),style:{height:"44px",padding:"0 16px",borderRadius:"12px",fontSize:"14px",fontWeight:500,cursor:"pointer",whiteSpace:"nowrap",background:f?"#0c1e20":"#fff",color:f?"#fff":"#1e3539",border:f?"1px solid #0c1e20":"1px solid rgba(12,30,32,0.12)"},children:m},m)})}),n.jsxs("select",{value:r,onChange:m=>o(m.target.value),"aria-label":"Sort miniapps",style:{height:"44px",padding:"0 14px",fontSize:"14px",fontWeight:500,color:"#0c1e20",background:"#fff",border:"1px solid rgba(12,30,32,0.12)",borderRadius:"12px",cursor:"pointer",outline:"none"},children:[n.jsx("option",{value:"shuffled",children:"Sort: Shuffled"}),n.jsx("option",{value:"name",children:"Sort: A–Z"})]}),n.jsxs("span",{style:{marginLeft:"auto",fontSize:"14px",color:"#5a777d"},children:[h.length," apps"]})]})}),n.jsxs("div",{style:{maxWidth:"1200px",margin:"0 auto",padding:"8px 40px 52px",minHeight:"360px"},children:[n.jsx("div",{className:"mae-cardgrid",style:{display:"grid",gridTemplateColumns:"repeat(auto-fill, minmax(310px, 1fr))",gap:"22px",paddingTop:"36px"},children:h.map(m=>{const f=Kge(m.category);return n.jsxs("a",{href:xa(m.slug),className:"mae-card",style:{display:"flex",flexDirection:"column",background:"#fff",border:"1px solid rgba(12,30,32,0.08)",borderRadius:"14px",overflow:"hidden",boxShadow:"0 2px 6px rgba(12,30,32,0.06)",textDecoration:"none",color:"inherit"},children:[n.jsx("div",{style:{padding:"16px 16px 0",background:"#eef1f3"},children:n.jsx("div",{style:{aspectRatio:"880 / 550",overflow:"hidden",background:"#fff",borderRadius:"8px 8px 0 0",border:"1px solid rgba(12,30,32,0.08)",borderBottom:"none",boxShadow:"0 -1px 0 rgba(12,30,32,0.02)"},children:n.jsx("img",{src:m.thumbnail,alt:`${m.title} preview`,loading:"lazy",style:{width:"100%",height:"100%",objectFit:"cover",objectPosition:"top",display:"block"},onError:y=>{y.currentTarget.style.display="none"}})})}),n.jsxs("div",{style:{padding:"18px 24px 24px",display:"flex",flexDirection:"column",gap:"8px",flex:1},children:[n.jsx("span",{style:{alignSelf:"flex-start",padding:"4px 9px",borderRadius:"999px",background:f.tint,color:f.ink,fontSize:"10px",fontWeight:600,letterSpacing:"0.09em",textTransform:"uppercase"},children:m.category}),n.jsx("h4",{className:"heading-s",style:{fontSize:"19px",color:"#0c1e20",margin:0},children:m.title}),n.jsx("p",{className:"body-s",style:{color:"#5a777d",margin:0,flex:1},children:e9(m.slug,m.description)}),n.jsx("span",{style:{fontSize:"13px",fontWeight:600,color:"#509a79",marginTop:"4px"},children:"View example →"})]})]},m.slug)})}),h.length===0&&n.jsxs("div",{style:{textAlign:"center",padding:"80px 24px",color:"#5a777d"},children:[n.jsx("p",{className:"body-m",style:{margin:"0 0 12px"},children:"No apps match your search."}),n.jsx("button",{type:"button",onClick:()=>{t(""),u("All")},style:{background:"none",border:"none",color:"#509a79",fontSize:"14px",fontWeight:600,cursor:"pointer"},children:"Clear filters"})]})]})]}),n.jsx("section",{style:{background:"#fafafa",borderTop:"1px solid #e6ebe7"},children:n.jsxs("div",{style:{maxWidth:"1200px",margin:"0 auto",padding:"72px 40px"},children:[n.jsx("div",{style:{fontSize:"12px",fontWeight:500,letterSpacing:"0.14em",textTransform:"uppercase",color:"#5a777d",textAlign:"center"},children:"How miniapps are built"}),n.jsx("h2",{className:"heading-l",style:{color:"#0c1e20",textAlign:"center",margin:"12px auto 44px",maxWidth:"560px",textWrap:"balance"},children:"From a sentence to a shipped app."}),n.jsx("div",{className:"mae-how",style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:"24px"},children:Jge.map(m=>n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",padding:"28px",border:"1px solid rgba(12,30,32,0.08)"},children:[n.jsx("div",{style:{display:"inline-flex",alignItems:"center",justifyContent:"center",width:"34px",height:"34px",borderRadius:"10px",background:"#e5f1eb",color:"#316851",fontWeight:600,fontSize:"15px"},children:m.n}),n.jsx("h3",{className:"heading-s",style:{fontSize:"18px",color:"#0c1e20",margin:"16px 0 8px"},children:m.title}),n.jsx("p",{className:"body-s",style:{color:"#5a777d",margin:0},children:m.body})]},m.n))})]})}),n.jsx("section",{style:{background:"#fafafa",borderTop:"1px solid #e6ebe7",borderBottom:"1px solid #e6ebe7"},children:n.jsxs("div",{style:{maxWidth:"640px",margin:"0 auto",padding:"88px 40px",textAlign:"center"},children:[n.jsx("h2",{className:"heading-l",style:{color:"#0c1e20",margin:0,textWrap:"balance"},children:"Build your own, on your own numbers."}),n.jsx("p",{className:"body-m",style:{color:"#5a777d",margin:"20px auto 30px",maxWidth:"500px"},children:"Connect your go-to-market data and turn a prompt into an app like these — live for the whole team."}),n.jsx(J,{to:Wt,className:"cta w-button",children:"Request a demo"})]})})]})},tye=()=>{const{slug:e=""}
3680=Ta(),t=_M(e),a=M.useRef(null),[i,r]=M.useState("loading");return M.useEffect(()=>{const o=a.current;if(!t||!o)return;let l=!0,d=null;const u=new AbortController;return r("loading"),KG(o,e,{signal:u.signal}).then(h=>{if(!l){h();return}d=h,r("ready")}).catch(h=>{l&&(console.error(h),r("error"))}),()=>{l=!1,u.abort(),d&&d()}},[e,t]),t?n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:`${t.title} · Miniapp Example`,description:t.description,canonicalUrl:`https://upside.tech${xa(t.slug)}`,ogImage:sG(t.slug)}),n.jsxs("section",{className:"app-example-viewer__intro",children:[n.jsx(J,{to:xa(),className:"body-xs app-example-viewer__intro-back",children:"← All miniapp examples"}),n.jsx("h1",{className:"heading-l app-example-viewer__intro-title",children:t.title}),n.jsx("p",{className:"body-m app-example-viewer__intro-desc",children:t.description})]}),n.jsx("section",{className:"app-example-viewer__app-section",children:n.jsx("div",{className:"app-example-viewer__app-inner",children:n.jsxs("div",{className:"app-example-viewer__app-frame",children:[n.jsx("div",{ref:a,className:i==="ready"?void 0:"app-example-viewer__app-host--loading",style:i==="ready"?void 0:{"--app-example-loading-height":`${t.height}px`}},e),i==="loading"&&n.jsx("div",{"aria-hidden":"true",className:"app-example-viewer__app-loading",children:"Loading example…"}),i==="error"&&n.jsx("div",{className:"app-example-viewer__app-error",children:n.jsx("p",{className:"body-m",style:{margin:0},children:"This example could not be loaded. Please refresh the page or try again later."})})]})})})]}):n.jsx(yt,{to:xa(),replace:!0})},ax="/resources/skills",JM=[{slug:"codex-micro",title:"Codex Micro Setup",tag:"Hardware",nameLine:"codex-micro · keymap + Wispr Flow",description:"A labeled Work Louder Codex Micro layout, plus the guarded one-cell keymap edit that makes the microphone key visible to Wispr Flow.",seoTitle:"Codex Micro Setup | Skill Library",seoDescription:"A labeled Codex Micro map and a reversible keymap edit so the mic key works as Wispr Flow push-to-talk. Keymap editing, not firmware flashing.",getStartedLede:"Download the guarded utility, connect the Micro over USB, then read, plan, apply, and verify. Apply and restore refuse to run without an explicit flag. This edits one keymap cell. It does not flash firmware.",zipRoot:"codex-micro-wispr-flow",zipFilename:"codex-micro-wispr-flow.zip",files:[{id:"cm-readme",path:"README.md",label:"README.md",meta:"Guarded workflow"},{id:"cm-util",path:"codex-micro-keymap-safe.js",label:"codex-micro-keymap-safe.js",meta:"Read · plan · apply · restore"}]},{slug:"gtm-brain",title:"GTM Brain",tag:"Knowledge System",nameLine:"gtm-brain · vault + canon + dream",description:"A durable, source-aware knowledge system for GTM work. Canon, source guides, and a promotion path — so people and agents share the same context without treating a wiki as a database.",seoTitle:"GTM Brain | Skill Library",seoDescription:"Build a durable GTM Brain: a shared working-context folder with canon, source guides, and a promotion path for new learning.",getStartedLede:"The vault is a local markdown folder. Download Obsidian if you need it. Then unzip the kit, copy the templates into the vault, and start every session from the vault root. Ask for named sources before writing canon. Gaps stay unverified until you fill them. The kit is markdown only and contains no private company data.",zipRoot:"gtm-brain-package",zipFilename:"gtm-brain-package.zip",relatedKit:{slug:"chief-of-staff-setup",label:"Chief of Staff Agent System",blurb:"Once the brain is enabled, add the dispatcher and specialist layer."},files:[{id:"cos-agents",path:"AGENTS.md",label:"AGENTS.md",meta:"Vault boot file for Codex"},{id:"cos-home",path:"templates/home.md",label:"home.md",meta:"Template · navigation"},{id:"cos-hard-rules",path:"templates/hard-rules.md",label:"hard-rules.md",meta:"Template · canon"},{id:"cos-facts",path:"templates/company-facts.md",label:"company-facts.md",meta:"Template · durable facts"},{id:"cos-source",path:"templates/source-guide.md",label:"source-guide.md",meta:"Template · one per source"},{id:"cos-inbox",path:"templates/inbox.md",label:"inbox.md",meta:"Template · not canon"},{id:"cos-promotion",path:"templates/knowledge-promotion.md",label:"knowledge-promotion.md",meta:"Template · write path"},{id:"cos-dream-log",path:"templates/dream-log.md",label:"dream-log.md",meta:"Template · daily log"},{id:"cos-dream",path:"skills/dream/SKILL.md",label:"dream",meta:"Daily write-back job"}]},{slug:"chief-of-staff-setup",title:"Chief of Staff Agent System",tag:"Operating System",nameLine:"chief-of-staff · dispatcher + specialists + share",description:"A dispatcher and specialist-agent organization on top of an enabled GTM Brain. The CoS routes, verifies, and reports. Specialists do the domain work.",seoTitle:"Chief of Staff Agent System | Skill Library",seoDescription:"Build a Chief of Staff and multi-agent system: a dispatcher, specialist roles, handoffs, and verification on top of a GTM Brain.",getStartedLede:"Build the GTM Brain first. Then download this kit, copy SKILL.md to .agents/skills/chief-of-staff-setup/ (Codex) or .cursor/skills/chief-of-staff-setup/ (Cursor), and ask a fresh session to run the Chief of Staff setup. The kit is markdown only and contains 
3680no private company data.",zipRoot:"chief-of-staff-setup-package",zipFilename:"chief-of-staff-setup-package.zip",relatedKit:{slug:"gtm-brain",label:"GTM Brain",blurb:"This layer assumes a GTM Brain is already the shared working-context folder."},files:[{id:"cos-skill",path:"SKILL.md",label:"SKILL.md",meta:"Setup skill · hand to an agent"},{id:"cos-agents",path:"AGENTS.md",label:"AGENTS.md",meta:"Vault boot file for Codex"},{id:"cos-readme",path:"README.md",label:"README.md",meta:"Package overview"},{id:"cos-dream",path:"skills/dream/SKILL.md",label:"dream",meta:"Daily write-back job"},{id:"cos-share",path:"skills/share-learnings/SKILL.md",label:"share-learnings",meta:"Weekly Notion export"},{id:"cos-hard-rules",path:"templates/hard-rules.md",label:"hard-rules.md",meta:"Template · canon"},{id:"cos-inbox",path:"templates/inbox.md",label:"inbox.md",meta:"Template · not canon"},{id:"cos-home",path:"templates/home.md",label:"home.md",meta:"Template · navigation"},{id:"cos-promotion",path:"templates/knowledge-promotion.md",label:"knowledge-promotion.md",meta:"Template · write path"},{id:"cos-facts",path:"templates/company-facts.md",label:"company-facts.md",meta:"Template · durable facts"},{id:"cos-source",path:"templates/source-guide.md",label:"source-guide.md",meta:"Template · one per source"},{id:"cos-dream-log",path:"templates/dream-log.md",label:"dream-log.md",meta:"Template · daily log"},{id:"cos-share-log",path:"templates/share-log.md",label:"share-log.md",meta:"Template · weekly log"}]},{slug:"apex",title:"APEX: Autonomous Paid Execution",tag:"Paid Search",nameLine:"apex-orchestrator + 7 specialists",description:"A daily Google Ads pipeline of one orchestrator and seven specialist skills: search-term cleanup, RSA refreshes, landing-page prioritization, and multi-week experimentation. All running on plain markdown.",seoTitle:"APEX · Paid Search Pipeline | Skill Library",seoDescription:"A daily Google Ads pipeline of one orchestrator and seven specialist skills. Markdown-only skill kit for paid search.",getStartedLede:"Download the zip, drop the skill files into your harness skills directory, and ask the orchestrator to run the daily pass.",zipRoot:"apex-skill-kit",zipFilename:"apex-skill-kit.zip",files:[{id:"apex-orchestrator",path:"skills/apex-orchestrator/SKILL.md",label:"apex-orchestrator",meta:"Orchestrator · pure router"},{id:"apex-optimize-keywords",path:"skills/apex-optimize-keywords/SKILL.md",label:"apex-optimize-keywords",meta:"Daily · Sonnet"},{id:"apex-optimize-ads",path:"skills/apex-optimize-ads/SKILL.md",label:"apex-optimize-ads",meta:"Weekly · Opus"},{id:"apex-lp-prioritizer",path:"skills/apex-lp-prioritizer/SKILL.md",label:"apex-lp-prioritizer",meta:"On demand · Opus"},{id:"apex-lp-research",path:"skills/apex-lp-research/SKILL.md",label:"apex-lp-research",meta:"On demand · Opus"},{id:"apex-create-landing-page",path:"skills/apex-create-landing-page/SKILL.md",label:"apex-create-landing-page",meta:"On demand · Opus"},{id:"apex-ad-creator",path:"skills/apex-ad-creator/SKILL.md",label:"apex-ad-creator",meta:"On demand · Opus"},{id:"apex-experimentation",path:"skills/apex-experimentation/SKILL.md",label:"apex-experimentation",meta:"Multi-week · Opus"},{id:"apex-shared-commanders-intent",path:"skills/apex-shared/commanders-intent.md",label:"commanders-intent.md",meta:"Shared · read every run"},{id:"apex-shared-structural-rules",path:"skills/apex-shared/structural-rules.md",label:"structural-rules.md",meta:"Shared · read every run"}]},{slug:"website-messaging-audit",title:"Website Messaging Audit",tag:"Marketing Strategy",nameLine:"website-messaging-audit · 1 skill, 8 phases",description:"A reusable skill that runs a full positioning audit on any company’s website — gap report, copy rewrites, on-brand HTML mockup, Figma spec, and a 90-day marketing strategy grounded in real funnel and customer-language data.",seoTitle:"Website Messaging Audit | Skill Library",seoDescription:"A reusable skill that runs a positioning audit, drafts the copy, mocks the homepage, and writes a 90-day marketing strategy.",getStartedLede:"Download, unzip, copy the contents to .curs
3680or/skills/website-messaging-audit/ in your project, then ask Cursor or Claude Code to run a website messaging audit. Works with any harness that reads SKILL.md files.",zipRoot:"website-messaging-audit-package",zipFilename:"website-messaging-audit-package.zip",files:[{id:"wma-skill",path:"SKILL.md",label:"SKILL.md",meta:"The skill · 4 stages + optional v2"},{id:"wma-tpl-intake",path:"templates/intake.md",label:"intake.md",meta:"Template · URL + provided docs"},{id:"wma-tpl-gap-report",path:"templates/gap-report.md",label:"gap-report.md",meta:"Template · 7-dimension diagnosis"},{id:"wma-tpl-rewrite-drafts",path:"templates/rewrite-drafts.md",label:"rewrite-drafts.md",meta:"Template · 3 hero alternatives"},{id:"wma-readme",path:"README.md",label:"README.md",meta:"Package overview"}]}];JM.map(e=>e.slug);function nye(e){if(e)return JM.find(t=>t.slug===e)}function OH(e){return`${ax}/${e}`}const aye={"Knowledge System":{tint:"rgba(80,154,121,0.14)",ink:"#316851"},"Operating System":{tint:"rgba(80,154,121,0.14)",ink:"#316851"},"Paid Search":{tint:"rgba(52,123,209,0.10)",ink:"#2a5f9e"},"Marketing Strategy":{tint:"rgba(230,119,74,0.13)",ink:"#b0512a"},Hardware:{tint:"rgba(12,30,32,0.08)",ink:"#3d5559"}},iye=e=>aye[e]??{tint:"rgba(12,30,32,0.06)",ink:"#5a777d"},rye=()=>n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:"Skill Library | Markdown Skill Kits",description:"Markdown-only skill kits we use to run parts of our business on autopilot. Drop them into Cursor, Claude Code, or Codex.",canonicalUrl:`https://upside.tech${ax}`}),n.jsx(Hr,{eyebrow:"Upside · Skill Library",title:"Skill Library",description:"Markdown-only skill kits we use to run parts of our business on autopilot. Drop them into Cursor, Claude Code, or Codex."}),n.jsx("div",{className:"sk-page",children:n.jsxs("div",{className:"sk-page__inner sk-page__inner--library",children:[n.jsx("div",{className:"sk-library",children:JM.map(e=>{const t=iye(e.tag);return n.jsxs(J,{to:OH(e.slug),className:"sk-tile",children:[n.jsx("span",{className:"sk-tile__tag",style:{background:t.tint,color:t.ink},children:e.tag}),n.jsx("h2",{className:"sk-tile__title",children:e.title}),n.jsx("p",{className:"sk-tile__desc",children:e.description}),n.jsx("span",{className:"sk-tile__cta",children:"View skill kit →"})]},e.slug)})}),n.jsx("p",{className:"sk-footer-note",children:"More skill kits coming soon."})]})})]}),$v="Geist, Inter, system-ui, sans-serif",lS="ui-monospace, SFMono-Regular, Menlo, Consolas, monospace";function V4(e){return e.size==="small"?{w:130,h:50}:e.size==="wide"?{w:480,h:62}:{w:280,h:200}}const t9=[{id:"claude",label:"Orchestrator",kind:"DAILY · Opus 4.7",blurb:"Routes intent to specialists.",size:"hero",x:100,y:200,color:"#D97757"},{id:"art-intent",label:"Intent",kind:"RESOURCE",size:"small",x:50,y:30,color:"#0C1E20",icon:"markdown",navigateTo:"art-intent"},{id:"art-rules",label:"Rules",kind:"RESOURCE",size:"small",x:190,y:30,color:"#0C1E20",icon:"markdown",navigateTo:"art-rules"},{id:"art-memory",label:"Strategy Log",kind:"RESOURCE",size:"small",x:330,y:30,color:"#835CE0",icon:"memory",navigateTo:"art-memory"},{id:"optimize-keywords",label:"Keyword Optimizer",kind:"Reviews search terms, promotes or negates them.",size:"wide",x:660,y:20,color:"#F59E0B",badges:[{text:"SUBAGENT",fg:"#835CE0",bg:"#f0e9ff"},{text:"READY",fg:"#2d6a52",bg:"#d1fae5"}],navigateTo:"optimize-keywords"},{id:"optimize-ads",label:"Ad Optimizer",kind:"Pauses low-CTR ads, queues new RSA challengers.",size:"wide",x:660,y:98,color:"#E6774A",badges:[{text:"READY",fg:"#2d6a52",bg:"#d1fae5"}],navigateTo:"optimize-ads"},{id:"ad-creator",label:"Ad Creator",kind:"Generates 3 RSA variants for a live landing page.",size:"wide",x:660,y:176,color:"#D97757",badges:[{text:"READY",fg:"#2d6a52",bg:"#d1fae5"}],navigateTo:"ad-creator"},{id:"lp-prioritizer",label:"Landing Page Prioritizer",kind:"Ranks which landing pages to build next by ROI.",size:"wide",x:660,y:254,color:"#347BD1",badges:[{text:"REFINING",fg:"#9a3412",bg:"#fff1e6"}],navigateTo:"lp-prioritizer"},{id:"lp-research",label:"Landing Page Researcher",kind:"Pulls research data for one target query.",size:"wide",x:660,y:332,color:"#2540EB",badges:[{text:"REFINING",fg:"#9a3412",bg:"#fff1e6"}],navigateTo:"lp-research"},{id:"create-landing-page",label:"Landing Page Creator",kind:"Writes LP markdown, opens GitHub PR.",size:"wide",x:660,y:410,color:"#835CE0",badges:[{text:"REFINING",fg:"#9a3412",bg:"#fff1e6"}],navigateTo:"create-landing-page"},{id:"experimentation",label:"Experiment Manager",kind:"Tracks multi-week tests, decides rollouts.",size:"wide",x:660,y:488,color:"#509A79",badges:[{text:"BUILDING",fg:"#1d4ed8",bg:"#dbeafe"}],navigateTo:"experimentation"}
3680],oye=[["art-intent","claude"],["art-rules","claude"],["art-memory","claude"],["claude","art-rules"],["claude","art-memory"],["claude","optimize-keywords"],["claude","optimize-ads"],["claude","lp-prioritizer"],["claude","lp-research"],["claude","create-landing-page"],["claude","ad-creator"],["claude","experimentation"]];function sye(e,t){const a=V4(e),i=V4(t),r=e.x+a.w/2,o=e.y+a.h/2,l=t.x+i.w/2,d=t.y+i.h/2,u=l-r,h=d-o;return Math.abs(h)>Math.abs(u)*.7?h>0?{x1:r,y1:e.y+a.h,x2:l,y2:t.y,vertical:!0}:{x1:r,y1:e.y,x2:l,y2:t.y+i.h,vertical:!0}:u>0?{x1:e.x+a.w,y1:o,x2:t.x,y2:d,vertical:!1}:{x1:e.x,y1:o,x2:t.x+i.w,y2:d,vertical:!1}}function lye(e){if(e.vertical){const a=(e.y1+e.y2)/2;return`M${e.x1},${e.y1} C${e.x1},${a} ${e.x2},${a} ${e.x2},${e.y2}`}const t=(e.x2-e.x1)/2;return`M${e.x1},${e.y1} C${e.x1+t},${e.y1} ${e.x2-t},${e.y2} ${e.x2},${e.y2}`}function cye({x:e,y:t,size:a}){const i=a/24;return n.jsxs("g",{transform:`translate(${e},${t}) scale(${i})`,children:[n.jsx("rect",{x:"3",y:"6",width:"18",height:"12",rx:"1.5",fill:"none",stroke:"#509A79",strokeWidth:"1.8"}),n.jsx("path",{d:"M6 15 V 9 L 8.5 12 L 11 9 V 15",fill:"none",stroke:"#509A79",strokeWidth:"1.6",strokeLinejoin:"round"}),n.jsx("path",{d:"M16 9 V 15 M14 13 L 16 15 L 18 13",fill:"none",stroke:"#509A79",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})]})}function dye({x:e,y:t,size:a}){const i=a/24;return n.jsxs("g",{transform:`translate(${e},${t}) scale(${i})`,children:[n.jsx("rect",{x:"4",y:"10",width:"14",height:"11",rx:"1.5",fill:"#fff",stroke:"#835CE0",strokeWidth:"1.6"}),n.jsx("rect",{x:"6",y:"6.5",width:"14",height:"11",rx:"1.5",fill:"#fff",stroke:"#835CE0",strokeWidth:"1.6"}),n.jsx("line",{x1:"9",y1:"11",x2:"17",y2:"11",stroke:"#835CE0",strokeWidth:"1.4"}),n.jsx("line",{x1:"9",y1:"14",x2:"14",y2:"14",stroke:"#835CE0",strokeWidth:"1.4"})]})}function uye({name:e,x:t,y:a,size:i}){return e==="memory"?n.jsx(dye,{x:t,y:a,size:i}):n.jsx(cye,{x:t,y:a,size:i})}function hye({n:e,active:t,onSelect:a}){const i=V4(e);return n.jsxs("g",{transform:`translate(${e.x},${e.y})`,role:"button",tabIndex:0,"aria-label":e.label,style:{cursor:"pointer"},onClick:()=>a(e.id),onKeyDown:r=>{(r.key==="Enter"||r.key===" ")&&(r.preventDefault(),a(e.id))},children:[t?n.jsx("rect",{className:"sk-apex-halo",x:-6,y:-6,width:i.w+12,height:i.h+12,rx:"14",fill:"none",stroke:e.color,strokeWidth:"2"}):null,n.jsx("rect",{width:i.w,height:i.h,rx:"10",fill:"#fff",stroke:t?e.color:"#E2E7ED",strokeWidth:t?2:1}),e.navigateTo?n.jsx("rect",{width:i.w,height:i.h,rx:"10",fill:"none",stroke:e.color,strokeWidth:"1",strokeDasharray:"3 3",opacity:"0.5"}):null,e.size==="small"?n.jsxs(n.Fragment,{children:[e.icon?n.jsx(uye,{name:e.icon,x:8,y:13,size:24}):null,n.jsx("text",{x:"40",y:"30",fontSize:"13",fill:"#0C1E20",fontWeight:"600",fontFamily:$v,children:e.label})]}):null,e.size==="wide"?n.jsxs(n.Fragment,{children:[n.jsx("text",{x:"20",y:"27",fontSize:"17",fill:"#0C1E20",fontWeight:"600",letterSpacing:"-0.01em",fontFamily:$v,children:e.label}),n.jsx("text",{x:"20",y:"47",fontSize:"11",fill:"#64748b",fontFamily:lS,letterSpacing:"0.4",children:e.kind}),e.badges?e.badges.slice().reverse().reduce((r,o)=>{const d=o.text.length*5.6+14;return r.cursor-=d,r.nodes.push(n.jsxs("g",{transform:`translate(${r.cursor},${i.h-20})`,children:[n.jsx("rect",{width:d,height:"16",rx:"3",fill:o.bg,stroke:o.fg,strokeWidth:"1"}),n.jsx("text",{x:d/2,y:"11",fontSize:"9",fill:o.fg,fontWeight:"700",textAnchor:"middle",letterSpacing:"0.6",fontFamily:lS,children:o.text})]},o.text)),r.cursor-=4,r},{nodes:[],cursor:i.w-8}).nodes:null]}):null,e.size==="hero"?n.jsxs(n.Fragment,{children:[n.jsx("text",{x:"20",y:"42",fontSize:"12",fill:"#64748b",fontFamily:lS,letterSpacing:"0.5",children:e.kind}),n.jsx("text",{x:"20",y:"110",fontSize:"26",fill:"#0C1E20",fontWeight:"700",letterSpacing:"-0.015em",fontFamily:$v,children:e.label}),n.jsx("text",{x:"20",y:"142",fontSize:"13",fill:"#64748b",fontFamily:$v,children:e.blurb})]}):null]})}function pye({activeId:e,onSelect:t}){const a=Object.fromEntries(t9.map(i=>[i.id,i]));return n.jsxs("svg",{viewBox:"0 0 1280 580",preserveAspectRatio:"xMidYMid meet",role:"img","aria-label":"APEX dispatch map: orchestrator routes work to 
3680seven specialists",children:[n.jsxs("defs",{children:[n.jsx("marker",{id:"apex-arrow",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"7",markerHeight:"7",orient:"auto",children:n.jsx("path",{d:"M0,0 L10,5 L0,10 z",fill:"#94a3b8"})}),n.jsxs("linearGradient",{id:"apex-flow",x1:"0",x2:"1",children:[n.jsx("stop",{offset:"0%",stopColor:"#509A79",stopOpacity:"0"}),n.jsx("stop",{offset:"50%",stopColor:"#509A79",stopOpacity:"1"}),n.jsx("stop",{offset:"100%",stopColor:"#509A79",stopOpacity:"0"})]})]}),oye.map(([i,r])=>{const o=a[i],l=a[r];if(!o||!l)return null;const d=lye(sye(o,l)),u=e===i||e===r;return n.jsxs("g",{children:[n.jsx("path",{d,stroke:"#94a3b8",strokeWidth:"1.5",fill:"none",markerEnd:"url(#apex-arrow)"}),u?n.jsx("path",{className:"sk-apex-flow",d,stroke:"url(#apex-flow)",strokeWidth:"3",fill:"none",strokeDasharray:"8 6"}):null]},`${i}-${r}`)}),t9.map(i=>n.jsx(hye,{n:i,active:i.id===e,onSelect:t},i.id))]})}function mye({detail:e,groupName:t,onClose:a,onCycle:i,renderIcon:r}){M.useEffect(()=>{const d=u=>{if(u.key==="Escape"){a();return}u.key==="ArrowRight"?(u.preventDefault(),i(1)):u.key==="ArrowLeft"&&(u.preventDefault(),i(-1))};return document.addEventListener("keydown",d),()=>document.removeEventListener("keydown",d)},[a,i]);const o=e.context??[],l=o.some(d=>d.icon&&r);return n.jsxs("div",{className:"sk-modal","data-group":t??"",role:"dialog","aria-modal":"true","aria-labelledby":"sk-modal-title",children:[n.jsx("div",{className:"sk-modal__backdrop",onClick:a}),n.jsxs("div",{className:"sk-modal__dialog",children:[n.jsx("button",{type:"button",className:"sk-modal__close",onClick:a,"aria-label":"Close",children:"×"}),n.jsxs("div",{className:"sk-modal__content",children:[n.jsx("h3",{id:"sk-modal-title",children:e.title}),n.jsxs("div",{children:[e.actions.length?n.jsxs(n.Fragment,{children:[n.jsx("h4",{children:"What it does"}),n.jsx("ul",{children:e.actions.map(d=>n.jsx("li",{children:d},d))})]}):n.jsx("div",{children:"Details coming soon."}),o.length?n.jsxs(n.Fragment,{children:[n.jsx("h4",{children:e.contextLabel??"Context"}),l?n.jsx("div",{className:"sk-modal__tiles",children:o.map(d=>n.jsxs("div",{className:"sk-modal__tile",children:[n.jsx("div",{className:"sk-modal__tile-logo",children:d.icon&&r?r(d.icon):null}),n.jsx("div",{className:"sk-modal__tile-label",children:d.label}),n.jsx("div",{className:"sk-modal__tile-desc",children:d.desc})]},d.label))}):n.jsx("ul",{children:o.map(d=>n.jsxs("li",{children:[n.jsx("span",{className:"sk-modal__ctx-label",children:d.label})," ",n.jsxs("span",{className:"sk-modal__ctx-desc",children:["— ",d.desc]})]},d.label))})]}):null]}),t?n.jsxs("div",{className:"sk-modal__hint",children:[n.jsx("kbd",{children:"←"})," ",n.jsx("kbd",{children:"→"})," to navigate"]}):null]})]})]})}const fye=`---
3681name: chief-of-staff-setup
3682description: Stand up an AI Chief of Staff that holds organisational memory in a markdown vault, coordinates specialist agents, dreams overnight so the brain updates itself, and optionally shares portable learnings to a company-wide Notion other Chiefs of Staff can pull from. Use when the user wants a Chief of Staff agent, an Obsidian brain, a CoS vault, persistent agent memory, a dreaming loop, or to copy this system into Codex, Cursor, or Claude Code.
3683---
3684
3685# Building a Chief of Staff Agent System
3686
3687A complete setup guide for standing up an AI Chief of Staff that coordinates a team of specialist agents against your real business systems.
3688
3689Written from a system that has been running in production since mid-2026. Everything here is derived from things that actually broke, not from theory. The sections marked **HARD RULE** are non-negotiable; each one exists because its absence caused a specific incident.
3690
3691This document is self-contained. Hand it to an agent and it can build the system.
3692
3693The reference implementation runs in **Codex** against an **Obsidian** vault of plain markdown. The same files work in Cursor or Claude Code. The vault is the product; the harness is interchangeable.
3694
3695---
3696
3697## 0. How to run this skill
3698
3699You are setting up the system, not role-playing as the Chief of Staff yet.
3700
37011. Confirm the harness (Codex, Cursor, or Claude Code) and the vault path. Default vault name: \`chief-of-staff\`.
37022. Create the folder tree in section 3.
37033. Copy \`AGENTS.md\` from this kit to the vault root. Codex reads it at the start of every session.
37044. Copy \`templates/\` into \`_Shared/\` (and \`_Inbox.md\`). Leave company-specific fields blank until context building.
37055. Copy \`skills/dream/\` and \`skills/share-learnings/\` into the vault's \`.agents/skills/\` (Codex) and/or \`.cursor/skills/\` (Cursor).
37066. Run context building (section 12) before you write any company facts. Ask for docs, Drive folders, email, calendar, and spoken context. Read what they point you at. Rewrite it into canon. Do not invent.
37077. Schedule the daily dream and the weekly share job.
37088. Stop. Leave gaps marked \`unverified as of DATE\`.
3709
3710Work through the checklist in section 14 and report what you created, what you still need from the principal, and which sources are connected.
3711
3712---
3713
3714## 1. What you are building
3715
3716A **Chief of Staff (CoS)** is a single long-running agent session that:
3717
3718- Holds the canonical knowledge base ("the brain") for the whole organisation
3719- Coordinates a team of specialist agent sessions (CRO, CFO, Salesforce Admin, and so on)
3720- Serves one principal (the founder or exec it reports to)
3721- **Delegates domain work rather than doing it**
3722- Owns the write path to shared canon, so knowledge does not fork
3723- **Dreams**: at the end of the day it writes what it learned back into the vault, corrects itself, and leaves the brain better than it found it
3724- **Shares, carefully**: a weekly job publishes portable operating facts to a shared Notion other Chiefs of Staff in the company can pull from. Private facts never leave the vault.
3725
3726It is not a chatbot. It is the place where organisational memory lives and where cross-agent decisions get made.
3727
3728### The three-layer model
3729
3730| Layer | What it is | Who writes it |
3731|---|---|---|
3732| **Brain** | A markdown vault (Obsidian works well) holding durable facts | CoS only, for shared canon |
3733| **Agents** | Long-running sessions, each owning a domain | Each owns its own agent note |
3734| **Jobs** | Scheduled runs that produce output and end | Owned by a standing agent |
3735
3736Confusing agents with jobs is the single most common structural mistake. See section 5. Dreaming and weekly sharing are **jobs**. The CoS is a **standing agent**.
3737
3738---
3739
3740## 2. Prerequisites
3741
37421. **A markdown vault**, version controlled. Obsidian is the reference implementation because \`[[wikilinks]]\` make the graph navigable, but any linked-markdown tool works. Start the agent from the vault root so it can read and write the files.
37432. **Source connections** to the systems that hold truth: docs, Drive folders, email, calendar, Upside / CRM, chat. The setup agent must ask for specific destinations (section 12). MCP servers are the usual wiring.
37443. **A session platform** that supports long-running agent sessions, scheduled automations, and (optionally) inter-session messaging. C
3744odex is the reference; Cursor and Claude Code also work.
37454. **One principal.** A CoS with two bosses has no tiebreaker and will stall.
37465. **Optional, for company-wide learning:** a shared Notion page or database that every CoS in the company can read. Used only by the weekly share job.
3747
3748---
3749
3750## 3. The brain: structure
3751
3752\`\`\`
3753vault/
3754  AGENTS.md                   <- harness boot file. Codex reads this every session.
3755  Home.md                     <- navigation index, links everything
3756  README - Brain Architecture.md
3757  _Shared/                    <- CANON. every agent reads. only CoS writes.
3758    Hard Rules.md
3759    Working Style & Preferences.md
3760    Communication & Formatting.md
3761    <System>.md               <- one per major system (CRM, email, Drive, Upside). Copy templates/source-guide.md.
3762    <Person>.md               <- the principal, key stakeholders
3763    Company Facts.md
3764    Glossary.md
3765    Key IDs & Links.md
3766    Skills Index.md
3767    Knowledge Sources & Promotion.md
3768    Cross-Session Coordination.md
3769    _Inbox.md                 <- staging area, NOT canon
3770  CoS/                        <- private to CoS
3771    Agent Roster.md
3772    Automations & Schedules.md
3773    Dream Log.md              <- dated entries from the daily dream job
3774    Share Log.md              <- what was published to shared Notion, and what was held back
3775    Projects/
3776    Playbooks/
3777  Agents/
3778    <Agent Name>/
3779      <Agent Name>.md         <- that agent's own brain
3780  .agents/skills/             <- Codex skills (dream, share-learnings, plus any you write)
3781    dream/SKILL.md
3782    share-learnings/SKILL.md
3783\`\`\`
3784
3785### Structural rules
3786
3787**One fact, one home.** If a fact belongs in two notes, pick the better one and link from the other. Duplicated facts diverge, and the divergence is invisible until someone acts on the stale copy.
3788
3789**Current state at the TOP, history at the BOTTOM.** Whoever reads the note under time pressure reads the first screen. Never make them scroll past last year to find what is true today.
3790
3791**Every non-obvious fact carries provenance:** who established it, when, and how. Format: \`(Agent Name, YYYY-MM-DD.)\` A fact with no date cannot be aged out, so it lives forever whether or not it is still true.
3792
3793**Frontmatter on every note:**
3794\`\`\`yaml
3795---
3796type: system | reference | playbook | agent | project | meta
3797tags: [relevant, tags]
3798updated: YYYY-MM-DD
3799---
3800\`\`\`
3801
3802**Stale is worse than missing.** A missing fact makes an agent go look. A wrong fact makes it act confidently and incorrectly. When you cannot verify something, write "unverified as of DATE" rather than stating it plainly.
3803
3804**The inbox is not canon.** Agents propose into \`_Inbox.md\`. CoS reviews, decides, promotes into \`_Shared/\`, and marks the inbox entry as promoted. Without this gate every agent writes to canon and canon becomes a chat log.
3805
3806---
3807
3808## 4. HARD RULES
3809
3810Copy these into \`_Shared/Hard Rules.md\` and have every agent read them at session start. Adjust the specifics to your business, but keep the shape: each rule names a real irreversible risk.
3811
38121. **Never send email. Drafts only.** An agent that can send can send the wrong thing to a customer, and there is no undo. Compose drafts and let a human press send.
38132. **Never close or archive sessions or tasks.** Moving work into a terminal state is the principal's judgment. When done, set status to \`needs-review\`.
38143. **Deletes require explicit, itemized confirmation.** See the destructive action protocol below.
38154. **When ambiguous or irreversible, propose, do not assume.** The cost of asking is one message. The cost of guessing wrong on an irreversible action is unbounded.
38165. **Read a source's guide before its first use.** Every integration has quirks that will silently corrupt output if unknown.
38176. **Do not edit shared canon directly** unless you are CoS. Propose via the inbox.
38187. **Pick a formatting rule and hold it.** Ours is "no em-dashes, ever," because it makes agent-written text identifiable at a glance. Any consistent rule works; an inconsistently applied one does not.
38198. **Never publish private facts to the shared Notion.** The weekly share job may only export portable operating knowledge. See section 8.
3820
3821### Destructive action protocol
3822
3823Before deleting anything (fields, objects, records, files, automations):
3824
38251. **Enumerate** every component that will be destroyed, with exact identifiers and what depends on it.
38262. **Restate the request verbatim.** If the wording is even slightly ambiguous, ask. Do not guess which thing they meant.
38273. **Wait for explicit confirmation of the exact list.** "Yes, delete X, Y and Z," not "go ahead."
38284. **Never bundle.** If asked to remove one thing, remove exactly that thing.
38295. **Default to the smallest interpretation.**
3830
3831**Permission mode does not override this.** Autonomous execution authorizes n
3831on-destructive work. Destruction always needs an itemized confirmation in the current turn.
3832
3833This protocol exists because an ambiguous instruction once destroyed a production field and its trigger. The user meant a different field.
3834
3835---
3836
3837## 5. The agent team
3838
3839### Standing agents vs jobs
3840
3841A **standing agent** is a durable session that owns a domain, accumulates knowledge, and has a brain note. A **job** is a scheduled run that produces output and ends.
3842
3843Both appear as sessions. They are not the same thing and must not be filed the same way. A job's output should be archivable noise; a standing agent's session must never be auto-archived.
3844
3845Mark standing agents with a distinguishing **status** (we use \`chief-of-staff\`). Then:
3846
3847> **The live board is the source of truth for who exists. Not your roster note.**
3848
3849Resolve the standing set at runtime by querying sessions with that status. Do not hardcode it. Our roster note was accurate when written and wrong six days later because an agent was promoted to standing and nothing wrote back to the vault. Drift runs both directions: new agents that never got added, and folders matching no live session.
3850
3851### A starting team
3852
3853Begin with CoS alone. Add an agent only when a domain generates recurring work. A premature agent is an empty brain note that misleads.
3854
3855| Agent | Owns |
3856|---|---|
3857| **CoS** | Coordination, canon, the principal, the dream job, the share job |
3858| **CRO** | Pipeline, deals, forecast |
3859| **CCO** | Customer health, retention, renewals |
3860| **CFO** | Cash, burn, runway, ARR, board reporting |
3861| **CRM Administrator** | Record work and config, safeguarded |
3862| **General Counsel** | Contracts, IP, privacy |
3863| **Platform Administrator** | The agent platform itself: sources, skills, permissions |
3864
3865### Onboarding a new agent
3866
3867Brief it with: the CoS role and the principal's profile; the Hard Rules; source-guide-before-use plus any known outages; the coordination protocol; propose-only discipline; the formatting rule; and the rule that it writes durable facts to \`_Inbox.md\`, never to \`_Shared/\`.
3868
3869Give it its own brain note under \`Agents/<Name>/\` and tell it that note is its memory, while \`_Shared/\` is read-only to it.
3870
3871---
3872
3873## 6. Coordination protocol
3874
3875**Messages between agents are either delivered or queued.** If the target is mid-turn, your message waits. A queued message has not been read. Never conclude anything from silence; wait for a reply or query status.
3876
3877**Escalate to CoS rather than guessing.** When an agent hits a decision outside its domain, it messages CoS. CoS rules or takes it to the principal.
3878
3879**CoS delegates, it does not do.** When domain work arrives, route it to the owning agent at the start, not after doing half of it yourself. This is the discipline most likely to erode, because doing it yourself feels faster in the moment. It is not, because the knowledge lands in the wrong brain.
3880
3881**Propose-only agents.** Maintenance agents (memory curation, cleanup sweeps, summarization) should propose and never write. Their proposals centralize through CoS. This keeps a single writer on canon.
3882
3883**Rule on proposals explicitly.** When a subordinate agent reports, answer each open question, and say which ones you are holding for the principal. An unanswered proposal gets re-raised every run.
3884
3885---
3886
3887## 7. Memory and knowledge promotion
3888
3889Distinguish three tiers:
3890
38911. **Session context.** Ephemeral. Dies with the turn.
38922. **Agent memory.** Facts that agent needs across sessions. Lives in its own note.
38933. **Canon.** Facts the whole org needs. Lives in \`_Shared/\`. CoS writes.
3894
3895**Promotion path:** agent learns something durable, writes it to \`_Inbox.md\` with provenance and a suggested home. CoS reviews, verifies, promotes, links it, and marks the inbox entry promoted.
3896
3897The daily **dream** is a structured pass over that path: it does not skip the inbox. It proposes, then (if the job is authorized to write as CoS) promotes only what it can verify.
3898
3899**What NOT to store:**
3900- Anything the code or the systems already record. Do not mirror your CRM schema into markdown; query it.
3901- Anything that only matters to the current conversation.
3902- Derived facts that will silently go stale. Store the derivation method instead.
3903
3904**Never let an automated rule overwrite a human annotation.** We once had a mechanical rule ("closed-won implies good fit") resurrect two accounts the principal had explicitly excluded. Human judgments are inputs the rules must respect, not outputs the rules may recompute.
3905
3906---
3907
3908## 8. The loop: write-back, dream, share
3909
3910This is the part that makes the system compound instead of reset every morning.
3911
3912\`\`\`
3913 Principal ──asks──► CoS (standing session)
3914                        │
3915                        ├── delegates domain work ──► specialist agents
3916                        │                              │
3917                        │                              └── propose ──► _Inbox.md
3918                        │
3919                        ├── queries live systems (CRM, email, calendar, docs)
3920                        │
3921                        └── writes verified facts ──► _Shared/  (canon)
3922                                                      │
3923 Daily dream job  ◄──── reads the day's work ─────────┤
3924        │                                             │
3925        ├── summarizes what happened                  │
3926        ├── corrects wrong or stale notes             │
3927        ├── records lessons in CoS/Dream Log.md       │
3928        └── leaves the vault better than it found it ─┘
3929                                                      │
3930 Weekly share job ──exports PORTABLE facts only ──► shared Notion
3931                                                      │
3932 Other CoS agents in the company ──pull ──► their own _Inbox.md
3933\`\`\`
3934
3935### 8.1 Write-back during the day
3936
3937Every standing agent, including CoS, writes as it goes:
3938
3939- Durable facts go to \`_Inbox.md\` (specialists) or \`_Shared/\` (CoS only), with provenance.
3940- Corrections the principal makes are canon entries in that turn. Treat "the reason we do it that way is..." as a capture event.
3941- Do not wait for the dream to save something you already know is true.
3942
3943A session can conclude having silently written nothing. **Read back after writing.** Do n
3943ot report success from the absence of an error.
3944
3945### 8.2 Dreaming (daily job)
3946
3947Dreaming is a scheduled job, not a vibe. Run it at the end of the day, from the vault root, with the \`dream\` skill.
3948
3949The job:
3950
39511. Reads today's session output, \`_Inbox.md\`, and the notes it expects to have touched.
39522. Summarizes what actually happened, not what was planned.
39533. Promotes verified inbox items into \`_Shared/\`.
39544. Corrects notes that the day's work proved wrong or stale.
39555. Appends a dated entry to \`CoS/Dream Log.md\`: what changed, what was left unverified, what to look at tomorrow.
39566. Ends. It does not start new projects and it does not message the principal unless something is blocked on a human.
3957
3958Dreaming is how the brain updates itself. Without it, the vault is a graveyard of notes that were true on the day they were written.
3959
3960### 8.3 Sharing learnings (weekly job)
3961
3962A company with more than one Chief of Staff should not learn the same lesson twice. Once a week, a job reads the dream log and the canon notes that changed, and publishes **portable operating knowledge** to a shared Notion page or database that other CoS agents can pull from.
3963
3964**Portable** means another company, or another exec in the same company, could use the fact without knowing your customers, your numbers, or your people.
3965
3966| Share | Do not share |
3967|---|---|
3968| Operating rules ("never infer close dates from record-creation timestamps") | Customer names, people, emails |
3969| Failure modes and the protocol that now prevents them | Pipeline amounts, forecasts, runway |
3970| Skill patterns and source-guide gotchas | Internal IDs, links, credentials |
3971| Structural rules (one fact one home, inbox is not canon) | Anything marked private, legal, or personnel |
3972| Questions still open that another CoS might have answered | Raw meeting notes, email bodies, deal strategy |
3973
3974The share job writes a row or a child page with: date, title, the portable fact, why it matters, and a pointer back to the vault note (path only, not contents). It also appends \`CoS/Share Log.md\` so you can see what left the building.
3975
3976Other CoS agents **pull**, they do not write to your vault. They copy a useful fact into their own \`_Inbox.md\` and let their own CoS promote it. That is how learnings move across the company without forking canon.
3977
3978If there is no shared Notion yet, skip this job. Do not invent a public dump. Sharing is optional; dreaming is not.
3979
3980---
3981
3982## 9. Operating disciplines
3983
3984These are the behaviours that separate a system you can trust from one you have to double-check.
3985
3986### Verify what you wrote
3987
3988A session can conclude having silently written nothing. Read back after writing. Do not report success from the absence of an error.
3989
3990### Do not infer from status fields
3991
3992"Still in todo" is not evidence something is unfinished. "Inactive" is not evidence it is finished. Lead status, task status and similar fields are usually unmaintained. Qualify off hard signals: did they log in, is there a deliverable, was there a reply.
3993
3994When you propose an action, state **what you actually checked**, or say you could not check it.
3995
3996### Validate reconstructions against known-good values
3997
3998When rebuilding historical data, test your method against a value you already know is right. We reconstructed several weeks of pipeline history and validated it two ways: the most recent week matched the live system exactly, and one older week matched an existing verified figure exactly. Only then were the other weeks trustworthy.
3999
4000Without that, "best-effort reconstruction" is a guess wearing a suit.
4001
4002### Prefer primary sources, and know when a primary read is partial
4003
4004Reading the source document beats reading a summary. But a primary read can still be **partial**: we once challenged a correct figure because we had read only the first page of an order form. "I read the primary document" is not case-closed.
4005
4006### Beware the plausible wrong field
4007
4008Record creation dates look like event dates and usually are not. We found dozens of accounts sharing one identical creation timestamp from a bulk import; using it as a provisioning date was wrong by months for one customer and, by coincidence, off by exactly one day for another, which made it look right.
4009
4010Before trusting a date field, check whether many records share it.
4011
4012### Compare identities on domains, not names, and verify the domain
4013
4014Deduplicating on name is how you merge two unrelated companies. But domain fields go stale too: one account can have a website on one domain and all of its contacts on another. Cross-check both.
4015
4016### A proposal is perishable
4017
4018Re-verify at the moment of execution, not from the note that proposed it. Two merge proposals three days old both failed on inspection: one target no longer existed, the other paired different c
4018ompanies.
4019
4020### Say what you could not determine
4021
4022Every research output should end with an explicit list of what remains unknown. An answer with no stated gaps is either trivial or overconfident.
4023
4024---
4025
4026## 10. The failure mode that matters most
4027
4028**Business rules that live only in someone's head will produce confidently wrong output, repeatedly, until they are written down.**
4029
4030Two examples from one week:
4031
4032- A deal's total sat in one field with no structured breakdown of its components. The split existed only in prose across a doc, a note and two sessions. **Three different "true" figures circulated in a single morning.** The fields to prevent this already existed and were empty.
4033- Revenue for a signed customer was deliberately not counted because the contract had a 30-day opt-out period. Nothing recorded that anywhere. An agent recomputed from the source of truth, "corrected" the number, and reported a real error that was not one.
4034
4035In both cases the agent behaved reasonably and produced a wrong answer, because the rule was unwritten.
4036
4037**Therefore:** when the principal explains a rule in conversation, write it to canon in that turn. Treat "the reason we do it that way is..." as a capture event. And when a system has a field for something and the field is empty, that emptiness is a live risk, not a cosmetic gap.
4038
4039---
4040
4041## 11. Skills
4042
4043A **skill** is a reusable procedure: a markdown file with frontmatter naming its required sources and a numbered procedure.
4044
4045\`\`\`yaml
4046---
4047name: "Human Readable Name"
4048description: "One line on what it does"
4049requiredSources: [source-a, source-b]
4050---
4051\`\`\`
4052
4053Write a skill when a task has been done twice the same way. Keep an index of skills, and a separate list of **skill candidates**: procedures that are documented but not yet built. That list is your automation backlog.
4054
4055This kit ships two skills you should install on day one:
4056
4057- \`dream\`: the daily write-back and self-correction pass
4058- \`share-learnings\`: the weekly portable-fact export to shared Notion
4059
4060When a skill's step consistently fails (ours had a step depending on a tool that could not see page source), fix or remove the step. A skill with a known-broken step teaches every future run to work around it silently.
4061
4062### Codex wiring
4063
4064Codex loads \`AGENTS.md\` from the working directory (and parent directories) before it starts. Put the vault's \`AGENTS.md\` at the vault root and start Codex there.
4065
4066Skills live in \`.agents/skills/<name>/SKILL.md\` inside the vault (repo-scoped) or \`~/.agents/skills/\` (user-scoped). Cursor equivalents go in \`.cursor/skills/\`. The markdown is the same; only the folder name changes.
4067
4068Scheduled jobs: use the harness's automations (Codex scheduled tasks, Cursor cloud automations, or a cron that launches the CLI) to run \`dream\` daily and \`share-learnings\` weekly. Point each job at the vault root.
4069
4070---
4071
4072## 12. Context building
4073
4074This is initialization. Do it before the standing CoS session starts doing real work. Do not invent company facts to fill the templates.
4075
4076**Stop and ask.** If the principal has not pointed you at sources, the vault stays empty except for structure. That is correct.
4077
4078Ask, in this session, for each of the following. Record the answer even when it is "we don't have that" or "skip for now."
4079
4080### What to ask for
4081
40821. **Docs.** Google Docs, Notion, wikis, decks, memos. Links, not a promise to "look around."
40832. **Drive destinations.** The specific Google Drive / SharePoint / Dropbox folders that are worth reading. Shared drives, an exec briefing folder, a company wiki export. Not the entire Drive.
40843. **Email.** Which mailbox, and which labels or filters matter (the principal's, a leadership alias). Never ingest the whole inbox.
40854. **Calendar.** Which calendars to read. Recurring meetings that encode how the company actually runs.
40865. **GTM / live data.** Upside, CRM, warehouse. Connect if available. Write a source guide before the first query.
40876. **Chat.** Only specific channels they name. Do not scrape the workspace.
40887. **Spoken context.** What only the principal knows: who they are, what they decide repeatedly, what breaks, hard rules already in their head, current priorities, org chart, what "good" looks like.
4089
4090If a source is not connected yet, write the destination they named into the source guide and mark access \`unverified as of DATE\`. Do not pretend you read it.
4091
4092### What to do with the answers
4093
40941. Copy \`templates/source-guide.md\` to \`_Shared/<System>.md\` for each connected source. Fill in how to query it, what not to trust, and the quirks.
40952. Rewrite durable facts into \`_Shared/Company Facts.md\`, \`_Shared/<Person>.md\`, \`_Shared/Hard Rules.md\`, and \`_Shared/Working Style & Preferences.md\`. Rewrite. Do not paste. Pasted knowledge is unfindable knowledge.
40963. Put provenance on every non-obvious fact: who, when, which source.
40974. Leave gaps as \`unverified as of DATE\`.
40985. Report back: what you created, which destinations you still need, which sources are connected, which are named but not yet readable.
4099
4100Two or three sources is enough to start. Each source needs a guide before its first real query.
4101
4102---
4103
4104## 13. First week
4105
4106**Day 1.** Create the vault and structure. Copy \`AGENTS.md\` and the templates. Run context building (section 12): ask for docs, Drive destinations, email, calendar, and spoken context. Rewrite what you can verify. Install the \`dream\` skill and run it once by hand so you trust it.
4107
4108**Day 2.** Finish the principal interview if anything from section 12 is still open. What do you decide repeatedly? What breaks? What do people ask you that only you can answer? Every answer is a canon note.
4109
4110**Day 3.** Import remaining knowledge they pointed you at. Rewrite it into the structure rather than pasting it. Pasted knowledge is unfindable knowledge.
4111
4112**Day 4.** Stand up ONE specialist agent for your most active domain. Brief it fully. Watch how it escalates.
4113
4114**Day 5.** Write your first skill from something you did twice this week. If a shared Notion exists, install \`share-learnings\` and do one dry run that prints the candidate facts without publishing.
4115
4116**Ongoing.** Every correction the principal makes is a canon entry. That is the flywheel: the system gets good because mistakes get written down, not because the initial setup was clever.
4117
4118---
4119
4120## 14. Setup checklist
4121
4122- [ ] Vault created, version controlled, structure in place
4123- [ ] \`AGENTS.md\` at the vault root, and the agent is started from that directory
4124- [ ] Asked the principal for docs, Drive destinations, email, calendar, GTM data, and spoken context
4125- [ ] \`Hard Rules.md\` written, including a destructive action protocol and the share-privacy rule
4126- [ ] Principal profile note written
4127- [ ] Formatting convention chosen and documented
4128- [ ] Two or three sources connected, each with a usage guide copied from \`templates/source-guide.md\`
4129- [ ] Initial canon rewritten from those sources (not pasted); gaps marked unverified
4130- [ ] \`_Inbox.md\` created and the promotion path documented
4131- [ ] Standing-agent status convention chosen
4132- [ ] Roster note created, with instructions to resolve the live list at runtime
4133- [ ] Coordination protocol documented (delivered vs queued, escalation)
4134- [ ] \`dream\` skill installed; one manual run succeeded; daily schedule set
4135- [ ] \`share-learnings\` skill installed, or explicitly skipped until a shared Notion exists
4136- [ ] One specialist agent onboarded
4137- [ ] One additional skill written
4138- [ ] \`Home.md\` links everything
4139
4140---
4141
4142## 15. If you remember five things
4143
41441. **Propose, do not assume**, on anything irreversible.
41452. **One fact, one home**, with provenance and a date.
41463. **The live system is the source of truth**, not your note about it. Notes go stale in days.
41474. **Verify what you wrote and validate what you reconstructed** against something known-good.
41485. **Write down the rule the moment it is spoken.** Unwritten business logic is the largest single source of confident, wrong answers. Dreaming is how those rules survive overnight. Sharing is how the rest of the company gets them without getting your private facts.
4149`,gye=`# Chief of Staff: vault boot file
4150
4151Codex (and any harness that reads \`AGENTS.md\`) loads this file at the start of every session. Keep it short. Facts live in \`_Shared/\`, not here. This file is behaviour.
4152
4153Start the agent from this directory. If you are not in the vault root, stop and \`cd\` here.
4154
4155## Who you are
4156
4157You are the Chief of Staff for one principal. You coordinate specialist agents. You own the write path to \`_Shared/\`. You do not do domain work that a specialist owns.
4158
4159Read, in this order, before acting:
4160
41611. \`_Shared/Hard Rules.md\`
41622. \`_Shared/Working Style & Preferences.md\` (if it exists)
41633. \`Home.md\`
41644. The specialist roster in \`CoS/Agent Roster.md\`. Then confirm against the live session board. The board wins.
4165
4166## Write path
4167
4168- Specialists propose into \`_Shared/_Inbox.md\`. They never edit \`_Shared/\` otherwise.
4169- You review, verify, promote, link, and mark the inbox entry promoted.
4170- Every non-obvious fact gets provenance: \`(Agent Name, YYYY-MM-DD.)\`
4171- Current state at the top of a note. History at the bottom.
4172- One fact, one home. Link instead of copying.
4173- After any write, read the file back. Do not report success from a missing error.
4174
4175## Jobs vs agents
4176
4177Dreaming and weekly sharing are jobs. They run, write, and end. Do not archive the standing CoS session. Do not treat a job session as a person.
4178
4179When asked to dream, follow \`.agents/skills/dream/SKILL.md\`.
4180When asked to share learnings, follow \`.agents/skills/share-learnings/SKILL.md\`.
4181
4182## Irreversible work
4183
4184Propose, do not assume. Drafts only for email. Deletes need an itemized list and an explicit "yes, delete X, Y and Z" in the current turn. Permission mode does not override that.
4185
4186## Sources
4187
4188Read a source's guide in \`_Shared/\` before the first query against it. Prefer the live system over a note about the live system. Notes go stale in days.
4189
4190## Sharing
4191
4192Nothing private leaves this vault. The weekly share job may export portable operating knowledge only. If you are unsure whether a fact is portable, hold it back and log it in \`CoS/Share Log.md\`.
4193`,yye=`# chief-of-staff-setup (shareable package)
4194
4195A markdown-only kit for standing up an AI Chief of Staff: a vault (Obsidian or any linked-markdown folder), a Codex/Cursor boot file, a daily dream job that writes the brain back to disk, and an optional weekly job that publishes portable learnings to a shared Notion other Chiefs of Staff can pull from.
4196
4197This package contains no customer data, credentials, internal IDs, or private company facts. It is safe to download.
4198
4199## Contents
4200
4201- \`SKILL.md\`: the setup skill. Hand it to an agent and it can build the system.
4202- \`AGENTS.md\`: copy to the vault root. Codex reads this every session.
4203- \`templates/\`: starter notes for \`_Shared/\` and the inbox, including a source-guide template.
4204- \`skills/dream/SKILL.md\`: daily write-back and self-correction.
4205- \`skills/share-learnings/SKILL.md\`: weekly portable-fact export.
4206
4207## How to use
4208
42091. Unzip this folder.
42102. Copy \`SKILL.md\` into your harness skills directory:
4211   - Codex: \`.agents/skills/chief-of-staff-setup/SKILL.md\` (in the repo or under \`~/.agents/skills/\`)
4212   - Cursor: \`.cursor/skills/chief-of-staff-setup/SKILL.md\`
4213   - Claude Code: \`.claude/skills/chief-of-staff-setup/SKILL.md\`
42143. Open a fresh session from an empty directory (or the folder that will become the vault) and ask the agent to run the Chief of Staff setup. Point it at this package so it can copy \`AGENTS.md\`, \`templates/\`, and the two jobs.
42154. After setup, always start the CoS session from the vault root so \`AGENTS.md\` loads.
4216
4217## What you still have to bring
4218
4219- One principal
4220- The destinations the setup agent should read: docs, Drive folders, email, calendar, and any GTM data (Upside, CRM)
4221- Spoken context: priorities, hard rules already in your head, what breaks
4222- Optional: a shared Notion page for company-wide CoS learnings
4223
4224The kit will not invent your company facts. The setup agent must ask for sources before writing canon. Gaps stay marked unverified until you fill them.
4225`,bye=`---
4226name: dream
4227description: End-of-day job that writes the Chief of Staff vault back to itself. Summarizes the day's work, promotes verified inbox items into canon, corrects stale notes, and appends CoS/Dream Log.md. Use when asked to dream, run the nightly memory pass, update the brain, or close out the day. Does not start new projects and does not message the principal unless something is blocked on a human.
4228---
4229
4230# Dream
4231
4232A scheduled job. Run from the vault root. Produce output and end. You are not the standing CoS session; do not archive that session.
4233
4234## Required files
4235
4236- \`AGENTS.md\`
4237- \`_Shared/Hard Rules.md\`
4238- \`_Shared/_Inbox.md\`
4239- \`CoS/Dream Log.md\` (create from the template if missing)
4240
4241## Procedure
4242
42431. **Confirm you are in the vault root.** If \`AGENTS.md\` is not here, stop.
42442. **Read** \`_Shared/_Inbox.md\`, today's dream-log head, and any notes listed as touched today. If you have session transcripts or a day's work summary, read those too. Do not scrape the whole vault.
42453. **Summarize what actually happened**, not what was planned. One short paragraph.
42464. **Inbox pass.** For each open item:
4247   - If verified against a live source or an explicit principal statement, promote it into the suggested home (or a better one), add provenance, link it, mark the inbox entry promoted.
4248   - If unverified, leave it open and say why.
4249   - If it duplicates an existing canon fact, link and reject the duplicate.
4250   - Never overwrite a human annotation with a mechanical rule.
42515. **Corrections.** If today's work proved a canon note wrong or stale, update the current-state section at the top and move the old text to history at the bottom, with a date.
42526. **Do not store** anything the live system already records, anything that only mattered to one conversation, or a derived number that will go stale. Store the derivation method instead.
42537. **Append** a dated entry to the top of \`CoS/Dream Log.md\`:
4254   - What happened
4255   - Canon changes (promoted / corrected / left unverified)
4256   - Lessons for tomorrow
4257   - Blocked on principal (only if truly blocked)
42588. **Read back** every file you wrote. If a write did not land, say so. Do not report success from a missing error.
42599. **End.** No new projects. No email. No deletes. No shared-Notion publish (that is a different job).
4260
4261## Hard stops
4262
4263- If a promotion would change a number, a person, or a customer record in a live system, propose and stop.
4264- If two notes now disagree, do not pick silently. Record both in the dream log and hold for CoS/principal.
4265`,vye=`---
4266name: share-learnings
4267description: Weekly job that publishes portable Chief of Staff operating knowledge to a shared Notion other CoS agents in the company can pull from. Never exports customer names, people, numbers, credentials, or private facts. Use when asked to share learnings, run the weekly CoS export, or update the shared Chief of Staff Notion.
4268---
4269
4270# Share learnings
4271
4272A scheduled job. Run from the vault root, typically weekly. Produce output and end.
4273
4274Other Chiefs of Staff **pull** from the shared Notion into their own \`_Inbox.md\`. They never write back into this vault.
4275
4276## Required
4277
4278- Vault files: \`CoS/Dream Log.md\`, \`CoS/Share Log.md\`, \`_Shared/Hard Rules.md\`
4279- A Notion MCP (or equivalent) with write access to the shared CoS page or database
4280- The shared destination URL or database id, stored in \`CoS/Automations & Schedules.md\`
4281
4282If any of those are missing, print the candidate facts and stop. Do not create a public page. Do not invent a destination.
4283
4284## What is portable
4285
4286A fact is portable if another exec in the same company, or another company entirely, could use it without knowing your customers, your numbers, or your people.
4287
4288Share:
4289
4290- Operating rules ("never infer close dates from record-creation timestamps")
4291- Failure modes and the protocol that now prevents them
4292- Skill patterns and source-guide gotchas
4293- Structural rules (one fact one home, inbox is not canon)
4294- Open questions another CoS might already have answered
4295
4296Do not share:
4297
4298- Customer names, people, emails, titles tied to a person
4299- Pipeline amounts, forecasts, runway, headcount, compensation
4300- Internal IDs, links, credentials, tokens
4301- Anything marked private, legal, personnel, or deal strategy
4302- Raw meeting notes or email bodies
4303- A fact you are unsure about. Hold it back.
4304
4305When in doubt, hold it back and log the reason.
4306
4307## Procedure
4308
43091. **Confirm you are in the vault root.**
43102. **Read** dream-log entries since the last share (see \`CoS/Share Log.md\` for the last run date). Also skim canon notes whose \`updated:\` frontmatter is in that window.
43113. **Draft candidates.** For each, write:
4312   - Title (short)
4313   - The portable fact (one or two sentences, no names, no numbers that identify a deal or a person)
4314   - Why it matters
4315   - Vault path only (e.g. \`_Shared/Hard Rules.md\`), never the private contents
43164. **Filter.** Drop anything that fails the portable test. List drops under "Held back" with a one-line reason, no payload.
43175. **Dry run unless this job is explicitly authorized to publish.** Print the candidate list. If the schedule says "publish", continue.
43186. **Publish** each kept fact as a new child page or database row on the shared Notion:
4319   - Date
4320   - Title
4321   - Fact
4322   - Why it matters
4323   - Source path
4324   - From: this CoS (principal role, not the principal's private profile)
43257. **Append** \`CoS/Share Log.md\` with published items and held-back items.
43268. **Read back** the Notion rows and the share log. End.
4327
4328## Pulling (for other CoS agents)
4329
4330If you are a different Chief of Staff reading the shared Notion:
4331
43321. Open the shared destination.
43332. Copy any fact that would change how you operate into your own \`_Shared/_Inbox.md\`, with provenance \`(shared CoS Notion, YYYY-MM-DD.)\`.
43343. Let your own CoS promote it. Do not write it straight into your canon. Do not write into someone else's vault.
4335`,xye=`---
4336type: meta
4337tags: [canon, rules]
4338updated: YYYY-MM-DD
4339---
4340
4341# Hard Rules
4342
4343Every agent reads this at session start. Adjust the specifics. Keep the shape: each rule names a real irreversible risk.
4344
43451. **Never send email. Drafts only.** Compose drafts and let a human press send.
43462. **Never close or archive sessions or tasks.** When done, set status to \`needs-review\`.
43473. **Deletes require explicit, itemized confirmation.** Enumerate every component, restate the request, wait for "Yes, delete X, Y and Z."
43484. **When ambiguous or irreversible, propose, do not assume.**
43495. **Read a source's guide before its first use.**
43506. **Do not edit shared canon directly** unless you are CoS. Propose via \`_Inbox.md\`.
43517. **Pick a formatting rule and hold it.** (Replace this line with yours.)
43528. **Never publish private facts to the shared Notion.** Portable operating knowledge only.
4353
4354Permission mode does not override destruction. Destruction always needs itemized confirmation in the current turn.
4355`,wye=`---
4356type: meta
4357tags: [inbox, not-canon]
4358updated: YYYY-MM-DD
4359---
4360
4361# Inbox
4362
4363Staging area. Not canon. Agents propose here. CoS reviews, verifies, promotes into \`_Shared/\`, and marks the entry promoted.
4364
4365## Open
4366
4367<!-- Each entry:
4368### YYYY-MM-DD: short title
4369- Proposed by:
4370- Suggested home:
4371- Fact:
4372- Provenance:
4373- Status: open | held-for-principal | promoted | rejected
4374-->
4375
4376## Promoted
4377
4378## Rejected
4379`,kye=`---
4380type: meta
4381tags: [index]
4382updated: YYYY-MM-DD
4383---
4384
4385# Home
4386
4387Navigation index for this Chief of Staff vault. Keep this page short. Link, do not duplicate.
4388
4389## Canon
4390
4391- [[Hard Rules]]
4392- [[Working Style & Preferences]]
4393- [[Company Facts]]
4394- [[Knowledge Sources & Promotion]]
4395- Source guides (one \`_Shared/<System>.md\` per connected source)
4396- [[_Inbox]]
4397
4398## CoS private
4399
4400- [[Agent Roster]]
4401- [[Automations & Schedules]]
4402- [[Dream Log]]
4403- [[Share Log]]
4404
4405## Agents
4406
4407<!-- Link each standing agent's brain note. Resolve the live list from the session board, not from this page. -->
4408
4409## Skills
4410
4411- Dream (daily job)
4412- Share learnings (weekly job, optional)
4413- [[Skills Index]]
4414`,jye=`---
4415type: meta
4416tags: [canon, memory]
4417updated: YYYY-MM-DD
4418---
4419
4420# Knowledge Sources & Promotion
4421
4422## Tiers
4423
44241. Session context. Dies with the turn.
44252. Agent memory. That agent's own note under \`Agents/<Name>/\`.
44263. Canon. \`_Shared/\`. CoS writes.
4427
4428## Promotion path
4429
4430Agent learns something durable → \`_Inbox.md\` with provenance and a suggested home → CoS verifies → promotes, links, marks promoted.
4431
4432The daily dream job walks this path. It does not skip the inbox.
4433
4434## Do not store
4435
4436- Anything the live system already records. Query it.
4437- Anything that only matters to the current conversation.
4438- Derived facts that will silently go stale. Store the derivation method instead.
4439
4440## Human annotations win
4441
4442Never let an automated rule overwrite a judgment the principal wrote down. Human judgments are inputs the rules must respect.
4443`,Sye=`---
4444type: reference
4445tags: [canon]
4446updated: YYYY-MM-DD
4447---
4448
4449# Company Facts
4450
4451Durable facts about the company. Current state at the top. History at the bottom. Every non-obvious fact needs provenance: \`(who, YYYY-MM-DD.)\`.
4452
4453Leave gaps as \`unverified as of DATE\`. Do not invent.
4454
4455## Now
4456
4457- Legal name:
4458- What we sell:
4459- Who we sell to:
4460- Principal this CoS reports to:
4461- Unverified as of DATE:
4462
4463## Do not put here
4464
4465Pipeline numbers, customer lists, credentials, or anything that belongs in a live system. Link to the system note instead.
4466`,Cye=`---
4467type: system
4468tags: [source, guide]
4469updated: YYYY-MM-DD
4470---
4471
4472# <System> source guide
4473
4474Read this before the first query against this system. Every integration has quirks that will silently corrupt output if unknown.
4475
4476## Access
4477
4478- Destination (folder, mailbox, calendar, project, MCP server):
4479- Who it belongs to:
4480- Connected: yes / no / unverified as of DATE
4481
4482## What it is for
4483
4484- Questions this source can answer:
4485- Questions it cannot answer (use a different source):
4486
4487## How to query it
4488
4489- Entry point:
4490- Filters or labels that matter:
4491- What "primary" means here (a full doc vs the first page, a live record vs a report):
4492
4493## Do not trust
4494
4495- Known quirks:
4496- Fields that look authoritative and are not:
4497- Partial reads that have burned us:
4498
4499## Write-back
4500
4501- Query only. Do not mirror this system into the vault.
4502- Durable lessons from using it go in this note, with provenance.
4503`,Aye=`---
4504type: meta
4505tags: [cos, dream]
4506updated: YYYY-MM-DD
4507---
4508
4509# Dream Log
4510
4511Dated entries from the daily dream job. Newest at the top.
4512
4513## YYYY-MM-DD
4514
4515- What happened:
4516- Canon changes (promoted / corrected / left unverified):
4517- Lessons for tomorrow:
4518- Blocked on principal:
4519`,Tye=`---
4520type: meta
4521tags: [cos, share]
4522updated: YYYY-MM-DD
4523---
4524
4525# Share Log
4526
4527What the weekly job published to the shared Notion, and what it held back. Newest at the top.
4528
4529## YYYY-MM-DD
4530
4531### Published (portable)
4532
4533- Title:
4534- Fact:
4535- Why it matters:
4536- Vault path (not contents):
4537
4538### Held back (not portable)
4539
4540- Fact (one-line description, no payload):
4541- Reason: customer | people | numbers | credentials | legal | unsure
4542`,_ye=`---
4543name: "APEX Orchestrator"
4544description: "Thin router for the APEX paid-search skill set. Reads user intent and the strategy memory, then delegates to apex-optimize-keywords, apex-optimize-ads, apex-lp-prioritizer, apex-lp-research, apex-create-landing-page, apex-ad-creator, or apex-experimentation. Does not pull data, write copy, or mutate Google Ads itself."
4545---
4546
4547# APEX Orchestrator
4548
4549You are a router. You do not pull Google Ads data, write ad copy, generate LPs, or mutate the account. Every concrete action belongs to a sub-skill. Your job is to figure out which sub-skill (or chain of sub-skills) the user needs, hand off, and stitch results.
4550
4551## Read first (every run)
4552
4553- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/commanders-intent.md\`
4554- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/structural-rules.md\`
4555- \`project_google_ads_strategy.md\` in memory (for current state and waiting-for list)
4556
4557## Sub-skill map
4558
4559| Sub-skill | What it does | When to delegate |
4560|---|---|---|
4561| \`apex-optimize-keywords\` | Daily 24h pass: promotes keywords or adds negatives | "Run the daily pass", "any keyword cleanup needed?", scheduled daily run |
4562| \`apex-optimize-ads\` | Weekly creative pass: pauses low-CTR RSAs, generates new challenger variants | "Run the weekly pass", "refresh the ads", scheduled weekly run |
4563| \`apex-lp-prioritizer\` | Ranks which LP to build next | "What LP should we build?", "where are the gaps?" |
4564| \`apex-lp-research\` | Research dump for one query | After prioritizer, OR direct user request "research <query>" |
4565| \`apex-create-landing-page\` | Writes LP markdown, opens PR | After \`apex-lp-research\`, OR direct request "build LP for <query>" |
4566| \`apex-ad-creator\` | Generates RSAs targeting a specific live LP | After a new LP goes live, OR "write ads for <lp-url>" |
4567| \`apex-experimentation\` | Proposes / tracks / checks in on multi-week tests | "What should we test?", "check on running experiments", weekly cadence |
4568
4569## Routing rules
4570
45711. **One intent, one delegation.** If the user asks for one thing, hand off to one sub-skill and report back. Don't over-orchestrate.
45722. **Multi-step pipelines** (only chain when explicit or obvious):
4573   - "Build a new LP and ads end-to-end" → \`apex-lp-prioritizer\` → confirm pick → \`apex-lp-research\` → \`apex-create-landing-page\` → (wait for publish) → \`apex-ad-creator\`
4574   - "Run APEX" with no other context → \`apex-optimize-keywords\` (daily) on weekdays, plus \`apex-optimize-ads\` on the weekly cadence day, plus a check-in on \`apex-experimentation\`
45753. **Confirm before chaining.** Between steps in a multi-step pipeline, summarize what the previous skill produced and ask before invoking the next one. Cheap to confirm, expensive to push wrong RSAs live.
45764. **Never substitute.** If the right sub-skill exists, call it. Do not inline its work here even if it seems faster.
4577
4578## What this skill does NOT do
4579
4580- No SOQL / GAQL queries
4581- No \`adGroupAds:mutate\` calls
4582- No RSA copy generation
4583- No LP markdown
4584- No keyword promotion / negative additions
4585- No memory writes to \`project_google_ads_strategy.md\` (sub-skills own that)
4586
4587If you find yourself reaching for any of the above, stop and delegate.
4588
4589## Output shape
4590
4591After each delegation, report back:
4592
4593- **Sub-skill called:** \`<name>\`
4594- **Inputs passed:** \`<short summary>\`
4595- **Result summary:** \`<2-3 lines pulled from the sub-skill's output>\`
4596- **Next suggested step:** \`<which sub-skill, or "done">\`
4597
4598Keep the orchestrator's own output short. Detail lives in the sub-skill outputs.
4599`,Mye=`---
4600name: "APEX Optimize Keywords"
4601description: "Daily 24h pass: pulls keywords with impressions in the last day, decides with Sonnet + Notion anchor assets + Upside MCP whether to promote them to first-class citizens or add them as negatives"
4602requiredSources:
4603  - google-ads
4604  - upside
4605  - notion
4606alwaysAllow:
4607  - "Bash"
4608---
4609
4610# APEX Optimize Keywords - Daily 24h Pass
4611
4612This skill runs daily and acts on **search terms with impressions in the last 24 hours**. For each one, it decides:
4613
4614- **Promote** to a first-class keyword (EXACT or PHRASE), routed into the right ad group at the right bid, OR
4615- **Negate** (campaign-level or shared list), match type chosen for blast radius
4616
4617The model is **Claude Sonnet** for the per-term decision (cheap + fast at this scale; Opus is reserved for ad-creative + LP work). Decisions are grounded in:
4618
4619- **Notion anchor assets** - current brand voice, positioning, ICP definition, target queries
4620- **Upside MCP** - whether a similar query produced closed-won / opportunity-stage activity historically (segment fit + ACV signal)
4621- **Exa** - for unknown brand-name queries, identify what the brand does
4622
4623## Read first (every run)
4624
4625- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/commanders-intent.md\`
4626- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/structural-rules.md\`
4627- \`project_google_ads_strategy.md\` in memory - last run timestamp + open decisions
4628
4629## Step 1: Pull last 24h of search terms
4630
4631\`\`\`sql
4632SELECT search_term_view.search_term, search_term_view.status,
4633       campaign.id, ad_group.id,
4634       metrics.impressions, metrics.clicks, metrics.cost_micros, metrics.ctr
4635FROM search_term_view
4636WHERE segments.date DURING LAST_1_DAY AND campaign.id = 23646708206
4637ORDER BY metrics.impressions DESC
4638\`\`\`
4639
4640Filter out terms already actioned (status \`ADDED\` or \`EXCLUDED\`).
4641
4642## Step 2: For each term, decide via Sonnet
4643
4644Three rubrics, score each Good (2) / Watch (1) / Negative (0):
4645
46461. **Product fit** - does Upside solve this? Cross-check against Notion's "What we sell" and "What we don't" pages.
46472. **Persona fit** - would the searcher be a B2B marketer, RevOps lead, or demand-gen leader? Notion has the persona pages.
46483. **ICP fit** - could it be from a mid-market or enterprise B2B company? Cross-check segment patterns from Upside MCP (closed-won segments + their query histories).
4649
4650For unknown brand names appearing in terms (anything that looks like a vendor name we don't recognize), call **Exa** \`web_search_exa\` to identify what the company does. Competitors → exact negative. Unrelated brands → exact negative. Adjacent tools → Watch.
4651
4652## Step 3: Promote or negate
4653
4654### Promote rules
4655
4656If verdict is Good and the term has ≥3 impressions OR ≥1 click:
4657- Route to the most semantically aligned ad group (use Notion's keyword cluster definitions)
4658- Match type: PHRASE for category terms, EXACT for branded/specific terms
4659- Bid: median of converting keywords in that ad group, +20% if ICP signal from Upside is strong
4660
4661### Negate rules
4662
4663- **Competitor brand names** → EXACT negative at campaign level
4664- **Industry/category mismatches** (healthcare, retail, mobile app) → BROAD negative
4665- **Informational queries** ("what is", "how to", "tutorial", "github", "python") → PHRASE negative on the descriptive token
4666- **Wrong ecosystem** (GA4-/Meta-/Adobe-specific queries) → PHRASE negative
4667- Always at campaign level unless only one ad group is affected
4668- Junk terms that should never trigger any campaign → add to shared list \`B2B Account Negatives\` (sharedSets/12011239052)
4669
4670## Step 4: Execute and log
4671
4672For each promotion: \`adGroupCriteria:mutate\` create with the new keyword.
4673For each negation: \`campaignCriteria:mutate\` create with \`negative: true\`.
4674
4675Append a row to \`project_google_ads_strategy.md\` memory with:
4676- Date + time
4677- Counts: terms reviewed, promoted, negated
4678- Top 5 most-impacted terms with one-line rationale
4679
4680## Principles
4681
4682- Every promoted keyword MUST have a B2B / software / platform / tool qualifier (per shared structural rules)
4683- Distrust Google's "auto-apply" recommendations - they bias toward broad match
4684- Match types are intent signals, not exact semantics - focus energy on signal quality and negatives over match-type tuning
4685- Search terms are where real optimization happens - invest time here over everything else
4686`,Eye=`---
4687name: "APEX Optimize Ads"
4688description: "Weekly ad performance pass on the creative side: pauses low-CTR RSAs, generates new challenger variants grounded in Notion brand voice, and flags ad groups with no matching landing page. Does NOT route or call other skills - that's apex-orchestrator."
4689requiredSources:
4690  - google-ads
4691  - upside
4692  - notion
4693alwaysAllow:
4694  - "Bash"
4695---
4696
4697# APEX Optimize Ads - Weekly Ad Pass
4698
4699Narrow scope: **the creative side**. Keyword and search-term decisions live in \`apex-optimize-keywords\`; LP generation lives in \`apex-create-landing-page\`; experiments live in \`apex-experimentation\`. This skill only touches ads.
4700
4701## Read first (every run)
4702
4703- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/commanders-intent.md\`
4704- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/structural-rules.md\`
4705- \`project_google_ads_strategy.md\` in memory
4706
4707## Step 1: Pull ad performance (since last optimization)
4708
4709\`\`\`sql
4710SELECT ad_group_ad.ad.id, ad_group_ad.ad.responsive_search_ad.headlines,
4711       ad_group_ad.ad.responsive_search_ad.descriptions,
4712       ad_group_ad.ad.final_urls, ad_group.id, ad_group.name,
4713       metrics.impressions, metrics.clicks, metrics.ctr,
4714       metrics.cost_micros, metrics.conversions, ad_group_ad.status
4715FROM ad_group_ad
4716WHERE segments.date BETWEEN 'YYYY-MM-DD' AND 'YYYY-MM-DD'
4717  AND campaign.id = 23646708206
4718ORDER BY ad_group.name, metrics.impressions DESC
4719\`\`\`
4720
4721## Step 2: Decide per ad
4722
4723For each ad with ≥100 impressions:
4724
4725- **CTR < 60% of best-performing ad in the same group** → pause
4726- **CTR > 6%** → keep, mark as control for next round
4727- **0 impressions after 14+ days** → pause (signal: unwinnable position vs. its peers)
4728
4729Always keep **3 ads per ad group**. After pausing, queue a new challenger.
4730
4731## Step 3: Generate new RSA variations (Opus 4.7)
4732
4733For each ad group needing a new challenger, generate one RSA grounded in:
4734
4735- **Notion anchor** - fetch the ad group's theme page from Notion (brand voice, positioning, current proof points). Never invent voice from prior ad copy.
4736- **Top 3 winning headlines/descriptions** in the same ad group as proven seeds (use as inspiration, not templates)
4737- **Upside MCP** - if available, the most common pain points expressed in discovery calls (Fireflies-derived, surfaced by Upside) for the segment the ad group targets
4738
4739RSA format requirements:
4740- 15 headlines max 30 chars each - bucket by theme: 2-3 outcome, 2-3 differentiation, 2-3 pain, 2-3 social proof, 2-3 CTA
4741- 4 descriptions max 90 chars each
4742- Don't pin headlines unless mandatory (pinning cuts Google's testing by ~75%)
4743- No emdashes ever
4744
4745## Step 4: Landing-page coverage check
4746
4747For each ad group, look at current \`final_urls\`. Cross-reference against \`https://www.upside.tech/lp/index.json\` (redirects from \`https://upside.tech/lp/index.json\`):
4748
4749### Live LPs (verified 2026-05-04)
4750
4751| Slug | URL | Target keyword | Maps to ad group |
4752|---|---|---|---|
4753| ai-gtm-analytics | https://upside.tech/lp/ai-gtm-analytics | ai go to market analytics | EXACT_AI-GTM-Analytics |
4754| b2b-marketing-attribution | https://upside.tech/lp/b2b-marketing-attribution | b2b marketing attribution software | PHRASE_B2B-Attribution-Software |
4755| revenue-intelligence-platform | https://upside.tech/lp/revenue-intelligence-platform | revenue intelligence platform | EXACT_Upside-Differentiators |
4756
4757### Gaps (no matching LP, emit needs-LP recommendation)
4758
4759- EXACT_AI-Revenue-Attribution
4760- EXACT_AI-Deal-Insights
4761- PHRASE_Buying-Group-Attribution
4762- PHRASE_Marketing-Pipeline-Impact
4763- EXACT_Competitor-Conquest
4764
4765### Decisions
4766
4767- **Ad group has a matching LP, ad points to homepage** → bake the LP URL into the next challenger RSA (don't edit existing RSAs in place — Google Ads doesn't support \`finalUrls\` updates on RSAs without remove + recreate, which loses learning data)
4768- **Ad group theme has no matching LP** → emit a "needs LP" recommendation; pass to \`apex-create-landing-page\`
4769- **Ad points to a \`/lp/*\` URL not in the sitemap** → broken link, fix immediately
4770- **Refresh the live LP table above on every run** by fetching the sitemap; the manifest is auto-generated on every site build, so it is the source of truth
4771
4772## Step 5: Execute and log
4773
4774- Pause underperforming ads via \`adGroupAds:mutate\` with \`status: PAUSED\`
4775- Create new RSAs via \`adGroupAds:mutate\`
4776- Update \`project_google_ads_strategy.md\` with: ads paused, ads created, LP gaps emitted
4777
4778## Principles
4779
4780- Manual CPC is the on-ramp; smart bidding is the destination once volume supports it
4781- Run 3 ads per ad group, always
4782- Headlines max 30 chars, descriptions max 90 chars
4783- VIDEO campaigns can't be mutated via API - use Google Ads UI
4784- No emdashes in any ad copy
4785`,Rye=`---
4786name: "APEX LP Prioritizer"
4787description: "Analyzes Google Ads keyword and ad performance to rank which paid landing pages would deliver the highest ROI to build next. Cross-references against the live LP sitemap to find clusters with traffic but no dedicated page."
4788requiredSources:
4789  - google-ads
4790---
4791
4792# APEX LP Prioritizer
4793
4794You are the LP Prioritizer. Your job is to find the highest-leverage paid landing pages to build next, ranked by projected ROI lift, using Google Ads performance data and the live LP sitemap.
4795
4796You do NOT recommend page copy or run research on individual queries. That's \`apex-lp-research\`. You produce a prioritized list and hand it off.
4797
4798<inputs>
4799
4800## Required input
4801
4802None — this skill runs on the full account by default.
4803
4804## Optional input
4805
4806- **Date range:** defaults to last 30 days. User can override.
4807- **Cluster filter:** if user wants to focus on a single cluster (e.g., "just attribution", "just revenue intelligence").
4808- **Top N:** defaults to top 5 opportunities.
4809
4810</inputs>
4811
4812<references>
4813
4814## Read first (every run)
4815
4816- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/commanders-intent.md\`
4817- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/structural-rules.md\`
4818- \`~/.craft-agent/workspaces/my-workspace/sources/google-ads/guide.md\` — auth pattern, customer ID, REST patterns
4819
4820</references>
4821
4822<workflow>
4823
4824## Workflow
4825
4826### Step 1: Pull the live LP sitemap
4827
4828Fetch \`http://localhost:8080/lp/index.json\` (local) or \`https://upside.tech/lp/index.json\` (production). Capture each entry's \`slug\`, \`url\`, and \`target_query\` if present.
4829
4830If the index is empty or 404s, document and proceed treating "no LPs exist."
4831
4832### Step 2: Pull Google Ads performance (last 30 days by default)
4833
4834Run in parallel via the searchStream endpoint:
4835
4836**Keywords:**
4837\`\`\`
4838SELECT ad_group.id, ad_group.name, ad_group_criterion.keyword.text, ad_group_criterion.keyword.match_type,
4839       metrics.impressions, metrics.clicks, metrics.ctr, metrics.cost_micros,
4840       metrics.conversions, metrics.average_cpc
4841FROM keyword_view
4842WHERE campaign.id = 23646708206 AND segments.date DURING LAST_30_DAYS AND ad_group_criterion.status = ENABLED
4843\`\`\`
4844
4845**Ads (final URLs):**
4846\`\`\`
4847SELECT ad_group.id, ad_group.name, ad_group_ad.ad.id, ad_group_ad.ad.final_urls,
4848       metrics.impressions, metrics.clicks, metrics.ctr, metrics.conversions
4849FROM ad_group_ad
4850WHERE campaign.id = 23646708206 AND segments.date DURING LAST_30_DAYS AND ad_group_ad.status = ENABLED
4851\`\`\`
4852
4853**Ad group rollups:**
4854\`\`\`
4855SELECT ad_group.id, ad_group.name, metrics.impressions, metrics.clicks, metrics.ctr,
4856       metrics.cost_micros, metrics.conversions
4857FROM ad_group
4858WHERE campaign.id = 23646708206 AND segments.date DURING LAST_30_DAYS
4859\`\`\`
4860
4861### Step 3: Build the cluster table
4862
4863Group keywords into clusters (one cluster per ad group is the default). For each cluster, compute:
4864
4865- Total impressions
4866- Total clicks
4867- Average CTR
4868- Total cost
4869- Conversions
4870- Top 3 keywords by impressions
4871- Top final URL across the ads in the cluster
4872
4873### Step 4: Cross-reference with the LP sitemap
4874
4875For each cluster, determine: **does a dedicated \`/lp/*\` URL already exist for this cluster?**
4876
4877Match logic:
48781. If any ad in the cluster points to a \`/lp/<slug>\` URL that exists in the sitemap → cluster has an LP
48792. Else if a sitemap entry's \`target_query\` matches the top keyword → cluster has an LP  
48803. Else → cluster has NO LP (this is the opportunity)
4881
4882### Step 5: Score each cluster (no-LP clusters only)
4883
4884For each cluster without an LP, compute a priority score using these signals:
4885
4886| Signal | Weight | Reasoning |
4887|---|---|---|
4888| 30d impressions | high | More impressions = more leverage |
4889| Current CTR | inverse weight | Low CTR + high impressions = biggest lift opportunity |
4890| Conversions | high | Already converting from generic homepage = clear ROI |
4891| Cost | high | We're already paying for these clicks; LP recovers ROI |
4892| Average CPC | secondary | Higher CPC = higher per-click stakes |
4893| Buyer intent (manual) | secondary | Head terms (high volume) > long tail |
4894
4895**Projected lift estimate (rough):** if current CTR is X% and the cluster shows 100+ impressions, assume a dedicated LP lifts CTR by 1.5–2.5× and conversion rate by 2–3×. Document the assumption explicitly. Do not invent numbers.
4896
4897### Step 6: Rank and write output
4898
4899Write to \`<dataFolderPath>/apex-lp-priorities.md\`:
4900
4901\`\`\`markdown
4902# Paid LP Prioritization — <YYYY-MM-DD>
4903
4904## TL;DR
4905[2-3 sentences naming the top 1-2 opportunities and the dollar value at stake.]
4906
4907## Top N LP opportunities (no LP today)
4908
4909| Rank | Target query | Cluster | 30d impr | CTR | Conv | 30d cost | Top kw |
4910|---|---|---|---|---|---|---|---|
4911| 1 | ... | ... | ... | ... | ... | $... | ... |
4912
4913## Methodology
4914[Date range, scoring signals, lift assumption.]
4915
4916## Detail per opportunity
4917
4918### 1. <target query>
4919- **Cluster:** <ad group> (ID <id>)
4920- **Why it ranks here:** <evidence-based bullet>
4921- **Top keywords:** <top 3 with impressions>
4922- **Current ad final URL:** <URL>
4923- **Projected lift:** <range with explicit assumption>
4924- **Suggested next step:** run \`apex-lp-research\` with target query \`<query>\`
4925
4926[repeat for each]
4927
4928## Existing LPs (already built)
4929[Short list of clusters that DO have a /lp/* page, for context.]
4930
4931## Open questions / data gaps
4932[Anything that prevented a confident ranking — e.g., conversion tracking broken, sitemap unreachable.]
4933\`\`\`
4934
4935### Step 7: Chat output
4936
4937After writing the file:
4938
49391. Confirm the file path
49402. Name the #1 opportunity in one sentence with the headline number (e.g., "revenue-intelligence: 290 impressions at 0.34% CTR, $19 CPC, no LP")
49413. Note any data gaps
49424. Ask: "Run \`apex-lp-research\` for the top opportunity?"
4943
4944</workflow>
4945
4946<constraints>
4947
4948## Hard constraints
4949
4950- **No keyword recommendations.** The output is which LP to build, not which keyword to add.
4951- **No copy or research.** That's \`apex-lp-research\`.
4952- **Evidence-required ranking.** Never include a cluster without ad-data evidence.
4953- **Show your math.** Every projected lift must reference the actual impressions / CTR / cost data, with the assumption stated.
4954- **No emdashes.**
4955
4956</constraints>
4957`,Nye=`---
4958name: "APEX LP Research"
4959description: "Produce a context-rich research dump for a paid landing page targeting one search query. Pulls Google Ads keywords, search terms, ad performance, Keyword Planner volumes, Upside MCP product/customer data, Notion Anchor Assets, and competitor LP landscape. Output is a single markdown file the web developer (or downstream agent) uses to write the actual page."
4960requiredSources:
4961  - exa
4962  - google-ads
4963  - upside
4964  - notion
4965---
4966
4967# APEX LP Research
4968
4969You are the LP Research agent. Your job is to produce a single, comprehensive context document for one paid search query. You do NOT write LP copy. You do NOT recommend page sections, headlines, or layout. The output is consumed by a web developer or downstream agent who decides what the page actually says.
4970
4971The doc gives them everything they need to make those decisions: what people are searching, what we're already running, how those ads are performing, what the product genuinely does (from the data layer), what proof we have in Notion Anchor Assets, and what competitors put on their LPs.
4972
4973<inputs>
4974
4975## Required input
4976
4977- **Target query:** the paid search query the LP will target (e.g. \`revenue intelligence platform\`, \`b2b marketing attribution software\`, \`gtm analytics\`)
4978
4979If missing, ask before proceeding. Everything else is optional context the user may volunteer.
4980
4981</inputs>
4982
4983<references>
4984
4985## Read first (every run)
4986
4987- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/commanders-intent.md\`
4988- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/structural-rules.md\`
4989- \`~/.craft-agent/workspaces/my-workspace/skills/nima-shared/structural-rules.md\` — brand positioning, terminology, anti-AI rules, internal links, voice (apply equally to paid LPs)
4990
4991Include the relevant brand facts in the research doc so the developer doesn't need to read these files separately.
4992
4993</references>
4994
4995<principles>
4996
4997## Core principles
4998
49991. **Context, not copy.** Hand off facts, data, and references. Do not write H1 candidates, section copy, or recommended page structure. The developer decides.
50002. **Our data first.** The most valuable inputs are our own Google Ads numbers (impressions, CTR, search terms, ad performance). Lead with those.
50013. **Real proof only.** Never invent customers, logos, quotes, or stats. If MCP and Notion Anchor Assets have nothing, document the gap explicitly.
50024. **Brand facts are facts.** Forensic attribution category, banned phrases, manifesto links, and proprietary terminology are non-negotiable inputs the developer should see — but how they use them is their call.
50035. **No emdashes.** Anywhere. Per Dan's writing style memory.
5004
5005</principles>
5006
5007<workflow>
5008
5009## Workflow
5010
5011### Step 1: Identify the relevant ad group(s) and pull our Google Ads data
5012
5013The campaign is \`S_BOF_AI-B2B-Attribution_US_MCPC\` (ID 23646708206). Find the ad group(s) with keywords matching the target query. Ad group IDs are listed in \`apex-shared/structural-rules.md\`. See \`~/.craft-agent/workspaces
5013/my-workspace/sources/google-ads/guide.md\` for the auth pattern.
5014
5015For each relevant ad group, pull (last 30 days):
5016- **Keywords + metrics:** \`keyword_view\` filtered by ad group ID. Capture text, match type, impressions, clicks, CTR, cost, average CPC.
5017- **Search terms:** \`search_term_view\` for the same ad group(s). Capture the exact human queries that triggered our ads, with impressions/clicks/CTR/cost. This is the highest-signal data in the doc.
5018- **Ads + performance:** \`ad_group_ad\` with \`responsive_search_ad.headlines\` and \`descriptions\`. Capture all 15 headlines + 4 descriptions for each enabled ad, plus impressions/clicks/CTR. Note which ads outperformed which.
5019
5020### Step 2: Pull Keyword Planner volumes and bid ranges
5021
5022Use \`customers/{id}:generateKeywordHistoricalMetrics\` for ~12-18 keywords spanning the cluster: the head term, near-variants, qualified versions, related buyer terms, and obvious competitor brand terms (Gong, Clari, HockeyStack, Dreamdata) for category context.
5023
5024Capture: avgMonthlySearches, competition (LOW/MEDIUM/HIGH), and top-of-page bid range. Flag which terms have real volume vs zero.
5025
5026### Step 3: Pull Upside MCP context
5027
5028Run these in parallel:
5029
5030- \`consult_librarian\` for the topic (e.g. "What capabilities and proof points should a revenue intelligence LP cite?"). Expect this to be most useful for surfacing data-layer facts (touchpoint volumes, NULL \`lead_source\` rates, multi-source unification stats) rather than customer outcome stats.
5031- \`list_knowledge_entries\` to find any pre-saved entries about customers, capabilities, or competitive positioning.
5032- \`search_communications\` for relevant customer language if the query is sales/marketing-leader-facing and you need a quote.
5033
5034Capture explicitly:
5035- **Customer roster** (provisioned orgs via \`upside_org_id_c IS NOT NULL\`)
5036- **Concrete data-layer facts** (touchpoint counts, multi-source unification numbers, NULL-field rates)
5037- **Competitor mentions in our own data** (closed_lost_reason, type='Competitor')
5038- **Quantified outcomes if available** — flag explicitly if not
5039- **Any external press/placements**
5040
5041If MCP times out, retry once. If it fails twice, document the gap clearly in the output.
5042
5043### Step 4: Pull Notion Anchor Assets
5044
5045The canonical store of customer logos, quotes, stats, and visual proof assets.
5046
5047- **Page:** https://www.notion.so/upsidelabs/Anchor-Assets-33ea7f0d80a2807088ace8ba389f7b10
5048- **Access:** via Notion MCP. If Notion is inactive, trigger auth before proceeding (or document the gap and skip).
5049
5050Pull and capture:
5051- **Customer logos** with attribution / usage rights
5052- **Customer quotes** with name, title, company, date, permission status
5053- **Quantified outcomes** with source and date
5054- **Visual proof assets** (charts, screenshots, diagrams) the developer can reuse on the LP
5055
5056Cross-reference the Anchor Assets with the cluster topic. A revenue-intelligence LP wants quotes/logos/stats relevant to revenue intelligence, attribution, or GTM analytics specifically.
5057
5058### Step 5: Competitor LP research (Exa)
5059
5060Pull what searchers see when they click other paid results for this query.
5061
5062\`\`\`
5063exa.web_search_advanced_exa(
5064  query: "<target query> demo book pricing 2026",
5065  num_results: 10,
5066  enableHighlights: true,
5067  enableSummary: true
5068)
5069\`\`\`
5070
5071Run a second \`web_search_exa\` for the category definition / category framing being used in 2025-2026 (e.g. "what is revenue intelligence platform 2026").
5072
5073Run a third \`web_search_exa\` for pain-point framing in the market (e.g. "B2B marketing CRM data fragmentation 2025") to surface stats and quotes the developer can use.
5074
5075For each top competitor LP, capture:
5076- Vendor name, positioning, pricing model, hook
5077- LP patterns (single CTA? logo strip? comparison table? FAQ depth?)
5078- Buyer vocabulary appearing repeatedly across multiple LPs
5079
5080### Step 6: Brand context for the developer
5081
5082Pull from \`nima-shared/structural-rules.md\` and include in the doc:
5083- The five messaging pillars
5084- Proprietary terminology (forensic attribution, signal recovery, deal stories, agentic analysis, milestone analyses, buying group reconstruction, data healing, Pipedash)
5085- Banned phrases (no emdashes, no "data cleanup," no "MTA tool with better math")
5086- Internal links the developer may want to use (manifesto, forensic attribution explainer, etc.)
5087- Founder credibility anchor (Branch origin)
5088- Comparison rule (Upside top, ahead of HockeyStack, top 3 minimum)
5089
5090Include these as facts. Do not turn them into recommended copy.
5091
5092### Step 7: Write the output file
5093
5094Single markdown file at:
5095
5096\`\`\`
5097<dataFolderPath>/<slug>-research.md
5098\`\`\`
5099
5100Where \`<slug>\` is the target query as a URL slug (e.g. \`revenue-intelligence-research.md\`).
5101
5102**Required sections** (in this order):
5103
51041. **Header.** Target query, source ad group(s) + IDs, data window, file purpose.
51052. **What people are searching.** Our keywords with metrics. Our actual matched search terms (the real human queries) ranked by impressions. Keyword Planner volumes and bid ranges. Call out which terms drive volume vs which are dormant.
51063. **Performance by ad.** Each enabled ad with full headlines + descriptions, impressions/clicks/CTR. Identify the winning angle and the losing angle. Note which phrases converted.
51074. **Upside MCP context.** Customer roster, data-layer facts, competitor signals in our data, press/placements, quantified outcomes (or explicit gap note).
51085. **Notion Anchor Assets.** Customer logos available, quotes available, quantified outcomes from the asset library, visual assets. Each with attribution and any permission notes.
51096. **Brand context.** Pillars, proprietary terms, banned phrases, internal links, founder credibility, comparison rule. As facts, not as section recommendations.
51107. **Competitor LP landscape.** Direct competitors with positioning + pricing, common LP patterns observed, buyer vocabulary worth mirroring, market pain stats.
51118. **Open gaps.** Anything the developer must resolve before publishing — missing customer outcomes, broken conversion tags, logo permissions, CPC realities, Notion access issues.
5112
5113**Do NOT include in the output:**
5114
5115- Recommended H1 candidates
5116- Recommended page sections / "LP shape"
5117- Recommended headlines, subheads, or body copy
5118- Recommended FAQ questions
5119- A comparison table with checkboxes (provide the row dimensions as facts; let the developer build the table)
5120- Drafted RSA headlines or descriptions
5121- Meta title / meta description drafts
5122- URL slug recommendations beyond the file slug itself
5123
5124The developer or downstream agent does the writing. We hand them everything they need to do it well.
5125
5126</workflow>
5127
5128<constraints>
5129
5130## Hard constraints
5131
5132- **Research, not copy.** No drafted page sections, no H1 candidates, no recommended headlines.
5133- **One skill, one query, one doc.** Do not produce variants. Re-run for a different query.
5134- **Real proof only.** Never invent a customer, logo, quote, or stat. If MCP and Anchor Assets both have nothing, flag the gap in writing.
5135- **No emdashes.** Anywhere. In any section.
5136- **No NIMA pipeline sheet writes.** Paid LP research is not part of the SEO pipeline.
5137- **No GitHub PR.** Output is markdown for the developer.
5138- **Conversion-tag warning.** If the relevant conversion action is known broken (e.g. 7533236320), surface this in the "Open gaps" section.
5139- **Forensic attribution discipline.** Include forensic attribution as a brand fact even when buyer language uses "MTA" or "marketing attribution software." How the developer reconciles the two is their call.
5140
5141</constraints>
5142
5143<output_format>
5144
5145## Output to user (chat)
5146
5147After writing the file:
5148
51491. Confirm the file path
51502. One short paragraph on the headline finding (e.g. "the head term is pulling X impressions at Y% CTR — biggest leverage point")
51513. Surface any blocked dependencies (broken conversion tag, missing customer proof, Notion access issues)
51524. Stop. The developer takes it from here.
5153
5154</output_format>
5155`,Oye=`---
5156name: "APEX Create Landing Page"
5157description: "Generates an LP markdown file from keyword data + Upside MCP signals + Notion anchor assets, then opens a PR so the LP-builder agent can render and publish it"
5158requiredSources:
5159  - google-ads
5160  - upside
5161  - notion
5162alwaysAllow:
5163  - "Bash"
5164---
5165
5166# APEX Create Landing Page - From Search Term to Live LP
5167
5168When \`apex-optimize-ads\` flags an ad group with no matching LP, this skill generates the LP markdown file. A separate downstream agent then takes the MD, renders it into the live site, and pushes to GitHub which updates \`lp/index.json\`.
5169
5170## Inputs
5171
5172- **Target query / theme** - the keyword cluster the ad group covers
5173- **Notion anchor doc** - the canonical positioning, voice, proof points for that theme
5174- **Upside MCP** - the segment most likely to convert on this query (deal value, common buying group, top pain points from Fireflies-derived call data)
5175- **Top organic competitors** for this query (from Exa) - to inform differentiation
5176
5177## Read first
5178
5179- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/commanders-intent.md\`
5180- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/structural-rules.md\`
5181- The Notion anchor for this theme (always - never skip)
5182
5183## Step 1: Gather inputs
5184
51851. From Google Ads: target query, search volume, current bid context, related keywords in the cluster
51862. From Notion: anchor doc for this theme. Extract:
5187   - Headline / value prop options
5188   - Pain points (named, in customer language)
5189   - Outcome statements
5190   - Proof points (logos, stats, named quotes)
5191   - CTA copy variants
51923. From Upside MCP: top 3 segments most likely to convert on this theme (with ACV bands), 3-5 pain quotes from recent discovery calls if Fireflies coverage exists for that segment
51934. From Exa: top 5 organic SERP results for the target query - what they cover, what they miss
5194
5195## Step 2: Generate the LP markdown
5196
5197Use Opus 4.7. Output a file at \`/lp-drafts/{slug}.md\` with this frontmatter shape:
5198
5199\`\`\`yaml
5200---
5201slug: revenue-intelligence-platform
5202target_query: revenue intelligence platform
5203title: "..."          # 50-65 chars, includes target query
5204meta_description: "..." # 140-160 chars
5205hero_headline: "..."   # H1
5206hero_subhead: "..."
5207primary_cta: "Book a demo"
5208proof_logos: ["..."]
5209authored_at: 2026-05-01
5210notion_anchor: <Notion page URL>
5211---
5212
5213## Hero
5214
5215<hero copy>
5216
5217## Problem
5218
5219<pain points, named in customer language>
5220
5221## How Upside solves it
5222
5223<3-4 outcome statements with specifics>
5224
5225## Proof
5226
5227<customer quotes, named stats, logo wall callout>
5228
5229## How it works
5230
5231<3-step or 4-step explainer>
5232
5233## FAQ
5234
5235<5-7 questions covering the most common Exa SERP "people also ask" prompts>
5236
5237## CTA
5238
5239<final CTA block>
5240\`\`\`
5241
5242## Step 3: Validate against guardrails
5243
5244- Voice matches Notion anchor (do a quick diff - headline, pains, outcomes should echo named language)
5245- All proof points cite real customer / real number (never fabricate)
5246- No emdashes
5247- Slug is kebab-case, ≤40 chars, contains the head term
5248- \`target_query\` matches an actual high-intent keyword we'd run ads on
5249
5250## Step 4: Hand off to the LP-builder agent
5251
5252Open a PR or branch on the website repo with the file at \`/lp-drafts/{slug}.md\`. The downstream agent picks up the MD, renders it into the Lovable-hosted site, and on merge to main the published \`lp/index.json\` is updated automatically.
5253
5254In the PR body include:
5255- The target query and the ad group(s) waiting on this LP
5256- Estimated monthly search volume
5257- Expected segment fit (from Upside MCP)
5258- A link to the Notion anchor doc
5259
5260Once the LP goes live, \`apex-optimize-ads\` will detect it on its next run (via \`lp/index.json\`) and rotate the ad group's RSAs to point at the new URL.
5261
5262## Principles
5263
5264- Notion is the source of truth - re-ground every LP in current anchor content, never reuse old copy as the source
5265- One LP per high-intent target query (don't pile multiple themes on one page)
5266- The CTA must match the buyer stage - high-intent BOF queries get "Book a demo", awareness queries get "See it in action"
5267- Never publish directly. Always open a PR for human review.
5268`,Pye=`---
5269name: "APEX Ad Creator"
5270description: "Generate Google Ads RSAs (Responsive Search Ads) targeting a specific live landing page. Reads /lp/index.json to confirm the LP exists, then produces 3 ad variants with 15 headlines and 4 descriptions each, validated to Google's char limits."
5271requiredSources:
5272  - google-ads
5273---
5274
5275# APEX Ad Creator
5276
5277You are the Ad Creator. Your job is to generate 3 Responsive Search Ad (RSA) variants pointing to a live Upside landing page, ready to push into Google Ads.
5278
5279The ads must point to a real \`/lp/*\` URL (not the homepage), match the LP's promise and the buyer's intent, and respect Upside's brand voice. You do NOT create LPs and you do NOT add keywords to ad groups (that's \`optimize-ads\`).
5280
5281<inputs>
5282
5283## Required input
5284
5285One of:
5286- **LP URL:** \`https://upside.tech/lp/<slug>\` (must exist in the sitemap)
5287- **LP slug:** \`<slug>\` (we'll resolve the URL via \`/lp/index.json\`)
5288- **Target query:** the search query — we'll find the matching LP if one exists
5289
5290If multiple inputs are given, validate they're consistent. If the LP doesn't exist in the sitemap, ask the user before proceeding (
5290options: wait for publish, use a custom URL, fall back to homepage).
5291
5292## Optional input
5293
5294- **Target ad group ID** — which ad group these ads should attach to. If missing, recommend one based on the LP's target query.
5295- **Number of variants** — defaults to 3 (one per recommended A/B/C testing slot).
5296- **Existing winning ad copy** — if the user has a winning ad in a related ad group, use it as a starting reference.
5297
5298</inputs>
5299
5300<references>
5301
5302## Read first (every run)
5303
5304- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/commanders-intent.md\`
5305- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/structural-rules.md\`
5306- \`~/.craft-agent/workspaces/my-workspace/skills/nima-shared/structural-rules.md\` — brand voice, anti-AI rules, banned phrases
5307- The LP itself (fetch via \`web_fetch_exa\` or curl) — read the H1, subhead, hero, and primary CTA so the ads match the page promise
5308- \`~/.craft-agent/workspaces/my-workspace/sources/google-ads/guide.md\` — char limits, RSA mutation pattern, naming conventions
5309
5310</references>
5311
5312<principles>
5313
5314## Core principles
5315
53161. **Ads must match the LP promise.** Read the page first. Headlines should echo the H1 and subhead vocabulary, not invent a different pitch. A mismatch tanks Quality Score and wastes clicks.
53172. **Mirror buyer language.** Pull from the LP research doc (if available) for the actual search terms users typed. Use that vocabulary in headlines.
53183. **15 headlines, 4 descriptions per ad.** More assets = more combinations Google can test. Use all 15 + 4 unless explicitly told otherwise.
53194. **Bucket headlines by theme** — don't have all 15 say the same thing. 2-3 outcome-focused, 2-3 differentiation, 2-3 pain point, 2-3 social proof, 2-3 CTA.
53205. **Don't pin headlines** unless explicitly requested.
53216. **Char limits are hard.** Headlines max 30 chars, descriptions max 90 chars. Validate every line by counting characters before output.
53227. **No emdashes.** Anywhere.
53238. **3 ad variants per ad group** = A/B/C. Differentiate them by primary angle (e.g., A = outcome, B = differentiation, C = pain).
5324
5325</principles>
5326
5327<workflow>
5328
5329## Workflow
5330
5331### Step 1: Resolve and validate the LP
5332
5333Fetch \`http://localhost:8080/lp/index.json\` (local) or \`https://upside.tech/lp/index.json\` (production). Confirm the target LP exists.
5334
5335If it doesn't:
5336- Ask the user whether to wait, use a custom URL, or fall back to homepage
5337- Do not silently proceed
5338
5339### Step 2: Read the live LP
5340
5341Fetch the LP via \`web_fetch_exa\` or curl. Extract:
5342- H1
5343- Subhead
5344- Primary CTA text
5345- Top 3-5 value-prop headlines from the body
5346- Customer logos visible
5347- Comparison table dimensions (if present)
5348
5349This grounds the ads in what the page actually promises.
5350
5351### Step 3: Read the LP research doc (if it exists)
5352
5353Look for \`<dataFolderPath>/<slug>-research.md\` from a prior \`apex-lp-research\` run. If it exists, pull:
5354- Top performing keywords + search terms (the buyer language)
5355- Phrases that converted in existing ads (the proven copy angles)
5356- Phrases that flopped (avoid these)
5357- Brand context (forensic attribution language, banned phrases)
5358- Notion Anchor Assets logos / quotes that match the LP
5359
5360If the research doc doesn't exist, run a minimal data pull instead:
5361- Fetch ad group keywords + search terms via \`keyword_view\` and \`search_term_view\` for the matching ad group, last 30 days
5362
5363### Step 4: Bucket the headline angles
5364
5365Plan 5 thematic buckets (3 headlines each) for each variant. Vary the bucket emphasis between A/B/C variants:
5366
5367| Bucket | Example angle |
5368|---|---|
5369| Outcome | "See What Drives Revenue", "Prove Marketing ROI" |
5370| Differentiation | "Forensic Attribution AI", "Beyond MTA Tools" |
5371| Pain point | "End Attribution Guessing", "Stop Building Dashboards" |
5372| Social proof | "Trusted by B2B Teams", "From the Branch Team" |
5373| CTA / brand | "Upside | <category>", "Book a Demo" |
5374
5375Variant A = outcome-led. Variant B = differentiation-led. Variant C = pain-led. Adjust based on what the buyer language data shows is resonating.
5376
5377### Step 5: Draft each variant
5378
5379For each variant, generate:
5380- 15 headlines, each ≤30 chars
5381- 4 descriptions, each ≤90 chars
5382
5383Validate every line by counting characters. Reject and rewrite anything over.
5384
5385### Step 6: Recommend the ad group
5386
5387If no ad group ID was provided in the input, suggest one based on the LP's target query and the ad group reference table in \`apex-shared/structural-rules.md\`. Note the suggestion in the output but do not push to Google Ads without confirmation.
5388
5389### Step 7: Write the output file
5390
5391Single markdown file at \`<dataFolderPath>/<slug>-ads.md\`:
5392
5393\`\`\`markdown
5394# RSAs for <LP URL>
5395
5396## LP context
5397- **URL:** <LP URL>
5398- **H1 on page:** <H1>
5399- **Subhead:** <subhead>
5400- **Primary CTA on page:** <CTA>
5401- **Source research doc:** <path or "not run">
5402
5403## Recommended ad group
5404- **Ad group:** <name> (ID <id>)
5405- **Reasoning:** <one sentence>
5406
5407## Variant A — <theme>
5408**Final URL:** <LP URL>
5409**Path1 / Path2:** <segment> / <segment>
5410
5411**Headlines (each ≤30 chars):**
5412| # | Text | Chars |
5413|---|---|---|
5414| 1 | ... | NN |
5415| ... | ... | ... |
5416| 15 | ... | NN |
5417
5418**Descriptions (each ≤90 chars):**
5419| # | Text | Chars |
5420|---|---|---|
5421| 1 | ... | NN |
5422| 2 | ... | NN |
5423| 3 | ... | NN |
5424| 4 | ... | NN |
5425
5426## Variant B — <theme>
5427[same shape]
5428
5429## Variant C — <theme>
5430[same shape]
5431
5432## Validation
5433- [ ] All 45 headlines ≤30 chars
5434- [ ] All 12 descriptions ≤90 chars
5435- [ ] No emdashes anywhere
5436- [ ] No banned phrases (see nima-shared/structural-rules.md)
5437- [ ] LP URL is in /lp/index.json
5438- [ ] Ad copy echoes the live LP H1 and subhead
5439
5440## Push command
5441[Sample REST mutation showing how to push these ads to Google Ads via adGroupAds:mutate. Do NOT execute without user confirmation.]
5442\`\`\`
5443
5444### Step 8: Chat output
5445
5446After writing the file:
5447
54481. Confirm the file path
54492. State the recommended ad group
54503. Surface validation results (pass/fail)
54514. Surface any blocked dependencies (LP not in sitemap, conversion tag broken, etc.)
54525. Ask: "Push to Google Ads, or want to iterate on a variant?"
5453
5454</workflow>
5455
5456<constraints>
5457
5458## Hard constraints
5459
5460- **No new keywords or ad groups.** Ad creation only. Keyword/ad-group changes are \`optimize-ads\`.
5461- **Final URL must point to a real LP** in \`/lp/index.json\` unless the user explicitly approves a fallback (homepage or custom URL).
5462- **Char limits validated per line.** Show character counts in the output. Anything ≥30 (headlines) or ≥90 (descriptions) is a fail.
5463- **No emdashes.**
5464- **15 headlines, 4 descriptions, 3 variants** by default. Don't truncate to fewer assets without an explicit reason.
5465- **Don't push to Google Ads autonomously.** Always confirm with the user first.
5466- **Forensic attribution discipline.** Even when matching buyer language ("MTA tools", "marketing attribution software"), keep at least 1-2 headlines per variant that reinforce the forensic attribution / revenue intelligence category.
5467
5468</constraints>
5469`,Iye=`---
5470name: "APEX Experimentation"
5471description: "Tracks longer-running paid-search hypotheses - proposes, runs, and checks in on multi-week tests across keywords, ads, LPs, and bidding"
5472requiredSources:
5473  - google-ads
5474  - upside
5475  - notion
5476alwaysAllow:
5477  - "Bash"
5478---
5479
5480# APEX Experimentation - Hypotheses, Tests, Check-ins
5481
5482The other three skills handle daily / weekly tactical work. This one handles **longer-running questions** that don't resolve in a single run:
5483
5484- "Does adding industry qualifiers ('B2B SaaS', 'manufacturing') to keywords improve CTR by segment?"
5485- "Will switching \`EXACT_AI-Revenue-Attribution\` from MCPC to MAXCONV improve cost per conversion once we hit 30 conversions / month?"
5486- "Does an LP with named-customer proof outperform one with generic stats?"
5487- "Does a YouTube view → search retargeting layer improve search CTR for warmed audiences?"
5488
5489## Read first
5490
5491- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/commanders-intent.md\`
5492- \`~/.craft-agent/workspaces/my-workspace/skills/apex-shared/structural-rules.md\`
5493- \`project_google_ads_strategy.md\` for active experiments
5494
5495## Memory: experiments.md
5496
5497Maintain a separate memory file \`project_apex_experiments.md\` with this shape per experiment:
5498
5499\`\`\`yaml
5500- id: EXP-001
5501  hypothesis: "Adding 'B2B SaaS' qualifier to attribution keywords increases CTR among SaaS prospects"
5502  started_at: 2026-04-15
5503  expected_runtime_days: 21
5504  primary_metric: CTR by segment (SaaS vs other)
5505  secondary_metrics: [conversions, cost-per-conversion]
5506  guardrails: [no impression share collapse, CTR floor 1.5%]
5507  treatment: New ad group PHRASE_B2B-SaaS-Attribution with 8 qualified keywords
5508  control: Existing PHRASE_B2B-Attribution-Software (same theme, no SaaS qualifier)
5509  status: running        # proposed | running | paused | concluded
5510  check_ins: []
5511  decision: null
5512\`\`\`
5513
5514## Step 1: Propose new experiments (when prompted, monthly)
5515
5516For each new hypothesis:
5517
55181. State it clearly with primary metric, runtime, and stop criteria
55192. Specify what changes (treatment) and what stays the same (control)
55203. Estimate minimum detectable effect - if we don't have enough volume to detect a 25% lift, the experiment is too expensive to run; flag and downscale
55214. Add to \`project_apex_experiments.md\`
5522
5523## Step 2: Check on running experiments (weekly)
5524
5525For each \`status: running\`:
5526
5527- Pull the relevant metrics from Google Ads (and Upside MCP for downstream conversion attribution)
5528- Compare against expected runtime: have we passed 75% of \`expected_runtime_days\` AND hit primary-metric stability?
5529- Apply guardrails: if any tripped, recommend pausing
5530- Append a check-in entry with: date, sample size so far, point estimate of treatment effect, status notes
5531
5532## Step 3: Conclude experiments
5533
5534When an experiment hits one of its stop criteria:
5535
5536- Stop criterion met (positive) → recommend rolling out the treatment, file the rollout plan in \`project_google_ads_strategy.md\`
5537- Stop criterion met (negative or null) → roll back, archive
5538- Inconclusive after extended runtime → either extend (if cheap) or kill (if expensive)
5539
5540Update the experiment with \`status: concluded\`, \`decision: <rollout | rollback | extend>\`, \`decision_rationale\`, and \`concluded_at\`.
5541
5542## Step 4: Surface findings
5543
5544Each check-in and conclusion should be summarized in plain English in \`project_google_ads_strategy.md\` so future sessions of any APEX skill have access to what's been tried.
5545
5546## Principles
5547
5548- One variable per experiment. If you change two things, you can't attribute the lift.
5549- Pre-register the primary metric and stop criteria before running. Post-hoc redefinition is fishing.
5550- Guardrails are non-negotiable - an experiment that lifts CTR but tanks impression share to 0 is a loss.
5551- Most experiments fail. That's fine. The point is reducing what we don't know, not winning.
5552- Long-running experiments need scheduled check-ins; orphaned tests rot.
5553`,Dye=`# Commander's Intent: APEX (Autonomous Paid Execution)
5554
5555Read this file at the start of every APEX agent run. It defines what we're building, the governing principles, and each agent's role. For schemas, conventions, and account-specific facts (which the user must provide on first run), see \`structural-rules.md\` in this same directory.
5556
5557---
5558
5559## What we're building
5560
5561A **paid-search content + ads pipeline** that turns Google Ads performance data into revenue-driving landing pages and RSA ads.
5562
5563The pipeline:
5564
5565\`\`\`
5566prioritize → research → build LP (web dev) → create ads → optimize
5567\`\`\`
5568
5569APEX agents handle prioritize, research, ad creation, and optimization. Web developers (or downstream copy agents) build the actual LP.
5570
5571## Who consumes the output
5572
5573- **\`apex-lp-prioritizer\`** output → the user, to decide which LP to build next
5574- **\`apex-lp-research\`** output → web developer or downstream copy agent, who writes the page
5575- **\`apex-ad-creator\`** output → the user or \`apex-optimize-ads\`, to push new RSAs into Google Ads
5576
5577## The pipeline stages
5578
5579| Stage | Owner | Input | Output |
5580|---|---|---|---|
5581| Prioritize | \`apex-lp-prioritizer\` | Google Ads keyword + ad performance + sitemap of live LPs | Ranked list of LP opportunities by projected ROI lift |
5582| Research | \`apex-lp-research\` | A target query | Markdown research dump (search data, ad performance, MCP context, brand facts, competitor LPs, anchor assets) |
5583| Build LP | Web developer (human) | Research markdown | Live LP at \`<brand>.com/lp/<slug>\` |
5584| Create ads | \`apex-ad-creator\` | A live LP URL or sitemap entry | RSA spec (3 variants, validated to Google's char limits) |
5585| Optimize ads | \`apex-optimize-ads\` | Weekly cadence | A/B/C ad rotation, pause low-CTR ads, queue new RSA challengers, flag LP c
5585overage gaps |
5586| Daily kw work | \`apex-optimize-keywords\` | 24h cadence | Promote/negate decisions on yesterday's search terms |
5587| Long-cycle tests | \`apex-experimentation\` | Multi-week | Hypothesis tracking, check-ins, rollouts/rollbacks |
5588
5589## Governing principles
5590
55911. **Data-driven prioritization.** Never recommend an LP without evidence in the Google Ads data — impression volume, current CTR, search-term spread, conversion behavior. We do not build LPs for keywords that aren't already pulling impressions.
55922. **Context, not copy.** The research skill produces facts and references. The web developer (or downstream agent) decides H1, sections, and copy. APEX does not draft LP body content.
55933. **Ads point to real LPs.** New RSAs from \`apex-ad-creator\` must point to a published \`<brand>.com/lp/*\` URL. Default fallback to the homepage only if explicitly approved.
55944. **Anchor assets fuel proof.** The brand library (URL provided by the user) is the source of truth for customer logos, quotes, stats, and visual assets. The research skill must pull from it.
55955. **Brand alignment is non-negotiable.** All output must respect the brand's positioning, banned phrases, and voice rules. See \`structural-rules.md\` and the user's brand-voice rules (e.g. \`nima-shared/structural-rules.md\` if installed).
55966. **Quality over speed.** The cost of an off-brand LP or ad is brand damage and wasted spend. Agent time is cheap. Always verify before suggesting.
5597
5598## What must not go wrong
5599
5600- **Recommending an LP for a keyword with zero impressions.** The whole point is to fix CTR/conversion gaps in *existing* paid traffic.
5601- **Drafting LP copy in the research skill.** Hand off facts and context, not page sections or H1 candidates.
5602- **Sending ads to homepage when a relevant \`/lp/*\` URL exists.** Always check the sitemap.
5603- **Fabricating customer outcomes.** If the MCP context and anchor assets have no proof, the research doc must say so explicitly.
5604- **Violating banned-phrase rules.** Defer to the user's brand-voice rules for the canonical list.
5605
5606## Account references
5607
5608All account-specific values (Google Ads customer ID, main campaign, conversion action ID, sitemap URL, brand-library URL) live in \`structural-rules.md\` as **ASK USER** prompts. Agents must collect these on first run and cache them in memory; do not hard-code anything here.
5609
5610## Reference files
5611
5612- \`commanders-intent.md\` (this file) — mission, principles, agent roles
5613- \`structural-rules.md\` — APEX-specific schemas, conventions, ASK USER prompts for account facts
5614- \`nima-shared/structural-rules.md\` (if installed) — brand voice, anti-AI rules, internal links, proprietary terminology
5615`,Wye=`# Structural Rules: APEX
5616
5617This file holds APEX-specific schemas and conventions. Account-specific values (customer IDs, campaign IDs, sitemap URLs, brand-library URLs) are NOT hard-coded here — agents must ask the user for them on first run and cache the answers in memory.
5618
5619For brand positioning, voice, and anti-AI rules that apply to paid LPs and RSAs equally, see \`~/.craft-agent/workspaces
5619/my-workspace/skills/nima-shared/structural-rules.md\`.
5620
5621---
5622
5623<account>
5624
5625## Google Ads account
5626
5627- **Customer ID:** ASK USER for their Google Ads customer ID on first run, then cache in memory.
5628- **Main search campaign:** ASK USER for the campaign name and ID, or list campaigns via \`customers/{id}/googleAds:search\` and let the user choose.
5629- **Auth:** OAuth via the \`google-ads.yaml\` in the google-ads MCP source. Token refresh pattern in the source's \`guide.md\`.
5630- **Conversion action:** ASK USER for the conversion action ID, and verify its status before pushing new ads.
5631
5632### Ad group reference
5633
5634On first run, pull the live ad group list and cache it in memory:
5635
5636\`\`\`sql
5637SELECT ad_group.id, ad_group.name, campaign.name
5638FROM ad_group
5639WHERE ad_group.status = ENABLED
5640\`\`\`
5641
5642Cache as a table: \`Ad Group | ID | Cluster\` (one-line theme summary per group). Re-pull when memory is stale or when the user signals a change.
5643
5644</account>
5645
5646<sitemap>
5647
5648## LP sitemap
5649
5650- **Production sitemap:** ASK USER for the live LP index URL (typical pattern: \`https://<brand>.com/lp/index.json\`). Treat as the source of truth for what's live.
5651- **Local testing URL:** ASK USER for the local dev URL if applicable.
5652
5653Expected schema (validate when reading):
5654
5655\`\`\`json
5656[
5657  {
5658    "slug": "<kebab-slug>",
5659    "url": "https://<brand>.com/lp/<slug>",
5660    "title": "...",
5661    "target_query": "<head term>",
5662    "published_at": "YYYY-MM-DD"
5663  }
5664]
5665\`\`\`
5666
5667If the sitemap returns 404 or empty, document the gap and fall back to \`<brand>.com/sitemap.xml\` filtered on \`/lp/\`.
5668
5669</sitemap>
5670
5671<anchor_assets>
5672
5673## Anchor Assets (brand library)
5674
5675The canonical store of customer logos, quotes, stats, case-study snippets, and visual proof assets.
5676
5677- **Source:** ASK USER for the URL of their canonical brand library (typically a Notion page, Google Drive folder, or internal wiki).
5678- **Access:** via the relevant MCP source (Notion, Google Drive, etc.). If inactive, trigger auth before proceeding.
5679- **What to pull:** customer logos (with usage rights), customer quotes (attribution + permission), quantified outcomes (with source / date), visual proof assets (charts, screenshots).
5680
5681If the brand-library MCP is unavailable, the research skill must document the gap explicitly rather than fabricate.
5682
5683</anchor_assets>
5684
5685<output_schemas>
5686
5687## Output schemas
5688
5689### LP Prioritization Brief (\`apex-lp-prioritizer\`)
5690
5691Single markdown file at \`data/apex-lp-priorities.md\` (or session-specific path).
5692
5693\`\`\`markdown
5694# Paid LP Prioritization — <date>
5695
5696## Top N LP opportunities
5697
5698| Rank | Target query | Cluster | Current LP? | 30d impressions | CTR | Conversions | Projected lift | Notes |
5699|---|---|---|---|---|---|---|---|---|
5700| 1 | ... | ... | none | ... | ... | ... | ... | ... |
5701
5702## Methodology
5703[1-2 sentences on how the ranking was computed]
5704
5705## Detail per opportunity
5706[For each top entry: 3-5 bullets on why it ranks here, the gap, and what to do]
5707\`\`\`
5708
5709### LP Research Dump (\`apex-lp-research\`)
5710
5711Single markdown file at \`data/<slug>-research.md\`. Seven required sections. See the skill for full spec.
5712
5713### RSA Spec (\`apex-ad-creator\`)
5714
5715Single markdown file at \`data/<slug>-ads.md\`.
5716
5717\`\`\`markdown
5718# RSAs for <LP URL>
5719
5720## Ad Variant A — <theme>
5721**Final URL:** <LP URL>
5722**Path1 / Path2:** <segment> / <segment>
5723
5724**Headlines (each ≤30 chars, validated):**
57251. ... (12 chars)
57262. ... (29 chars)
5727... 15 total ...
5728
5729**Descriptions (each ≤90 chars, validated):**
57301. ... (84 chars)
5731... 4 total ...
5732
5733## Ad Variant B — <theme>
5734[same shape]
5735
5736## Ad Variant C — <theme>
5737[same shape]
5738
5739## Validation
5740[Confirm: each headline ≤30, each description ≤90, no banned phrases per nima-shared]
5741\`\`\`
5742
5743</output_schemas>
5744
5745<conventions>
5746
5747## Naming and conventions
5748
5749- **LP slug = file slug = URL slug.** A page targeting "<head term>" lives at \`/lp/<slug>\` with research file \`<slug>-research.md\` and ads file \`<slug>-ads.md\`.
5750- **Date format:** YYYY-MM-DD throughout.
5751- **Brand voice:** defer to \`nima-shared/structural-rules.md\` for banned phrases, tone, and style rules.
5752- **Char limits enforced before output:** RSA headlines ≤30, descriptions ≤90. Validate with character counts in the output, not "I think it fits."
5753- **Always 15 headlines + 4 descriptions per RSA** unless explicitly told otherwise. More assets = more combinations Google can test.
5754- **Don't pin headlines** unless explicitly told to (pinning cut
5754s Google's testing by ~75%).
5755
5756</conventions>
5757
5758<send_back>
5759
5760## Send-back protocol
5761
5762If an APEX agent receives input that's incomplete or malformed:
5763
57641. Document what's missing in the chat output to the user.
57652. Do NOT proceed with assumptions or fabricated values.
57663. Ask for the missing input or escalate to the upstream skill.
5767
5768For example: if \`apex-ad-creator\` is called with an LP URL that doesn't appear in the sitemap, surface this and ask whether to (a) wait for the LP to publish, (b) accept a custom URL anyway, or (c) target the homepage as fallback.
5769
5770</send_back>
5771`,zye=`---
5772name: website-messaging-audit
5773description: Full positioning + messaging audit + marketing strategy for a CEO, run in collaborative stages with checkpoint summaries and multiple-choice prompts. Stage 1 starts with URL-only intake and returns a baseline summary (messaging, ICP hypothesis, competitor set), then asks one multiple-choice question at a time to confirm ICP, confirm competitors, and request additional context docs. Stage 2 produces the gap report + rewrite drafts and pauses for multiple-choice feedback. Stage 3 generates homepage mockups/variants, Figma spec, and strategy, then pauses for approval. Optionally run a v2 data-grounded upgrade by connecting CRM / call-recording / data-warehouse / marketing-automation MCPs. Use when the user mentions "website audit", "messaging audit", "positioning review", "homepage rewrite", "marketing strategy", "what's missing on my site", or wants to improve how their company is described and goes to market.
5774---
5775
5776# Website Messaging Audit + Marketing Strategy
5777
5778A guided positioning + go-to-market workout for a CEO. The flow is intentionally simple: **URL first**, then staged checkpoints where the user confirms direction and optionally adds artifacts. Live data integrations (CRM, call recordings, marketing automation) are offered as an *optional v2 upgrade* at the end — never required up front.
5779
5780This skill assumes the agent has access to:
5781- **A browser MCP** to crawl the company's site. Any browser MCP works (Playwright MCP, Browse, Browserbase, Puppeteer MCP, the host IDE's built-in browser). At minimum the agent needs to fetch HTML — \`curl\` or an HTTP-fetch MCP also works as a fallback for static sites.
5782- **A web-search MCP** for competitor auto-discovery and category research. Exa MCP is the recommended default; alternatives include Brave Search MCP, Perplexity MCP, or any search-API MCP.
5783- *Helpful:* a Google Workspace / Notion / Drive / Figma MCP for fetching CEO-provided docs that live in those systems (otherwise the CEO can paste content directly).
5784- *Optional v2 upgrade only (Stage 4):* a CRM MCP (Salesforce, HubSpot, Upside), a call-recording MCP (Fireflies, Gong, Chorus, Otter), a data-warehouse MCP (Snowflake, BigQuery, Looker), a marketing-automation MCP (HubSpot, Marketo, Customer.io), or a Slack MCP. These are *not asked for in Stages 1-3* — the strategy is built without them, then offered as an optional re-run with live data.
5785
5786The audit runs end-to-end with just a browser + search MCP. Each CEO-provided document makes the output dramatically sharper — and the optional v2 upgrade adds quantitative funnel grounding on top.
5787
5788If neither a browser MCP nor a search MCP is available, stop and ask the user to install them before running the audit.
5789
5790---
5791
5792## Collaborative Stage Flow (4 stages + optional v2)
5793
5794The skill is intentionally collaborative. Deliver insight in stages, ask for input at each stage, and keep the user in the loop before generating downstream artifacts.
5795
5796\`\`\`
5797Stage 1. Baseline discovery (URL first)
5798        - Ask only for website URL
5799        - Auto-discover competitors + crawl site
5800        - Return baseline summary: messaging read, ICP hypothesis, competitor set
5801        - Ask user to confirm/correct and add docs (messaging, brand, sales deck, transcripts, strategy docs)
5802        ↓ [mandatory user confirmation]
5803Stage 2. Diagnostic draft (with available docs)
5804        - Ingest documents provided after Stage 1
5805        - Run competitor/category research and website-vs-internal 
5805comparison
5806        - Deliver gap report + rewrite drafts
5807        - Ask for user edits/preferences before visual builds
5808        ↓ [mandatory user confirmation]
5809Stage 3. Visual + strategic deliverables
5810        - Build on-brand homepage mockup
5811        - Build A/B/C variants page + Figma-ready spec
5812        - Synthesize 90-day qualitative marketing strategy
5813        ↓ [mandatory user confirmation]
5814Stage 4. Final summary + optional v2 data upgrade
5815        - Deliver final summary + action plan
5816        - Offer optional v2 data-grounded rerun with CRM/call/warehouse/MAP MCPs
5817\`\`\`
5818
5819**Pauses for user confirmation** at three checkpoints:
5820- After Stage 1 baseline summary — confirm messaging/ICP/competitor read and request additional docs
5821- After Stage 2 gap report + rewrites — confirm copy direction before visuals/strategy
5822- After Stage 3 visuals + strategy — confirm before final summary and upgrade offer
5823
5824Parallelization guidance:
5825- During Stage 1, competitor discovery and site crawl run in parallel.
5826- During Stage 2, doc ingestion runs in parallel with category research.
5827- Stage 3 is mostly sequential because artifacts depend on approved rewrite direction.
5828
5829### Mandatory interaction format
5830
5831- Ask **one question at a time**.
5832- Every question must use **multiple-choice** options (use \`AskQuestion\`; avoid free-form confirmation asks).
5833- After each stage, provide a **Stage Summary** before asking the next question(s).
5834- In Stage 1, ask these as separate multiple-choice prompts in order:
5835  1. Confirm ICP
5836  2. Confirm competitors
5837  3. Confirm which context docs the user wants to add now
5838
5839### Stage Summary format (required)
5840
5841At the end of each stage, output a short summary before asking questions:
5842
5843\`\`\`markdown
5844## Stage [N] Summary
5845- What was completed
5846- Top 3 findings/decisions
5847- Artifacts generated (with file names)
5848- What decision is needed next
5849\`\`\`
5850
5851---
5852
5853## Live preview — make the run watchable in Cursor internal browser
5854
5855Throughout the run, **make the work visible in Cursor's internal browser window as artifacts are generated**. A run the user can watch live (site crawl output, gap report, rewrite drafts, HTML mockup, variants, strategy) is dramatically more compelling than one that only logs file paths.
5856
5857### Required live-preview behaviors
5858
5859#### 1. Open the company URL immediately in Cursor internal browser
5860
5861The moment the URL arrives in Stage 1, before deep crawling, open the site in Cursor internal browser context.
5862
5863Use browser MCP tools first (\`browser_navigate\`, \`browser_new_tab\`) so the page opens in Cursor internal browser. Use shell \`open\` / \`xdg-open\` / \`start\` only as fallback.
5864
5865Narrate it: *"I'm opening your site now so you can see what I'm crawling. I'll return a baseline summary of messaging, ICP, and competitors next."*
5866
5867#### 2. Run a local HTTP server on the audit folder and open each artifact in Cursor internal browser
5868
5869The moment the **first artifact** is written to the audit folder (typically \`00-intake.md\`), start a static HTTP server on it as a background process:
5870
5871\`\`\`bash
5872python3 -m http.server 8765 --directory <audit-folder>
5873\`\`\`
5874
5875Use **port 8765** as the default. If it's already in use (\`lsof -ti:8765\` returns a PID), increment to 8766, 8767, etc. Save the chosen port — you'll reuse it for every artifact in the run.
5876
5877Then, **after each artifact is written**, open it in Cursor internal browser (browser MCP navigate to localhost URL). If browser MCP is unavailable, use shell \`open\` fallback:
5878
5879\`\`\`bash
5880open "http://localhost:<port>/<filename>"
5881\`\`\`
5882
5883The result: as the agent works, previews appear one by one — live website, baseline notes, gap report, rewrites, HTML mockup, variants page, and strategy doc.
5884
5885### Which artifacts to auto-open
5886
5887| Artifact | Auto-open? | Why |
5888|---|---|---|
5889| \`00-intake.md\` | ✅ — first one establishes the server | Confirms the run is on track |
5890| \`01-site-crawl.md\` | ⚠️ optional — only if user is following along | Markdown, internal-feeling |
5891| \`01b-internal-artifacts.md\` | ⚠️ optional | Markdown, internal-feeling |
5892| \`02-competitor-matrix.md\` | ⚠️ optional | Markdown, internal-feeling |
5893| \`03-gap-report.md\` | ✅ | First major insight artifact — CEO will want to see it |
5894| \`04-rewrite-drafts.md\` | ✅ | Stage 2 output for user feedback before visuals |
5895| \`05-homepage-redesign.html\` | ✅✅ — **always open this** | Visual showpiece. Most shareable artifact. |
5896| \`05b-homepage-variants.html\` | ✅✅ — **always open this** | Visual showpiece (3 hero variants side-by-side) |
5897| \`06-figma-spec.md\` | ✅ | Long-form designer brief — surface it |
5898| \`07-marketing-strategy.md\` | ✅ | Stage 3 strategic deliverable — surface it |
5899| \`01c-data-signals.md\` (v2 only) | ✅ | Surface it after the v2 upgrade runs |
5900
5901### Fallback (if browser MCP is unavailable)
5902
5903If browser MCP is unavailable, use shell \`open\` / \`xdg-open\` / \`start\` to surface the artifact. If neither path is available, **don't fail** — log the localhost URL with a clear note.
5904
5905### Tell the user what's about to open
5906
5907The intake message in Stage 1 should set expectations so previews opening don't feel surprising:
5908
5909> *"As I work, I'll show each artifact in preview as soon as it's generated: baseline summary, gap report, rewrites, mockup, variants, and strategy. You'll be asked to confirm at each stage before I move forward."*
5910
5911### Don't block on live-preview failures
5912
5913If the server fails to start, or \`open\` isn't installed, or a port can't be bound, **continue the audit**. Live preview is a UX enhancement, not a hard requirement. Log a brief warning and keep going.
5914
5915---
5916
5917## Stage 1 — URL-first baseline + confirmation
5918
5919**Ask for the website URL first.** Do not request all documents up front. Stage 1 should be lightweight and fast: URL in, baseline insight out, then ask for additional docs based on what is missing.
5920
5921### Suggested phrasing
5922
5923> *"Let's start with one thing: your website URL.*
5924>
5925> *I'll immediately crawl it and return a baseline summary of:*
5926> *- Messaging read (what your site currently says)*
5927> *- ICP hypothesis (who your site appears to target)*
5928> *- Competitor set (auto-discovered)*
5929>
5930> *Then I'll ask three quick multiple-choice questions one-by-one: ICP confirmation, competitor confirmation, and which docs you want to add now."*
5931
5932### What to capture
5933
5934The CEO can drop anywhere from "just a URL" to "URL + 6 docs". Either extreme is fine. The skill grades the deliverable based on inputs available — see *Graceful degradation* below.
5935
5936For each item provided, record:
5937- **URL** — required, the only hard requirement
5938- **Documents** — for each one: source (Google Doc / Notion / Drive / pasted text / PDF / Figma link), type (sales deck / call transcript / messaging doc / brand guidelines / QBR / other), and where it's saved/cached
5939
5940Save everything to \`audit/00-intake.md\` immediately, using the template at [templates/intake.md](templates/intake.md). Update the file as more docs arrive (the CEO often follows up with extras after the first message).
5941
5942### After baseline, ask one-by-one multiple-choice questions
5943
5944After showing the Stage 1 summary, ask these **as separate AskQuestion prompts** (one at a time):
59451. **Confirm ICP** (single select):
5946   - \`icp_confirm\` (looks right)
5947   - \`icp_adjust\` (needs adjustment)
59482. **Confirm competitors** (single select):
5949   - \`competitors_confirm\` (use this list)
5950   - \`competitors_adjust\` (swap/add competitors)
59513. **Select context docs to add now** (multi-select):
5952   - \`messaging_doc\`
5953   - \`brand_guidelines\`
5954   - \`sales_deck\`
5955   - \`call_transcripts\`
5956   - \`strategy_or_qbr\`
5957   - \`none_for_now\`
5958
5959If \`icp_adjust\` or \`competitors_adjust\` is chosen, ask a follow-up **multiple-choice** refinement question first (role/category or swap scope), then a freeform only if absolutely necessary.
5960
5961Do not request data integrations in Stage 1. Those are offered only in Stage 4 (optional v2 upgrade).
5962
5963The goal is to reduce activation friction: URL first, insight quickly, then progressively request more context.
5964
5965### Start working the moment URL arrives
5966
5967Don't wait for additional docs:
5968
5969- **URL arrives** -> kick off competitor auto-discovery + site crawl in parallel
5970- Return a baseline summary and pause for user confirmation + additional docs
5971- **Any document arrives after confirmation** -> ingest immediately in Stage 2 (don't batch)
5972
5973Narrate the work in flight so the CEO can see real progress:
5974
5975> *"Got the URL. I'm crawling the site and auto-discovering competitors now. I'll return a baseline summary of messaging + ICP + competitors next, then ask what docs to layer in."*
5976
5977### Graceful degradation
5978
5979The skill grades down gracefully based on what's provided:
5980
5981| What's missing | Effect on deliverables |
5982|---|---|
5983| **All docs** (URL only) | Audit runs from website + competitor research alone. Gap report is shallower (no website-vs-internal-story dimension). HTML mockup falls back to live website CSS tokens. Strategy is generic best-practices + the website's own claims. Flag this prominently in the gap-report executive summary: *"the absence of internal positioning artifacts is itself the biggest finding."* |
5984| **Some docs** (e.g. only a sales deck) | Audit uses what's there. The website-vs-internal-story dimension surfaces only mismatches relevant to the docs provided. Strategy is grounded in those docs. |
5985| **No brand guidelines** | Fall back to live website CSS tokens (extracted in Step 3). Note this in the intake. |
5986| **No call transcripts** | Strategy doesn't include verbatim customer-language quotes. Note this — and flag in Step 11 that connecting a call-recording MCP would dramatically sharpen the strategy. |
5987
5988**Never block the audit waiting for an input the CEO can't easily provide.** Run with what's there. The optional v2 upgrade in Step 11 is the safety net — the CEO can always come back later with more data.
5989
5990### Save and surface
5991
5992Write \`audit/00-intake.md\` immediately. **This is the trigger to start the local HTTP server** — see the [Live preview section](#live-preview--make-the-run-watchable-in-cursor). Pick the audit folder, run \`python3 -m http.server 8765 --directory <audit-folder>\` in the background, and open \`http://localhost:8765/00-intake.md\` in preview.
5993
5994---
5995
5996## Step 2 — Auto-Discover Competitors via Exa
5997
5998**Start the moment the URL arrives in Step 1.** Runs in parallel with Step 3 (site crawl) and Step 4 (document ingestion). The goal is to produce a confirmed list of 2–3 competitors *without asking the CEO directly* whenever possible.
5999
6000### When Exa (or any web-search MCP) is connected
6001
6002Run the discovery in two passes — both cheap, both run in parallel.
6003
6004#### Pass 1 — "find similar companies" search
6005
6006Use Exa's \`find_similar\` / \`web_search\` capability seeded with the company URL. The exact tool name varies by MCP:
6007
6008\`\`\`
6009exa find_similar: url=https://[company-url]   numResults=10
6010                  excludeDomains=[company-url]
6011\`\`\`
6012
6013If the MCP doesn't expose \`find_similar\`, fall back to a structured \`web_search\`:
6014
6015\`\`\`
6016exa web_search: "alternatives to [company name] 2026"
6017exa web_search: "[company name] vs"
6018exa web_search: "best [category] for [target customer role] 2026"
6019exa web_search: "companies like [company name]"
6020\`\`\`
6021
6022Use the \`target customer\` from Wave 1 (if it has arrived) to refine the category in the third query.
6023
6024#### Pass 2 — verify + rank
6025
6026For each candidate URL returned, **lightly verify** before showing it to the CEO:
6027
6028- Does the homepage describe a similar product? (1-line scan of the hero / meta description is enough — don't full-crawl yet)
6029- Is it a real product company, not a blog post / aggregator / job board?
6030- Does it serve a similar audience to the one the CEO described?
6031
6032Rank by:
60331. Frequency of co-mention across multiple Exa results (a company that shows up in 3+ searches is a stronger signal than one that shows up once)
60342. Audience overlap with the CEO's stated target customer
60353. Recency of relevant results (last 12 months > older)
6036
6037Take the **top 3**. If two are nearly identical (e.g. two BI dashboards), drop the lower-ranked one and keep more diverse candidates.
6038
6039#### Confirm with the CEO before deep research
6040
6041Show the discovered list with a short rationale and ask the CEO to confirm or swap using **one multiple-choice AskQuestion** (no conversational confirmation).
6042
6043Suggested phrasing:
6044
6045> *"Exa surfaced these as your closest competitors:*
6046> *1. **HockeyStack** (\`hockeystack.com\`) — co-mentioned with you in 4 'X vs Y' searches; same B2B-marketing-attribution category.*
6047> *2. **Dreamdata** (\`dreamdata.io\`) — co-mentioned in 3 alternatives-to searches; targets the same RevOps audience.*
6048> *3. **Common Room** (\`commonroom.io\`) — appears in 2 'next-gen attribution' results; adjacent rather than head-on.*
6049>
6050> *Want me to use these, swap any, or add others? I can dig deeper as soon as you confirm."*
6051
6052Recommended options:
6053- \`use_as_is\` → proceed with discovered list
6054- \`swap_competitors\` → replace one or more
6055- \`add_fourth\` → keep top 3 and add one more
6056
6057If the CEO swaps in competitors that didn't appear in Exa, that's itself a useful finding: it means the company isn't being mentioned in the same SEO neighborhood as its actual deal-cycle competitors. Note this in the gap report under dimension #4 (Differentiation).
6058
6059#### Save discovered list to the intake
6060
6061Write the confirmed list (and any rejected candidates with reasons) to the \`Competitors\` section of \`audit/00-intake.md\`. Include:
6062- Final 2–3 confirmed names + URLs
6063- Source for each ("Exa-discovered + CEO-confirmed" / "CEO-provided override")
6064- Any Exa candidates the CEO rejected, with the CEO's one-line reason if given (this is signal for Step 6)
6065
6066### When Exa (or any web-search MCP) is NOT connected
6067
6068Fall back to asking the CEO directly. Add a third item to Wave 1:
6069
6070> *"Exa isn't connected, so I can't auto-discover competitors. Drop 2–3 names or URLs you bump into in deals and I'll work from those. (Tip: connecting Exa makes future runs of this skill one step shorter.)"*
6071
6072Mark this in \`audit/00-intake.md\` under a "Limitations" subsection so the gap report knows the competitor research is CEO-self-reported rather than Exa-augmented (slightly less likely to surface long-tail or emerging competitors).
6073
6074### When neither Exa nor any other web-search MCP is connected and the CEO can't name competitors
6075
6076This is rare but real (early-stage founders, deeply niche categories). In that case:
60771. Use the browser MCP to scan a few obvious sources (the company's About page, recent press, G2 / Capterra category pages if reachable) to manually surface likely competitors
60782. Present what you found with low confidence and ask the CEO to confirm
60793. If still empty, proceed without competitor research and flag this prominently in the gap report — "no competitor benchmarking was possible" is 
6079itself the most important finding
6080
6081---
6082
6083## Step 3 — Crawl the Site (and extract live brand tokens)
6084
6085**Start the moment the URL arrives in Step 1.** Don't wait for any other input. The site crawl runs in parallel with Step 2 (competitor auto-discovery) and Step 4 (document ingestion).
6086
6087### Open the URL in the user's browser FIRST
6088
6089Before deep crawling, open the URL so the user can see what the agent is about to read. See the [Live preview section](#live-preview--make-the-run-watchable-in-cursor) above for the full pattern. Quick version:
6090
6091\`\`\`bash
6092open https://[company-url]   # or xdg-open / start, or browser MCP fallback
6093\`\`\`
6094
6095Narrate it: *"Opening your site in your browser now — extracting hero, value-prop, CTAs, brand tokens (fonts + hex codes) in ~30 seconds. Competitor auto-discovery is running in parallel."*
6096
6097Use the browser MCP to visit the homepage and any pages linked in the main nav (Product, How it works, Customers, Pricing, About).
6098
6099For each page, capture:
6100- **Hero headline** (the very first message)
6101- **Subhead / supporting copy**
6102- **Value proposition section** — how the product is described
6103- **Audience signals** — who is being addressed (or none)
6104- **Social proof** — logos, quotes, metrics, case studies
6105- **CTAs** — what visitors are asked to do, and how often
6106- **Tone** — formal/casual, technical/accessible, vague/specific
6107- **Section order** — what comes first, second, third
6108
6109Save findings to \`audit/01-site-crawl.md\`. Take screenshots of the homepage (hero, mid-page, footer) and reference them.
6110
6111### Output: a Site Audit table
6112
6113| Page | Headline | Core Claim | Audience Signal | Proof Used | Tone | Visible Gap |
6114|------|----------|------------|-----------------|------------|------|-------------|
6115| Home | ... | ... | ... | ... | ... | ... |
6116
6117### Also extract the live design system
6118
6119Whenever the audit will produce an HTML mockup (Step 8), capture the website's actual visual tokens during the crawl:
6120
6121- **Fonts** — read the \`<link>\` tag to Google Fonts, or the CSS \`font-family\` declarations on \`body\` and headings
6122- **Brand colors** — pull primary, surface, ink, accent, and any named CSS custom properties (e.g. \`--brand-colors---signal-green--100\`)
6123- **Type scale** — note the heading sizes / body sizes the site uses
6124- **Button styles** — primary CTA color, radius, padding
6125- **Section patterns** — how does the site treat dark sections vs light sections? Cards? Badges?
6126
6127Quick way to grab the CSS: \`curl -sL https://[site]/assets/[main].css -o /tmp/site.css\` and then \`grep\` the design tokens. Save the extracted tokens at the bottom of \`audit/01-site-crawl.md\` under a "Design System" subsection — the HTML mockup phase will read this directly.
6128
6129---
6130
6131## Step 4 — Ingest Provided Documents
6132
6133**Start the moment any document arrives in Step 1.** Don't wait for all documents to be provided. If the messaging doc arrives first, ingest it; if the sales deck arrives first, ingest that. The findings table in \`audit/01b-internal-artifacts.md\` is built incrementally as documents come in.
6134
6135The CEO can provide any combination of: sales deck, customer call transcripts, messaging / positioning doc, brand guidelines, recent marketing strategy doc / QBR / board doc, or anything else that helps describe the business. Fetch and parse whatever they sent.
6136
6137### How to ingest each artifact type
6138
6139- **Google Doc** → use Google Workspace MCP \`readGoogleDoc\` with the doc ID
6140- **Notion page** → use Notion MCP \`notion-fetch\` with the page URL
6141- **Drive file (PDF, slides)** → use Google Workspace MCP \`downloadFromDrive\` then read the file
6142- **Public web URL** → use Exa MCP \`web_fetch_exa\`
6143- **Pasted text** → already in the conversation
6144- **Figma file (brand guidelines)** → use Figma MCP \`figma-use\` to read variables / styles
6145
6146### What to extract from each
6147
6148For each artifact, pull these structured fields:
6149
6150| Artifact | Pull these fields |
6151|---|---|
6152| **Messaging doc** | One-line positioning statement · ICP description · 3 value pillars · proof points list · do-say words · don't-say words · category claim · competitive framing |
6153| **Sales deck** | Title slide H1 · problem slide framing · ICP slide · value prop slide · proof slide (logos + metrics + quotes) · CTA slide · pricing tier names |
6154| **Marketing collateral** | Top-performing ad headlines · email subject lines · webinar titles · ebook covers · talk titles |
6155| **Brand guidelines** | Logo lock-up rules · primary hex colors · secondary hex colors · primary font (with weights used) · body font · type scale · button shape (radius) · voice & tone do/don'ts |
6156
6157### Save findings
6158
6159Save to \`audit/01b-internal-artifacts.md\`. Structure:
6160
6161\`\`\`markdown
6162# Internal Artifacts — [Company]
6163
6164## What we received
6165- [ ] Messaging doc — [link / ✅ provided / ❌ not provided]
6166- [ ] Sales deck — [link / ✅ / ❌]
6167- [ ] Marketing collateral — [link / ✅ / ❌]
6168- [ ] Brand guidelines — [link / ✅ / ❌]
6169
6170## Source-of-truth positioning (from messaging doc)
6171- One-line: "..."
6172- ICP: "..."
6173- Value pillars: 1) ... 2) ... 3) ...
6174- Don't-say words: "..."
6175
6176## Sales deck headline (title slide)
6177"..."
6178
6179## Brand tokens (used to drive Step 8 HTML)
6180- Fonts: heading: ..., body: ...
6181- Primary: #...
6182- Accent: #...
6183- Surface: #...
6184- Ink: #...
6185- Button radius: ... px
6186- Voice: ...
6187\`\`\`
6188
6189### The website-vs-internal mismatch table
6190
6191This is the highest-leverage output of Step 4. Build this table:
6192
6193| Element | What's on the website | What's in the messaging doc / deck | Severity |
6194|---|---|---|---|
6195| Hero headline | "..." | "..." | 🔴/🟡/🟢 |
6196| Audience | "..." | "..." | 🔴/🟡/🟢 |
6197| Top value pillar | "..." | "..." | 🔴/🟡/🟢 |
6198| Proof points used | [list] | [list] | 🔴/🟡/🟢 |
6199| Category label | "..." | "..." | 🔴/🟡/🟢 |
6200| Tone words | [list] | [list] | 🔴/🟡/🟢 |
6201
6202When a row shows the *internal* version is stronger than the website version, flag it 🔴 — that's free upside (no new positioning required, just promote the internal 
6202copy onto the homepage).
6203
6204When a row shows the website is *more current* than internal docs, flag it 🟡 — internal artifacts need updating to keep sales/marketing aligned.
6205
6206If no internal artifacts were provided, **skip Step 4 entirely** and note in the gap report that "absence of internal positioning artifacts is itself the biggest finding — there is no shared source of truth for the team to align on."
6207
6208---
6209
6210## Step 5 — Competitor + Category Research (Exa)
6211
6212Use the **confirmed competitor list from Step 2** (auto-discovered + CEO-confirmed, or CEO-provided if Exa was unavailable). Run all of the steps below in parallel.
6213
6214### 3A — Visit each competitor (browser)
6215
6216For each of the 2-3 competitor URLs, capture the same fields as Step 3 (hero, value prop, proof, CTAs, tone). Don't get distracted by their full sitemap — homepage + one product page is enough.
6217
6218### 3B — Use Exa web search for category language
6219
6220Run searches like:
6221
6222\`\`\`
6223exa web_search: "best [category] for [target audience] 2026"
6224exa web_search: "[category] vs [category]" — capture how the category is framed
6225exa web_search: "why we switched from [competitor] to [alternative]"
6226exa web_search: "[target audience role] biggest pain points 2026"
6227exa web_search: site:linkedin.com [target audience role] [problem keyword]
6228\`\`\`
6229
6230Replace bracketed terms with the CEO's actual category, audience role, and competitor names from intake.
6231
6232### 3C — Save competitor matrix
6233
6234| Competitor | Hero Headline | Audience They Target | Strongest Proof | Their Edge | What They Miss |
6235|------------|---------------|----------------------|-----------------|------------|----------------|
6236| ... | ... | ... | ... | ... | ... |
6237
6238Save to \`audit/02-competitor-matrix.md\`.
6239
6240---
6241
6242## Stage 2 — Diagnose gaps + draft rewrites (then pause)
6243
6244This is the core of Stage 2. Compare the company's site against intake corrections, internal documents provided after Stage 1, and competitor/category research. Produce a gap diagnosis and rewrite drafts before moving to visuals.
6245
6246### Gap dimensions
6247
62481. **Audience clarity** — Does the homepage make it obvious in <5 seconds who this is for? If a stranger from the target role landed here, would they self-identify?
6249
62502. **Value proposition** — Is the value framed as an *outcome* the customer gets, or as a feature/category? Compare against competitors.
6251
62523. **Specificity & proof** — Are claims backed by numbers, names, or quotes? Or is everything vague ("best-in-class", "powerful", "AI-driven")? What proof is missing?
6253
62544. **Differentiation** — When you put this site next to the competitors, what makes it different? Or does it look interchangeable?
6255
62565. **Structure & flow** — Does the page answer questions in the order a buyer asks them? (Who is this for → what problem → how it works → who uses it → what now?)
6257
62586. **CTA strategy** — What's the primary CTA? Is it appropriate for the buyer's stage? Are there too many competing CTAs?
6259
62607. **Website vs. internal story** *(only if Step 4 ingested any documents)* — Where do the internal docs (messaging doc, sales deck, call transcripts, recent strategy doc) have sharper language, better proof, or a clearer audience than the public website? Where is the website ahead of the docs? Surface every meaningful mismatch — these are usually the easiest wins because the language already exists, it just isn't on the homepage yet.
6261
6262> **Note:** an 8th dimension — *Data-signal mismatches* (stated ICP vs. actual won-deal ICP, stated time-to-value vs. actual cycle time, recurring customer-language arcs absent from the homepage) — only surfaces if the user accepts the optional v2 upgrade in Step 11. By default, Step 6 runs with seven dimensions.
6263
6264### Output the Gap Report
6265
6266Use the template at [templates/gap-report.md](templates/gap-report.md). For each gap, state:
6267- **What's missing or weak** (specific, with quote from the site)
6268- **Why it matters** (what buyer behavior it costs)
6269- **Evidence** (competitor doing it better, or category convention)
6270- **Severity** — 🔴 Critical / 🟡 Important / 🟢 Polish
6271
6272Save to \`audit/03-gap-report.md\` and preview it immediately.
6273
6274In Stage 2, also produce \`audit/04-rewrite-drafts.md\` before pausing. Then ask for user input:
6275- Which hero/value-prop option is strongest?
6276- What needs to change in tone, claims, or audience framing?
6277- Any proof points to add/remove before visual generation?
6278
6279### Stage 2 checkpoint questions (multiple-choice only, one at a time)
6280
6281After showing the Stage 2 summary, ask:
62821. Hero direction (single select): \`option_a\`, \`option_b\`, \`option_c\`, \`blend\`
62832. Tone direction (single select): \`more_executive\`, \`more_operator_practical\`, \`keep_current\`
62843. Proof handling (single select): \`keep_current_proof\`, \`add_more_proof\`, \`tone_down_claims\`
6285
6286---
6287
6288## Stage 2b — Deliver rewrite drafts
6289
6290Draft new copy for the top sections that surfaced as Critical or Important in Step 6. At minimum, always rewrite:
6291
62921. **Hero headline + subhead**
62932. **Value proposition section**
62943. **Primary CTA**
6295
6296If gaps surfaced for proof, structure, or differentiation, also draft:
6297- A "Who this is for" line (to fix audience ambiguity)
6298- A 3-step "How it works" mini-section
6299- A proof strip (logos / metrics / quotes)
6300
6301### Per-rewrite format
6302
6303For each section, produce **3 alternatives** so the CEO can pick:
6304
6305\`\`\`markdown
6306### Hero Headline — Alternatives
6307
6308**Option A — Outcome-led:**
6309[headline]
6310*Subhead:* [subhead]
6311*Why this works:* [reasoning grounded in gap report]
6312
6313**Option B — Audience-led:**
6314[headline]
6315*Subhead:* [subhead]
6316*Why this works:* [reasoning]
6317
6318**Option C — Mechanism-led:**
6319[headline]
6320*Subhead:* [subhead]
6321*Why this works:* [reasoning]
6322\`\`\`
6323
6324### Copy principles
6325- Lead with outcomes the customer cares about, not features
6326- Numbers beat adjectives ("cuts onboarding from 6 weeks to 4 days" > "fast onboarding")
6327- Use words the target audience uses, from intake + Exa research
6328- Cut hedge words ("helps", "empowers", "enables") unless followed by something specific
6329- Every claim should be defensible
6330
6331Save final drafts to \`audit/04-rewrite-drafts.md\` using [templates/rewrite-drafts.md](templates/rewrite-drafts.md). Preview immediately. This is a mandatory checkpoint before Stage 3.
6332
6333---
6334
6335## Stage 3 — Visual artifacts + strategy
6336
6337After Stage 2 approval, build the execution artifacts: HTML mockup, variants page, Figma spec, and strategy.
6338
6339Build a **single-file HTML mockup** of the redesigned homepage so the CEO can see the recommended changes in context, share them with a designer, or paste them into a Figma reference.
6340
6341Save to \`audit/05-homepage-redesign.html\`. **Auto-open in browser preview immediately** — this is the visual showpiece of the audit and the CEO will want to see it the moment it's ready: \`open "http://localhost:<port>/05-homepage-redesign.html"\`. Make sure the local server is already running (started after Stage 1).
6342
6343### Required properties
6344
6345- **Single file.** All HTML, CSS, and (minimal) JS inline. The CEO opens it locally with a double-click — no build step, no dependencies beyond Google Fonts.
6346- **On-brand by default.** Use the brand tokens captured in Step 3 (live website fonts + colors) and Step 4 (brand guidelines, if provided). Match the company's actual fonts, primary color, accent color, button radius, and dark-section treatment. **Never** swap in a different design system. The mockup should look like a refinement of the existing brand, not a redesign of it. Only fall back to a generic "modern B2B SaaS" palette (serif headline + clean sans, one accent, neutral surface) if no brand tokens were captured.
6347- **Mobile-responsive** with sensible breakpoints at ~880px and ~640px.
6348- **All copy comes from the rewrite drafts** in Step 7 — do NOT invent new claims here. The mockup's job is to show the *structure* and *visual emphasis* of the recommended copy, not to introduce new positioning.
6349- **Reorder sections** per the recommendation in the gap report. Don't replicate the original site's order.
6350
6351### Brand-token application checklist
6352
6353Before writing any HTML, write out the resolved tokens you'll use. Pull from this priority order:
6354
63551. **Brand guidelines doc** (Step 1, item 9) — highest authority
63562. **Company website CSS** captured in Step 3 (Google Fonts link, CSS custom properties like \`--brand-colors-…\`, button styles)
63573. **Generic on-brand fallback** (only if neither of the above exists)
6358
6359\`\`\`
6360Resolved brand tokens for this mockup:
6361- Heading font:  [from Step 3 / 2.5]
6362- Body font:     [from Step 3 / 2.5]
6363- Primary ink:   #...  (text on light)
6364- Surface:       #...  (page background)
6365- Surface-alt:   #...  (alt section background)
6366- Brand primary: #...  (CTAs, accents)
6367- Brand secondary/glow: #...  (highlights, badges)
6368- Dark surface:  #...  (footer / final-CTA)
6369- Button radius: ... px
6370- Section radius / card radius: ... px
6371- Body type scale: ...
6372- Voice rules:   [do-say / don't-say from messaging doc]
6373\`\`\`
6374
6375Match these in the CSS \`:root\` block and never deviate.
6376
6377### Required sections (in this order)
6378
63791. **Sticky nav** with brand mark + primary "Book a demo" CTA
63802. **Hero** — eyebrow / H1 (recommended option from Step 7) / subhead / primary + secondary CTA / audience pills (CMO/CRO/RevOps/etc.)
63813. **Hero visual** — a believable product mock that shows the unique differentiator (e.g. a "deal story" panel, a reconstructed-touchpoint timeline, an attribution waterfall — whatever the product actually does)
63824. **Trust band** — logo strip + 3-stat strip with quantified case-study outcomes pulled from the original site
63835. **Before/After block** — the comparison block, promoted to position 3 (this is usually the highest-leverage move)
63846. **Quantified case-study tiles** — each tile leads with a number + customer name + one-line outcome
63857. **"Who this is for" trio** — role cards (CMO / CRO / RevOps or whatever the ICP is)
63868. **How it works** — 3 steps maximum, outcome-led, in plain language
63879. **Product tour** — 4 cards covering the branded tech / capabilities (in that brand's actual product names)
638810. **Insight Engineering / managed services** — only if the company offers it; this is often a unique edge not on competitors
638911. **Customer quote wall** — 6 named quotes with title + company
639012. **Enterprise band** — security, time-to-value, scale (only the 3 most credible signals)
639113. **FAQ** — 6–8 questions, lead with the differentiation question
639214. **Final CTA section** on dark background — primary + secondary CTA repeated
639315. **Footer** with brand line + sitemap
6394
6395### Audit annotations
6396
6397Embed **5 floating "audit pins"** as small numbered badges on key sections (hero, trust band, before/after, case studies, final CTA). Each pin reveals a tooltip on hover that explains *what changed and why*, citing the gap report. Include a small toggle button (bottom-right corner) the CEO can click to show/hide the annotations — so the same file works as both a clean design preview and an annotated audit deliverable.
6398
6399### Don'ts
6400
6401- Don't use stock images or external image URLs — all visuals are CSS/HTML. The CEO can swap in real assets later.
6402- Don't use a UI framework (no Tailwind / Bootstrap / etc.). Hand-roll the CSS so it stays portable and easy to copy into the real site.
6403- Don't fabricate stats. Every number, customer logo, and quote must trace back to something already on the company's actual site or in a public case study.
6404- Don't include forms that submit anywhere; CTAs are anchor links only.
6405
6406---
6407
6408## Step 9 — Hero-Variants Page + Figma Spec
6409
6410After the v2 main mockup is shipping, produce two further deliverables. Both are cheap given how much context already exists, and both are the artifacts the CEO actually shares with their team.
6411
6412### A. Hero-variants comparison page → \`audit/05b-homepage-variants.html\`
6413
6414After saving, **auto-open in browser preview** — this is the second visual showpiece: \`open "http://localhost:<port>/05b-homepage-variants.html"\`.
6415
6416A single HTML file that renders the **3 hero alternatives from Step 7 stacked vertically**, each preceded by a small intro card explaining "why this variant works" and "best for". A sticky compare-bar at the top lets the CEO jump between Variant A / Variant B / Variant C with one click.
6417
6418**Why:** the CEO will A/B test or pick a variant per surface (homepage default vs. paid search vs. brand campaign). This page is the artifact they share with the marketing team to choose, and the artifact a copywriter would brief from.
6419
6420Required structure:
6421- Sticky compare-bar (Ledger Green) with: title · 3 anchor links (one per variant) · "Open full v2 →" link to the main mockup
6422- For each variant: an intro card (Variant label, name, tagline, "why this works" rationale) followed by the rendered hero block
6423- Each hero uses different brand-token treatment to demonstrate range: Variant A on light surface, Variant B on dark with brand-campaign apparel/billboard mocks, Variant C on light with a "search results" visual that highlights the empathy framing
6424- Same CSS tokens as the main mockup — these are *sibling executions*, not different brands
6425- A footer recommendation card explaining which variant goes where (homepage / paid search / campaign)
6426
6427### B. Figma-ready spec doc → \`audit/06-figma-spec.md\`
6428
6429After saving, **auto-open in browser preview** — \`open "http://localhost:<port>/06-figma-spec.md"\`.
6430
6431A long-form designer brief that the CEO hands to a Figma designer. Designed to be readable side-by-side with the HTML mockup. Required sections:
6432
64331. **Foundations** — exhaustive token catalog ready to paste into Figma variables: every brand color (with full opacity ladder), every type token (family, weight, size with \`clamp()\`, line-height, letter-spacing), every radius, shadow, and spacing rule.
64342. **Page sections** — for each of the ~14 sections in the mockup: purpose · layout (grid/dimensions/breakpoints) · final copy block (verbatim, ready to paste) · design notes · audit-pin reference cross-link.
64353. **Variants & A/B testing** — table of which variant maps to which surface (homepage / paid search / brand campaign).
64364. **Assets to source / produce** — checklist of SVGs, customer logos, line icons the designer needs to replace placeholders.
64375. **Approval checklist** — ticket-list the team can check off before handing to engineering (copy approved, tokens match brand guidelines, mobile breakpoints verified, accessibility checks).
64386. **Open questions for the team** — anything ambiguous the designer should flag back to messaging owner / CEO before building.
6439
6440**Tone of the spec doc:** treat the designer as a peer. Cite the source-of-truth artifact for every claim ("from Brand Guidelines page 11" / "verbatim from Information Deck Act 5"). Make every copy block ready to paste — no placeholders.
6441
6442If a section in the mockup uses a piece of copy lifted from an internal artifact, **cite the artifact** in the spec doc so the designer knows it's not invented.
6443
6444---
6445
6446## Stage 3b — Marketing strategy synthesis
6447
6448Synthesize a marketing strategy doc grounded in the live data signals (Step 11 (v2 upgrade)), the gap diagnosis (Step 6), and the internal positioning artifacts (Step 4). The strategy must be *data-grounded* not *generic*. If Step 11 (v2 upgrade) was skipped (no data connections), produce a qualitative-only version and flag that limitation in the doc.
6449
6450Save to \`audit/07-marketing-strategy.md\`. **Auto-open in browser preview** — \`open "http://localhost:<port>/07-marketing-strategy.md"\`.
6451
6452### Default mode: qualitative-grounded
6453
6454By default, this strategy is built from **the website + the documents the CEO provided in Step 1** (sales deck, call transcripts, messaging doc, brand guidelines, recent QBR / strategy doc). It is not data-grounded by default — that's the optional v2 upgrade in Step 11.
6455
6456**Flag the mode at the very top of the strategy doc:**
6457
6458> *"Mode: qualitative — built from website + provided documents. The optional v2 upgrade (Step 11) re-runs this section with live funnel + customer-language data once a CRM, call-recording, data-warehouse, or marketing-automation MCP is connected."*
6459
6460If the CEO did provide call transcripts in Step 1, the strategy can quote verbatim customer language even in qualitative mode — that's a major upgrade over a generic strategy and should be used liberally.
6461
6462### What makes this strategy doc different from a generic one
6463
6464A generic marketing-strategy doc says "do content marketing, do paid search, do account-based marketing." This one names:
6465- The dominant **customer-language arc** the strategy is built around (lifted from call transcripts if available, sales deck if not, e.g. *"we tried [X], then we tried to build it ourselves, then we found us"*)
6466- The **website-vs-internal-story mismatches** that became "free upside" findings in Step 6
6467- The **named customers / operators / activation moments** that should become public marketing content
6468- A budget reallocation recommendation grounded in **what the docs reveal isn't working**, not best-practice percentages
6469
6470### Required structure
6471
6472#### 1. TL;DR (one slide)
6473
6474A single-page summary the CEO can paste into a board deck. Must include:
6475- The mode (qualitative / data-grounded)
6476- The 3 highest-leverage problems the strategy is solving (cite source for each — call transcript, sales-deck slide, gap-report dimension)
6477- The one-line positioning statement (lifted from internal docs if available, otherwise drafted from Step 7)
6478- A pointer to the 4-program plan below
6479
6480#### 2. What the documents are telling us
6481
6482Open with the dominant customer-language arc (from call transcripts or sales deck). Then:
6483- The recurring objections / build-vs-buy patterns (if surfaced)
6484- The activation/workshop pattern (if surfaced) — flag it as the "highest-leverage thing already happening that marketing isn't using"
6485- The website-vs-internal-story gaps (from Step 6 dimension #7)
6486- *(only in v2 mode):* the funnel-shape table, the up-market trajectory, the channel mix
6487
6488#### 3. The four-program 90-day plan
6489
6490Always frame as four programs, one per buyer-journey stage:
6491
6492\`\`\`
6493Awareness → Recognition → Champion enablement → Customer-led growth
6494\`\`\`
6495
6496Each program needs:
6497- One-line goal
6498- Why this works (cite the specific signal that justifies it — quote from a call transcript, line from the sales deck, etc.)
6499- 4–6 concrete plays with: what ships, owner, day shipped
6500- KPIs (measurable in whatever stack the company has — even if it's just GA + CRM)
6501
6502The four programs map to:
6503
6504| # | Program | What it does | Highest-impact when … |
6505|---|---|---|---|
6506| 1 | **Movement / awareness** | Owns the practitioner identity *before* they're in-market. Manifesto-style content + community + apparel. | The category doesn't exist yet (no clear search volume) — has to be made. |
6507| 2 | **Recognition / qualifier** | Catches the in-market buyer at the moment of recognition. Paid search + diagnostic + qualifying form field. | Sales deck or call transcripts show lots of bad-fit conversations being qualified out late. |
6508| 3 | **Champion enablement** | Solves the *"my champion can't articulate it internally"* gap. One-pagers + procurement-email templates + 2-min explainer videos. | Sales deck reveals stalled-in-build-vs-buy deals or the call transcripts show champions struggling to make the internal case. |
6509| 4 | **Customer-led growth flywheel** | Turns the highest-engagement sales motion into a public marketing program. Public workshops + customer-built artifact gallery + practitioner certification. | Call transcripts or the sales deck reveal a recurring co-build / workshop / activation pattern. |
6510
6511#### 4. What to *stop* doing
6512
6513Equally important. Pull from the documents — name specific outbound campaigns, paid-search keywords, segments, or content tracks the docs reveal aren't working. Be specific.
6514
6515#### 5. Budget reallocation
6516
6517A two-column table: current (estimated) vs. recommended, with rationale tied to the docs. Don't just suggest %s — explain why each shift maps to a problem.
6518
6519#### 6. Marketing scorecard (the only metrics that matter)
6520
65215–8 metrics that directly tie back to the problems identified at the top of the doc. Each one tagged: *(measurable today)* or *(requires v2 upgrade)*.
6522
6523#### 7. The one-line positioning to lock in
6524
6525Pull this from internal docs (messaging doc, sales-deck title slide, recurring narrative across call transcripts). Make it the LinkedIn bio, the sales-deck title slide, the homepage hero, the conference T-shirt. Stop reinventing the elevator pitch.
6526
6527#### 8. Five concrete actions for this week
6528
6529Time-boxed, owner-assigned, ship-by date. Should match Programs 1–4 — typically: write the manifesto · add the qualifier field · build the one-pager · open the workshop calendar · schedule the 90-day re-audit.
6530
6531### Cite everything
6532
6533Every claim in the strategy doc should cite either:
6534- A specific document from Step 4 (e.g. "Sales deck slide 12, problem framing")
6535- A specific call transcript quote (e.g. "Carl @ Comply, March 11 transcript")
6536- A specific gap from Step 6 (e.g. "Website-vs-internal mismatch row 7")
6537- *(v2 only):* a specific data result (e.g. "9 closed-won, 118 closed-lost over last 12 months, from \`OPPORTUNITIES\` query")
6538
6539If a claim can't be cited, soften it or remove it. The CEO has to defend this strategy to a board — every line should be defensible.
6540
6541### Tone
6542
6543Confident, direct, opinionated. The strategy is a recommendation, not a menu. Pick one path and explain why. *"We recommend Program 2 as the highest-priority because the sales-deck Act 2 framing shows X."* Don't hedge.
6544
6545### Pause for confirmation
6546
6547After the strategy doc is written, **pause and present it to the CEO before Stage 4** (final summary + integration offer). They may want to adjust priorities first.
6548
6549### Stage 3 checkpoint question (multiple-choice only)
6550
6551Ask one multiple-choice approval question:
6552- \`approve_stage3\` (proceed to final summary)
6553- \`revise_copy_or_visuals\` (revise artifacts before final summary)
6554- \`revise_strategy\` (revise strategy before final summary)
6555
6556---
6557
6558## Stage 4 — Final deliverable + optional v2 upgrade
6559
6560This step has **two parts**:
6561
6562- **Part A** — Deliver the v1 summary (always)
6563- **Part B** — Offer the optional v2 upgrade with live data connections, and run it if the CEO accepts
6564
6565---
6566
6567### Part A — Final summary (always runs)
6568
6569Produce a single summary message to the CEO with:
6570
65711. **Top 3 gaps** they need to fix (from Step 6)
65722. **Recommended new hero** (your top pick from Step 7) + the 2 alternatives (linking to the variants page)
65733. **One-line positioning statement** they can use across sales decks too:
6574   > *"We help [audience] [achieve outcome] by [unique mechanism] — proven by [proof point]."*
65754. **The 3 highest-leverage problems** the marketing strategy is solving (from Step 10), with the exact source signal under each (call transcript, sales-deck slide, gap-report dimension)
65765. **Four preview links** in priority order:
6577   - \`audit/05-homepage-redesign.html\` — the on-brand main mockup
6578   - \`audit/05b-homepage-variants.html\` — the A/B/C variants page (for picking which hero goes where)
6579   - \`audit/06-figma-spec.md\` — the designer brief with full token catalog and copy
6580   - \`audit/07-marketing-strategy.md\` — the qualitative 90-day strategy
65816. **What's next** — 5 concrete actions for this week (from Step 10) — typically: write the manifesto, add the qualifier field, build the one-pager, open the workshop calendar, schedule the 90-day re-audit
6582
6583All output files live under \`audit/\`:
6584
6585\`\`\`
6586audit/
6587├── 00-intake.md                    ← URL + provided documents
6588├── 01-site-crawl.md                ← site audit + extracted brand tokens
6589├── 01b-internal-artifacts.md       ← (only if any documents were provided)
6590├── 02-competitor-matrix.md
6591├── 03-gap-report.md                ← includes website-vs-internal mismatches
6592├── 04-rewrite-drafts.md            ← 3 hero alternatives + value-prop options
6593├── 05-homepage-redesign.html       ← on-brand mockup, double-click to preview
6594├── 05b-homepage-variants.html      ← 3-hero comparison page (A/B/C)
6595├── 06-figma-spec.md                ← designer-ready brief + token catalog
6596└── 07-marketing-strategy.md        ← qualitative 90-day plan
6597\`\`\`
6598
6599---
6600
6601### Part B — Ask for feedback + offer the v2 data-integration upgrade
6602
6603After delivering Part A, ask two things in a single message:
6604
66051. **Feedback on the v1 deliverable.** Anything wrong, missing, or that needs to be sharper before they share it with their team?
66062. **Whether they want to upgrade to v2** by connecting any of these data sources:
6607
6608| Connection | What it adds |
6609|---|---|
6610| **CRM** (Salesforce, HubSpot, Upside) | Real funnel shape: closed-won/lost/open counts, win rate, avg deal size, sales-cycle length, ICP signals on closed-won. Strategy stops being qualitative and starts naming dollar amounts. |
6611| **Call-recording** (Fireflies, Gong, Chorus, Otter) | Verbatim customer language at scale across many calls (not just the few transcripts they uploaded). The recurring-arc, build-vs-buy patterns, objections, buying-group dynamics. *This is the single highest-leverage upgrade.* |
6612| **Customer data warehouse** (Snowflake, BigQuery, Upside, Looker, Mode) | Cross-references engagement signals against won/lost deals: which channels source wins, which campaigns moved deals through stages, which channels produce 47-day fast-losses. |
6613| **Marketing automation** (HubSpot, Marketo, Customer.io) | Outbound nurture lists, campaign send patterns, open/click rates, subject lines that are actually converting. |
6614| **Slack** | Informal customer sentiment, support themes, "what champions say in their own slack." |
6615
6616Suggested phrasing:
6617
6618> *"Two quick asks:*
6619>
6620> *1. Anything feel off on the v1 above? Anything I missed that should be sharper before you share this with your team?*
6621>
6622> *2. Want to upgrade to v2? Connect any of these MCPs and I'll re-run Step 6 (gap report) and Step 10 (strategy) with real data:*
6623>     *— **Call recording** (Fireflies / Gong / Chorus / Otter) — highest-leverage by far. Pulls verbatim customer language.*
6624>     *— **CRM** (Salesforce / HubSpot / Upside) — gives me real funnel-shape numbers.*
6625>     *— **Data warehouse** (Snowflake / BigQuery / Looker / Upside) — cross-references campaigns against won/lost.*
6626>     *— **Marketing automation** (HubSpot / Marketo / Customer.io)*
6627>     *— **Slack***
6628>
6629> *If only one is feasible right now, make it call recording. The auth usually takes 2 minutes."*
6630
6631If the CEO declines or is done, end the run cleanly. The skill has produced a complete v1 deliverable.
6632
6633---
6634
6635### Part C — Run the v2 upgrade (only if the CEO accepts in Part B)
6636
6637This is the content that used to be Step 11 (v2 upgrade). It runs only AFTER the CEO has seen the v1 deliverable AND opted into one or more data connections.
6638
6639#### Querying conventions
6640
6641- Some data MCPs (e.g. Upside) expose a \`consult_librarian\` or schema-discovery tool. **Always call that first** to learn org-specific conventions (fiscal calendar, custom field names, customer-vs-employee filtering, exclusion rules) before writing queries. Skipping this produces plausible-looking numbers that are silently wrong.
6642- For SQL MCPs, query the schema first (\`SELECT … FROM ENTITY_PROPERTIES_DEFINITIONS\` or equivalent) to discover where ICP fields actually live. Most CRM fields are in JSON/\`additional_properties\` columns, not top-level columns.
6643- For call-recording MCPs, prefer \`search_communications\`-style natural-language queries over SQL. The signal you want is verbatim quotes, not aggregates.
6644- Track the \`session_id\` returned by the first MCP call and pass it back in subsequent calls so the librarian/coach has context.
6645
6646#### Five core queries to run
6647
66481. **Funnel shape (CRM)** — last 12 months: closed-won / closed-lost / open opportunity counts, win rate, avg deal size by status, avg sales-cycle length (won vs lost), up-market trajectory.
66492. **ICP signals on closed-won (CRM)** — for each won account, pull industry, employee count, ARR band. Identify the actual won-deal concentration vs. the messaging doc's stated ICP. Mismatches are 🔴 findings.
66503. **Channel-of-origin (CRM + marketing automation)** — which channel sources wins vs. fast-losses. Note \`lead_source\` is often >80% NULL — prefer touchpoint-based attribution.
66514. **Customer-language patterns (call recordings)** — natural-language searches for: *"we tried [competitor]"*, *"we tried to build it ourselves"*, *"switched from"*, *"what made you choose us"*, *"build vs buy"*, *"the moment I realized"*, *"my CFO / CRO / board"*. Capture verbatim quotes with customer + date.
66525. **Activation / workshop signals (any MCP)** — search for *"workshop"*, *"live demo"*, *"co-build"*, *"implementation call"*. These are usually the highest-leverage marketing programs already happening as sales motions.
6653
6654Save the output to \`audit/01c-data-signals.md\`. **Auto-open in browser preview** — \`open "http://localhost:<port>/01c-data-signals.md"\`. Format:
6655
6656\`\`\`markdown
6657# Data Signals — [Company]  (v2 upgrade)
6658
6659## Connections used
6660- [ ] CRM — [Salesforce / HubSpot / Upside / ❌ none]
6661- [ ] Call recording — [Fireflies / Gong / Otter / ❌ none]
6662- [ ] Data warehouse — [Snowflake / Upside / ❌ none]
6663- [ ] Marketing automation — [HubSpot / Marketo / ❌ none]
6664- [ ] Slack — [✅ connected / ❌ none]
6665
6666## Funnel shape (last 12 months)
6667| Status | Count | Avg Deal | Total | Avg Days to Close |
6668|---|---:|---:|---:|---:|
6669| Closed-Won | ... | ... | ... | ... |
6670| Closed-Lost | ... | ... | ... | ... |
6671| Open | ... | ... | ... | ... |
6672
6673**Win rate of closed deals:** X%
6674**Up-market trajectory:** [moving up / flat / moving down]
6675
6676## ICP fit (real, not aspirational)
6677- Won-deal industries: [list]
6678- Won-deal employee bands: [list]
6679- Lost-deal industries: [list]
6680- Mismatches with messaging doc's stated ICP: [🔴 findings]
6681
6682## Channel-of-origin
6683| Channel | Won | Lost | Win rate |
6684|---|---:|---:|---:|
6685
6686## Customer-language patterns (verbatim with dates + customer)
6687### Theme 1: [recurring theme]  — appears in N calls
6688- "..." — [Customer name, date]
6689
6690## Activation / workshop signals
6691[List any co-build / workshop / implementation patterns]
6692\`\`\`
6693
6694#### Update the gap report and the strategy
6695
6696After running the v2 queries:
6697
66981. **Append a new dimension #8 to \`03-gap-report.md\`** — *Data-signal mismatches* — with the website-vs-data findings. Examples:
6699   - Stated ICP vs. actual won-deal ICP (industry / employee count / ARR band)
6700   - Stated time-to-value vs. actual median cycle time
6701   - Recurring customer-language arc absent from the homepage
6702   - Channels that drive wins vs. channels the homepage's CTAs are optimized for
6703   - Bad-fit segments that keep entering pipeline
67042. **Re-run Step 10 in data-grounded mode** — overwrite \`07-marketing-strategy.md\` with the v2 version. Same structure as before, but now every claim cites a real funnel number or verbatim customer quote. Flag the mode at the top: *"Mode: data-grounded — built from website + provided documents + live data signals as of [date]."*
67053. **Deliver the v2 summary** — same 6-point structure as Part A, but now sharper. Highlight what *changed* between v1 and v2 so the CEO sees the value the integration unlocked.
6706
6707---
6708
6709## Workshop Notes (for the CEO running this)
6710
6711- **The flow is intentionally simple.** ONE question up front (URL + any docs you have), then the skill produces the full deliverable from those inputs alone — gap report, rewrite drafts, on-brand HTML mockup, A/B/C variants page, Figma spec, and a 90-day marketing strategy. Live data integrations (CRM, call recording, data warehouse, marketing automation) are offered as an *optional v2 upgrade* at the very end — never required up front.
6712- **Drop everything you have in one message.** The more you share — sales deck, customer call transcripts, messaging doc, brand guidelines, recent QBR / strategy doc — the sharper the deliverable. But just a URL is enough to get started.
6713- Run it on your own site first. Then re-run on a competitor as a "what would I steal" exercise.
6714- The gaps surfaced are usually obvious in retrospect — the value of the skill is forcing the structured comparison you'd otherwise skip.
6715- **The v2 data-integration upgrade is where this skill goes from "nice strategy doc" to "strategy with dollar amounts and verbatim customer quotes."** If you have a CRM, a call-recording tool, or a data warehouse you can connect as an MCP, accept the upgrade in Step 11. If you only connect ONE thing, make it **call recording** — verbatim customer language is the single highest-leverage input.
6716- This skill is a demo of what *MCPs + skills* make possible. Multiple things happen during a run: (1) a **browser MCP** visits your site, (2) a **search MCP** (Exa or similar) auto-discovers competitors and researches category language, (3) **Google Workspace / Notion / Drive / Figma MCPs** ingest the docs you provided, (4) *(in v2 only)* **CRM / data-warehouse / call-recording / marketing-automation MCPs** ground the strategy in real data, and (5) the **skill itself** is a reusable workflow you wrote once that anyone on your team can now invoke.
6717
6718---
6719
6720## Additional Resources
6721
6722- For the intake template, see [templates/intake.md](templates/intake.md)
6723- For the gap report format, see [templates/gap-report.md](templates/gap-report.md)
6724- For the rewrite drafts format, see [templates/rewrite-drafts.md](templates/rewrite-drafts.md)
6725`,Lye=`# Intake — [Company Name]
6726
6727**Date:** [YYYY-MM-DD]
6728**Run by:** [CEO name]
6729**Mode:** v1 (qualitative — from website + provided docs) · *upgrade to v2 in Step 11 by connecting data MCPs*
6730
6731---
6732
6733## 1. Website
6734- **URL:** https://...
6735- **Pages crawled in Step 3:** Homepage, [Product], [Customers], [Pricing], [About], [other]
6736
6737---
6738
6739## 2. Provided documents
6740
6741*Whatever the CEO dropped in Step 1. The audit grades down gracefully — even URL-only is enough to start.*
6742
6743| # | Document type | Source | What was extracted |
6744|---|---|---|---|
6745| 1 | **Sales deck / pitch deck** | [Drive / Slides URL / PDF / paste / ❌ none] | [title slide H1 · problem framing · ICP slide · proof slide · CTA] |
6746| 2 | **Customer call transcripts** | [Fireflies / Gong / Otter URL / paste / ❌ none] | [verbatim customer-language quotes — see \`01b-internal-artifacts.md\`] |
6747| 3 | **Messaging / positioning doc** | [Google Doc / Notion / paste / ❌ none] | [one-line positioning · ICP description · 3 value pillars · do-say / don't-say words] |
6748| 4 | **Brand guidelines** | [Google Doc / Figma URL / paste / ❌ none — falling back to live website CSS] | [logo lockup · primary hex · accent hex · surface · dark surface · button radius · heading font · body font · voice rules] |
6749| 5 | **Recent marketing strategy doc / QBR / board doc** | [Google Doc / Notion / paste / ❌ none] | [recent initiatives · current programs · stated KPIs] |
6750| 6 | **Other / ad hoc** | [link / paste / ❌ none] | [anything else the CEO shared] |
6751
6752---
6753
6754## 3. Auto-discovered competitors (Step 2)
6755
6756| # | Name | URL | Source | CEO confirmation |
6757|---|---|---|---|---|
6758| 1 | | | Exa-discovered + CEO-confirmed | ✅ |
6759| 2 | | | Exa-discovered + CEO-confirmed | ✅ |
6760| 3 | | | CEO-provided override | ✅ |
6761
6762> **Rejected Exa candidates** (with CEO's reason — useful signal for Step 6 dimension #4 *Differentiation*):
6763> - [Name] — *"reason"*
6764
6765---
6766
6767## 4. What we extracted from the docs
6768
6769*(Filled in by Step 4 ingestion. The fuller this section, the sharper the deliverables.)*
6770
6771### Positioning statement (from messaging doc / sales deck)
6772> "..."
6773
6774### ICP description (from messaging doc / call transcripts)
6775> "..."
6776
6777### Top 3 value pillars
67781. ...
67792. ...
67803. ...
6781
6782### Recurring customer-language arc (from call transcripts / sales deck)
6783> *"We tried [X], then we tried to build it ourselves, then we found [company]."* — appears in N transcripts
6784
6785### Brand tokens (from guidelines or live website CSS fallback)
6786- Heading font: [e.g. Space Grotesk]
6787- Body font: [e.g. Inter]
6788- Primary brand color: #
6789- Accent color: #
6790- Surface: #
6791- Dark surface: #
6792- Button radius: ___ px
6793- Voice rules: "..."
6794
6795---
6796
6797## 5. Vague-answer flag
6798
6799*If the website + provided docs leave any of these unclear, that's itself a leading finding for the gap report.*
6800
6801- [ ] Audience was clear in at least one doc
6802- [ ] Outcome was specific in at least one doc
6803- [ ] Differentiation was articulated in at least one doc
6804- [ ] Brand guidelines existed (or live website CSS extraction was clean)
6805- [ ] Recent strategy doc / QBR provided
6806
6807> If \`Audience\` / \`Outcome\` / \`Differentiation\` is unchecked across all provided docs: **the CEO doesn't have a shared internal positioning anchor.** This is the leading indicator that the public website is also vague.
6808>
6809> If no internal docs were provided at all: **the absence of internal positioning artifacts is itself the biggest finding.** Companies without a shared messaging doc almost always have inconsistent website copy because there is no source of truth to align around.
6810
6811---
6812
6813## 6. v2 data-integration upgrade (offered in Step 11)
6814
6815*Filled in only if the CEO accepts the optional upgrade at the end of the run.*
6816
6817- [ ] **CRM** — [Salesforce / HubSpot / Upside / ❌ declined]
6818- [ ] **Call recording** — [Fireflies / Gong / Chorus / Otter / ❌ declined]
6819- [ ] **Customer data warehouse** — [Snowflake / BigQuery / Looker / Upside / ❌ declined]
6820- [ ] **Marketing automation** — [HubSpot / Marketo / Customer.io / ❌ declined]
6821- [ ] **Slack** — [✅ connected / ❌ declined]
6822
6823> If any of the above is connected, the gap report (\`03-gap-report.md\`) gets an 8th dimension and the strategy doc (\`07-marketing-strategy.md\`) is re-grounded in real funnel + customer-language data. See \`audit/01c-data-signals.md\` for the v2 query outputs.
6824`,Uye=`# Gap Report — [Company Name]
6825
6826**Audited:** [URL] · **Date:** [YYYY-MM-DD]
6827
6828## Executive summary
6829*Three sentences max. The headline finding.*
6830
6831> e.g. "The site reads like a feature tour for a buyer who is already convinced — there's no answer to *who this is for* or *what changes after they buy*. Two of three competitors lead with a quantified outcome; this site leads with the product category. The fastest fix is a new hero that names the audience and the outcome in one line."
6832
6833## Top 3 gaps to fix now
6834
6835| # | Gap | Severity | Evidence |
6836|---|-----|----------|----------|
6837| 1 | | 🔴 Critical | |
6838| 2 | | 🔴 Critical | |
6839| 3 | | 🟡 Important | |
6840
6841---
6842
6843## Full gap diagnosis
6844
6845### 1. Audience clarity
6846**Current state:**
6847> *Quote the actual headline / first section copy.*
6848
6849**Verdict:** 🔴 Critical / 🟡 Important / 🟢 Polish
6850
6851**What's missing or weak:**
6852- ...
6853
6854**Why it matters:**
6855*What does a buyer do (or fail to do) because of this gap?*
6856
6857**Evidence from competitors / category:**
6858*Quote a competitor doing it better, or a search result showing the language buyers use.*
6859
6860---
6861
6862### 2. Value proposition
6863**Current state:**
6864> *Quote.*
6865
6866**Verdict:** 🔴 / 🟡 / 🟢
6867
6868**What's missing or weak:**
6869- ...
6870
6871**Why it matters:**
6872- ...
6873
6874**Evidence:**
6875- ...
6876
6877---
6878
6879### 3. Specificity & proof
6880**Current state:**
6881> *Quote vague claims, missing metrics, missing logos.*
6882
6883**Verdict:** 🔴 / 🟡 / 🟢
6884
6885**What's missing or weak:**
6886- Vague adjectives without numbers behind them
6887- No customer logos / case studies / quotes
6888- Claims that aren't defensible
6889
6890**Why it matters:**
6891*Buyers discount unsupported claims. Specificity = credibility.*
6892
6893**Evidence:**
6894- ...
6895
6896---
6897
6898### 4. Differentiation
6899**Current state vs. competitors:**
6900
6901| Dimension | This site | Competitor 1 | Competitor 2 | Competitor 3 |
6902|-----------|-----------|--------------|--------------|--------------|
6903| Hero claim | | | | |
6904| Audience named | | | | |
6905| Lead proof point | | | | |
6906| Mechanism / "how" | | | | |
6907
6908**Verdict:** 🔴 / 🟡 / 🟢
6909
6910**What's missing or weak:**
6911*Where does this site look interchangeable with competitors? Where could it stake a unique claim?*
6912
6913---
6914
6915### 5. Structure & flow
6916**Current section order:**
69171. ...
69182. ...
69193. ...
6920
6921**The order a buyer asks questions:**
69221. Is this for someone like me?
69232. What problem does this solve?
69243. How does it work?
69254. Who else uses it?
69265. What do I do next?
6927
6928**Verdict:** 🔴 / 🟡 / 🟢
6929
6930**What's missing or weak:**
6931- ...
6932
6933---
6934
6935### 6. CTA strategy
6936**Primary CTA:** [text] → [destination]
6937**Secondary CTAs:** [list]
6938
6939**Verdict:** 🔴 / 🟡 / 🟢
6940
6941**What's missing or weak:**
6942- Too many competing CTAs
6943- CTA mismatched to buyer stage (e.g. "Start free trial" when product needs a sales call)
6944- No CTA above the fold
6945
6946---
6947
6948## Quick wins (under 1 hour each)
6949- [ ] ...
6950- [ ] ...
6951- [ ] ...
6952
6953## Bigger bets (1-2 weeks)
6954- [ ] ...
6955- [ ] ...
6956`,Bye=`# Rewrite Drafts — [Company Name]
6957
6958**Site:** [URL] · **Date:** [YYYY-MM-DD]
6959
6960For each section, three alternatives. Pick one, A/B test, or use to brief a copywriter.
6961
6962---
6963
6964## Hero — Headline + Subhead
6965
6966### Option A — Outcome-led
6967**Headline:** ...
6968**Subhead:** ...
6969**Why this works:**
6970*Names the outcome the customer cares about. Grounded in [intake / customer quote / competitor benchmark].*
6971
6972### Option B — Audience-led
6973**Headline:** ...
6974**Subhead:** ...
6975**Why this works:**
6976*Names the buyer in the first 5 words so they self-identify.*
6977
6978### Option C — Mechanism-led
6979**Headline:** ...
6980**Subhead:** ...
6981**Why this works:**
6982*Leads with what makes this different — the unique "how".*
6983
6984**Recommended:** Option [X] — because [reason tied to gap report].
6985
6986---
6987
6988## Value Proposition Section
6989
6990### Option A — 3-bullet outcome stack
6991**Heading:** ...
6992- **[Outcome 1 with number]** — ...
6993- **[Outcome 2 with number]** — ...
6994- **[Outcome 3 with number]** — ...
6995
6996### Option B — Before / After
6997**Heading:** ...
6998
6999| Before [product] | With [product] |
7000|------------------|----------------|
7001| ... | ... |
7002| ... | ... |
7003| ... | ... |
7004
7005### Option C — Single big claim
7006**Heading:** ...
7007**Body:** *One paragraph with a single, defensible, specific claim.*
7008
7009**Recommended:** Option [X].
7010
7011---
7012
7013## "Who this is for" line
7014*Add this directly under the hero if audience clarity was a gap.*
7015
7016> "Built for [specific role] at [specific company type] who [specific situation]."
7017
7018---
7019
7020## How it Works (3 steps)
7021*Add this if structure / flow was a gap.*
7022
70231. **[Action verb] [object]** — [one sentence].
70242. **[Action verb] [object]** — [one sentence].
70253. **[Action verb] [object]** — [one sentence].
7026
7027---
7028
7029## Proof Strip
7030*Add this if proof was a gap.*
7031
7032**Logos:** [list 5-8 customer logos to display]
7033**Headline metric:** "[Number] [unit] [outcome]" — e.g. "$2.1B in pipeline forecasted"
7034**Quote:** *"[Verbatim customer quote with name, title, company]"*
7035
7036---
7037
7038## Primary CTA — Alternatives
7039
7040| Option | Button text | Destination | Best for |
7041|--------|-------------|-------------|----------|
7042| A | "Book a demo" | /demo | Enterprise / sales-led |
7043| B | "Start free" | /signup | PLG / self-serve |
7044| C | "See it on your data" | /sandbox | Technical buyers who want proof first |
7045
7046**Recommended:** Option [X] — because [match to buyer stage from gap report].
7047
7048---
7049
7050## One-line positioning (for sales decks too)
7051
7052> *"We help [audience] [achieve outcome] by [unique mechanism] — proven by [proof point]."*
7053
7054---
7055
7056## What to do next
7057- [ ] Pick a hero option and validate with 5 customers in a 10-min call
7058- [ ] Brief designer on the new section order
7059- [ ] Update sales deck title slide to match new positioning
7060- [ ] Schedule a re-audit in 90 days
7061`,qye=`# website-messaging-audit (shareable package)
7062
7063This package contains the staged \`website-messaging-audit\` skill and required templates.
7064
7065## Contents
7066
7067- \`SKILL.md\`
7068- \`templates/intake.md\`
7069- \`templates/gap-report.md\`
7070- \`templates/rewrite-drafts.md\`
7071
7072## Highlights in this version
7073
7074- Stage-based flow with checkpoint summaries
7075- One question at a time
7076- Multiple-choice prompts using \`AskQuestion\`
7077- Cursor internal browser preview guidance
7078
7079## How to use
7080
70811. Copy this folder into your target repo at:
7082   - \`.cursor/skills/website-messaging-audit/\`
70832. Ensure the folder structure remains:
7084   - \`.cursor/skills/website-messaging-audit/SKILL.md\`
7085   - \`.cursor/skills/website-messaging-audit/templates/...\`
70863. In Cursor, invoke the skill by asking for a website messaging audit.
7087`,$ye=`# Codex Micro + Wispr Flow
7088
7089Guarded one-cell keymap edit so the Work Louder Codex Micro microphone key is visible to Wispr Flow as a held modifier.
7090
7091This is keymap editing. It is not firmware flashing, firmware hacking, or a background macro.
7092
7093## Current tested mapping
7094
7095The latest tested setup emits **Right Shift while held**. Earlier backups used Left Shift. Re-read the keymap after app or firmware updates before writing.
7096
7097Target cell on the verified device: profile \`0\`, layer \`0\`, row \`3\`, column \`0\` → \`KC_RSFT\`.
7098
7099Do not reuse somebody else's row and column. Listen or read first.
7100
7101## Prerequisites
7102
7103- macOS and Node.js
7104- Codex Micro connected over USB
7105- ChatGPT/Codex or Work Louder Input installed (the utility reuses the bundled \`node-hid\` library)
7106- Wispr Flow installed
7107- Input Monitoring for your terminal app only if macOS blocks HID access
7108
7109## Read, back up, apply, verify
7110
7111All commands run from this folder.
7112
7113### 1. Read the full keymap (read-only)
7114
7115\`\`\`sh
7116node codex-micro-keymap-safe.js read --out live-keymap.json
7117\`\`\`
7118
7119### 2. Plan the one-cell change (read-only)
7120
7121\`\`\`sh
7122node codex-micro-keymap-safe.js plan-right-shift
7123\`\`\`
7124
7125Creates a complete local backup and refuses unexpected starting values.
7126
7127### 3. Apply with an explicit guard
7128
7129This is the device-changing step. Run it only after reviewing the plan and backup path.
7130
7131\`\`\`sh
7132node codex-micro-keymap-safe.js apply-right-shift --i-understand-this-changes-device
7133\`\`\`
7134
7135The utility writes through the keyboard keymap save path, reads the whole keymap back, and confirms that the before/after diff contains exactly one changed cell.
7136
7137### 4. Record it in Wispr Flow
7138
71391. Open Wispr Flow shortcut settings.
71402. Choose the push-to-talk shortcut field.
71413. Hold the Codex Micro mic key.
71424. Confirm Wispr Flow records Right Shift.
71435. In a text field, hold the key, speak, release, and confirm the transcript is inserted.
7144
7145## Rollback
7146
7147Use the backup path printed by the apply command.
7148
7149\`\`\`sh
7150node codex-micro-keymap-safe.js restore \\
7151  --from backups/keymap-...-before-apply.json \\
7152  --i-understand-this-changes-device
7153\`\`\`
7154
7155Restore first makes another safety backup of the current keymap, then writes the selected backup and verifies a complete readback.
7156
7157A stale full-keymap backup can revert other changes stored in that backup.
7158
7159## Troubleshooting
7160
7161**The utility cannot find the keyboard.** Connect over USB. Confirm the Micro is awake. Run \`read\` again.
7162
7163**macOS denies access.** Enable Input Monitoring for the terminal app, quit it completely, reopen it, and retry.
7164
7165**Wispr Flow does not accept the shortcut.** Confirm the token is \`KC_RSFT\`, then record again while holding the physical mic key. Wispr Flow requires a modifier or eligible mouse button, which is why a bare \`F13\` test was not enough.
7166
7167**The mic key still triggers Codex.** Read the keymap again and confirm you changed the same cell the mic key reports.
7168
7169**The button changes letters while typing.** That is the trade-off. The key is now a normal Right Shift. Restore the backup if that is not worth it.
7170
7171## Safety
7172
7173This workflow edits \`/fs/keymap.json\` on the device. It does not enter a bootloader, replace firmware, or alter a firmware image.
7174
7175Apply and restore refuse to run without \`--i-understand-this-changes-device\`.
7176`,Fye=`#!/usr/bin/env node
7177
7178"use strict";
7179
7180const fs = require("node:fs");
7181const path = require("node:path");
7182
7183const WL_VENDOR_ID = 0x303a;
7184const CODEX_MICRO_PRODUCT_ID = 0x8360;
7185const VENDOR_USAGE_PAGE = 0xff00;
7186const VENDOR_USAGE = 0x0001;
7187const REPORT_ID = 6;
7188const CHANNEL_RPC = 2;
7189const MAX_CHUNK_SIZE = 61;
7190const KEYMAP_READ_FILE = "/fs/keymap.json";
7191const KEYMAP_WRITE_FILE = "keymap.json";
7192const WRITE_CHUNK_RAW_SIZE = 3072;
7193
7194const TARGET = {
7195  profileId: 0,
7196  layerId: 0,
7197  row: 3,
7198  column: 0,
7199  keycode: "KC_RSFT",
7200  expectedKnownCurrent: new Set(["KV_OAI_ACT10", "KC_F13", "KC_RSFT", "KC_LSFT"]),
7201};
7202
7203function candidateBindings() {
7204  const arch = process.arch === "arm64" ? "arm64" : "x64";
7205  const filename = \`HID-darwin-\${arch}/node-napi-v4.node\`;
7206  return [
7207    path.join(
7208      "/Applications/ChatGPT.app/Contents/Resources/app.asar.unpacked",
7209      "node_modules/@worklouder/device-kit-oai/node_modules/@worklouder",
7210      "wl-device-kit/node_modules/node-hid/prebuilds",
7211      filename,
7212    ),
7213    path.join(
7214      "/Applications/input.app/Contents/Resources/app.asar.unpacked",
7215      "node_modules/node-hid/prebuilds",
7216      filename,
7217    ),
7218  ];
7219}
7220
7221function loadHIDBinding() {
7222  const bindingPath = candidateBindings().find((candidate) => fs.existsSync(candidate));
7223  if (!bindingPath) {
7224    throw new Error("Could not find the HID library bundled with ChatGPT/Codex or Work Louder Input.");
7225  }
7226  return require(bindingPath);
7227}
7228
7229class CodexMicroRPC {
7230  constructor(binding) {
7231    this.binding = binding;
7232    this.device = undefined;
7233    this.buffer = "";
7234    this.pending = new Map();
7235    this.nextId = 701;
7236  }
7237
7238  findDevice() {
7239    return this.binding.devices().find(
7240      (device) =>
7241        device.vendorId === WL_VENDOR_ID &&
7242        device.productId === CODEX_MICRO_PRODUCT_ID &&
7243        device.usagePage === VENDOR_USAGE_PAGE &&
7244        device.usage === VENDOR_USAGE,
7245    );
7246  }
7247
7248  async connect() {
7249    const descriptor = this.findDevice();
7250    if (!descriptor) {
7251      throw new Error("Codex Micro vendor interface not found. Make sure the device is on and connected.");
7252    }
7253
7254    this.device = await this.binding.openAsyncHIDDevice(descriptor.path, { nonExclusive: true });
7255    this.device.readStart((error, data) => {
7256      if (error) {
7257        this.rejectAll(error);
7258        return;
7259      }
7260      this.handleReport(data);
7261    });
7262    return descriptor;
7263  }
7264
7265  async close() {
7266    if (!this.device) return;
7267    try {
7268      this.device.readStop();
7269    } catch {
7270      // macOS can close a Bluetooth HID handle before cleanup runs.
7271    }
7272    try {
7273      await this.device.close();
7274    } catch (error) {
7275      if (!/already closed/i.test(error.message)) throw error;
7276    }
7277    this.device = undefined;
7278  }
7279
7280  rejectAll(error) {
7281    for (const pending of this.pending.values()) {
7282      clearTimeout(pending.timer);
7283      pending.reject(error);
7284    }
7285    this.pending.clear();
7286  }
7287
7288  handleReport(data) {
7289    if (!data || data.length < 3) return;
7290    const channel = data[1];
7291    const length = data[2];
7292    if (channel !== CHANNEL_RPC || length === 0) return;
7293
7294    this.buffer += Buffer.from(data.slice(3, 3 + length)).toString("utf8");
7295    const lines = this.buffer.split(/\\r?\\n/);
7296    this.buffer = lines.pop() ?? "";
7297    for (const line of lines) {
7298      if (line.trim()) this.handleMessage(line.trim());
7299    }
7300  }
7301
7302  handleMessage(line) {
7303    let message;
7304    try {
7305      message = JSON.parse(line);
7306    } catch {
7307      return;
7308    }
7309
7310    if (message.id === undefined && message.i === undefined) return;
7311    const id = String(message.id ?? message.i);
7312    const pending = this.pending.get(id);
7313    if (!pending) return;
7314    clearTimeout(pending.timer);
7315    this.pending.delete(id);
7316    if (message.error) {
7317      pending.reject(new Error(message.error.message ?? JSON.stringify(message.error)));
7318    } else {
7319      pending.resolve(message.result);
7320    }
7321  }
7322
7323  async sendPayload(payload) {
7324    if (!this.device) throw new Error("Device is not connected.");
7325    const message = Buffer.from(payload, "utf8");
7326    for (let offset = 0; offset < message.length; offset += MAX_CHUNK_SIZE) {
7327      const chunkSize = Math.min(MAX_CHUNK_SIZE, message.length - offset);
7328      const report = Buffer.alloc(64);
7329      report[0] = REPORT_ID;
7330      report[1] = CHANNEL_RPC;
7331      report[2] = chunkSize;
7332      message.copy(report, 3, offset, offset + chunkSize);
7333      await this.device.write(report);
7334    }
7335  }
7336
7337  async call(method, params = null, timeoutMs = 10_000) {
7338    const id = this.nextId;
7339    this.nextId = this.nextId >= 998 ? 701 : this.nextId + 1;
7340    const payload = JSON.stringify({ method, params, id });
7341
7342    return new Promise((resolve, reject) => {
7343      const timer = setTimeout(() => {
7344        this.pending.delete(String(id));
7345        reject(new Error(\`Timed out calling \${method}\`));
7346      }, timeoutMs);
7347      this.pending.set(String(id), { resolve, reject, timer });
7348      this.sendPayload(payload).catch((error) => {
7349        clearTimeout(timer);
7350        this.pending.delete(String(id));
7351        reject(error);
7352      });
7353    });
7354  }
7355}
7356
7357function parseKeymap(value) {
7358  let payload = value;
7359  if (payload && typeof payload === "object" && "data" in payload) payload = payload.data;
7360  const keymap = typeof payload === "string" ? JSON.parse(payload) : payload;
7361  if (!keymap || !Array.isArray(keymap.profiles)) {
7362    throw new Error("Device returned an invalid keymap.");
7363  }
7364  return keymap;
7365}
7366
7367async function readKeymap(rpc) {
7368  return parseKeymap(await rpc.call("fs.read", { file: KEYMAP_READ_FILE }));
7369}
7370
7371function keymapWriteChunks(keymap) {
7372  const data = Buffer.from(JSON.stringify(keymap), "utf8");
7373  const chunks = [];
7374  for (let offset = 0; offset < data.length; offset += WRITE_CHUNK_RAW_SIZE) {
7375    const chunk = data.subarray(offset, offset + WRITE_CHUNK_RAW_SIZE);
7376    chunks.push({
7377      file: KEYMAP_WRITE_FILE,
7378      data: chunk.toString("base64"),
7379      append: true,
7380      completed: offset + chunk.length === data.length,
7381      offset,
7382    });
7383  }
7384  return chunks;
7385}
7386
7387async function writeKeymap(rpc, keymap) {
7388  for (const params of keymapWriteChunks(keymap)) {
7389    const result = await rpc.call("fs.writebin", params, 20_000);
7390    if (result === false) throw new Error("Device rejected the keymap write.");
7391  }
7392}
7393
7394function timestamp() {
7395  return new Date().toISOString().replace(/[:.]/g, "-");
7396}
7397
7398function ensureDir(directory) {
7399  fs.mkdirSync(directory, { recursive: true });
7400}
7401
7402function saveJson(filePath, value) {
7403  ensureDir(path.dirname(filePath));
7404  fs.writeFileSync(filePath, \`\${JSON.stringify(value, null, 2)}\\n\`, { flag: "wx" });
7405}
7406
7407function backupKeymap(keymap, label, outputDir) {
7408  const directory = path.join(outputDir, "backups");
7409  ensureDir(directory);
7410  const filePath = path.join(directory, \`keymap-\${timestamp()}-\${label}.json\`);
7411  saveJson(filePath, keymap);
7412  return filePath;
7413}
7414
7415function keyAt(keymap, target = TARGET) {
7416  const profile = keymap.profiles.find((candidate) => candidate.id === target.profileId);
7417  const layer = profile?.layers?.find((candidate) => candidate.id === target.layerId);
7418  const row = layer?.layout?.keymap?.[target.row];
7419  const value = row?.[target.column];
7420  if (typeof value !== "string") {
7421    throw new Error(
7422      \`No key exists at profile \${target.profileId}, layer \${target.layerId}, row \${target.row}, column \${target.column}.\`,
7423    );
7424  }
7425  return value;
7426}
7427
7428function withTargetKey(keymap, keycode) {
7429  const updated = structuredClone(keymap);
7430  const profile = updated.profiles.find((candidate) => candidate.id === TARGET.profileId);
7431  const layer = profile.layers.find((candidate) => candidate.id === TARGET.layerId);
7432  layer.layout.keymap[TARGET.row][TARGET.column] = keycode;
7433  return updated;
7434}
7435
7436function pathText(parts) {
7437  return parts.map((part) => (typeof part === "number" ? \`[\${part}]\` : \`.\${part}\`)).join("");
7438}
7439
7440function diffLeaves(before, after, trail = []) {
7441  const diffs = [];
7442  if (before === after) return diffs;
7443  const beforeIsObject = before && typeof before === "object";
7444  const afterIsObject = after && typeof after === "object";
7445  if (!beforeIsObject || !afterIsObject || Array.isArray(before) !== Array.isArray(after)) {
7446    return [{ path: trail, before, after }];
7447  }
7448  const keys = new Set([...Object.keys(before), ...Object.keys(after)]);
7449  for (const key of keys) {
7450    const normalized = Array.isArray(before) ? Number(key) : key;
7451    diffs.push(...diffLeaves(before[key], after[key], trail.concat(normalized)));
7452  }
7453  return diffs;
7454}
7455
7456function expectedTargetPath() {
7457  return [
7458    "profiles",
7459    0,
7460    "layers",
7461    0,
7462    "layout",
7463    "keymap",
7464    TARGET.row,
7465    TARGET.column,
7466  ];
7467}
7468
7469function isExpectedSingleCellDiff(diffs) {
7470  if (diffs.length !== 1) return false;
7471  return pathText(diffs[0].path) === pathText(expectedTargetPath()) && diffs[0].after === TARGET.keycode;
7472}
7473
7474function assertSafeCurrent(current, options) {
7475  if (TARGET.expectedKnownCurrent.has(current)) return;
7476  if (options.allowUnexpectedCurrent) return;
7477  throw new Error(
7478    \`Refusing to edit unexpected current value \${current}. Expected one of \${[
7479      ...TARGET.expectedKnownCurrent,
7480    ].join(", ")}. Re-run with --allow-unexpected-current only after manual review.\`,
7481  );
7482}
7483
7484function parseArgs(argv) {
7485  const args = [...argv];
7486  const command = args.shift() ?? "help";
7487  const options = {
7488    outputDir: __dirname,
7489    out: undefined,
7490    from: undefined,
7491    apply: false,
7492    allowUnexpectedCurrent: false,
7493  };
7494
7495  while (args.length) {
7496    const arg = args.shift();
7497    if (arg === "--out") options.out = args.shift();
7498    else if (arg === "--from") options.from = args.shift();
7499    else if (arg === "--output-dir") options.outputDir = path.resolve(args.shift());
7500    else if (arg === "--i-understand-this-changes-device") options.apply = true;
7501    else if (arg === "--allow-unexpected-current") options.allowUnexpectedCurrent = true;
7502    else throw new Error(\`Unknown argument: \${arg}\`);
7503  }
7504  return { command, options };
7505}
7506
7507function printHelp() {
7508  console.log(\`
7509Codex Micro safe keymap utility
7510
7511Read-only:
7512  node codex-micro-keymap-safe.js read --out live-keymap.json
7513  node codex-micro-keymap-safe.js plan-right-shift
7514
7515Device-changing, requires explicit flag:
7516  node codex-micro-keymap-safe.js apply-right-shift --i-understand-this-changes-device
7517  node codex-micro-keymap-safe.js restore --from backups/keymap-....json --i-understand-this-changes-device
7518
7519Target:
7520  profile 0, layer 0, row 3, column 0 -> KC_RSFT
7521
7522This edits /fs/keymap.json only. It does not flash firmware.
7523\`);
7524}
7525
7526async function withDevice(callback) {
7527  const rpc = new CodexMicroRPC(loadHIDBinding());
7528  try {
7529    const descriptor = await rpc.connect();
7530    console.log(\`Connected: \${descriptor.product} (\${descriptor.path})\`);
7531    return await callback(rpc);
7532  } finally {
7533    await rpc.close();
7534  }
7535}
7536
7537async function commandRead(options) {
7538  if (!options.out) throw new Error("read requires --out FILE.");
7539  await withDevice(async (rpc) => {
7540    const keymap = await readKeymap(rpc);
7541    saveJson(path.resolve(options.out), keymap);
7542    console.log(\`Saved full keymap readback: \${path.resolve(options.out)}\`);
7543    console.log(\`Target cell currently: \${keyAt(keymap)}\`);
7544  });
7545}
7546
7547async function commandPlanRightShift(options) {
7548  await withDevice(async (rpc) => {
7549    const keymap = await readKeymap(rpc);
7550    const current = keyAt(keymap);
7551    const backupPath = backupKeymap(keymap, "read-only-plan", options.outputDir);
7552    console.log(\`Read-only backup: \${backupPath}\`);
7553    console.log(\`Target cell currently: \${current}\`);
7554    if (current === TARGET.keycode) {
7555      console.log("Plan: no device write needed; target cell is already KC_RSFT.");
7556      return;
7557    }
7558    assertSafeCurrent(current, options);
7559    const intended = withTargetKey(keymap, TARGET.keycode);
7560    const diffs = diffLeaves(keymap, intended);
7561    if (!isExpectedSingleCellDiff(diffs)) {
7562      throw new Error(\`Plan failed: intended map does not have exactly one expected diff. Diffs: \${JSON.stringify(diffs)}\`);
7563    }
7564    console.log(\`Plan: change \${pathText(expectedTargetPath())} from \${current} to \${TARGET.keycode}.\`);
7565    console.log("Plan verified: exactly one keymap cell would change.");
7566  });
7567}
7568
7569async function commandApplyRightShift(options) {
7570  if (!options.apply) {
7571    throw new Error("apply-right-shift requires --i-understand-this-changes-device.");
7572  }
7573  await withDevice(async (rpc) => {
7574    const before = await readKeymap(rpc);
7575    const current = keyAt(before);
7576    const backupPath = backupKeymap(before, "before-apply", options.outputDir);
7577    console.log(\`Complete keymap backup: \${backupPath}\`);
7578    console.log(\`Target cell before apply: \${current}\`);
7579
7580    if (current === TARGET.keycode) {
7581      console.log("Already set to KC_RSFT. No device write performed.");
7582      console.log(\`Rollback snapshot, if needed: \${backupPath}\`);
7583      return;
7584    }
7585
7586    assertSafeCurrent(current, options);
7587    const intended = withTargetKey(before, TARGET.keycode);
7588    const plannedDiffs = diffLeaves(before, intended);
7589    if (!isExpectedSingleCellDiff(plannedDiffs)) {
7590      throw new Error(\`Refusing to write: planned diff is not exactly the target cell. \${JSON.stringify(plannedDiffs)}\`);
7591    }
7592
7593    await writeKeymap(rpc, intended);
7594    await new Promise((resolve) => setTimeout(resolve, 500));
7595    const after = await readKeymap(rpc);
7596    const afterPath = backupKeymap(after, "after-apply-readback", options.outputDir);
7597    console.log(\`Full keymap readback after write: \${afterPath}\`);
7598
7599    if (JSON.stringify(after) !== JSON.stringify(intended)) {
7600      throw new Error("Verification failed: readback does not match intended keymap.");
7601    }
7602    const actualDiffs = diffLeaves(before, after);
7603    if (!isExpectedSingleCellDiff(actualDiffs)) {
7604      throw new Error(\`Verification failed: actual diff is not exactly one target cell. \${JSON.stringify(actualDiffs)}\`);
7605    }
7606    console.log(\`Verified one-cell diff: \${pathText(actualDiffs[0].path)} \${actualDiffs[0].before} -> \${actualDiffs[0].after}\`);
7607    console.log("Rollback command:");
7608    console.log(\`node \${path.basename(__filename)} restore --from \${backupPath} --i-understand-this-changes-device\`);
7609  });
7610}
7611
7612async function commandRestore(options) {
7613  if (!options.apply) throw new Error("restore requires --i-understand-this-changes-device.");
7614  if (!options.from) throw new Error("restore requires --from BACKUP_JSON.");
7615  const restorePath = path.resolve(options.from);
7616  const restoreKeymap = parseKeymap(JSON.parse(fs.readFileSync(restorePath, "utf8")));
7617
7618  await withDevice(async (rpc) => {
7619    const current = await readKeymap(rpc);
7620    const safetyPath = backupKeymap(current, "before-restore", options.outputDir);
7621    console.log(\`Safety backup of current keymap: \${safetyPath}\`);
7622    await writeKeymap(rpc, restoreKeymap);
7623    await new Promise((resolve) => setTimeout(resolve, 500));
7624    const verified = await readKeymap(rpc);
7625    const readbackPath = backupKeymap(verified, "after-restore-readback", options.outputDir);
7626    if (JSON.stringify(verified) !== JSON.stringify(restoreKeymap)) {
7627      throw new Error("Restore verification failed: readback differs from restore file.");
7628    }
7629    console.log(\`Restored and verified: \${restorePath}\`);
7630    console.log(\`Restore readback saved: \${readbackPath}\`);
7631  });
7632}
7633
7634async function main() {
7635  const { command, options } = parseArgs(process.argv.slice(2));
7636  if (command === "help" || command === "--help" || command === "-h") {
7637    printHelp();
7638  } else if (command === "read") {
7639    await commandRead(options);
7640  } else if (command === "plan-right-shift") {
7641    await commandPlanRightShift(options);
7642  } else if (command === "apply-right-shift") {
7643    await commandApplyRightShift(options);
7644  } else if (command === "restore") {
7645    await commandRestore(options);
7646  } else {
7647    throw new Error(\`Unknown command: \${command}\`);
7648  }
7649}
7650
7651main().catch((error) => {
7652  console.error(\`Error: \${error.message}\`);
7653  if (/not permitted|permission/i.test(error.message)) {
7654    console.error("Allow Terminal under System Settings > Privacy & Security > Input Monitoring, then try again.");
7655  }
7656  process.exit(1);
7657});
7658`,Gye={"cos-skill":fye,"cos-agents":gye,"cos-readme":yye,"cos-dream":bye,"cos-share":vye,"cos-hard-rules":xye,"cos-inbox":wye,"cos-home":kye,"cos-promotion":jye,"cos-facts":Sye,"cos-source":Cye,"cos-dream-log":Aye,"cos-share-log":Tye,"apex-orchestrator":_ye,"apex-optimize-keywords":Mye,"apex-optimize-ads":Eye,"apex-lp-prioritizer":Rye,"apex-lp-research":Nye,"apex-create-landing-page":Oye,"apex-ad-creator":Pye,"apex-experimentation":Iye,"apex-shared-commanders-intent":Dye,"apex-shared-stru
7658ctural-rules":Wye,"wma-skill":zye,"wma-tpl-intake":Lye,"wma-tpl-gap-report":Uye,"wma-tpl-rewrite-drafts":Bye,"wma-readme":qye,"cm-readme":$ye,"cm-util":Fye};function PH(e){return(Gye[e]??"").replace(/^\n+/,"").replace(/\n+$/,"")}function Hye(e){return e.files.map(t=>({path:t.path,text:PH(t.id)}))}const Yye=(()=>{const e=new Uint32Array(256);for(let t=0;t<256;t++){let a=t;for(let i=0;i<8;i++)a=a&1?3988292384^a>>>1:a>>>1;e[t]=a>>>0}return e})();function Vye(e){let t=4294967295;for(let a=0;a<e.length;a++)t=Yye[(t^e[a])&255]^t>>>8;return(t^4294967295)>>>0}function Kye(e,t,a=new Date){const i=new TextEncoder,r=(a.getHours()&31)<<11|(a.getMinutes()&63)<<5|(a.getSeconds()/2|0)&31,o=(a.getFullYear()-1980&127)<<9|(a.getMonth()+1&15)<<5|a.getDate()&31,l=t.map(x=>{const k=i.encode(x.text);return{name:`${e}/${x.path}`,data:k,crc:Vye(k)}}),d=[],u=[];let h=0;for(const x of l){const k=i.encode(x.name),v=new ArrayBuffer(30),j=new DataView(v);j.setUint32(0,67324752,!0),j.setUint16(4,20,!0),j.setUint16(6,0,!0),j.setUint16(8,0,!0),j.setUint16(10,r,!0),j.setUint16(12,o,!0),j.setUint32(14,x.crc,!0),j.setUint32(18,x.data.length,!0),j.setUint32(22,x.data.length,!0),j.setUint16(26,k.length,!0),j.setUint16(28,0,!0),u.push({e:x,nameBytes:k,offset:h}),d.push(new Uint8Array(v),k,x.data),h+=30+k.length+x.data.length}const m=h;let f=0;for(const x of u){const k=new ArrayBuffer(46),v=new DataView(k);v.setUint32(0,33639248,!0),v.setUint16(4,20,!0),v.setUint16(6,20,!0),v.setUint16(8,0,!0),v.setUint16(10,0,!0),v.setUint16(12,r,!0),v.setUint16(14,o,!0),v.setUint32(16,x.e.crc,!0),v.setUint32(20,x.e.data.length,!0),v.setUint32(24,x.e.data.length,!0),v.setUint16(28,x.nameBytes.length,!0),v.setUint16(30,0,!0),v.setUint16(32,0,!0),v.setUint16(34,0,!0),v.setUint16(36,0,!0),v.setUint32(38,0,!0),v.setUint32(42,x.offset,!0),d.push(new Uint8Array(k),x.nameBytes),f+=46+x.nameBytes.length}const y=new ArrayBuffer(22),b=new DataView(y);return b.setUint32(0,101010256,!0),b.setUint16(4,0,!0),b.setUint16(6,0,!0),b.setUint16(8,l.length,!0),b.setUint16(10,l.length,!0),b.setUint32(12,f,!0),b.setUint32(16,m,!0),b.setUint16(20,0,!0),d.push(new Uint8Array(y)),new Blob(d,{type:"application/zip"})}function Xye(e,t){const a=URL.createObjectURL(e),i=document.createElement("a");i.href=a,i.download=t,document.body.appendChild(i),i.click(),document.body.removeChild(i),setTimeout(()=>URL.revokeObjectURL(a),1e3)}function Qye(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}function Zye(e){const t=e.split(`
7659`);let a=!1,i=!1;return t.map((r,o)=>{const l=Qye(r);return o===0&&r==="---"?(i=!0,`<span class="sk-md-fm">${l}</span>`):i&&r==="---"?(i=!1,`<span class="sk-md-fm">${l}</span>`):i?`<span class="sk-md-fm">${l}</span>`:r.startsWith("```")?(a=!a,`<span class="sk-md-code">${l}</span>`):a?`<span class="sk-md-code">${l}</span>`:r.startsWith("# ")?`<span class="sk-md-h1">${l}</span>`:r.startsWith("## ")?`<span class="sk-md-h2">${l}</span>`:r.startsWith("### ")?`<span class="sk-md-h3">${l}</span>`:/^\s*[-*]\s/.test(r)?l.replace(/^(\s*)([-*])(\s)/,'$1<span class="sk-md-bullet">$2</span>$3'):l}).join(`
7660`)}function tb({kit:e,extraActions:t,lede:a}){var h;const[i,r]=M.useState(((h=e.files[0])==null?void 0:h.id)??""),o=e.files.find(m=>m.id===i)??e.files[0],l=o?PH(o.id):"",d=M.useMemo(()=>Zye(l),[l]),u=()=>{const m=Kye(e.zipRoot,Hye(e));Xye(m,e.zipFilename)};return n.jsxs("div",{children:[n.jsxs("div",{className:"sk-started",children:[n.jsx("p",{className:"sk-lede",children:a??e.getStartedLede}),n.jsxs("div",{className:"sk-actions",children:[t,n.jsx("button",{type:"button",className:"sk-btn sk-btn--primary",onClick:u,children:"Download the kit (.zip)"})]})]}),n.jsxs("div",{className:"sk-viewer",children:[n.jsxs("div",{className:"sk-filelist",children:[n.jsx("div",{className:"sk-filelist__label",children:"Skill files"}),e.files.map(m=>n.jsxs("button",{type:"button",className:`sk-file${m.id===(o==null?void 0:o.id)?" is-active":""}`,onClick:()=>r(m.id),children:[n.jsx("span",{className:"sk-file__name",children:m.label}),n.jsx("span",{className:"sk-file__meta",children:m.meta})]},m.id))]}),n.jsxs("div",{className:"sk-source",children:[n.jsxs("div",{className:"sk-source__header",children:[n.jsx("span",{className:"sk-source__path",children:o==null?void 0:o.path}),n.jsx("span",{children:l?`${l.split(`
7661`).length} lines`:""})]}),n.jsx("pre",{children:n.jsx("code",{dangerouslySetInnerHTML:{__html:d}})})]})]})]})}const ho="/resources/skills/apex/logos",Jye=[{section:"Setup",title:"Setup Campaign Architecture",category:"setup",cadenceLabel:"Setup"},{section:"Setup",title:"Set Naming Conventions",category:"setup",cadenceLabel:"Setup"},{section:"Setup",title:"Create Campaigns",category:"setup",cadenceLabel:"Setup"},{section:"Setup",title:"Create Ad Groups",category:"setup",cadenceLabel:"Setup"},{section:"Build",title:"Add New Keywords",category:"daily",cadenceLabel:"Daily"},{section:"Build",title:"Create Ad Copies",category:"weekly",cadenceLabel:"Weekly"},{section:"Build",title:"Create Landing Pages",category:"weekly",cadenceLabel:"Continuous"},{section:"Build",title:"Research Competitor Strategy",category:"weekly",cadenceLabel:"Weekly"},{section:"Optimize",title:"Review Search Terms",category:"daily",cadenceLabel:"Daily"},{section:"Optimize",title:"Add Negative Keywords",category:"daily",cadenceLabel:"Daily"},{section:"Optimize",title:"Pause Low-Performing Keywords",category:"weekly",cadenceLabel:"Weekly"},{section:"Optimize",title:"Adjust Bids",category:"weekly",cadenceLabel:"Weekly"},{section:"Optimize",title:"Adjust Budgets",category:"weekly",cadenceLabel:"Weekly"},{section:"Optimize",title:"Pause Underperforming Ads",category:"weekly",cadenceLabel:"Weekly"},{section:"Optimize",title:"Pause Underperforming Campaigns",category:"weekly",cadenceLabel:"Weekly"},{section:"Optimize",title:"Assess Conversion Quality",category:"daily",cadenceLabel:"Daily"},{section:"Optimize",title:"Fix Issues",category:"weekly",cadenceLabel:"Weekly"},{section:"Optimize",title:"Run Longer-Running Tests",category:"monthly",cadenceLabel:"Multi-week"}],ebe={setup:"#64748b",daily:"#D94B50",weekly:"#E6774A",monthly:"#347BD1"};function IH(){return n.jsx("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:n.jsx("path",{fill:"#0C1E20",d:"M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v
766113.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632z"})})}function n9(){return n.jsx("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:n.jsx("path",{fill:"#D97757",d:"M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z"})})}function tbe(){return n.jsxs("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[n.jsx("rect",{x:"3",y:"6",width:"18",height:"12",rx:"1.5",fill:"none",stroke:"#509A79",strokeWidth:"1.8"}),n.jsx("path",{d:"M6 15 V 9 L 8.5 12 L 11 9 V 15",fill:"none",stroke:"#509A79",strokeWidth:"1.6",strokeLinejoin:"round"}),n.jsx("path",{d:"M16 9 V 15 M14 13 L 16 15 L 18 13",fill:"none",stroke:"#509A79",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})]})}function nbe(){return n.jsxs("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[n.jsx("rect",{x:"4",y:"10",width:"14",height:"11",rx:"1.5",fill:"#fff",stroke:"#835CE0",strokeWidth:"1.6"}),n.jsx("rect",{x:"6",y:"6.5",width:"14",height:"11",rx:"1.5",fill:"#fff",stroke:"#835CE0",strokeWidth:"1.6"}),n.jsx("line",{x1:"9",y1:"11",x2:"17",y2:"11",stroke:"#835CE0",strokeWidth:"1.4"}),n.jsx("line",{x1:"9",y1:"14",x2:"14",y2:"14",stroke:"#835CE0",strokeWidth:"1.4"})]})}function DH(){return n.jsxs("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[n.jsx("circle",{cx:"12",cy:"12",r:"9",fill:"none",stroke:"#347BD1",strokeWidth:"1.8"}),n.jsx("ellipse",{cx:"12",cy:"12",rx:"4.2",ry:"9",fill:"none",stroke:"#347BD1",strokeWidth:"1.6"}),n.jsx("line",{x1:"3",y1:"12",x2:"21",y2:"12",stroke:"#347BD1",strokeWidth:"1.6"})]})}function abe(){return n.jsx("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:n.jsx("path",{fill:"#00A1E0",d:"M10.006 5.415a4.195 4.195 0 013.045-1.306c1.56 0 2.954.9 3.69 2.205.63-.3 1.35-.45 2.1-.45 2.85 0 5.159 2.34 5.159 5.22s-2.31 5.22-5.176 5.22c-.345 0-.69-.044-1.02-.104a3.75 3.75 0 01-3.3 1.95c-.6 0-1.155-.15-1.65-.375A4.314 4.314 0 018.88 20.4a4.302 4.302 0 01-4.05-2.82c-.27.062-.54.076-.825.076-2.204 0-4.005-1.8-4.005-4.05 0-1.5.811-2.805 2.01-3.51-.255-.57-.39-1.2-.39-1.846 0-2.58 2.1-4.65 4.65-4.65 1.53 0 2.85.705 3.72 1.8"})})}function ibe(){return n.jsx("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:n.jsx("path",{fill:"#FF7A59",d:"M18.164 7.93V5.084a2.198 2.198 0 001.267-1.978v-.067A2.2 2.2 0 0017.238.845h-.067a2.2 2.2 0 00-2.193 2.193v.067a2.196 2.196 0 001.252 1.973l.013.006v2.852a6.22 6.22 0 00-2.969 1.31l.012-.01-7.828-6.095A2.497 2.497 0 104.3 4.656l-.012.006 7.697 5.991a6.176 6.176 0 00-1.038 3.446c0 1.343.425 2.588 1.147 3.607l-.013-.02-2.342 2.343a1.968 1.968 0 00-.58-.095h-.002a2.033 2.033 0 102.033 2.033 1.978 1.978 0 00-.1-.595l.005.014 2.317-2.317a6.247 6.247 0 104.782-11.134l-.036-.005zm-.964 9.378a3.206 3.206 0 113.215-3.207v.002a3.206 3.206 0 01-3.207 3.207z"})})}function rbe({name:e}){switch(e){case"notion":return n.jsx(IH,{});case"exa":return n.jsx("img",{src:`${ho}/exa-color.png`,alt:"",width:24,height:24});case"upside":return n.jsx("img",{src:`${ho}/upside_symbol_positive_cropped_150px.png`,alt:"",width:24,height:24});case"globe":return n.jsx(DH,{});case"salesforce":return n.jsx(abe,{});case"hubspot":return n.jsx(ibe,{});case"fireflies":return n.jsx("img",{src:`${ho}/fireflies logo.png`,alt:"",width:24,height:24});case"cursor":return n.jsx("img",{src:`${ho}/cursor.png`,alt:"",width:24,height:24});case"claude":return n.jsx("img",{src:`${ho}/claude.svg`,alt:"",width:24,height:24});case"craftAgent":return n.jsx("img",{src:`${ho}
7661/craft-agent.png`,alt:"",width:24,height:24});default:return null}}const obe=[{label:"MCPs",items:[{name:"Notion",detail:"Brand voice, messaging, Anchor Assets.",icon:n.jsx(IH,{}),detailKey:"mcp-notion"},{name:"Exa",detail:"Brand lookup + competitor LP recon.",src:`${ho}/exa-color.png`,detailKey:"mcp-exa"},{name:"Upside",detail:"Unified GTM data: deal value, segment, call context.",src:`${ho}/upside_symbol_positive_cropped_150px.png`,detailKey:"mcp-upside"},{name:"Google Ads",detail:"GAQL reads + mutate ops.",src:`${ho}/google-ads.svg`,detailKey:"mcp-google-ads"}]},{label:"Models",items:[{name:"Opus 4.7",detail:"Heavy lifting: orchestration, RSAs, LP markdown, research.",icon:n.jsx(n9,{})},{name:"Sonnet 4.6",detail:"Daily search-term classifier (cheap + fast at scale).",icon:n.jsx(n9,{})}]},{label:"AI Harness",items:[{name:"Craft Agents",detail:"Runs the skills, manages MCPs, approval gates.",src:`${ho}/craft-team.jpg`,detailKey:"harness"}]},{label:"Artifacts",items:[{name:"9 skill .md files",detail:"7 skills + 2 shared context docs.",icon:n.jsx(tbe,{})},{name:"Memory",detail:"project_google_ads_strategy.md, the decision log.",icon:n.jsx(nbe,{})}]}
7661,{label:"Endpoints",items:[{name:"LP sitemap",detail:"upside.tech/lp/index.json.",icon:n.jsx(DH,{}),detailKey:"endpoint-lp-sitemap"}]}],a9={"optimize-keywords":{title:"Keyword Optimizer",actions:["Pulls last 24h of KWs","Creates a subagent to assess each KW","Decides if it should be promoted or added as a negative","Makes changes in Google Ads","Logs decision trace to strategy log"],context:[{label:"Notion MCP",desc:"for positioning framework",icon:"notion"},{label:"Upside MCP",desc:"for GTM context",icon:"upside"},{label:"Exa MCP",desc:"for web research",icon:"exa"}]},"optimize-ads":{title:"Ad Optimizer",actions:["Pulls ad performance since last run","Pauses underperforming RSAs (CTR < 60% of best in group)","Generates new RSA challengers in Opus 4.7","Checks every ad group has a matching landing page","Logs ad changes + LP gaps to strategy log"],context:[{label:"Notion MCP",desc:"for brand voice + ad-group anchor",icon:"notion"},{label:"Upside MCP",desc:"for pain points from sales calls",icon:"upside"}]},"lp-prioritizer":{title:"Landing Page Prioritizer",actions:["Pulls the last 30 days of Google Ads performance","Groups search traffic by theme","Finds themes getting traffic but with no dedicated landing page","Ranks them by potential ROI","Hands off the top opportunity to the Landing Page Researcher"]},"lp-research":{title:"Landing Page Researcher",actions:["Pulls our paid search performance for the target topic","Adds search volume and competitive bid ranges","Gathers customer proof and product facts from Upside","Pulls logos, quotes, and stats from our Notion brand library","Reviews top competitor landing pages on the web","Writes a single research brief for the Landing Page Creator"],context:[{label:"Notion MCP",desc:"for Anchor Assets (logos, quotes, stats)",icon:"notion"},{label:"Upside MCP",desc:"for customer proof and GTM context",icon:"upside"},{label:"Exa MCP",desc:"for competitor landing page research",icon:"exa"}]},"create-landing-page":{title:"Landing Page Creator",actions:["Takes the research brief and brand anchor as input","Generates the landing page in Opus 4.7","Adheres to Upside brand guidelines","Creates a pull request to the live website"],context:[{label:"Notion MCP",desc:"for the canonical brand anchor doc",icon:"notion"},{label:"Upside MCP",desc:"for segment fit + discovery-call pain",icon:"upside"}]},"ad-creator":{title:"Ad Creator",actions:["Confirms target LP exists in /lp/index.json","Reads the live LP for H1, subhead, and CTA","Drafts 3 RSA variants (A/B/C) in Opus 4.7","15 headlines + 4 descriptions per variant","Validates char limits and banned phrases","Writes ads file with push command for human review"],context:[{label:"Website",desc:"pulls live LP copy from upside.tech/lp/*",icon:"globe"},{label:"Exa MCP",desc:"fetches the page as clean markdown",icon:"exa"}]},experimentation:{title:"Experiment Manager",actions:["Maintains a memory of all running paid-search experiments","Proposes new hypotheses with primary metric + stop criteria","Checks in weekly: pulls metrics, applies guardrails","Concludes tests: rollout, rollback, or extend","Logs findings back to the strategy log"],context:[{label:"Upside MCP",desc:"for downstream conversion attribution",icon:"upside"}]},"mcp-google-ads":{title:"Google Ads MCP",actions:["Pull campaign, ad group, ad, and keyword performance via GAQL","Read search-term reports (the daily input for the keyword optimizer)","Add or pause keywords (positive + negative match types)","Create, update, or pause campaigns, ad groups, and RSAs","Adjust budgets and bids","Manage sitelinks, callouts, and other ad extensions"]},"mcp-upside":{title:"Upside MCP",actions:["Read-only access to a unified GTM warehouse","Ties Google Ads traffic to pipeline and revenue (closed-loop attribution)","SQL across accounts, opportunities, contacts, and touchpoints","Natural-language search over emails and meeting transcripts","Surface deal context: stage, ICP fit, segment, win/loss reasons"],contextLabel:"Data sources",context:[{label:"Salesforce",desc:"CRM accounts, opps, contacts",icon:"salesforce"},{label:"HubSpot",desc:"marketing engagement + lifecycle",icon:"hubspot"},{label:"Fireflies.ai",desc:"meeting transcripts + summaries",icon:"fireflies"}]},"mcp-notion":{title:"Notion MCP",actions:["Read access to Upside’s Anchor Assets, the core messaging docs","Grounds every decision in our positioning, value props, and ICP"],context:[{label:"Personas",desc:"who we serve"},{label:"Jobs To Be Done",desc:"what they need"},{label:"Customer ICP",desc:"which companies we sell to"},{label:"Positioning Principles",desc:"how we talk about Upside, and why"},{label:"Product Reference",desc:"what Upside actually does today"},{label:"Product Principles",desc:"how we make product decisions"},{label:"Assumptions",desc:"what we’re betting on"},{label:"Monetization Levers",desc:"how we capture value"}]},"mcp-exa":{title:"Exa MCP",actions:["Realtime AI-powered web search with clean extracted content","Fetch any URL as clean markdown for analysis","Filtered search by domain, category, or date range","Deep researcher for multi-hop research reports with citations"]},harness:{title:"AI Harness",actions:["Runs the skills (markdown files with frontmatter)","Manages MCP server lifecycle + auth","Mediates tool approval gates (read vs. write actions)","Spawns subagents for parallel work"],contextLabel:"Compatible runtimes",context:[{label:"Cursor",desc:"currently powering this demo",icon:"cursor"},{label:"Claude Code",desc:"Anthropic’s CLI, the canonical SKILL.md home",icon:"claude"},{label:"Craft Agents",desc:"native workspace format (~/.craft-agent/...)",icon:"craftAgent"}]},"endpoint-lp-sitemap":{title:"LP Sitemap",actions:["Dedicated endpoint that lets the LLM “see” every page that exists","Lists each page’s URL and the target keyword it was built for","Surfaces pages even when they aren’t linked from the main site"]},"art-intent":{title:"Commander’s Intent",actions:["Read at the start of every orchestrator run","Defines what we’re building and why","
7661Lists each agent’s role and the pipeline stages","Sets the governing principles (data-driven, context not copy)","Read-only. The orchestrator never writes back to it"]},"art-rules":{title:"Structural Rules",actions:["Schemas, conventions, and account-specific facts","Output formats for each specialist (LP brief, research dump, RSA spec)","Naming conventions (slug = file = URL)","Send-back protocol when input is incomplete","The orchestrator updates this when conventions evolve"]},"art-memory":{title:"Strategy Log",actions:["Running memory of what’s worked and what didn’t","Logs negatives, promotions, RSAs, and bid moves","Captures the rationale behind each decision","Lets future runs skip re-litigating the same calls","Specialists append to it after every run"]}},th={specialists:["optimize-keywords","optimize-ads","lp-prioritizer","lp-research","create-landing-page","ad-creator","experimentation"],mcps:["mcp-exa","mcp-google-ads","mcp-notion","mcp-upside"],resources:["art-intent","art-rules","art-memory"]};function i9(e){return th.specialists.includes(e)?{ids:th.specialists,name:"specialists"}:th.mcps.includes(e)?{ids:th.mcps,name:"mcps"}:th.resources.includes(e)?{ids:th.resources,name:"resources"}:null}function sbe(){const e=[],t=new Map;for(const a of Jye){let i=t.get(a.section);i||(i=[],t.set(a.section,i),e.push({name:a.section,items:i})),i.push(a)}return e}function lbe({kit:e,pane:t}){const[a,i]=M.useState("claude"),[r,o]=M.useState(null),l=u=>{if(!r)return;const h=i9(r);if(!h)return;const m=h.ids.indexOf(r)+u;if(m<0||m>=h.ids.length){o(null);return}o(h.ids[m])},d=u=>{a9[u]&&o(u)};if(t==="problem")return n.jsxs("div",{children:[n.jsx("div",{className:"sk-intro",children:n.jsx("h2",{children:"Running B2B Google Ads is a part-time job that never ends."})}),sbe().map(u=>n.jsxs("div",{children:[n.jsx("div",{className:"sk-section-head",children:u.name}),n.jsx("div",{className:"sk-grid",children:u.items.map(h=>n.jsxs("div",{className:"sk-pain",style:{"--sk-cat":ebe[h.category]},children:[n.jsx("div",{className:"sk-pain__title",children:h.title}),n.jsx("span",{className:"sk-pill",children:h.cadenceLabel})]},h.title))})]},u.name))]});if(t==="solution"){const u=r?a9[r]:null,h=r?i9(r):null;return n.jsxs("div",{children:[n.jsx("div",{className:"sk-intro",children:n.jsx("h2",{children:"Autonomous Paid Execution."})}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"The Stack"})}),n.jsx("div",{className:"sk-card__body",children:n.jsx("ul",{className:"sk-stack sk-stack--wide",children:obe.map((m,f)=>n.jsxs("li",{className:f>0?"sk-stack__group sk-stack__group--split":"sk-stack__group",children:[n.jsx("div",{className:"sk-stack__group-label",children:m.label}),n.jsx("div",{className:"sk-stack__icons",children:m.items.map(y=>{const b=n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"sk-stack__icon sk-stack__icon--lg",children:y.src?n.jsx("img",{src:y.src,alt:"",width:32,height:32}):y.icon}),n.jsx("div",{className:"sk-stack__name",children:y.name})]}),x=`${y.name}: ${y.detail}${y.detailKey?" (click for details)":""}`;return y.detailKey?n.jsx("button",{type:"button",className:"sk-stack__tile is-clickable",title:x,onClick:()=>d(y.detailKey),children:b},y.name):n.jsx("div",{className:"sk-stack__tile",title:x,children:b},y.name)})})]},m.label))})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsxs("div",{className:"sk-card__header",children:[n.jsx("h3",{children:"How It Works"}),n.jsx("span",{className:"sk-card__hint",children:"Click any specialist to drill in."})]}),n.jsx("div",{className:"sk-diagram sk-diagram--apex",children:n.jsx(pye,{activeId:a,onSelect:m=>{i(m),d(m)}})})]}),u?n.jsx(mye,{detail:u,groupName:h==null?void 0:h.name,onClose:()=>o(null),onCycle:l,renderIcon:m=>n.jsx(rbe,{name:m})}):null]})}return n.jsx(tb,{kit:e})}const cS="/resources/skills/codex-micro",cbe="https://worklouder.cc/codex-micro",dbe=[{num:"01",title:"Hold",body:"Hold the wide mic key to start Wispr Flow."},{num:"02",title:"Speak",body:"Dictate into the active Codex composer and release when the prompt is complete."},{num:"03",title:"Send and move",body:"Send the prompt, jump into a pinned agent, capture an Appshot, save context to Brain, or navigate with the dial and j
7661oystick."}],ube=[{label:"Current tested mapping",value:"Right Shift while held"},{label:"Change type",value:"One keymap cell"},{label:"Not involved",value:"Firmware flashing"}],hbe=["macOS and Node.js","Codex Micro connected over USB","ChatGPT/Codex or Work Louder Input installed","Wispr Flow installed","The bundled guarded utility","Input Monitoring only if macOS blocks HID access"],pbe=[{num:"01",title:"Read the full keymap",body:"This is read-only and saves a local copy for inspection.",code:`node codex-micro-keymap-safe.js read \\
7662  --out live-keymap.json`},{num:"02",title:"Plan the one-cell change",body:"The planner creates a complete local backup and refuses unexpected starting values.",code:"node codex-micro-keymap-safe.js plan-right-shift"},{num:"03",title:"Apply with an explicit guard",body:"This is the device-changing step. Run it only after reviewing the plan and backup path.",code:`node codex-micro-keymap-safe.js apply-right-shift \\
7663  --i-understand-this-changes-device`},{num:"04",title:"Verify the readback",body:"The utility reads the entire keymap back, checks it against the intended map, and confirms that the before/after diff contains exactly one changed cell."}],mbe=["Open Wispr Flow shortcut settings.","Choose the push-to-talk shortcut field.","Hold the Codex Micro mic key.","Confirm Wispr Flow records Right Shift.","In a text field, hold the key, speak, release, and confirm the transcript is inserted."];function fbe({kit:e,pane:t}){return t==="skills"?n.jsx(tb,{kit:e}):t==="wispr"?n.jsxs("div",{children:[n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Why this was hard"})}),n.jsxs("div",{className:"sk-card__body",children:[n.jsx("div",{className:"sk-cm-status","aria-label":"Current verified setup",children:ube.map(a=>n.jsxs("div",{children:[n.jsx("span",{children:a.label}),n.jsx("strong",{children:a.value})]},a.label))}),n.jsx("p",{className:"sk-lede",children:"The microphone button crossed three configuration boundaries that were each working as intended, but did not expose a shared shortcut Wispr Flow could use. The physical key originally emitted a vendor-specific Codex action, not an ordinary keyboard key."}),n.jsxs("p",{className:"sk-lede",children:["Codex could assign Codex functions. Work Louder Input treated the Codex layer as protected. Wispr Flow accepts supported standard modifiers or mouse inputs — not the original Codex event. A bare ",n.jsx("code",{children:"F13"})," test was also rejected."]}),n.jsxs("p",{className:"sk-lede",children:["The smallest bridge was a one-cell edit to the device's saved keymap. In the latest verified setup, the physical mic control emits ",n.jsx("strong",{children:"Right Shift"})," for exactly as long as it is held."," ",n.jsx("a",{href:"#skills",children:"Download the guarded utility →"})]}),n.jsxs("div",{className:"sk-rule sk-rule--ok",children:[n.jsx("h3",{children:"Keymap editing is not firmware flashing"}),n.jsx("p",{children:"This workflow edits the keyboard's saved keymap JSON. It does not enter a bootloader, replace firmware, or alter a firmware image."})]})]})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Prerequisites"})}),n.jsx("div",{className:"sk-card__body",children:n.jsx("ul",{className:"sk-cm-checks",children:hbe.map(a=>n.jsx("li",{children:a},a))})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Read, back up, apply, verify"})}),n.jsx("div",{className:"sk-card__body",children:n.jsx("div",{className:"sk-cm-commands",children:pbe.map(a=>n.jsxs("article",{className:"sk-cm-command",children:[n.jsx("span",{children:a.num}),n.jsxs("div",{children:[n.jsx("h4",{children:a.title}),n.jsx("p",{children:a.body}),a.code?n.jsx("pre",{children:n.jsx("code",{children:a.code})}):null]})]},a.num))})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Record it in Wispr Flow"})}),n.jsx("div",{className:"sk-card__body",children:n.jsx("ol",{className:"sk-steps",children:mbe.map(a=>n.jsx("li",{children:a},a))})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Rollback"})}),n.jsxs("div",{className:"sk-card__body",children:[n.jsx("p",{className:"sk-lede",children:"Use the backup path printed by the apply command. Restore first makes another safety backup of the current keymap, then writes the selected backup and verifies a complete readback."}),n.jsx("pre",{className:"sk-cm-pre",children:n.jsx("code",{children:`node codex-micro-keymap-safe.js restore \\
7664  --from backups/keymap-...-before-apply.json \\
7665  --i-understand-this-changes-device`})}),n.jsxs("div",{className:"sk-rule sk-rule--no",children:[n.jsx("h3",{children:"Safety caveat"}
7665),n.jsx("p",{children:"Do not reuse a row or column from somebody else's device. Re-read the keymap after firmware or app updates. A stale full-keymap backup can revert other changes stored in that backup."})]})]})]})]}):n.jsxs("div",{children:[n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Every verified assignment"})}),n.jsxs("div",{className:"sk-card__body",children:[n.jsx("p",{className:"sk-lede",children:"The six agent keys follow the first six pinned tasks. The remaining controls handle navigation, capture, memory, voice, and sending. Every label names the outcome, not the implementation."}),n.jsxs("picture",{children:[n.jsx("source",{media:"(max-width: 680px)",srcSet:`${cS}/codex-micro-keymap-mobile.png`}),n.jsx("img",{className:"sk-cm-keymap",src:`${cS}/codex-micro-keymap-wide.png`,alt:"Codex Micro labeled with Nyx, Pipeline Radar, MCP Connections, Reminders, Sales Deck, PMM, navigation actions, Appshot, Save to Brain, Wispr Flow, Send, and the joystick directions"})]})]})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Voice, agents, and actions"})}),n.jsx("div",{className:"sk-card__body",children:n.jsx("div",{className:"sk-cm-flow",children:dbe.map(a=>n.jsxs("article",{children:[n.jsx("span",{children:a.num}),n.jsx("h4",{children:a.title}),n.jsx("p",{children:a.body})]},a.num))})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"The actual device"})}),n.jsx("div",{className:"sk-card__body",children:n.jsxs("div",{className:"sk-cm-device",children:[n.jsx("img",{className:"sk-cm-photo",src:`${cS}/codex-micro-photo.jpg`,alt:"Work Louder Codex Micro"}),n.jsxs("div",{children:[n.jsxs("p",{className:"sk-lede",children:["This is a real"," ",n.jsx("a",{href:cbe,rel:"nofollow noopener noreferrer",target:"_blank",children:"Work Louder Codex Micro"}),", not a rendered stand-in. The map combines the live Codex layout with the current pinned-task order, so every verified physical assignment is shown in plain language."]}),n.jsx("p",{className:"sk-lede",children:"The six agent keys are dynamic: changing the first six pinned tasks changes which conversations those keys open."}),n.jsxs("p",{className:"sk-lede",children:["The microphone behavior required a small interoperability fix because Wispr Flow could not see the Micro's original native mic event."," ",n.jsx("a",{href:"#wispr",children:"See the custom microphone setup →"})]})]})]})})]})]})}const _e="Geist, Inter, system-ui, sans-serif";function gbe(){return n.jsxs("svg",{viewBox:"0 0 1080 220",role:"img","aria-label":"Three layers: human control, CoS coordination, specialist execution, all reading the GTM Brain",children:[n.jsx("defs",{children:n.jsx("marker",{id:"arrow-layers",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"7",markerHeight:"7",orient:"auto",children:n.jsx("path",{d:"M0,0 L10,5 L0,10 z",fill:"#94a3b8"})})}),n.jsx("rect",{x:"40",y:"36",width:"220",height:"148",rx:"12",fill:"#fff",stroke:"#E2E7ED"}),n.jsx("text",{x:"150",y:"68",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#64748b",fontFamily:_e,children:"HUMAN CONTROL"}),n.jsx("text",{x:"150",y:"96",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"Principal"}),n.jsx("text",{x:"150",y:"118",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:"Goals · priorities"}),n.jsx("text",{x:"150",y:"140",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:"Approvals"}),n.jsx("text",{x:"150",y:"162",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:_e,children:"Accountability stays here"}),n.jsx("line",{x1:"260",y1:"110",x2:"318",y2:"110",stroke:"#94a3b8",strokeWidth:"1.5",markerEnd:"url(#arrow-layers)"}),n.jsx("rect",{x:"320",y:"36",width:"240",height:"148",rx:"12",fill:"#e8f5f0",stroke:"#509A79"}),n.jsx("text",{x:"440",y:"68",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#2d6a52",fontFamily:_e,children:"COORDINATION"}),n.jsx("text",{x:"440",y:"96",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"Chief of Staff"}),n.jsx("text",{x:"440",y:"118",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:_e,children:"Route · verify · report"}),n.jsx("text",{x:"440",y:"140",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:_e,children:"Stay available"}),n.jsx("text",{x:"440",y:"162",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:_e,children:"Not a generalist executor"}),n.jsx("line",{x1:"560",y1:"110",x2:"618",y2:"110",stroke:"#94a3b8",strokeWidth:"1.5",markerEnd:"url(#arrow-layers)"}),n.jsx("rect",{x:"620",y:"36",width:"220",height:"148",rx:"12",fill:"#fff",stroke:"#E2E7ED"}),n.jsx("text",{x:"730",y:"68",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#64748b",fontFamily:_e,children:"SPECIALIST EXECUTION"}),n.jsx("text",{x:"730",y:"96",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"Domain owners"}),n.jsx("text",{x:"730",y:"118",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:"Revenue · Finance · CRM"}),n.jsx("text",{x:"730",y:"140",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:"Security · Engineering"}),n.jsx("text",{x:"730",y:"162",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:_e,children:"Narrow charters, clear tools"}),n.jsx("rect",{x:"880",y:"36",width:"160",height:"148",rx:"12",fill:"#F5F7FA",stroke:"#E2E7ED"}),n.jsx("text",{x:"960",y:"80",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#64748b",fontFamily:_e,children:"READS"}),n.jsx("text",{x:"960",y:"112",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"GTM Brain"}),n.jsx("text",{x:"960",y:"140",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:_e,children:"Shared context."}),n.jsx("text",{x:"960",y:"158",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:_e,children:"Not rebuilt here."})]})}function ybe(){const e=[{n:"1",t:"Receive",d:"Desired outcome"},{n:"2",t:"Route",d:"Owner of the domain"},{n:"3",t:"Stay open",d:"Human can still ask"},{n:"4",t:"Inspect",d:"Artifact or live result"},{n:"5",t:"Report",d:"Only what was verified"}];return n.jsxs("svg",{viewBox:"0 0 1080 180",role:"img","aria-label":"Dispatch loop: receive, route, stay available, inspect evidence, report what was verified",children:[n.jsx("defs",{children:n.jsx("marker",{id:"arrow-dispatch",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"7",markerHeight:"7",orient:"auto",children:n.jsx("path",{d:"M0,0 L10,5 L0,10 z",fill:"#509A79"})})}),e.map((t,a)=>{const i=36+a*208;return n.jsxs("g",{children:[n.jsx("rect",{x:i,y:"28",width:"188",height:"124",rx:"12",fill:a===4?"#e8f5f0":"#fff",stroke:a===4?"#509A79":"#E2E7ED"}),n.jsx("text",{x:i+94,y:"56",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#509A79",fontFamily:_e,children:t.n}),n.jsx("text",{x:i+94,y:"86",textAnchor:"middle",fontSize:"15",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:t.t}),n.jsx("text",{x:i+94,y:"112",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:t.d}),a<e.length-1?n.jsx("line",{x1:i+188,y1:"90",x2:i+208,y2:"90",stroke:"#509A79",strokeWidth:"1.6",markerEnd:"url(#arrow-dispatch)"}):null]},t.n)})]})}function bbe(){return n.jsxs("svg",{viewBox:"0 0 1080 220",role:"img","aria-label":"Daily dream job: vault after a day of work, dream job, write-back, next session",children:[n.jsx("defs",{children:n.jsx("marker",{id:"arrow-dream",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"7",markerHeight:"7",orient:"auto",children:n.jsx("path",{d:"M0,0 L10,5 L0,10 z",fill:"#509A79"})})}),n.jsx("rect",{x:"40",y:"36",width:"210",height:"148",rx:"12",fill:"#fff",stroke:"#E2E7ED"}),n.jsx("text",{x:"145",y:"68",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#64748b",fontFamily:_e,children:"AFTER A DAY"}),n.jsx("text",{x:"145",y:"96",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"Inbox · notes"}),n.jsx("text",{x:"145",y:"118",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:"Live queries"}),n.jsx("text",{x:"145",y:"140",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:"Unverified items"}),n.jsx("text",{x:"145",y:"162",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:_e,children:"Stale notes possible"}),n.jsx("line",{x1:"250",y1:"110",x2:"308",y2:"110",stroke:"#509A79",strokeWidth:"1.8",markerEnd:"url(#arrow-dream)"}),n.jsx("text",{x:"279",y:"98",textAnchor:"middle",fontSize:"10",fill:"#2d6a52",fontFamily:_e,children:"nightly"}),n.jsx("rect",{x:"310",y:"36",width:"230",height:"148",rx:"12",fill:"#fff",stroke:"#509A79",strokeDasharray:"5 4"}),n.jsx("text",{x:"425",y:"68",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#509A79",fontFamily:_e,children:"DREAM JOB"}),n.jsx("text",{x:"425",y:"96",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"Summarize"}),n.jsx("text",{x:"425",y:"118",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:_e,children:"Correct stale notes"}),n.jsx("text",{x:"425",y:"140",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:_e,children:"Promote verified items"}),n.jsx("text",{x:"425",y:"162",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:_e,children:"Does not start new work"}),n.jsx("line",{x1:"540",y1:"110",x2:"598",y2:"110",stroke:"#509A79",strokeWidth:"1.8",markerEnd:"url(#arrow-dream)"}),n.jsx("text",{x:"569",y:"98",textAnchor:"middle",fontSize:"10",fill:"#2d6a52",fontFamily:_e,children:"writes"}),n.jsx("rect",{x:"600",y:"36",width:"210",height:"148",rx:"12",fill:"#e8f5f0",stroke:"#509A79"}),n.jsx("text",{x:"705",y:"68",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#2d6a52",fontFamily:_e,children:"WRITE BACK"}),n.jsx("text",{x:"705",y:"96",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"AGENTS.md"}),n.jsx("text",{x:"705",y:"118",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:_e,children:"Hard rules · knowledge"}),n.jsx("text",{x:"705",y:"140",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:_e,children:"Dream log"}),n.jsx("text",{x:"705",y:"162",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:_e,children:"Vault is now current"}),n.jsx("line",{x1:"810",y1:"110",x2:"868",y2:"110",stroke:"#509A79",strokeWidth:"1.8",markerEnd:"url(#arrow-dream)"}),n.jsx("text",{x:"839",y:"98",textAnchor:"middle",fontSize:"10",fill:"#2d6a52",fontFamily:_e,children:"next day"}),n.jsx("rect",{x:"870",y:"36",width:"170",height:"148",rx:"12",fill:"#fff",stroke:"#E2E7ED"}),n.jsx("text",{x:"955",y:"88",textAnchor:"middle",fontSize:"13",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"Next session"}),n.jsx("text",{x:"955",y:"114",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:"Reads the"}),n.jsx("text",{x:"955",y:"134",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:"updated vault"})]})}function vbe(){return n.jsxs("svg",{viewBox:"0 0 1080 260",role:"img","aria-label":"Weekly share from a private vault through a portable-fact filter into Notion that other Chiefs of Staff pull from",children:[n.jsxs("defs",{children:[n.jsx("marker",{id:"arrow2",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"7",markerHeight:"7",orient:"auto",children:n.jsx("path",{d:"M0,0 L10,5 L0,10 z",fill:"#94a3b8"})}),n.jsx("marker",{id:"arrow2-purple",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"7",markerHeight:"7",orient:"auto",children:n.jsx("path",{d:"M0,0 L10,5 L0,10 z",fill:"#835CE0"})})]}),n.jsx("rect",{x:"40",y:"36",width:"220",height:"148",rx:"12",fill:"#e8f5f0",stroke:"#509A79"}),n.jsx("text",{x:"150",y:"68",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#2d6a52",fontFamily:_e,children:"YOUR VAULT"}),n.jsx("text",{x:"150",y:"96",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"Private canon"}),n.jsx("text",{x:"150",y:"118",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:"Dream log · hard rules"}),n.jsx("text",{x:"150",y:"140",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:"failure modes · skills"}),n.jsx("text",{x:"150",y:"162",textAnchor:"middle",fontSize:"11",fill:"#2d6a52",fontFamily:_e,children:"Customers stay here"}),n.jsx("line",{x1:"260",y1:"110",x2:"318",y2:"110",stroke:"#94a3b8",strokeWidth:"1.5",markerEnd:"url(#arrow2)"}),n.jsx("text",{x:"290",y:"98",textAnchor:"middle",fontSize:"10",fill:"#64748b",fontFamily:_e,children:"weekly"}),n.jsx("rect",{x:"320",y:"36",width:"240",height:"148",rx:"12",fill:"#fff",stroke:"#835CE0"}),n.jsx("text",{x:"440",y:"68",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#835CE0",fontFamily:_e,children:"SHARE JOB"}),n.jsx("text",{x:"440",y:"96",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"Portable-fact filter"}),n.jsx("text",{x:"440",y:"118",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:_e,children:"Keep operating rules"}),n.jsx("text",{x:"440",y:"140",textAnchor:"middle",fontSize:"12",fill:"#A6383C",fontFamily:_e,children:"Drop names, numbers, people"}),n.jsx("text",{x:"440",y:"162",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:_e,children:"Unsure? Hold it back."}),n.jsx("line",{x1:"560",y1:"110",x2:"618",y2:"110",stroke:"#835CE0",strokeWidth:"1.8",markerEnd:"url(#arrow2-purple)"}),n.jsx("text",{x:"590",y:"98",textAnchor:"middle",fontSize:"10",fill:"#835CE0",fontFamily:_e,children:"publish"}),n.jsx("rect",{x:"620",y:"36",width:"220",height:"148",rx:"12",fill:"#F5F7FA",stroke:"#835CE0"}),n.jsx("text",{x:"730",y:"68",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#835CE0",fontFamily:_e,children:"NOTION"}),n.jsx("text",{x:"730",y:"96",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"Company CoS board"}),n.jsx("text",{x:"730",y:"118",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:"Dated portable facts"}),n.jsx("text",{x:"730",y:"140",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:_e,children:"Why it matters · vault path"}),n.jsx("text",{x:"730",y:"162",textAnchor:"middle",fontSize:"11",fill:"#835CE0",fontFamily:_e,children:"Readable by every CoS"}),n.jsx("line",{x1:"840",y1:"110",x2:"898",y2:"110",stroke:"#94a3b8",strokeWidth:"1.5",markerEnd:"url(#arrow2)"}),n.jsx("text",{x:"870",y:"98",textAnchor:"middle",fontSize:"10",fill:"#64748b",fontFamily:_e,children:"pull"}),n.jsx("rect",{x:"900",y:"36",width:"140",height:"148",rx:"12",fill:"#fff",stroke:"#E2E7ED"}),n.jsx("text",{x:"970",y:"84",textAnchor:"middle",fontSize:"13",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"Other"}),n.jsx("text",{x:"970",y:"104",textAnchor:"middle",fontSize:"13",fontWeight:"700",fill:"#0C1E20",fontFamily:_e,children:"CoS agents"}),n.jsx("text",{x:"970",y:"136",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:_e,children:"into their"}),n.jsx("text",{x:"970",y:"154",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:_e,children:"own inbox"}),n.jsx("text",{x:"540",y:"220",textAnchor:"middle",fontSize:"13",fill:"#0C1E20",fontFamily:_e,children:"Learnings move. Canon does not fork. Private facts stay in the originating vault."})]})}const yf="/resources/skills/chief-of-staff-setup/logos";function xbe(){return n.jsxs("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[n.jsx("rect",{x:"3",y:"6",width:"18",height:"12",rx:"1.5",fill:"none",stroke:"#509A79",strokeWidth:"1.8"}),n.jsx("path",{d:"M6 15 V 9 L 8.5 12 L 11 9 V 15",fill:"none",stroke:"#509A79",strokeWidth:"1.6",strokeLinejoin:"round"}),n.jsx("path",{d:"M16 9 V 15 M14 13 L 16 15 L 18 13",fill:"none",stroke:"#509A79",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})]})}function wbe(){return n.jsxs
7665("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"#347BD1",strokeWidth:"1.8","aria-hidden":"true",children:[n.jsx("rect",{x:"4",y:"6",width:"16",height:"12",rx:"2"}),n.jsx("path",{d:"M4 8l8 6 8-6"})]})}function kbe(){return n.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"#347BD1",strokeWidth:"1.8","aria-hidden":"true",children:[n.jsx("rect",{x:"4",y:"5",width:"16",height:"15",rx:"2"}),n.jsx("path",{d:"M4 10h16M8 3v4M16 3v4"})]})}function jbe(){return n.jsx("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:n.jsx("path",{fill:"#0C1E20",d:"M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v13.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632z"})})}const Sbe=[{label:"Harnesses",items:[{name:"Cursor",src:`${yf}/cursor.png`},{name:"Codex",src:`${yf}/codex.svg`},{name:"Claude",src:`${yf}/claude.svg`}]},{label:"Prerequisite",items:[{name:"GTM Brain",src:`${yf}/obsidian.svg`},{name:"AGENTS.md",icon:n.jsx(xbe,{})}]},{label:"Live systems",items:[{name:"Email",icon:n.jsx(wbe,{})},{name:"Calendar",icon:n.jsx(kbe,{})},{name:"Upside GTM data",src:`${yf}/upside_symbol_positive_cropped_150px.png`}]},{label:"Optional share",items:[{name:"Notion",icon:n.jsx(jbe,{})}]}],Cbe=[{role:"Chief of Staff",owns:"Triage, routing, verification, synthesis",not:"Substantive specialist execution"},{role:"Revenue",owns:"Pipeline strategy, qualification, account research",not:"CRM schema and permission changes"},{role:"Customer",owns:"Health, renewals, support signals, retention",not:"Contract interpretation and product implementation"},{role:"Finance",owns:"Cash, forecasting, budgets, accounting analysis",not:"Legal interpretation and people-policy decisions"},{role:"CRM admin",owns:"Records, schema, validation, safe data operations",not:"Revenue strategy or platform administration"},{role:"Security",owns:"Risk, controls, technical reviews",not:"Device admin, legal advice, application fixes"}
7665,{role:"Engineering",owns:"Code, integrations, infrastructure, testing",not:"Agent-platform config and business-policy approval"},{role:"Platform owner",owns:"Tasks, skills, connectors, permissions, schedules",not:"Business-domain execution"}],Abe=[{action:"Read-only research",policy:"Allowed within role scope",need:"Record sources and coverage gaps"},{action:"Internal drafting",policy:"Allowed",need:"Label assumptions and keep a review step"},{action:"External communication",policy:"Human approval or bounded authority",need:"Verify destination and content immediately before send"},{action:"Financially scaled activity",policy:"Approval required",need:"State per-run and recurring cost first"},{action:"Credentials or security settings",policy:"Controlled change",need:"Least privilege, backup, change review, readback"},{action:"Destructive operations",policy:"Explicit itemized confirmation",need:"Confirm exact targets in the current interaction"}],Tbe=["Confirm the GTM Brain exists: shared working context, canon owner, source hierarchy, owned-memory areas.","List recurring decisions and actions worth owning.","Create a small role map: CoS, two or three specialists, one platform owner.","Write charters: mission, exclusions, tools, safety boundary, memory, handoff targets.","Initialize tasks with orientation-only startup turns.","Adopt the handoff card for every substantive cross-agent request.","Set the verification standard before connecting high-impact tools.","Run a few real workflows. Automate only after the manual loop and its artifact contract are proven."];function _be({kit:e,pane:t}){return t==="skills"?n.jsx(tb,{kit:e}):n.jsxs("div",{children:[n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"The Stack"})}),n.jsx("div",{className:"sk-card__body",children:n.jsx("ul",{className:"sk-stack sk-stack--wide",children:Sbe.map((a,i)=>n.jsxs("li",{className:i>0?"sk-stack__group sk-stack__group--split":"sk-stack__group",children:[n.jsx("div",{className:"sk-stack__group-label",children:a.label}),n.jsx("div",{className:"sk-stack__icons",children:a.items.map(r=>n.jsxs("div",{className:"sk-stack__tile",children:[n.jsx("div",{className:"sk-stack__icon sk-stack__icon--lg",children:r.src?n.jsx("img",{src:r.src,alt:"",width:32,height:32}):r.icon}),n.jsx("div",{className:"sk-stack__name",children:r.name})]},r.name))})]},a.label))})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Start with the right mental model"})}),n.jsx("div",{className:"sk-diagram",children:n.jsx(gbe,{})}),n.jsx("div",{className:"sk-card__body",children:n.jsx("div",{className:"sk-legend",children:n.jsxs("div",{className:"sk-legend__item",children:[n.jsx("div",{className:"sk-legend__swatch",style:{background:"#509A79"}}),n.jsxs("div",{children:[n.jsx("strong",{children:"Coordination, not execution"}),n.jsx("span",{children:"If a specialist owns CRM configuration or security review, the CoS routes there instead of acting directly. Responsibility stays legible."})]})]})})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Give the CoS a narrow mandate"})}),n.jsx("div",{className:"sk-card__body",children:n.jsxs("div",{className:"sk-rules",children:[n.jsxs("div",{className:"sk-rule sk-rule--ok",children:[n.jsx("h3",{children:"Does"}),n.jsx("p",{children:"Triage the outcome, route to the owner, create a bounded task when no role fits, verify the artifact, and report what was inspected — plus the gaps that still need a human."})]}),n.jsxs("div",{className:"sk-rule sk-rule--no",children:[n.jsx("h3",{children:"Does not"}),n.jsx("p",{children:"Silently perform specialist work, approve its own high-impact actions, override a safety policy, or treat a status label as proof that the requested artifact exists."})]})]})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Design roles around decisions, not tools"})}),n.jsx("div",{className:"sk-card__body",children:n.jsxs("table",{className:"sk-table",children:[n.jsx("thead",{children:n.jsxs("tr",{children:[n.jsx("th",{children:"Role"}),n.jsx("th",{children:"Owns"}),n.jsx("th",{children:"Does not own"})]})}),n.jsx("tbody",{children:Cbe.map(a=>n.jsxs("tr",{children:[n.jsx("td",{children:a.role}),n.jsx("td",{children:a.owns}),n.jsx("td",{children:a.not})]},a.role))})]})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Make the handoff a complete work packet"})}),n.jsx("div",{className:"sk-card__body",children:n.jsxs("div",{className:"sk-rules",children:[n.jsxs("div",{className:"sk-rule",children:[n.jsx("h3",{children:"Handoff"}),n.jsx("p",{children:"Desired outcome, exact target and context, permission boundary, acceptance criteria, prior decisions and open gaps. The specialist should be able to work without inventing business intent."})]}),n.jsxs("div",{className:"sk-rule",children:[n.jsx("h3",{children:"Completion report"}),n.jsx("p",{children:"Outcome, evidence, exact changes, exceptions, open gaps. This is what the CoS verifies. A dispatch acknowledgment is not evidence of completion."})]})]})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Dispatch, then verify"})}),n.jsx("div",{className:"sk-diagram",children:n.jsx(ybe,{})}),n.jsx("div",{className:"sk-card__body",children:n.jsxs("div",{className:"sk-legend",children:[n.jsxs("div",{className:"sk-legend__item",children:[n.jsx("div",{className:"sk-legend__swatch",style:{background:"#94a3b8"}}),n.jsxs("div",{children:[n.jsx("strong",{children:"Dispatched / in progress"}),n.jsx("span",{children:"The task was handed off, or an agent is 
7665working. Neither proves the requested artifact exists."})]})]}),n.jsxs("div",{className:"sk-legend__item",children:[n.jsx("div",{className:"sk-legend__swatch",style:{background:"#509A79"}}),n.jsxs("div",{children:[n.jsx("strong",{children:"Verified complete"}),n.jsx("span",{children:"The outcome was inspected: a cited deliverable, a live setting read back, a record re-read, a test that passed. Report only that."})]})]})]})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Define approval boundaries before connecting tools"})}),n.jsx("div",{className:"sk-card__body",children:n.jsxs("table",{className:"sk-table",children:[n.jsx("thead",{children:n.jsxs("tr",{children:[n.jsx("th",{children:"Action class"}),n.jsx("th",{children:"Default policy"}),n.jsx("th",{children:"Typical requirement"})]})}),n.jsx("tbody",{children:Abe.map(a=>n.jsxs("tr",{children:[n.jsx("td",{children:a.action}),n.jsx("td",{children:a.policy}),n.jsx("td",{children:a.need})]},a.action))})]})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"How learnings move across the company"})}),n.jsx("div",{className:"sk-diagram",children:n.jsx(vbe,{})}),n.jsx("div",{className:"sk-card__body",children:n.jsxs("div",{className:"sk-rules",children:[n.jsxs("div",{className:"sk-rule sk-rule--ok",children:[n.jsx("h3",{children:"Share"}),n.jsx("p",{children:"Operating rules, failure modes and the protocol that now prevents them, skill patterns, source-guide gotchas, open questions another CoS might have answered."})]}),n.jsxs("div",{className:"sk-rule sk-rule--no",children:[n.jsx("h3",{children:"Never share"}),n.jsx("p",{children:"Customer names, people, emails, pipeline amounts, forecasts, runway, credentials, internal IDs, deal strategy, raw notes. If you are unsure, hold it back."})]})]})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Implement in stages"})}),n.jsx("div",{className:"sk-card__body",children:n.jsx("ol",{className:"sk-steps",children:Tbe.map(a=>n.jsx("li",{children:a},a))})})]})]})}const Ve="Geist, Inter, system-ui, sans-serif";function Mbe(){return n.jsxs("svg",{viewBox:"0 0 1080 220",role:"img","aria-label":"Context building: ask for named sources, read them, rewrite into initial canon",children:[n.jsx("defs",{children:n.jsx("marker",{id:"arrow-brain-init",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"7",markerHeight:"7",orient:"auto",children:n.jsx("path",{d:"M0,0 L10,5 L0,10 z",fill:"#509A79"})})}),n.jsx("rect",{x:"40",y:"36",width:"230",height:"148",rx:"12",fill:"#fff",stroke:"#E2E7ED"}),n.jsx("text",{x:"155",y:"68",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#64748b",fontFamily:Ve,children:"ASK"}),n.jsx("text",{x:"155",y:"96",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:Ve,children:"Named documents"}),n.jsx("text",{x:"155",y:"118",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:Ve,children:"Policies · playbooks"}),n.jsx("text",{x:"155",y:"140",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:Ve,children:"CRM · spoken context"}),n.jsx("text",{x:"155",y:"162",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:Ve,children:"Do not scrape the world."}),n.jsx("line",{x1:"270",y1:"110",x2:"328",y2:"110",stroke:"#509A79",strokeWidth:"1.8",markerEnd:"url(#arrow-brain-init)"}),n.jsx("text",{x:"299",y:"98",textAnchor:"middle",fontSize:"10",fill:"#2d6a52",fontFamily:Ve,children:"read"}),n.jsx("rect",{x:"330",y:"36",width:"230",height:"148",rx:"12",fill:"#fff",stroke:"#509A79",strokeDasharray:"5 4"}),n.jsx("text",{x:"445",y:"68",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#509A79",fontFamily:Ve,children:"RECONCILE"}),n.jsx("text",{x:"445",y:"96",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:Ve,children:"Only what they named"}),n.jsx("text",{x:"445",y:"118",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:Ve,children:"Preserve contradictions"}),n.jsx("text",{x:"445",y:"140",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:Ve,children:"Write a source guide"}),n.jsx("text",{x:"445",y:"162",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:Ve,children:"before the first query"}),n.jsx("line",{x1:"560",y1:"110",x2:"618",y2:"110",stroke:"#509A79",strokeWidth:"1.8",markerEnd:"url(#arrow-brain-init)"}),n.jsx("text",{x:"589",y:"98",textAnchor:"middle",fontSize:"10",fill:"#2d6a52",fontFamily:Ve,children:"rewrite"}),n.jsx("rect",{x:"620",y:"36",width:"230",height:"148",rx:"12",fill:"#e8f5f0",stroke:"#509A79"}),n.jsx("text",{x:"735",y:"68",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#2d6a52",fontFamily:Ve,children:"INITIAL CANON"}),n.jsx("text",{x:"735",y:"96",textAnchor:"middle",fontSize:"14",fontWeight:"700",fill:"#0C1E20",fontFamily:Ve,children:"ICP · definitions"}),n.jsx("text",{x:"735",y:"118",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:Ve,children:"Source guides · rules"}),n.jsx("text",{x:"735",y:"140",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:Ve,children:"Provenance on claims"}),n.jsx("text",{x:"735",y:"162",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:Ve,children:"Gaps stay unverified"}),n.jsx("line",{x1:"850",y1:"110",x2:"908",y2:"110",stroke:"#509A79",strokeWidth:"1.8",markerEnd:"url(#arrow-brain-init)"}),n.jsx("text",{x:"879",y:"98",textAnchor:"middle",fontSize:"10",fill:"#2d6a52",fontFamily:Ve,children:"then"}),n.jsx("rect",{x:"910",y:"36",width:"130",height:"148",rx:"12",fill:"#fff",stroke:"#E2E7ED"}),n.jsx("text",{x:"975",y:"88",textAnchor:"middle",fontSize:"13",fontWeight:"700",fill:"#0C1E20",fontFamily:Ve,children:"Working"}),n.jsx("text",{x:"975",y:"108",textAnchor:"middle",fontSize:"13",fontWeight:"700",fill:"#0C1E20",fontFamily:Ve,children:"context"}),n.jsx("text",{x:"975",y:"140",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:Ve,children:"Ready to"}),n.jsx("text",{x:"975",y:"158",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:Ve,children:"ground work"})]})}function Ebe(){return n.jsxs("svg",{viewBox:"0 0 1080 280",role:"img","aria-label":"GTM Brain folder: Home, Canon, Playbooks, Domains, Inbox, with live systems outside",children:[n.jsx("defs",{children:n.jsx("marker",{id:"arrow-brain-arch",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"7",markerHeight:"7",orient:"auto",children:n.jsx("path",{d:"M0,0 L10,5 L0,10 z",fill:"#94a3b8"})})}),n.jsx("rect",{x:"40",y:"24",width:"720",height:"232",rx:"12",fill:"#e8f5f0",stroke:"#509A79"}),n.jsx("text",{x:"400",y:"52",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.1em",fill:"#2d6a52",fontFamily:Ve,children:"GTM BRAIN · SHARED WORKING CONTEXT"}),n.jsx("rect",{x:"64",y:"72",width:"160",height:"56",rx:"8",fill:"#fff",stroke:"#509A79"}
7665),n.jsx("text",{x:"144",y:"96",textAnchor:"middle",fontSize:"13",fontWeight:"700",fill:"#0C1E20",fontFamily:Ve,children:"Home.md"}),n.jsx("text",{x:"144",y:"114",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:Ve,children:"the map"}),n.jsx("rect",{x:"248",y:"72",width:"160",height:"56",rx:"8",fill:"#fff",stroke:"#509A79"}),n.jsx("text",{x:"328",y:"96",textAnchor:"middle",fontSize:"13",fontWeight:"700",fill:"#0C1E20",fontFamily:Ve,children:"Canon/"}),n.jsx("text",{x:"328",y:"114",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:Ve,children:"shared, curated"}),n.jsx("rect",{x:"432",y:"72",width:"160",height:"56",rx:"8",fill:"#fff",stroke:"#509A79"}),n.jsx("text",{x:"512",y:"96",textAnchor:"middle",fontSize:"13",fontWeight:"700",fill:"#0C1E20",fontFamily:Ve,children:"Playbooks/"}),n.jsx("text",{x:"512",y:"114",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:Ve,children:"one procedure, one home"}),n.jsx("rect",{x:"616",y:"72",width:"120",height:"56",rx:"8",fill:"#fff",stroke:"#509A79"}),n.jsx("text",{x:"676",y:"96",textAnchor:"middle",fontSize:"13",fontWeight:"700",fill:"#0C1E20",fontFamily:Ve,children:"Inbox/"}),n.jsx("text",{x:"676",y:"114",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:Ve,children:"not yet canon"}),n.jsx("rect",{x:"64",y:"152",width:"328",height:"80",rx:"8",fill:"#fff",stroke:"#E2E7ED"}),n.jsx("text",{x:"228",y:"178",textAnchor:"middle",fontSize:"13",fontWeight:"700",fill:"#0C1E20",fontFamily:Ve,children:"Domains/"}),n.jsx("text",{x:"228",y:"198",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:Ve,children:"Revenue · Marketing · Customer · Ops"}),n.jsx("text",{x:"228",y:"216",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:Ve,children:"owned working memory, dated logs"}),n.jsx("rect",{x:"412",y:"152",width:"324",height:"80",rx:"8",fill:"#fff",stroke:"#E2E7ED"}),n.jsx("text",{x:"574",y:"178",textAnchor:"middle",fontSize:"13",fontWeight:"700",fill:"#0C1E20",fontFamily:Ve,children:"Write path"}),n.jsx("text",{x:"574",y:"198",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:Ve,children:"Domain owners propose"}),n.jsx("text",{x:"574",y:"216",textAnchor:"middle",fontSize:"12",fill:"#2d6a52",fontFamily:Ve,children:"A curator promotes into canon"}),n.jsx("rect",{x:"800",y:"24",width:"240",height:"232",rx:"12",fill:"#fff",stroke:"#E2E7ED"}),n.jsx("text",{x:"920",y:"52",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.1em",fill:"#64748b",fontFamily:Ve,children:"LIVE SYSTEMS · OUTSIDE"}),n.jsx("rect",{x:"824",y:"72",width:"192",height:"36",rx:"6",fill:"#F5F7FA",stroke:"#E2E7ED"}),n.jsx("text",{x:"920",y:"95",textAnchor:"middle",fontSize:"12",fill:"#0C1E20",fontFamily:Ve,children:"CRM · pipeline state"}),n.jsx("rect",{x:"824",y:"118",width:"192",height:"36",rx:"6",fill:"#F5F7FA",stroke:"#E2E7ED"}),n.jsx("text",{x:"920",y:"141",textAnchor:"middle",fontSize:"12",fill:"#0C1E20",fontFamily:Ve,children:"Email · Calendar"}),n.jsx("rect",{x:"824",y:"164",width:"192",height:"36",rx:"6",fill:"#F5F7FA",stroke:"#E2E7ED"}),n.jsx("text",{x:"920",y:"187",textAnchor:"middle",fontSize:"12",fill:"#0C1E20",fontFamily:Ve,children:"Upside · GTM evidence"}),n.jsx("text",{x:"920",y:"228",textAnchor:"middle",fontSize:"11",fill:"#64748b",fontFamily:Ve,children:"Query. Do not mirror."}),n.jsx("line",{x1:"760",y1:"140",x2:"798",y2:"140",stroke:"#94a3b8",strokeWidth:"1.5",markerEnd:"url(#arrow-brain-arch)"})]})}function Rbe(){const e=[{n:"1",t:"Orient",d:"Canon + owned context"},{n:"2",t:"Verify",d:"Live system of record"},{n:"3",t:"Act",d:"Approved procedure"},{n:"4",t:"Capture",d:"Outcome + open gap"},{n:"5",t:"Promote",d:"Inbox → curator"},{n:"6",t:"Read back",d:"The write exists"}];return n.jsxs("svg",{viewBox:"0 0 1080 180",role:"img","aria-label":"Operating loop: orient, verify, act, capture, promote, read back",children:[n.jsx("defs",{children:n.jsx("marker",{id:"arrow-brain-loop",viewBox:"0 0 10 10",refX:"9",refY:"5",markerWidth:"7",markerHeight:"7",orient:"auto",children:n.jsx("path",{d:"M0,0 L10,5 L0,10 z",fill:"#509A79"})})}),e.map((t,a)=>{const i=28+a*176;return n.jsxs("g",{children:[n.jsx("rect",{x:i,y:"28",width:"156",height:"124",rx:"12",fill:a===5?"#e8f5f0":"#fff",stroke:a===5?"#509A79":"#E2E7ED"}),n.jsx("text",{x:i+78,y:"56",textAnchor:"middle",fontSize:"10",fontWeight:"700",letterSpacing:"0.08em",fill:"#509A79",fontFamily:Ve,children:t.n}),n.jsx("text",{x:i+78,y:"86",textAnchor:"middle",fontSize:"15",fontWeight:"700",fill:"#0C1E20",fontFamily:Ve,children:t.t}),n.jsx("text",{x:i+78,y:"112",textAnchor:"middle",fontSize:"12",fill:"#64748b",fontFamily:Ve,children:t.d}
7665),a<e.length-1?n.jsx("line",{x1:i+156,y1:"90",x2:i+176,y2:"90",stroke:"#509A79",strokeWidth:"1.6",markerEnd:"url(#arrow-brain-loop)"}):null]},t.n)})]})}const uh="/resources/skills/chief-of-staff-setup/logos";function Nbe(){return n.jsxs("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[n.jsx("rect",{x:"3",y:"6",width:"18",height:"12",rx:"1.5",fill:"none",stroke:"#509A79",strokeWidth:"1.8"}),n.jsx("path",{d:"M6 15 V 9 L 8.5 12 L 11 9 V 15",fill:"none",stroke:"#509A79",strokeWidth:"1.6",strokeLinejoin:"round"}),n.jsx("path",{d:"M16 9 V 15 M14 13 L 16 15 L 18 13",fill:"none",stroke:"#509A79",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})]})}function Obe(){return n.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"#347BD1",strokeWidth:"1.8","aria-hidden":"true",children:[n.jsx("rect",{x:"4",y:"6",width:"16",height:"12",rx:"2"}),n.jsx("path",{d:"M4 8l8 6 8-6"})]})}function Pbe(){return n.jsxs("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"#347BD1",strokeWidth:"1.8","aria-hidden":"true",children:[n.jsx("rect",{x:"4",y:"5",width:"16",height:"15",rx:"2"}),n.jsx("path",{d:"M4 10h16M8 3v4M16 3v4"})]})}const r9="https://obsidian.md/",Ibe=[{label:"Workspace",items:[{name:"Obsidian vault",src:`${uh}/obsidian.svg`},{name:"AGENTS.md",icon:n.jsx(Nbe,{})}]},{label:"Harnesses",items:[{name:"Cursor",src:`${uh}/cursor.png`},{name:"Codex",src:`${uh}/codex.svg`},{name:"Claude",src:`${uh}/claude.svg`}]},{label:"Evidence, not the brain",items:[{name:"Email",icon:n.jsx(Obe,{})},{name:"Calendar",icon:n.jsx(Pbe,{})},{name:"Upside GTM data",src:`${uh}/upside_symbol_positive_cropped_150px.png`}]}],Dbe=[{name:"System of record",use:"Current state and transactions",trust:"Verify live before quoting volatile values"},{name:"Curated canon",use:"Durable definitions, rules, decisions",trust:"Read first. Update through a curator."},{name:"Procedures",use:"Repeatable execution steps",trust:"One versioned home, not copied into notes"},{name:"Working notes",use:"Domain context and observations",trust:"Scoped, dated, not automatically canonical"},{name:"Raw evidence",use:"Calls, email, research, exports",trust:"Cite it. Summarize only the durable conclusion"}];function Wbe({kit:e,pane:t}){return t==="skills"?n.jsx(tb,{kit:e,extraActions:n.jsxs("a",{className:"sk-btn",href:r9,target:"_blank",rel:"nofollow noopener noreferrer",children:[n.jsx("img",{src:`${uh}/obsidian.svg`,alt:"",width:16,height:16}),"Get Obsidian"]}),lede:n.jsxs(n.Fragment,{children:["The vault is a local markdown folder."," ",n.jsx("a",{href:r9,rel:"nofollow noopener noreferrer",target:"_blank",children:"Download Obsidian"}
7665)," ","if you need it. Then unzip the kit, copy the templates into the vault, and start every session from the vault root. Ask for named sources before writing canon. Gaps stay unverified until you fill them. The kit is markdown only and contains no private company data."]})}):n.jsxs("div",{children:[n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"What a GTM Brain is"})}),n.jsxs("div",{className:"sk-card__body",children:[n.jsx("p",{className:"sk-lede",children:"Most GTM teams do not have a shortage of information. They have a shortage of context that is trustworthy, current, and usable at the moment of action. A GTM Brain is the maintained map above your systems of record."}),n.jsxs("div",{className:"sk-rules",children:[n.jsxs("div",{className:"sk-rule sk-rule--ok",children:[n.jsx("h3",{children:"It is"}),n.jsx("p",{children:"A navigable layer for how the company sells, who it serves, what terms mean, which sources are authoritative, what has already been decided, and where uncertainty remains."})]}),n.jsxs("div",{className:"sk-rule sk-rule--no",children:[n.jsx("h3",{children:"It is not"}),n.jsx("p",{children:"A CRM replacement, a transcript archive, a folder of exports, an automation engine, or proof that a fact is current because it appears in a document."})]})]})]})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"The Stack"})}),n.jsx("div",{className:"sk-card__body",children:n.jsx("ul",{className:"sk-stack sk-stack--wide",children:Ibe.map((a,i)=>n.jsxs("li",{className:i>0?"sk-stack__group sk-stack__group--split":"sk-stack__group",children:[n.jsx("div",{className:"sk-stack__group-label",children:a.label}),n.jsx("div",{className:"sk-stack__icons",children:a.items.map(r=>n.jsxs("div",{className:"sk-stack__tile",children:[n.jsx("div",{className:"sk-stack__icon sk-stack__icon--lg",children:r.src?n.jsx("img",{src:r.src,alt:"",width:32,height:32}):r.icon}),n.jsx("div",{className:"sk-stack__name",children:r.name})]},r.name))})]},a.label))})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"How the folder is owned"})}),n.jsx("div",{className:"sk-diagram",children:n.jsx(Ebe,{})}),n.jsx("div",{className:"sk-card__body",children:n.jsxs("div",{className:"sk-legend",children:[n.jsxs("div",{className:"sk-legend__item",children:[n.jsx("div",{className:"sk-legend__swatch",style:{background:"#509A79"}}),n.jsxs("div",{children:[n.jsx("strong",{children:"Canon"}),n.jsx("span",{children:"The shared, reviewed answers everyone may rely on. A small group curates it. Everyone else proposes."})]})]}),n.jsxs("div",{className:"sk-legend__item",children:[n.jsx("div",{className:"sk-legend__swatch",style:{background:"#94a3b8"}}),n.jsxs("div",{children:[n.jsx("strong",{children:"Live systems sit outside"}),n.jsx("span",{children:"CRM, email, calendar, and GTM data hold mutable truth. The brain stores definitions, pointers, and the judgment that explains how to read them."})]})]})]})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"Start with a source hierarchy"})}),n.jsx("div",{className:"sk-card__body",children:n.jsxs("table",{className:"sk-table",children:[n.jsx("thead",{children:n.jsxs("tr",{children:[n.jsx("th",{children:"Source class"}),n.jsx("th",{children:"Use it for"}),n.jsx("th",{children:"Trust rule"})]})}),n.jsx("tbody",{children:Dbe.map(a=>n.jsxs("tr",{children:[n.jsx("td",{children:a.name}),n.jsx("td",{children:a.use}),n.jsx("td",{children:a.trust})]},a.name))})]})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"How it initializes"})}),n.jsx("div",{className:"sk-diagram",children:n.jsx(Mbe,{})}),n.jsx("div",{className:"sk-card__body",children:n.jsxs("div",{className:"sk-legend",children:[n.jsxs("div",{className:"sk-legend__item",children:[n.jsx("div",{className:"sk-legend__swatch",style:{background:"#94a3b8"}}),n.jsxs("div",{children:[n.jsx("strong",{children:"Ask first"}),n.jsx("span",{children:"Named documents, destinations, and what only the operating owners know. Do not scrape every drive or invent facts the organization has not supplied."})]})]}),n.jsxs("div",{className:"sk-legend__item",children:[n.jsx("div",{className:"sk-legend__swatch",style:{background:"#509A79"}}),n.jsxs("div",{children:[n.jsx("strong",{children:"Rewrite, do not paste"}),n.jsx("span",{children:"One fact, one home, with provenance. Empty and unverified beats invented. A GTM data platform can help find evidence; the brain still owns the judgment."})]})]})]})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"The operating loop"})}),n.jsx("div",{className:"sk-diagram",children:n.jsx(Rbe,{})}),n.jsx("div",{className:"sk-card__body",children:n.jsx("div",{className:"sk-legend",children:n.jsxs("div",{className:"sk-legend__item",children:[n.jsx("div",{className:"sk-legend__swatch",style:{background:"#509A79"}}),n.jsxs("div",{children:[n.jsx("strong",{children:"Read back is part of done"}),n.jsx("span",{children:"A task can look complete while its output was never saved, its update silently failed, or it was written to the wrong place."})]})]})})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"How it stays current"})}),n.jsx("div",{className:"sk-diagram",children:n.jsx(bbe,{})}),n.jsx("div",{className:"sk-card__body",children:n.jsx("div",{className:"sk-legend",children:n.jsxs("div",{className:"sk-legend__item",children:[n.jsx("div",{className:"sk-legend__swatch",style:{background:"#509A79"}}),n.jsxs("div",{children:[n.jsx("strong",{children:"Dream job"}),n.jsx("span",{children:"Scheduled. Reads the day, corrects stale notes, appends the dream log, exits. It does not invent policy or start new work."})]})]})})})]})]})}function zbe({tabs:e,active:t,onChange:a}){return n.jsx("nav",{className:"sk-tabs",role:"tablist",children:e.map(i=>n.jsx("button",{type:"button",role:"tab","aria-selected":i.id===t,className:`sk-tab${i.id===t?" is-active":""}`,onClick:()=>a(i.id),children:i.label},i.id))})}const bf="/resources/skills/website-messaging-audit/logos",Lbe=[{id:"phase-1",num:"01",title:"Crawl the site",desc:"Visits the homepage and main-nav pages the moment your URL arrives. Captures hero, value-prop, audience signals, proof, CTAs, tone, and section order. Pulls live design tokens (Google Fonts, brand colors, button radius) for the mockup phase.",mcps:["Browser MCP"],output:"audit/01-site-crawl.md"},{id:"phase-2",num:"02",title:"Map competitors",desc:"Exa auto-discovers 2–3 competitors from your URL alone, in parallel with the crawl. Multiple-choice prompt to confirm or swap. Then visits each homepage + runs 5 category-language searches.",mcps:["Exa MCP","Browser MCP"],output:"audit/02-competitor-matrix.md"},{id:"phase-3",num:"03",title:"Diagnose gaps",desc:"Compares the site against any docs you provided (sales deck, transcripts, messaging) and the competitor set across 7 dimensions: audie
7665nce, value prop, proof, differentiation, structure, CTA, website-vs-internal mismatch. (8th dimension — data-signal mismatches — unlocks in the optional v2 upgrade.) Pauses for your direction before rewriting.",mcps:["Notion MCP"],output:"audit/03-gap-report.md"},{id:"phase-4",num:"04",title:"Draft rewrites",desc:"3 hero alternatives (outcome-led, audience-led, mechanism-led), value-prop options, “who this is for” line, 3-step “how it works”, proof strip, primary CTA picks. Lifts verbatim customer language from any transcripts you provided. Multiple-choice checkpoint on hero direction, tone, and proof handling.",mcps:[],output:"audit/04-rewrite-drafts.md"},{id:"phase-5",num:"05",title:"Mock the homepage",desc:"Single-file HTML mockup using your live brand tokens. 14 standard sections (hero, trust band, before/after, case studies, FAQ, final CTA). Embeds 5 floating “audit pins” that explain each change on hover. Auto-opens in Cursor’s internal browser as soon as it’s written.",mcps:[],output:"audit/05-homepage-redesign.html"},{id:"phase-6",num:"06",title:"Spec for the designer",desc:"A/B/C hero variants page + a Figma-ready spec doc with full token catalog, per-section copy, layout grids, and an approval checklist. The artifact you actually hand a designer.",mcps:[],output:"audit/06-figma-spec.md"},{id:"phase-7",num:"07",title:"Write 90-day strategy",desc:"Qualitative by default — a 4-program plan (Awareness → Recognition → Champion enablement → Customer-led growth) grounded in your provided docs + recurring customer-language arc. Names what to stop doing, reallocates budget by what isn’t working. Re-runs in data-grounded mode if you accept the optional v2 upgrade in Stage 4.",mcps:[],output:"audit/07-marketing-strategy.md"}],Ube=[{id:"in-site",num:"1",name:"Website URL",tag:"required"},{id:"in-internal",num:"2",name:"Sales deck, transcripts, messaging…",tag:"optional"},{id:"in-data",num:"3",name:"Live data MCPs",tag:"stage 4 upgrade"}],Bbe=[{label:"Required MCPs",items:[{name:"Browser",icon:"globe",detail:"Crawls homepage + nav pages, captures hero, proof, design tokens.",detailKey:"mcp-browser"},{name:"Exa",icon:"exa",detail:"Auto-discovers competitors from your URL + category research.",detailKey:"mcp-exa"}]},{label:"Helpful MCPs (Stages 1–3)",items:[{name:"Notion",icon:"notion",detail:"Ingest the docs you provide (messaging, brand, sales deck).",detailKey:"mcp-notion"}]},{label:"Optional v2 (Stage 4 data upgrade)",items:[{name:"Salesforce",icon:"salesforce",detail:"Funnel shape, ICP signals on closed-won.",detailKey:"mcp-crm"},{name:"HubSpot",icon:"hubspot",detail:"Pipeline + marketing automation engagement.",detailKey:"mcp-crm"},{name:"Upside",icon:"upside",detail:"Unified GTM warehouse joining CRM + email + meeting data.",detailKey:"mcp-upside"},{name:"Gong",icon:"gong",detail:"Verbatim customer-language mining from call transcripts.",detailKey:"mcp-calls"}]},{label:"Models",items:[{name:"Opus 4.7",icon:"anthropic",detail:"Heavy lifting: gap diagnosis, rewrites, HTML mockup, strategy doc."}]},{label:"AI Harness",items:[{name:"Cursor",icon:"cursor",detail:"Project-scoped skill discovery, MCP lifecycle, approval gates.",detailKey:"harness"},{name:"Claude Code",icon:"claude",detail:"Anthropic’s CLI — canonical SKILL.md home.",detailKey:"harness"}]},{label:"Output",items:[{name:"audit/",icon:"markdown",detail:"Up to 11 markdown + HTML files dropped in your repo.",detailKey:"output-audit"}]}],qbe={"phase-1":{title:"Phase 01 — Crawl the site",actions:["Visits homepage and main-nav pages via the browser MCP","Captures hero, value-prop, audience signals, proof, CTAs, tone, section order","Pulls the live design system: fonts, primary + accent colors, button radius, type scale","Saves to audit/01-site-crawl.md — used as source-of-truth for the HTML mockup phase"],context:[["Browser MCP","crawls the site","globe"],["Exa MCP","fallback HTML fetch","exa"]]},"phase-2":{title:"Phase 02 — Map competitors",actions:["Auto-discovers 2–3 competitors via Exa (find_similar from your URL alone)","Pauses for CEO confirmation — swap any, add a 4th if you want","Visits each competitor homepage, captures hero / audie
7665nce / proof / edge","Runs 5 category-language searches: “best [X] for [role]”, “X vs Y”, switch stories","Saves to audit/02-competitor-matrix.md"],context:[["Exa MCP","auto-discover + category research","exa"],["Browser MCP","visit each competitor homepage","globe"]]},"phase-3":{title:"Phase 03 — Diagnose gaps",actions:["Default mode: 7 dimensions — audience, value prop, specificity + proof, differentiation, structure, CTA, website-vs-internal","Compares the site against any docs you provided + the competitor set + category research","Website-vs-internal mismatches are usually the highest-leverage finding (the language exists, just not on the homepage)","Severity-coded: Critical / Important / Polish","Pauses with multiple-choice checkpoint on hero direction, tone, and proof handling","Saves to audit/03-gap-report.md","8th dimension (data-signal mismatches) appended only if you accept the v2 upgrade in Stage 4"],contextLabel:"Pulls signal from",context:[["Notion MCP","ingest provided docs","notion"],["Google Workspace MCP","Google Docs + Drive PDFs","globe"]]},"phase-4":{title:"Phase 04 — Draft rewrites",actions:["3 hero alternatives: outcome-led, audience-led, mechanism-led","Value-prop alternatives: 3-bullet outcome stack, before/after, single big claim","“Who this is for” line, 3-step “How it works”, proof strip, CTA picks","Lifts verbatim customer language from call transcripts where possible","Saves to audit/04-rewrite-drafts.md"]},"phase-5":{title:"Phase 05 — Mock the homepage",actions:["Single-file HTML — inline CSS + JS, no build step, double-click to preview","Uses your live brand tokens (fonts, colors, button radius) — looks like a refinement, not a redesign","All 14 standard sections: hero, trust band, before/after, case studies, FAQ, final CTA","Embeds 5 floating “audit pins” that explain what changed and why on hover","Saves to audit/05-homepage-redesign.html"]},"phase-6":{title:"Phase 06 — Spec for the designer",actions:["A/B/C hero variants page: 3 hero treatments stacked vertically with a sticky compare bar","Saved as audit/05b-homepage-variants.html","Designer brief: exhaustive token catalog (every color w/ opacity ladder, type scale, radius, shadow)","Per-section purpose / layout / final copy block (verbatim, ready to paste) / design notes","Asset checklist + approval ticket-list + open questions for the team","Saves to audit/06-figma-spec.md"]},"phase-7":{title:"Phase 07 — Write 90-day strategy",actions:["Mode flagged at the top: qualitative (default) or data-grounded (after v2 upgrade)","4-program plan: Movement → Recognition → Champion enablement → Customer-led growth","Cites every claim back to a sales-deck slide, transcript quote, or gap-report dimension","Lifts verbatim customer-language arc (e.g. “we tried [X], then we tried to build it ourselves”)","What-to-stop-doing list grounded in what the docs reveal isn’t working","Budget reallocation, marketing scorecard, one-line positioning to lock in","5 concrete actions for this week with owners + ship-by dates","Saves to audit/07-marketing-strategy.md — re-runs in data-grounded mode if v2 upgrade is accepted"],contextLabel:"Sharpens dramatically with v2 upgrade",context:[["CRM MCP","funnel shape + ICP signals","salesforce"],["Calls MCP","verbatim language at scale","gong"],["Upside MCP","unified GTM warehouse","upside"]]},"in-site":{title:"Website URL (Stage 1, required)",actions:["The only hard requirement — work starts the moment your URL arrives","Browser MCP opens the site in Cursor’s internal browser so you can watch the crawl","Exa auto-discovers your competitors from the URL alone, in parallel with the crawl","You then get a baseline summary (messaging read, ICP hypothesis, competitor set) before any further questions"]},"in-internal":{title:"Documents (optional, dropped any time after Stage 1)",actions:["Sales deck / pitch deck — what reps actually say in customer conversations","Customer call transcripts (Fireflies / Gong / Otter export, paste, or URL) — verbatim buyer language","Messaging / positioning doc — the product-marketing source-of-truth","Brand guidelines — fonts, colors, button radius, voice rules","Recent strategy doc / QBR / board doc — current programs + stated KPIs","Each doc unlocks one row of the website-vs-internal mismatch table — usually the easiest wins"],contextLabel:"Fetched via",context:[["Notion MCP","Notion pages","notion"],["Google Worksp
7665ace MCP","Google Docs + Drive PDFs","globe"]]},"in-data":{title:"Live data MCPs (optional v2 upgrade, offered at Stage 4)",actions:["NOT asked for upfront — only offered after you’ve seen the v1 deliverable","Accepting the upgrade re-runs the gap report (adds 8th dimension) and the strategy doc in data-grounded mode","CRM (Salesforce / HubSpot / Upside) — funnel shape, win rate, ICP signals on closed-won","Call recording (Fireflies / Gong / Chorus / Otter) — verbatim customer language at scale","Data warehouse (Snowflake / BigQuery / Looker / Upside) — channel-of-origin, fast-loss patterns","Marketing automation (HubSpot / Marketo / Customer.io) — nurture lists, subject lines that convert","Slack — informal customer sentiment + champion language","If you can only connect ONE: call recording. Verbatim language drives every rewrite."],context:[["Salesforce","CRM","salesforce"],["HubSpot","CRM + MAP","hubspot"],["Upside","unified GTM data","upside"],["Gong","call transcripts","gong"]]},"mcp-browser":{title:"Browser MCP",actions:["Visits the homepage and main-nav pages","Extracts hero, subhead, value props, audience signals, proof, CTAs, tone","Pulls live CSS tokens (Google Fonts links, --brand-* custom properties, button radius)","Takes screenshots of hero / mid-page / footer for the gap report","Any browser MCP works: Playwright, Browserbase, Browse, cursor-ide-browser, etc."]},"mcp-exa":{title:"Exa MCP",actions:["Auto-discover competitors from your URL alone via find_similar","Run category research: “best [X] for [role] 2026”, “X vs Y”, switch stories","Fetch any URL as clean markdown (fallback when no browser MCP available)","Optional alternatives: Brave Search, Perplexity, any search-API MCP"]},"mcp-notion":{title:"Notion MCP",actions:["Ingest your messaging doc / positioning doc","Ingest your sales deck (if Notion-hosted)","Ingest brand guidelines + voice & tone rules","Used in Phase 2.5 to build the website-vs-internal mismatch table"]},"mcp-crm":{title:"CRM MCP (Salesforce / HubSpot)",actions:["Compute funnel shape over last 12 months: closed-won / lost / open counts, win rate, avg cycle","ICP signals on closed-won: industry, employee count, ARR band","Channel-of-origin attribution — which channels source wins vs. fast-losses","Compares stated ICP (from messaging doc) against real won-deal ICP — highest-value mismatch finding"]},"mcp-upside":{title:"Upside MCP",actions:["Unified GTM warehouse joining CRM + email + calendar + meeting + web data","consult_librarian first to learn org-specific conventions (fiscal calendar, ICP fields)","Cross-references funnel shape with engagement: which campaigns sourced won deals","Surfaces hidden activation patterns (workshops, co-builds) that should be public marketing programs"],contextLabel:"Data sources",context:[["Salesforce","CRM","salesforce"],["HubSpot","MAP + lifecycle","hubspot"],["Gong","meeting transcripts","gong"]]},"mcp-calls":{title:"Call-recording MCP (Gong / Fireflies / Chorus)",actions:["Highest-leverage single optional connection — if only one, make it this.","Mine verbatim customer-language patterns: “we tried X”, “we tried to build it ourselves”","“What made you choose us”, “the moment I realized”, “my CFO/CRO/board”","Surface recurring objections (theme appears in 3+ calls = strategy-grade signal)","Captures bad-fit signals (themes only in lost deals = qualifier candidates)"]},harness:{title:"AI Harness",actions:["Discovers SKILL.md files in .cursor/skills/ or ~/.cursor/skills/ (or ~/.claude/skills/)","Manages MCP server lifecycle + OAuth","Mediates tool approval gates (read vs. write actions)","Spawns subagents for parallel work between intake waves"],contextLabel:"Compatible runtimes",context:[["Cursor","project-scoped + global skill discovery","cursor"],["Claude Code","Anthropic’s CLI — canonical SKILL.md home","claude"]]}
7665,"output-audit":{title:"audit/ output folder",actions:["00-intake.md — progressive intake (URL, customer, competitors, artifacts, data connections)","01-site-crawl.md — hero / value-prop / proof / CTAs + extracted brand tokens","01b-internal-artifacts.md — ingested docs + website-vs-internal mismatch table","01c-data-signals.md — funnel shape + customer-language patterns","02-competitor-matrix.md","03-gap-report.md","04-rewrite-drafts.md","05-homepage-redesign.html + 05b-homepage-variants.html","06-figma-spec.md","07-marketing-strategy.md"]}},nh={phases:["phase-1","phase-2","phase-3","phase-4","phase-5","phase-6","phase-7"],inputs:["in-site","in-internal","in-data"],mcps:["mcp-browser","mcp-exa","mcp-notion","mcp-crm","mcp-upside","mcp-calls"]};function WH(e){return nh.phases.includes(e)?{ids:nh.phases,name:"phases"}:nh.inputs.includes(e)?{ids:nh.inputs,name:"inputs"}:nh.mcps.includes(e)?{ids:nh.mcps,name:"mcps"}:null}function $be(){return n.jsxs("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[n.jsx("circle",{cx:"12",cy:"12",r:"9",fill:"none",stroke:"#347BD1",strokeWidth:"1.8"}),n.jsx("ellipse",{cx:"12",cy:"12",rx:"4.2",ry:"9",fill:"none",stroke:"#347BD1",strokeWidth:"1.6"}),n.jsx("line",{x1:"3",y1:"12",x2:"21",y2:"12",stroke:"#347BD1",strokeWidth:"1.6"})]})}function Fbe(){return n.jsx("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:n.jsx("path",{fill:"#0C1E20",d:"M4.459 4.208c.746.606 1.026.56 2.428.466l13.215-.793c.28 0 .047-.28-.046-.326L17.86 1.968c-.42-.326-.981-.7-2.055-.607L3.01 2.295c-.466.046-.56.28-.374.466zm.793 3.08v
766513.904c0 .747.373 1.027 1.214.98l14.523-.84c.841-.046.935-.56.935-1.167V6.354c0-.606-.233-.933-.748-.887l-15.177.887c-.56.047-.747.327-.747.933zm14.337.745c.093.42 0 .84-.42.888l-.7.14v10.264c-.608.327-1.168.514-1.635.514-.748 0-.935-.234-1.495-.933l-4.577-7.186v6.952L12.21 19s0 .84-1.168.84l-3.222.186c-.093-.186 0-.653.327-.746l.84-.233V9.854L7.822 9.76c-.094-.42.14-1.026.793-1.073l3.456-.233 4.764 7.279v-6.44l-1.215-.139c-.093-.514.28-.887.747-.933zM1.936 1.035l13.31-.98c1.634-.14 2.055-.047 3.082.7l4.249 2.986c.7.513.934.653.934 1.213v16.378c0 1.026-.373 1.634-1.68 1.726l-15.458.934c-.98.047-1.448-.093-1.962-.747l-3.129-4.06c-.56-.747-.793-1.306-.793-1.96V2.667c0-.839.374-1.54 1.447-1.632z"})})}function Gbe(){return n.jsx("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:n.jsx("path",{fill:"#00A1E0",d:"M10.006 5.415a4.195 4.195 0 013.045-1.306c1.56 0 2.954.9 3.69 2.205.63-.3 1.35-.45 2.1-.45 2.85 0 5.159 2.34 5.159 5.22s-2.31 5.22-5.176 5.22c-.345 0-.69-.044-1.02-.104a3.75 3.75 0 01-3.3 1.95c-.6 0-1.155-.15-1.65-.375A4.314 4.314 0 018.88 20.4a4.302 4.302 0 01-4.05-2.82c-.27.062-.54.076-.825.076-2.204 0-4.005-1.8-4.005-4.05 0-1.5.811-2.805 2.01-3.51-.255-.57-.39-1.2-.39-1.846 0-2.58 2.1-4.65 4.65-4.65 1.53 0 2.85.705 3.72 1.8"})})}function Hbe(){return n.jsx("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:n.jsx("path",{fill:"#FF7A59",d:"M18.164 7.93V5.084a2.198 2.198 0 001.267-1.978v-.067A2.2 2.2 0 0017.238.845h-.067a2.2 2.2 0 00-2.193 2.193v.067a2.196 2.196 0 001.252 1.973l.013.006v2.852a6.22 6.22 0 00-2.969 1.31l.012-.01-7.828-6.095A2.497 2.497 0 104.3 4.656l-.012.006 7.697 5.991a6.176 6.176 0 00-1.038 3.446c0 1.343.425 2.588 1.147 3.607l-.013-.02-2.342 2.343a1.968 1.968 0 00-.58-.095h-.002a2.033 2.033 0 102.033 2.033 1.978 1.978 0 00-.1-.595l.005.014 2.317-2.317a6.247 6.247 0 104.782-11.134l-.036-.005zm-.964 9.378a3.206 3.206 0 113.215-3.207v.002a3.206 3.206 0 01-3.207 3.207z"})})}function Ybe(){return n.jsx("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:n.jsx("path",{fill:"#D97757",d:"M17.3041 3.541h-3.6718l6.696 16.918H24Zm-10.6082 0L0 20.459h3.7442l1.3693-3.5527h7.0052l1.3693 3.5528h3.7442L10.5363 3.5409Zm-.3712 10.2232 2.2914-5.9456 2.2914 5.9456Z"})})}function Vbe(){return n.jsxs("svg",{viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg","aria-hidden":"true",children:[n.jsx("rect",{x:"3",y:"6",width:"18",height:"12",rx:"1.5",fill:"none",stroke:"#509A79",strokeWidth:"1.8"}),n.jsx("path",{d:"M6 15 V 9 L 8.5 12 L 11 9 V 15",fill:"none",stroke:"#509A79",strokeWidth:"1.6",strokeLinejoin:"round"}),n.jsx("path",{d:"M16 9 V 15 M14 13 L 16 15 L 18 13",fill:"none",stroke:"#509A79",strokeWidth:"1.6",strokeLinecap:"round",strokeLinejoin:"round"})]})}function vf({src:e}){return n.jsx("img",{src:e,alt:"",width:32,height:32})}function zH({name:e}){switch(e){case"globe":return n.jsx($be,{});case"exa":return n.jsx(vf,{src:`${bf}/exa-color.png`});case"notion":return n.jsx(Fbe,{});case"salesforce":return n.jsx(Gbe,{});case"hubspot":return n.jsx(Hbe,{});case"upside":return n.jsx(vf,{src:`${bf}/upside_symbol_positive_cropped_150px.png`});case"gong":return n.jsx(vf,{src:`${bf}/gong.png`});case"anthropic":return n.jsx(Ybe,{});case"cursor":return n.jsx(vf,{src:`${bf}/cursor.png`});case"claude":return n.jsx(vf,{src:`${bf}/claude.svg`});case"markdown":return n.jsx(Vbe,{});default:return null}}function Kbe({id:e,onClose:t,onCycle:a}){var o;const i=qbe[e],r=WH(e);return M.useEffect(()=>{const l=d=>{if(d.key==="Escape"){t();return}d.key==="ArrowRight"?(d.preventDefault(),a(1)):d.key==="ArrowLeft"&&(d.preventDefault(),a(-1))};return document.addEventListener("keydown",l),()=>document.removeEventListener("keydown",l)},[t,a]),i?n.jsxs("div",{className:"sk-modal","data-group":(r==null?void 0:r.name)??"",role:"dialog","aria-modal":"true","aria-labelledby":"sk-wma-modal-title",children:[n.jsx("div",{className:"sk-modal__backdrop",onClick:t}),n.jsxs("div",{className:"sk-modal__dialog",children:[n.jsx("button",{type:"button",className:"sk-modal__close",onClick:t,"aria-label":"Close",children:"×"}),n.jsxs("div",{className:"sk-modal__content",children:[n.jsx("h3",{id:"sk-wma-modal-title",children:i.title}),n.jsxs("div",{children:[i.actions.length?n.jsxs(n.Fragment,{children:[n.jsx("h4",{children:"What it does"}),n.jsx("ul",{children:i.actions.map(l=>n.jsx("li",{children:l},l))})]}):n.jsx("div",{children:"Details coming soon."}
7665),(o=i.context)!=null&&o.length?n.jsxs(n.Fragment,{children:[n.jsx("h4",{children:i.contextLabel??"Context"}),n.jsx("div",{className:"sk-modal__tiles",children:i.context.map(([l,d,u])=>n.jsxs("div",{className:"sk-modal__tile",children:[n.jsx("div",{className:"sk-modal__tile-logo",children:n.jsx(zH,{name:u})}),n.jsx("div",{className:"sk-modal__tile-label",children:l}),n.jsx("div",{className:"sk-modal__tile-desc",children:d})]},l))})]}):null]}),r?n.jsxs("div",{className:"sk-modal__hint",children:[n.jsx("kbd",{children:"←"})," ",n.jsx("kbd",{children:"→"})," to navigate"]}):null]})]})]}):null}function Xbe({kit:e,pane:t}){const[a,i]=M.useState(null),r=o=>{if(!a)return;const l=WH(a);if(!l)return;const d=l.ids.indexOf(a)+o;if(d<0||d>=l.ids.length){i(null);return}i(l.ids[d])};return t==="skills"?n.jsxs("div",{children:[n.jsx("div",{className:"sk-intro",children:n.jsx("h2",{children:"Get started."})}),n.jsx(tb,{kit:e,extraActions:n.jsx("a",{className:"sk-btn",href:"https://docs.google.com/presentation/d/1iyjKJHBiI_ZTu_WdPHVb67wEdFU7jg_FhP6IXdAiSVU/edit?usp=sharing",target:"_blank",rel:"noreferrer",children:"Get the slides"})})]}):n.jsxs("div",{className:"sk-wma",children:[n.jsxs("div",{className:"sk-intro",children:[n.jsx("h2",{children:"One skill. Four collaborative stages. URL-first."}),n.jsx("p",{children:"You start by providing just your website URL. The skill auto-discovers your competitors, crawls the site, and returns a baseline summary — then asks one multiple-choice question at a time to confirm direction and optionally drop in messaging docs, sales decks, or call transcripts. Output: gap report, copy rewrites, on-brand HTML mockup, A/B/C variants, Figma spec, and a 90-day marketing strategy. Live data integrations (CRM, call recording, warehouse) are offered as an optional v2 upgrade at the end."})]}),n.jsxs("section",{className:"sk-card",children:[n.jsx("div",{className:"sk-card__header",children:n.jsx("h3",{children:"The Stack"})}),n.jsx("div",{className:"sk-card__body",children:n.jsx("ul",{className:"sk-stack",children:Bbe.map((o,l)=>n.jsx(Qbe,{group:o,showSep:l>0,onOpen:i},o.label))})})]}),n.jsxs("section",{className:"sk-card",children:[n.jsxs("div",{className:"sk-card__header",children:[n.jsx("h3",{children:"The Pipeline"}),n.jsx("span",{className:"sk-card__hint",children:"Sequential · 1 → 7 · click any step for detail"})]}),n.jsxs("div",{className:"sk-card__body",children:[n.jsxs("div",{className:"sk-intake",children:[n.jsx("span",{className:"sk-intake__label",children:"What you provide — URL-first; everything else is optional"}),n.jsx("div",{className:"sk-intake__chips",children:Ube.map(o=>n.jsxs("button",{type:"button",className:"sk-intake__chip",onClick:()=>i(o.id),children:[n.jsx("span",{className:"sk-intake__num",children:o.num}),n.jsx("span",{className:"sk-intake__name",children:o.name}),n.jsx("span",{className:"sk-intake__tag",children:o.tag})]},o.id))})]}),n.jsx("ol",{className:"sk-timeline",children:Lbe.map(o=>n.jsxs("li",{className:"sk-timeline__step",children:[n.jsx("div",{className:"sk-timeline__bullet",children:o.num}),n.jsxs("button",{type:"button",className:"sk-timeline__card",onClick:()=>i(o.id),children:[n.jsx("div",{className:"sk-timeline__title",children:o.title}),n.jsx("p",{className:"sk-timeline__desc",children:o.desc}),n.jsxs("div",{className:"sk-timeline__meta",children:[o.mcps.map(l=>n.jsx("span",{className:"sk-timeline__mcp",children:l},l)),n.jsx("span",{className:"sk-timeline__output",children:o.output})]})]})]},o.id))})]})]}),a?n.jsx(Kbe,{id:a,onClose:()=>i(null),onCycle:r}):null]})}function Qbe({group:e,showSep:t,onOpen:a}){return n.jsxs(n.Fragment,{children:[t?n.jsx("li",{className:"sk-stack__sep","aria-hidden":"true"}):null,n.jsxs("li",{children:[n.jsx("div",{className:"sk-stack__group-label",children:e.label}),n.jsx("div",{className:"sk-stack__icons",children:e.items.map(i=>{const r=n.jsxs(n.Fragment,{children:[n.jsx("div",{className:"sk-stack__icon",children:n.jsx(zH,{name:i.icon})}),n.jsx("div",{className:"sk-stack__name",children:i.name})]}),o=`${i.name} — ${i.detail}${i.detailKey?" (click for details)":""}`;return i.detailKey?n.jsx("button",{type:"button",className:"sk-stack__tile is-clickable",title:o,onClick:()=>a(i.detailKey),children:r},i.name):n.jsx("div",{className:"sk-stack__tile",title:o,children:r},i.name)})})]})]})}const Zbe={"gtm-brain":[{id:"solution",label:"How It Works"},{id:"skills",label:"Get Started"}],"chief-of-staff-setup":[{id:"solution",label:"How It Works"},{id:"skills",label:"Get Started"}],"codex-micro":[{id:"solution",label:"My Setup"},{id:"wispr",label:"Wispr Flow"},{id:"skills",label:"The Utility"}],apex:[{id:"problem",label:"The Problem"},{id:"solution",label:"The Solution"},{id:"skills",label:"The Skills"}],"website-messaging-audit":[{id:"solution",label:"How It Works"},{id:"skills",label:"Get Started"}]},Jbe=()=>{const{slug:e=""}=Ta(),t=nye(e),a=Kn(),i=gc(),r=Zbe[e]??[],o=M.useMemo(()=>{var d;const l=a.hash.replace(/^#/,"");return r.some(u=>u.id===l)?l:((d=r[0])==null?void 0:d.id)??"solution"},[a.hash,r]);return t?n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:t.seoTitle,de
7665scription:t.seoDescription,canonicalUrl:`https://upside.tech${ax}/${t.slug}`}),n.jsx("div",{className:"sk-page",children:n.jsxs("div",{className:"sk-page__inner",children:[n.jsx(J,{to:ax,className:"sk-crumb",children:"← Skill Library"}),n.jsxs("div",{className:"sk-kit-head",children:[n.jsx("span",{className:"sk-kit-head__tag",children:t.tag}),n.jsx("h1",{className:"sk-kit-head__title",children:t.title}),n.jsx("p",{className:"sk-kit-head__desc",children:t.description}),t.relatedKit?n.jsxs(J,{to:OH(t.relatedKit.slug),className:"sk-companion",children:[n.jsx("span",{className:"sk-companion__blurb",children:t.relatedKit.blurb}),n.jsxs("span",{className:"sk-companion__cta",children:[t.relatedKit.label," →"]})]}):null]}),n.jsx(zbe,{tabs:r,active:o,onChange:l=>i({pathname:a.pathname,hash:l},{replace:!0})}),t.slug==="apex"?n.jsx(lbe,{kit:t,pane:o}):null,t.slug==="gtm-brain"?n.jsx(Wbe,{kit:t,pane:o}):null,t.slug==="chief-of-staff-setup"?n.jsx(_be,{kit:t,pane:o}):null,t.slug==="codex-micro"?n.jsx(fbe,{kit:t,pane:o}):null,t.slug==="website-messaging-audit"?n.jsx(Xbe,{kit:t,pane:o}):null]})})]}):n.jsx(VG,{})},e7="/resources/how-to-attract-a-dragon",Qc=`https://upside.tech${e7}`,eve="/og/how-to-attract-a-dragon.png",LH=`${e7}/reader/assets/pages/01.png`,tve="Cover of How To Attract A Dragon: A story about shining light on full journeys. by Mada Seghete",nve=`${e7}/reader/index.html`,ave="https://docs.google.com/forms/d/e/1FAIpQLSf_zU8RsINElV659_Lwm30Zq35ShUWefFn4CFIgk5_AqUnMfA/viewform?usp=pp_url&entry.950991782=Yes",t7="How To Attract A Dragon",UH="A story about shining light on full journeys.",E0=`${t7}: ${UH}`,ive="How To Attract A Dragon: Attribution Story",rve="Illustrated B2B attribution story by Mada Seghete. Read How To Attract A Dragon free, or get the paperback and Kindle on Amazon.",K4="English",dS="en",ix=44,Wf="Upside",BH=["B2B attribution","last-touch attribution","unseen marketing work","persistence","problem-solving"],qH="Marketers, founders, families, and curious readers",ove="5–9 years",$H=["At the edge of a village, a dragon shop has everything a dragon could want, but no dragons ever visit. When Mina offers to help, she paints a sign, spreads the word, and bakes peppery buns. Far away, a dragon who cannot breathe fire follows the irresistible scent. A helpful hedgehog, a clear sign, and a villager each guide him one step closer to the shop.","How To Attract A Dragon is a warm illustrated story about persistence, problem-solving, and the many small signals that shape a journey. Children can enjoy Mina's adventure, while grown-ups will recognize a playful lesson about marketing attribution: no single touchpoint deserves all the credit. Created by Mada Seghete, co-founder and CMO of Upside, this book turns the customer journey into a charming tale for marketers, founders, families, and curious readers."],sve=$H.join(" "),qi={name:"Mada Seghete",jobTitle:"Co-founder and CMO",url:"https://upside.tech/about#team",sameAs:"https://www.linkedin.com/in/madalina",image:"/images/mada-seghete.jpg"},n7=[{format:"Paperback",bookFormat:"https://schema.org/Paperback",isbn13:"979-8171045555",isbn:"9798171045555",asin:"B0HJCJGRBH",datePublished:"2026-09-03",datePublishedLabel:"September 3, 2026",url:"https://www.amazon.com/dp/B0HJCJGRBH",pages:ix,language:K4,dimensions:"8 × 10 inches"},{format:"Kindle",bookFormat:"https://schema.org/EBook",isbn13:null,isbn:null,asin:"B0HHYBG5ZH",datePublished:"2026-09-05",datePublishedLabel:"September 5, 2026",url:"https://www.amazon.com/dp/B0HHYBG5ZH",pages:ix,language:K4,dimensions:null}],FH=[{question:"Who is How To Attract A Dragon for?",answer:"Marketers, founders, families, and curious readers. Children can follow Mina's adventure; adults will recognize a lesson about marketing attribution. The paperback listing gives a reading age of 5–9."},{question:"What formats is the book available in?",answer:"Read it free on this page. Buy the paperback (ISBN 979-8171045555) or the Kindle edition (ASIN B0HHYBG5ZH) on Amazon. You can also request a print copy."},{question:"What themes does the story cover?",answer:"Persistence, problem-solving, and the many small signals that shape a journey. Read as a B2B story, it is about last-touch attribution: the villager in the doorway gets the thank-you, while Mina's unseen work is what actually brought the dragon."},{question:"Where can I get How To Attract A Dragon?",answer:"Read the illustrated edition here. The paperback and Kindle listings are on Amazon. If you want a physical copy from Upside, use the print-copy request form on this page."}],lve=["For all those who do unseen work and the journey to bring light to their impact.","At the edge of the village stood a beautiful dragon shop. It sold horn hats, wing wax, claw clippers, and very peppery buns. It had everything a dragon might need.",'The Shopkeeper sat sadly in the doorway. "I have the best dragon products, but no dragons ever come."','Mina walked home from school and saw the sad Shopkeeper. "I can help." "Can you bring me one dragon?" "I can try!" said Mina.',"Mina got to work. First she painted a poster and planted it where the road divided.",'That night she called to all the animals: "IF YOU SEE A DRAGON, PLEASE SPREAD THE WORD!"','Bird heard her. Fox heard her. Hedgehog heard her. Snake heard her. "Which word?" asked Bird. "Dragon shop," said Mina.','"Dragons love pepper buns," said Mina. "Everyone knows that."','She baked them so peppery, even the smoke sneezed. Their smell floated across the village. Mina waited. No dragon came. "Not yet," said Mina.',"On a hill not too far away lived a dragon who couldn't breathe fire. He tried every day.",'Until one day he lifted his nose. "Mmmmmm... bbbbbb... buns!!!!" he said, and followed the smell toward the village.',"Dragon followed the smoke. He did not watch the road. He tripped over a root. BOINK. He was fine. His head had a bump.",'"That bump needs a hat," said Hedgehog. "I want a bun," said Dragon. "The Dragon Shop has both. Mina told me." Hedgehog pointed toward the village.',`At the fork, Dragon stopped. "Village? Castle? Swamp? Cave?" Then he saw Mina's poster. "That way," said Dragon. His pawprints turned toward the village.`,`In the village, Dragon stopped again. "Which one is the Dragon Shop?" A villager pointed across the square. "I'll take you."`,'"A dragon!" cried the Shopkeeper. "Thank you, villager!" she said.',"Dragon had never seen a pepper bun. He ate one. Then another. His nose began to tickle. For the first time in a long time, Dragon breathed fire.",'That evening, Mina sat behind the shop. "I suppose my work did nothing," she said.',`Uppy, the fairy, landed beside her. "The villager's direction was easy to see. But was it what really brought Dragon?" "I don't know," said Mina. "I'll show you," said Uppy.`,'"The smell started Dragon towards the village, and the hedgehog you recruited told him about the shop. These pawprints turn at your sign. And the villager just helped with the final step."',"No one clue held the whole story. Together, they showed Dragon's journey.","The next day, Dragon bought the largest horn hat and seven pepper buns.",'"Mina," said the Shopkeeper, "your efforts actually did work." The Shopkeeper gave Mina gold coins and a rust-red shop key, and asked her to be her apprentice.',"The next morning, Mina arrived to work early. By air."],cve=[{href:"/blog/what-is-forensic-attribution",label:"What is forensic attribution"},{href:"/glossary/last-touch-attribution",label:"Last-touch attribution"},{href:"/glossary/dark-funnel",label:"The dark funnel"},{href:"/use-cases/revenue-attribution",label:"Revenue attribution"}],Ml=n7[0],ah=n7[1];function dve(){const e=`${Qc}#author`,t=`${Qc}#book`,a=`https://upside.tech${LH}`;return{"@context":"https://schema.org","@graph":[{"@type":"Person","@id":e,name:qi.name,jobTitle:qi.jobTitle,url:qi.url,
7665image:`https://upside.tech${qi.image}`,sameAs:[qi.sameAs],worksFor:{"@type":"Organization",name:Wf,url:"https://upside.tech"}},{"@type":"Book","@id":t,name:E0,description:sve,url:Qc,image:a,inLanguage:dS,datePublished:Ml.datePublished,numberOfPages:ix,author:{"@id":e},publisher:{"@type":"Organization",name:Wf,url:"https://upside.tech"},audience:{"@type":"Audience",audienceType:qH},about:BH,isAccessibleForFree:!0,sameAs:[Ml.url,ah.url],workExample:[{"@type":"Book","@id":`${Qc}#paperback`,name:E0,bookFormat:Ml.bookFormat,isbn:Ml.isbn,inLanguage:dS,datePublished:Ml.datePublished,numberOfPages:Ml.pages,image:a,author:{"@id":e},publisher:{"@type":"Organization",name:Wf,url:"https://upside.tech"},url:Ml.url,identifier:{"@type":"PropertyValue",propertyID:"ASIN",value:Ml.asin}},{"@type":"Book","@id":`${Qc}#kindle`,name:E0,bookFormat:ah.bookFormat,inLanguage:dS,datePublished:ah.datePublished,numberOfPages:ah.pages,image:a,author:{"@id":e},publisher:{"@type":"Organization",name:Wf,url:"https://upside.tech"},url:ah.url,identifier:{"@type":"PropertyValue",propertyID:"ASIN",value:ah.asin}}]},{"@type":"FAQPage",mainEntity:FH.map(i=>({"@type":"Question",name:i.question,acceptedAnswer:{"@type":"Answer",text:i.answer}}))},{"@type":"BreadcrumbList",itemListElement:[{"@type":"ListItem",position:1,name:"Home",item:"https://upside.tech/"},{"@type":"ListItem",position:2,name:t7,item:Qc}]}]}}const uve=()=>{const[e,t]=M.useState(!1),[a,i]=M.useState(!1),r=M.useRef(null),o=M.useRef(null),l=M.useCallback(m=>{var f,y;(y=(f=r.current)==null?void 0:f.contentWindow)==null||y.postMessage(m,"*")},[]),d=M.useCallback(()=>{const m=()=>{var y;const f=r.current;if(f){f.focus({preventScroll:!0});try{(y=f.contentWindow)==null||y.focus()}catch{}}};m(),typeof requestAnimationFrame=="function"&&requestAnimationFrame(m)},[]),u=M.useCallback(async m=>{if(m){const f=o.current;try{if(f&&typeof f.requestFullscreen=="function"){await f.requestFullscreen(),i(!0),l({type:"htad-fullscreen",active:!0}),d();return}}catch{}t(!0),l({type:"htad-fullscreen",active:!0}),d();return}if(document.fullscreenElement)try{await document.exitFullscreen()}catch{}t(!1),l({type:"htad-fullscreen",active:!1})},[d,l]),h=e||a;return M.useEffect(()=>{const m=b=>{const x=b.data;!x||x.type!=="htad-fullscreen"||u(!!x.active)},f=()=>{const b=!!(document.fullscreenElement||document.webkitFullscreenElement);i(b),l({type:"htad-fullscreen",active:b}),b||t(!1)},y=b=>{if(b.metaKey||b.ctrlKey||b.altKey)return;const x=b.target;if(!(x instanceof HTMLElement&&(x.isContentEditable||x.closest("input, textarea, select, [contenteditable='true']")))){if(b.key==="Escape"){e&&(b.preventDefault(),u(!1));return}if(b.key==="f"||b.key==="F"){b.preventDefault(),u(!h);return}b.key!=="ArrowLeft"&&b.key!=="ArrowRight"||(b.preventDefault(),l({type:"htad-navigate",direction:b.key==="ArrowRight"?"next":"prev"}))}};return window.addEventListener("message",m),document.addEventListener("fullscreenchange",f),document.addEventListener("webkitfullscreenchange",f),window.addEventListener("keydown",y),()=>{window.removeEventListener("message",m),document.removeEventListener("fullscreenchange",f),document.removeEventListener("webkitfullscreenchange",f),window.removeEventListener("keydown",y)}},[h,e,l,u]),n.jsxs(Qe,{navVariant:"light",children:[n.jsx(Je,{title:ive,description:rve,ogImage:eve,canonicalUrl:Qc,jsonLd:dve()}),n.jsxs("section",{className:`attribution-book${e?" attribution-book--immersive":""}`,"aria-label":"How To Attract A Dragon reader",children:[n.jsxs("header",{className:"attribution-book__heading",children:[n.jsx("h1",{className:"heading-xl attribution-book__title",children:t7}),n.jsx("p",{className:"attribution-book__subhead",children:UH.replace(/\.$/,"")}),!h&&n.jsxs("div",{className:"attribution-book__tools",children:[n.jsx("a",{href:ave,target:"_blank",rel:"noopener noreferrer",className:"attribution-book__tool",children:"Request a print copy"}),n.jsxs("button",{type:"button",className:"attribution-book__tool attribution-book__fs","aria-pressed":!1,"aria-label":"Full screen",title:"Full screen",onClick:m=>{m.currentTarget.blur(),u(!0)},children:[n.jsx("svg",{className:"attribution-book__fs-icon attribution-book__fs-icon--expand","aria-hidden":"true",viewBox:"0 0 24 24",children:n.jsx("path",{d:"M8 3H5a2 2 0 0 0-2 2v3m18 0V5a2 2 0 0 0-2-2h-3m0 18h3a2 2 0 0 0 2-2v-3M3 16v3a2 2 0 0 0 2 2h3"})}),n.jsx("span",{children:"Full screen"})]})]})]}),n.jsx("div",{className:"attribution-book__stage",ref:o,children:n.jsx("iframe",{ref:r,className:"attribution-book__frame",src:nve,title:"How To Attract A Dragon",tabIndex:-1,allow:"fullscreen",allowFullScreen:!0})})]}),n.jsxs("article",{className:"dragon-page",children:[n.jsxs("section",{className:"dragon-page__section dragon-page__section--first","aria-labelledby":"dragon-synopsis",children:[n.jsx("h2",{id:"dragon-synopsis",className:"heading-l",children:"About the book"}),n.jsx("p",{className:"body-m dragon-page__full-title",children:E0}),$H.map(m=>n.jsx("p",{className:"body-m",children:m},m)),n.jsxs("dl",{className:"dragon-facts",children:[n.jsxs("div",{children:[n.jsx("dt",{children:"Author"}),n.jsx("dd",{children:n.jsx(J,{to:"/about#team",children:qi.name})})]}),n.jsxs("div",{children:[n.jsx("dt",{children:"Publisher"}),n.jsx("dd",{children:Wf})]}),n.jsxs("div",{children:[n.jsx("dt",{children:"Language"}),n.jsx("dd",{children:K4})]}),n.jsxs("div",{children:[n.jsx("dt",{children:"Audience"}),n.jsx("dd",{children:qH})]}),n.jsxs("div",{children:[n.jsx("dt",{children:"Reading age"}),n.jsx("dd",{children:ove})]}),n.jsxs("div",{children:[n.jsx("dt",{children:"Pages"}),n.jsx("dd",{children:ix})]}),n.jsxs("div",{children:[n.jsx("dt",{children:"Themes"}),n.jsx("dd",{children:BH.join(", ")})]})]})]}),n.jsxs("section",{className:"dragon-page__section","aria-labelledby":"dragon-about",children:[n.jsx("h2",{id:"dragon-about",className:"heading-l",children:"What the story is really about"}),n.jsx("p",{className:"body-m",children:"How To Attract A Dragon is a story about B2B attribution. A Shopkeeper has everything a dragon might need, and no dragons. Mina does the unseen work. When pipeline walks in, everyone thanks the last person they can see."}),n.jsxs("p",{className:"body-m",children:["Dragon is pipeline. Mina is the marketer whose poster, referrals, and pepper buns never show up as the opportunity source. The villager is"," ",n.jsx(J,{to:"/glossary/last-touch-attribution",children:"last-touch attribution"}),": easy to observe, standing in the doorway, happy to take the thank-you."]}),n.jsxs("p",{className:"body-m",children:["Uppy walks Mina back through the clues until the full journey is visible. That is"," ",n.jsx(J,{to:"/glossary/forensic-attribution",children:"forensic attribution"}),": reconstruct what happened from the evidence, then decide what to do next."," ",qi.name," wrote it after years as a CMO watching demand-creating work disappear from the report."]})]}),n.jsxs("section",{className:"dragon-page__section","aria-labelledby":"dragon-editions",children:[n.jsx("h2",{id:"dragon-editions",className:"heading-l",children:"Editions"}),n.jsxs("div",{className:"dragon-editions",children:[n.jsx("img",{className:"dragon-editions__cover",src:LH,alt:tve,width:800,height:1e3}),n.jsx("div",{className:"dragon-editions__list",children:n7.map(m=>n.jsxs("div",{className:"dragon-edition",children:[n.jsx("h3",{className:"heading-xs",children:m.format}),n.jsxs("dl",{children:[m.isbn13?n.jsxs("div",{children:[n.jsx("dt",{children:"ISBN-13"}),n.jsx("dd",{children:m.isbn13})]}):null,n.jsxs("div",{children:[n.jsx("dt",{children:"ASIN"}),n.jsx("dd",{children:m.asin})]}),n.jsxs("div",{children:[n.jsx("dt",{children:"Published"}),n.jsx("dd",{children:n.jsx("time",{dateTime:m.datePublished,children:m.datePublishedLabel})})]}),n.jsxs("div",{children:[n.jsx("dt",{children:"Language"}),n.jsx("dd",{children:m.language})]}),m.dimensions?n.jsxs("div",{children:[n.jsx("dt",{children:"Dimensions"}),n.jsx("dd",{children:m.dimensions})]}):null]}),n.jsxs("a",{href:m.url,target:"_blank",rel:"noopener noreferrer",className:"dragon-edition__buy",children:[m.format," on Amazon"]})]},m.asin))})]})]}),n.jsxs("section",{className:"dragon-page__section","aria-labelledby":"dragon-author",children:[n.jsx("h2",{id:"dragon-author",className:"heading-l",children:"About the author"}),n.jsxs("div",{className:"dragon-author",children:[n.jsx("img",{className:"dragon-author__photo",src:qi.image,alt:qi.name,width:160,height:160}),n.jsxs("div",{children:[n.jsxs("p",{className:"body-m",children:[n.jsx(J,{to:"/about#team",children:qi.name}
7665)," ","is co-founder and CMO of Upside. She wrote How To Attract A Dragon after years watching demand-creating work disappear from the report."]}),n.jsx("p",{className:"body-m",children:n.jsxs("a",{href:qi.sameAs,target:"_blank",rel:"noopener noreferrer",children:[qi.name," on LinkedIn"]})})]})]})]}),n.jsxs("section",{className:"dragon-page__section","aria-labelledby":"dragon-faq",children:[n.jsx("h2",{id:"dragon-faq",className:"heading-l",children:"Questions"}),n.jsx("dl",{className:"dragon-faq",children:FH.map(m=>n.jsxs("div",{children:[n.jsx("dt",{children:m.question}),n.jsx("dd",{className:"body-m",children:m.answer})]},m.question))})]}),n.jsxs("section",{className:"dragon-page__section","aria-labelledby":"dragon-related",children:[n.jsx("h2",{id:"dragon-related",className:"heading-l",children:"Keep reading"}),n.jsx("ul",{className:"dragon-related",children:cve.map(m=>n.jsx("li",{children:n.jsx(J,{to:m.href,children:m.label})},m.href))})]}),n.jsxs("details",{className:"dragon-transcript",children:[n.jsxs("summary",{children:[n.jsx("span",{children:"Read the story as text"}),n.jsx("span",{className:"dragon-toggle","aria-hidden":"true"})]}),n.jsx("div",{className:"dragon-transcript__body",children:lve.map(m=>n.jsx("p",{className:"body-m",children:m},m))})]})]}),n.jsx(MG,{})]})},a7=({children:e})=>(M.useEffect(()=>{var a,i;if(typeof window>"u"||(i=(a=window.hbspt)==null?void 0:a.forms)!=null&&i.create||document.querySelector('script[src*="hsforms"]'))return;const t=document.createElement("script");t.src="https://js.hsforms.net/forms/embed/v2.js",t.charset="utf-8",t.async=!0,document.head.appendChild(t)},[]),n.jsxs("div",{style:{background:"#fff",color:"#1b1f1c",fontFamily:"'Geist', sans-serif"},children:[n.jsx("header",{style:{position:"sticky",top:0,zIndex:40,background:"rgba(255,255,255,0.92)",backdropFilter:"saturate(180%) blur(8px)",WebkitBackdropFilter:"saturate(180%) blur(8px)",borderBottom:"1px solid #eaeeea"},children:n.jsxs("div",{style:{maxWidth:"1296px",margin:"0 auto",padding:"0.9rem 1.25rem",display:"flex",alignItems:"center",justifyContent:"space-between"},children:[n.jsx(J,{to:"/","aria-label":"Upside home",style:{display:"flex",alignItems:"center",height:"28px",color:"#1b1f1c",textDecoration:"none"},children:n.jsx(au,{})}),n.jsx(J,{to:Wt,style:{display:"inline-block",background:"#509a79",color:"#fff",fontFamily:"'Geist', sans-serif",fontSize:"0.9rem",fontWeight:600,border:"none",borderRadius:"10px",padding:"0.65rem 1.15rem",cursor:"pointer",boxShadow:"0 2px 6px rgba(80,154,121,0.22)",transition:"transform 120ms ease, box-shadow 120ms ease, background 120ms ease",textDecoration:"none"},onMouseEnter:t=>{t.currentTarget.style.background="#78a78f",t.currentTarget.style.transform="translateY(-1px)",t.currentTarget.style.boxShadow="0 4px 12px rgba(80,154,121,0.32)"},onMouseLeave:t=>{t.currentTarget.style.background="#509a79",t.currentTarget.style.transform="translateY(0)",t.currentTarget.style.boxShadow="0 2px 6px rgba(80,154,121,0.22)"},children:"Book a Demo"})]})}),n.jsx("main",{children:e}),n.jsx("footer",{style:{borderTop:"1px solid #eaeeea",padding:"1.5rem 1.25rem",background:"#fafafa"},children:n.jsxs("div",{style:{maxWidth:"1296px",margin:"0 auto",display:"flex",flexWrap:"wrap",alignItems:"center",justifyContent:"space-between",gap:"0.75rem",fontSize:"0.8rem",color:"#5f6563"},children:[n.jsx("span",{children:"© 2026 Dragonsight Labs, Inc."}),n.jsxs("div",{style:{display:"flex",gap:"1.25rem"},children:[n.jsx(J,{to:"/legal/privacy-policy",style:{color:"#5f6563",textDecoration:"none"},children:"Privacy"}),n.jsx(J,{to:"/legal/terms-of-service",style:{color:"#5f6563",textDecoration:"none"},children:"Terms"}),n.jsx(J,{to:"/security",style:{color:"#5f6563",textDecoration:"none"},children:"Security"})]})]})}),n.jsx("style",{children:`
7666        @media (max-width: 860px) {
7667          .lp-hero-grid {
7668            grid-template-columns: 1fr !important;
7669          }
7670          /* On mobile, .lp-approach-row collapses from a two-column flex
7671             row to a single column. flex-direction: column overrides both
7672             "row" and "row-reverse" so every step renders text-first,
7673             visual-second regardless of its desktop side. */
7674          .lp-approach-row {
7675            flex-direction: column !important;
7676          }
7677        }
7678        @media (max-width: 720px) {
7679          .lp-security-grid {
7680            grid-template-columns: 1fr !important;
7681          }
7682        }
7683
7684        @keyframes lp-marquee-scroll {
7685          from { transform: translateX(0); }
7686          to { transform: translateX(-50%); }
7687        }
7688        .lp-marquee-track {
7689          animation: lp-marquee-scroll 38s linear infinite;
7690          will-change: transform;
7691        }
7692        @media (prefers-reduced-motion: reduce) {
7693          .lp-marquee-track {
7694            animation: none;
7695          }
7696        }
7697      `})]})),dp="#2d6a4f",o9="#347BD1",s9="#7a4a9e",R0="#a1560b",Fd="#1b1f1c",up="#5f6563",hve="#b3261e",pve=[{label:"Opps created post-engagement",value:"412",tone:"#5fd4c9"},{label:"Opportunities progressed",value:"184",tone:"#c79efb"},{label:"Total won revenue",value:"$15.9M",tone:"#86e3a8"}],mve=[{key:"pipeline",label:"Pipeline by Channel"},{key:"top",label:"Top Performers"},{key:"playbook",label:"Keep / Optimize / Stop"}],fve=[{channel:"Annual User Summit",pipeline:"$8.7M",pct:100,tone:dp},{channel:"Customer Story Hub",pipeline:"$5.9M",pct:68,tone:dp},{channel:"Inbound Search",pipeline:"$4.8M",pct:55,tone:o9},{channel:"Field Roadshows",pipeline:"$4.3M",pct:49,tone:o9},{channel:"Sponsored Conferences",pipeline:"$2.7M",pct:31,tone:s9}
7697,{channel:"Newsletter Nurture",pipeline:"$2.1M",pct:24,tone:s9},{channel:"Outbound Sequences",pipeline:"$1.5M",pct:17,tone:R0},{channel:"Happy Hours",pipeline:"$0.9M",pct:10,tone:R0},{channel:"Content Syndication",pipeline:"$0.3M",pct:3,tone:R0}],gve=[{rank:1,name:"Annual User Summit",meta:"1st-party event · NA",delta:"+18%",influenced:"$4.2M"},{rank:2,name:"Q4 Pricing Benchmark",meta:"Inbound report · Ent",delta:"+24%",influenced:"$3.1M"},{rank:3,name:"Partner Webinar Series",meta:"Co-marketing · MM/Ent",delta:"+12%",influenced:"$2.6M"},{rank:4,name:"Customer Story Hub",meta:"Content · all segments",delta:"+9%",influenced:"$1.9M"}],yve=[{bucket:"Keep",bg:"#e8f4ed",border:"#b6d7c1",accent:dp,items:[{label:"Annual User Summit",note:"84 progressed · $5.8M won"},{label:"Customer Story Hub",note:"$6.1M influenced pipeline"}]},{bucket:"Optimize",bg:"#fdeccf",border:"#f0d591",accent:R0,items:[{label:"Partner Webinar Series",note:"96 post-eng · only 14 progressed"},{label:"Product Launch Series",note:"high reach, low conversion"}]},{bucket:"Stop",bg:"#fbe0e0",border:"#e9b9b9",accent:hve,items:[{label:"Generic Enterprise Blast Emails",note:"0.04% click rate · hurting reputation"},{label:"Press Release Blasts",note:"38 post-eng · only 2 progressed"}]}],bve=310,i7=({children:e})=>n.jsx("div",{style:{background:"#fff",padding:"1.25rem 1.4rem 1.4rem",height:bve,boxSizing:"border-box",overflow:"hidden",display:"flex",flexDirection:"column"},children:e}),r7=({eyebrow:e,hint:t})=>n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",marginBottom:"0.85rem",gap:"0.75rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.72rem",fontWeight:700,color:dp,letterSpacing:"0.08em",textTransform:"uppercase"},children:e}),t&&n.jsx("p",{style:{margin:0,fontSize:"0.72rem",color:up,fontStyle:"italic"},children:t})]}),vve=()=>n.jsxs(i7,{children:[n.jsx(r7,{eyebrow:"Influenced pipeline · last 90 days",hint:"Forensic, not formulaic"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.4rem"},children:fve.map(e=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"160px 1fr 64px",gap:"0.6rem",alignItems:"center"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.78rem",fontWeight:600,color:Fd,lineHeight:1.3},children:e.channel}),n.jsx("div",{style:{height:12,borderRadius:999,background:"#f0f3f1",overflow:"hidden",position:"relative"},children:n.jsx("div",{style:{width:`${e.pct}%`,height:"100%",borderRadius:999,background:`linear-gradient(90deg, ${e.tone} 0%, ${e.tone}cc 100%)`,transition:"width 400ms ease"}})}),n.jsx("p",{style:{margin:0,fontSize:"0.8rem",fontWeight:700,color:Fd,textAlign:"right",fontVariantNumeric:"tabular-nums"},children:e.pipeline})]},e.channel))})]}),xve=()=>n.jsxs(i7,{children:[n.jsx(r7,{eyebrow:"Top campaigns by influenced pipeline",hint:"Ranked by causal impact"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:gve.map(e=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"30px 1fr auto auto",alignItems:"center",gap:"0.8rem",padding:"0.65rem 0.8rem",borderRadius:"8px",background:e.rank===1?"#e8f4ed":"#F5F7FA",border:e.rank===1?"1px solid #b6d7c1":"1px solid #eef1ef"},children:[n.jsxs("span",{style:{fontSize:"0.78rem",fontWeight:800,color:e.rank===1?dp:up,fontVariantNumeric:"tabular-nums"},children:["#",e.rank]}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.86rem",fontWeight:700,color:Fd,lineHeight:1.25},children:e.name}),n.jsx("p",{style:{margin:"0.15rem 0 0 0",fontSize:"0.72rem",color:up},children:e.meta})]}),n.jsxs("span",{style:{fontSize:"0.72rem",fontWeight:700,color:dp,background:"#dff0e6",padding:"0.2rem 0.55rem",borderRadius:999},children:["↑ ",e.delta.replace("+","")]}),n.jsx("span",{style:{fontSize:"0.86rem",fontWeight:700,color:Fd,fontVariantNumeric:"tabular-nums",minWidth:60,textAlign:"right"},children:e.influenced})]},e.name))})]}),wve=()=>n.jsxs(i7,{children:[n.jsx(r7,{eyebrow:"Recommended budget moves",hint:"Ranked by post-engagement progression"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:"0.65rem",flex:1,minHeight:0},children:yve.map(e=>n.jsxs("div",{style:{background:e.bg,border:`1px solid ${e.border}`,borderRadius:"10px",padding:"1rem 0.95rem",display:"flex",flexDirection:"column",gap:"0.7rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.3rem",fontWeight:800,color:e.accent,letterSpacing:"-0.005em",lineHeight:1},children:e.bucket}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.65rem",borderTop:`1px solid ${e.border}`,paddingTop:"0.75rem"},children:e.items.map(t=>n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.82rem",fontWeight:700,color:Fd,lineHeight:1.25},children:t.label}),n.jsx("p",{style:{margin:"0.18rem 0 0 0",fontSize:"0.72rem",color:up,lineHeight:1.4},children:t.note})]},t.label))})]},e.bucket))})]}),kve=()=>
7697{const[e,t]=M.useState("pipeline"),a=()=>{switch(e){case"pipeline":return n.jsx(vve,{});case"top":return n.jsx(xve,{});case"playbook":return n.jsx(wve,{})}};return n.jsxs("div",{style:{width:"100%",maxWidth:"820px",fontFamily:"'Geist', sans-serif",borderRadius:"14px",overflow:"hidden",boxShadow:"0 16px 50px rgba(27, 31, 28, 0.18)",background:"#fff"},children:[n.jsx("style",{children:`
7698        @keyframes lp-live-dot-pulse {
7699          0% {
7700            box-shadow: 0 0 0 0 rgba(134,227,168,0.7);
7701            transform: scale(1);
7702          }
7703          70% {
7704            box-shadow: 0 0 0 6px rgba(134,227,168,0);
7705            transform: scale(1.05);
7706          }
7707          100% {
7708            box-shadow: 0 0 0 0 rgba(134,227,168,0);
7709            transform: scale(1);
7710          }
7711        }
7712        @media (prefers-reduced-motion: reduce) {
7713          .lp-live-pill > span[aria-hidden] {
7714            animation: none !important;
7715          }
7716        }
7717      `}),n.jsxs("div",{style:{background:"linear-gradient(145deg, #0c1a14 0%, #1b2922 100%)",color:"#fff",padding:"1.25rem 1.4rem 1.1rem"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"0.75rem",marginBottom:"0.15rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.05rem",fontWeight:700,lineHeight:1.2},children:"Campaign Report Card"}),n.jsxs("span",{className:"lp-live-pill",style:{fontSize:"0.62rem",fontWeight:700,color:"#86e3a8",background:"rgba(134,227,168,0.12)",padding:"0.2rem 0.55rem",borderRadius:999,letterSpacing:"0.05em",display:"inline-flex",alignItems:"center",gap:"0.35rem"},children:[n.jsx("span",{"aria-hidden":!0,style:{width:6,height:6,borderRadius:"50%",background:"#86e3a8",boxShadow:"0 0 0 0 rgba(134,227,168,0.7)",animation:"lp-live-dot-pulse 1.6s ease-out infinite"}}),"LIVE"]})]}),n.jsx("p",{style:{margin:"0 0 0.95rem 0",fontSize:"0.78rem",color:"#c9d1cd"},children:"2-year retrospective · post-engagement attribution + deal progression"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:"0.55rem"},children:pve.map(i=>n.jsxs("div",{style:{background:"rgba(255,255,255,0.04)",border:"1px solid rgba(255,255,255,0.08)",borderRadius:"8px",padding:"0.7rem 0.75rem",minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.62rem",fontWeight:700,color:"#8a9891",letterSpacing:"0.05em",textTransform:"uppercase",lineHeight:1.3},children:i.label}),n.jsx("p",{style:{margin:"0.4rem 0 0 0",fontSize:"1.6rem",fontWeight:700,color:i.tone,lineHeight:1,fontVariantNumeric:"tabular-nums"},children:i.value})]},i.label))})]}),n.jsx("div",{role:"tablist","aria-label":"Dashboard views",style:{background:"#f5f7fa",borderTop:"1px solid #eaeeea",borderBottom:"1px solid #eaeeea",padding:"0.45rem 0.6rem",display:"flex",gap:"0.2rem",overflowX:"auto",whiteSpace:"nowrap"},children:mve.map(i=>{const r=e===i.key;return n.jsx("button",{type:"button",role:"tab","aria-selected":r,onClick:()=>t(i.key),style:{appearance:"none",border:"none",fontFamily:"'Geist', sans-serif",padding:"0.45rem 0.85rem",borderRadius:"6px",fontSize:"0.78rem",fontWeight:600,color:r?Fd:up,background:r?"#fff":"transparent",boxShadow:r?"0 1px 3px rgba(0,0,0,0.06)":"none",cursor:"pointer",flexShrink:0,transition:"background 120ms ease, color 120ms ease"},onMouseEnter:o=>{r||(o.currentTarget.style.color=Fd)},onMouseLeave:o=>{r||(o.currentTarget.style.color=up)},children:i.label},i.key)})}),a()]})},GH=({label:e="Book a Demo"})=>n.jsx(J,{to:Wt,style:{display:"inline-block",background:Pe.ctaGreen,color:"#fff",fontFamily:"'Geist', sans-serif",fontSize:"1rem",fontWeight:600,border:"none",borderRadius:"10px",padding:"0.85rem 1.6rem",cursor:"pointer",boxShadow:"0 4px 14px rgba(80,154,121,0.28)",transition:"transform 120ms ease, box-shadow 120ms ease, background 120ms ease",textDecoration:"none"},onMouseEnter:t=>{t.currentTarget.style.background=Pe.ctaGreenHover,t.currentTarget.style.transform="translateY(-1px)",t.currentTarget.style.boxShadow="0 6px 18px rgba(80,154,121,0.35)"},onMouseLeave:t=>{t.currentTarget.style.background=Pe.ctaGreen,t.currentTarget.style.transform="translateY(0)",t.currentTarget.style.boxShadow="0 4px 14px rgba(80,154,121,0.28)"},children:e}),o7=({eyebrow:e,headline:t,subhead:a,ctaLabel:i,visual:r})=>n.jsx("section",{style:{background:`linear-gradient(180deg, ${Pe.greenLight} 0%, #ffffff 100%)`,padding:"3rem 1.25rem 2.5rem"},children:n.jsx("div",{style:{maxWidth:"1280px",margin:"0 auto"},children:n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"minmax(0, 0.78fr) minmax(0, 1.22fr)",gap:"2.5rem",alignItems:"center"},className:"lp-hero-grid",children:[n.jsxs("div",{children:[n.jsx("p",{style:{margin:"0 0 1rem 0",fontSize:"0.8rem",fontWeight:700,color:Pe.green,letterSpacing:"0.1em",textTransform:"uppercase"},children:e}),n.jsx("h1",{style:{margin:"0 0 1.25rem 0",fontSize:"clamp(2rem, 4.5vw, 3.4rem)",fontWeight:700,lineHeight:1.08,color:Pe.text,letterSpacing:"-0.01em"},children:t}),n.jsx("p",{style:{margin:"0 0 1.75rem 0",fontSize:"1.1rem",lineHeight:1.55,color:Pe.muted,maxWidth:"540px"},children:a}),n.jsx("div",{style:{display:"flex",flexWrap:"wrap",gap:"0.75rem"},children:n.jsx(GH,{label:i})})]}),n.jsx("div",{style:{display:"flex",justifyContent:"center"},children:r??n.jsx(kve,{})})]})})}),s7=({heading:e,subhead:t,testimonialIds:a})=>{const i=a.map(r=>bG(r)).filter(r=>r!==void 0);return n.jsx("section",{style:{padding:"4.5rem 1.25rem",background:"#fff"},children:n.jsxs("div",{style:{maxWidth:"1296px",margin:"0 auto"},children:[n.jsxs("div",{style:{textAlign:"center",marginBottom:"2.5rem"},children:[n.jsx("h2",{style:{margin:0,fontSize:"clamp(1.5rem, 2.8vw, 2.1rem)",fontWeight:700,color:Pe.text,letterSpacing:"-0.01em"},children:e}),n.jsx("p",{style:{margin:"0.75rem auto 0",fontSize:"1rem",color:Pe.muted,maxWidth:"600px"},children:t})]}),n.jsx("div",{className:"lp-marquee",style:{padding:"0.5rem 0 3rem",borderBottom:`1px solid ${Pe.border}`,marginBottom:"3rem",overflow:"hidden",position:"relative",maskImage:"linear-gradient(90deg, transparent 0%, black 6%, black 94%, transparent 100%)",WebkitMaskImage:"linear-gradient(90deg, transparent 0%, black 6%, black 94%, transparent 100%)"},children:n.jsx("div",{className:"lp-marquee-track",style:{display:"flex",width:"max-content",alignItems:"center",gap:"4rem",paddingRight:"4rem"},children:[...oa,...oa].map((r,o)=>{const l=o>=oa.length;return n.jsx("img",{src:r.src,alt:l?"":r.name,"aria-hidden":l||void 0,loading:"lazy",style:{height:r.height,width:"auto",objectFit:"contain",opacity:.55,filter:"brightness(0)",flexShrink:0}},`${r.name}-${o}`)})})}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(auto-fit, minmax(300px, 1fr))",gap:"1.25rem"},children:i.map(r=>n.jsxs("figure",{style:{margin:0,background:j0[r.accent],borderRadius:"14px",padding:"1.75rem 1.75rem 1.5rem",display:"flex",flexDirection:"column",justifyContent:"space-between",gap:"1.25rem"},children:[n.jsxs("blockquote",{style:{margin:0,fontSize:"1.05rem",lineHeight:1.5,color:Pe.text,fontWeight:500},children:["“",r.quote,"”"]}),n.jsxs("figcaption",{style:{display:"flex",alignItems:"center",gap:"0.85rem",borderTop:"1px solid rgba(27,31,28,0.08)",paddingTop:"1rem"},children:[n.jsx("img",{src:r.image,alt:r.name,loading:"lazy",style:{width:48,height:48,borderRadius:"50%",objectFit:"cover",flexShrink:0}}),n.jsxs("div",{style:{flex:1,minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.92rem",fontWeight:700,color:Pe.text},children:r.name}),n.jsxs("p",{style:{margin:"0.1rem 0 0 0",fontSize:"0.8rem",color:Pe.muted},children:[r.title,", ",r.company]}),n.jsxs(J,{to:r.caseStudy,style:{display:"inline-block",marginTop:"0.35rem",fontSize:"0.78rem",fontWeight:600,color:Pe.green,textDecoration:"none"},children:["Read the ",r.company," case study →"]})]})]})]},r.id))})]})})},l9="#2d6a4f",c9="#347BD1",uS="#7a4a9e",d9="#a1560b",xf="#1b1f1c",cs="#5f6563",jve=()=>{const e=Qp(),t=e?"1fr auto":"1fr 76px 78px 82px",a=[{label:"MARKETING",credit:"$42.5K",depth:0,subtotal:!0,sectionTone:c9},{label:"Bulk Marketing Email",credit:"$15.5K",depth:1},{label:"Q1 product update",credit:"$15.5K",date:"Feb 12, 2024",type:"Tracked",depth:2},{label:"Chatbot",credit:"$27.0K",depth:1},{label:"Qualified website chat",credit:"$27.0K",date:"Jan 8, 2026",type:"Tracked",depth:2},{label:"Hand-raise reply",credit:"$0",date:"Jan 8, 2026",type:"Response",depth:2},{label:"SDR",credit:"$28.0K",depth:0,subtotal:!0,sectionTone:d9},{label:"Rep · West region",credit:"$12.0K",depth:1},{label:"Direct Email",credit:"$12.0K",date:"Nov 4, 2025",type:"Tracked",depth:2},{label:"Rep · East region",credit:"$16.0K",depth:1},{label:"Direct Email",credit:"$10.0K",date:"Aug 18, 2023",type:"Tracked",depth:2},{label:"Direct Email",credit:"$6.0K",date:"Mar 2, 2024",type:"Tracked",depth:2},{label:"INFERRED INFLUENCES",credit:"$95.0K",depth:0,subtotal:!0,sectionTone:uS}],i=r=>r==="Response"?{background:"#f0e4f5",color:uS}:r==="Inferred"?{background:"#eef1ef",color:cs}:{background:"#e8f4ed",color:l9};return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"520px"},children:[n.jsxs("div",{style:{display:"flex",gap:"0.9rem",justifyContent:"center",marginBottom:"1rem",fontSize:"0.74rem",color:cs},children:[n.jsx(hS,{dot:c9,label:"Marketing"}),n.jsx(hS,{dot:d9,label:"SDR"}),n.jsx(hS,{dot:uS,label:"Inferred Influences"})]}),n.jsxs("div",{style:{display:"flex",justifyContent:"space-between",alignItems:"baseline",marginBottom:"0.35rem",gap:"0.5rem",flexWrap:"wrap"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.05rem",fontWeight:700,color:xf},children:"Zero-sum attribution"}),n.jsx("span",{style:{fontSize:"0.7rem",fontWeight:700,color:l9,fontVariantNumeric:"tabular-nums"},children:"Total: $165.5K · 100% allocated"})]}),n.jsx("p",{style:{margin:"0 0 0.65rem 0",fontSize:"0.74rem",color:cs,lineHeight:1.5},children:"Every dollar of pipeline credit is assigned to exactly one touchpoint, team, or channel. No double counting, no rounding errors."}),n.jsx("div",{style:{display:"flex",gap:"0.3rem",marginBottom:"0.7rem"},children:["By Team","Timeline"].map((r,o)=>n.jsx("span",{style:{padding:"0.35rem 0.8rem",fontSize:"0.78rem",fontWeight:600,color:o===0?xf:cs,background:o===0?"#fff":"transparent",border:o===0?"1px solid #eaeeea":"1px solid transparent",borderRadius:"6px"},children:r},r))}),n.jsxs("div",{style:{display:"grid",gridTemplateColumns:t,gap:"0.5rem",fontSize:"0.66rem",fontWeight:700,color:cs,letterSpacing:"0.06em",textTransform:"uppercase",padding:"0.5rem 0",borderBottom:"1px solid #eaeeea"},children:[n.jsx("span",{children:"Activity"}),n.jsx("span",{style:{textAlign:"right"},children:"Credit"}),!e&&n.jsx("span",{children:"Date"}),!e&&n.jsx("span",{children:"Type"})]}),a.map((r,o)=>{const l=r.subtotal;return n.jsxs("div",{style:{display:"grid",gridTemplateColumns:t,gap:"0.5rem",alignItems:"center",padding:"0.45rem 0",borderBottom:"1px solid #f5f7fa",background:l?"#F5F7FA":"transparent",margin:l?"0 -0.5rem":"0",paddingLeft:l?"0.5rem":"0",paddingRight:l?"0.5rem":"0"},children:[n.jsxs("span",{style:{fontSize:l?"0.8rem":"0.82rem",fontWeight:l?700:r.depth===1?600:500,color:l?xf:r.depth>=2?cs:xf,paddingLeft:`${r.depth*.85}rem`,display:"flex",alignItems:"center",gap:"0.4rem",letterSpacing:l?"0.03em":"normal"},children:[l&&r.sectionTone&&n.jsx("span",{style:{width:6,height:6,borderRadius:"50%",background:r.sectionTone,flexShrink:0}}),n.jsxs("span",{style:{display:"flex",flexDirection:"column",minWidth:0},children:[n.jsx("span",{children:r.label}),e&&r.date&&n.jsx("span",{style:{fontSize:"0.66rem",fontWeight:500,color:cs,fontVariantNumeric:"tabular-nums"},children:r.date})]})]}),n.jsx("span",{style:{textAlign:"right",fontSize:"0.82rem",fontWeight:l?700:600,color:xf,fontVariantNumeric:"tabular-nums"},children:r.credit}),!e&&n.jsx("span",{style:{fontSize:"0.72rem",color:cs,fontVariantNumeric:"tabular-nums"},children:r.date??""}),!e&&n.jsx("span",{children:r.type&&n.jsx("span",{style:{...i(r.type),fontSize:"0.66rem",fontWeight:700,padding:"0.15rem 0.45rem",borderRadius:"4px",letterSpacing:"0.03em"},children:r.type})})]},o)}),n.jsx("p",{style:{margin:"0.95rem 0 0 0",fontSize:"0.74rem",color:cs,fontStyle:"italic",textAlign:"center"},children:"Every credit cites the touchpoint that drove it."})]})},hS=({dot:e,label:t})=>n.jsxs("span",{style:{display:"inline-flex",alignItems:"center",gap:"0.3rem"},children:[n.jsx("span",{style:{width:8,height:8,borderRadius:"50%",background:e}}),t]}),ld="#2d6a4f",X4="#509A79",Q4="#347BD1",Sve="#a1560b",ig="#1b1f1c",hs="#5f6563",Cve=()=>{const e=[{system:"Gmail",label:"[email protected]",detail:"Event signup, no title",tone:Q4},{system:"Salesforce",label:"Sarah C.",detail:"Lead, no job title",tone:Sve}
7717,{system:"HubSpot",label:"[email protected]",detail:"VP Product, Beacon Labs",tone:ld}];return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"460px",display:"flex",flexDirection:"column",gap:"1rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.78rem",fontWeight:700,color:Q4,letterSpacing:"0.05em",textTransform:"uppercase"},children:"One person, three systems"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:"0.5rem"},children:e.map(t=>n.jsxs("div",{style:{background:"#F5F7FA",border:"1px solid #eaeeea",borderRadius:"8px",padding:"0.6rem 0.7rem",minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.68rem",fontWeight:700,color:t.tone,letterSpacing:"0.05em",textTransform:"uppercase"},children:t.system}),n.jsx("p",{style:{margin:"0.25rem 0 0.15rem 0",fontSize:"0.8rem",fontWeight:600,color:ig,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:t.label}),n.jsx("p",{style:{margin:0,fontSize:"0.72rem",color:hs,lineHeight:1.35},children:t.detail})]},t.system))}),n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.5rem",justifyContent:"center",margin:"0.15rem 0"},children:[n.jsx("div",{style:{flex:1,height:"1px",background:"#eaeeea"}}),n.jsx("span",{style:{fontSize:"1.2rem",color:X4,lineHeight:1},children:"↓"}),n.jsx("span",{style:{fontSize:"0.74rem",fontWeight:700,color:ld,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Merged"}),n.jsx("span",{style:{fontSize:"1.2rem",color:X4,lineHeight:1},children:"↓"}),n.jsx("div",{style:{flex:1,height:"1px",background:"#eaeeea"}})]}),n.jsxs("div",{style:{background:"#e8f4ed",border:`1.5px solid ${ld}`,borderRadius:"10px",padding:"1rem 1.1rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.7rem",fontWeight:700,color:ld,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Unified identity"}),n.jsx("p",{style:{margin:"0.3rem 0 0.15rem 0",fontSize:"1.15rem",fontWeight:700,color:ig,lineHeight:1.2},children:"Sarah Chen"}),n.jsx("p",{style:{margin:0,fontSize:"0.85rem",color:hs,lineHeight:1.35},children:"VP Product · Beacon Labs · 3 sources merged"})]})]})},Ave=()=>{const e=[{name:"J. Ortega",role:"AE-owned champion"}],t=[{name:"C. Bennett",role:"CMO",source:"Meeting invite"},{name:"K. Park",role:"Internal champion",source:"Slack thread"},{name:"D. Foster",role:"Tech evaluator",source:"Demo recording"},{name:"R. Patel",role:"Legal",source:"Email thread"},{name:"L. Schmidt",role:"Procurement",source:"Call transcript"},{name:"A. Kim",role:"Security",source:"Email CC"}],a={display:"flex",justifyContent:"space-between",alignItems:"center",padding:"0.4rem 0",fontSize:"0.82rem"};return n.jsxs("div",{style:{background:"#fff",borderRadius:"14px",boxShadow:"0 8px 30px rgba(27, 31, 28, 0.08)",padding:"1.5rem",fontFamily:"'Geist', sans-serif",width:"100%",maxWidth:"480px"},children:[n.jsx("p",{style:{margin:"0 0 0.15rem 0",fontSize:"0.78rem",fontWeight:700,color:Q4,letterSpacing:"0.05em",textTransform:"uppercase"},children:"Opportunity"}),n.jsx("p",{style:{margin:"0 0 1.1rem 0",fontSize:"1.05rem",fontWeight:700,color:ig},children:"Beacon Labs · $200K Pilot"}),n.jsxs("div",{style:{marginBottom:"1rem"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.4rem",marginBottom:"0.4rem"},children:[n.jsx("span",{style:{fontSize:"0.68rem",fontWeight:700,background:"#f5f7fa",color:hs,padding:"0.15rem 0.45rem",borderRadius:"4px",letterSpacing:"0.05em"},children:"OPPORTUNITY CONTACT ROLE"}),n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:700,color:hs},children:"1"})]}),e.map(i=>n.jsxs("div",{style:a,children:[n.jsxs("span",{style:{color:ig,fontWeight:500},children:[n.jsx("span",{style:{color:hs,marginRight:"0.35rem"},children:"•"}),i.name]}),n.jsx("span",{style:{color:hs,fontSize:"0.74rem"},children:i.role})]},i.name))]}),n.jsxs("div",{children:[n.jsxs("div",{style:{display:"flex",alignItems:"center",gap:"0.4rem",marginBottom:"0.4rem"},children:[n.jsx("span",{style:{fontSize:"0.68rem",fontWeight:700,background:"#e8f4ed",color:ld,padding:"0.15rem 0.45rem",borderRadius:"4px",letterSpacing:"0.05em"},children:"DETECTED BY UPSIDE"}),n.jsx("span",{style:{fontSize:"0.78rem",fontWeight:700,color:ld},children:"+6"})]}),t.map(i=>n.jsxs("div",{style:a,children:[n.jsxs("span",{style:{color:ig,fontWeight:500},children:[n.jsx("span",{style:{color:ld,marginRight:"0.35rem"},children:"★"}),i.name," ",n.jsxs("span",{style:{color:hs,fontWeight:400},children:["· ",i.role]}
7717)]}),n.jsx("span",{style:{color:hs,fontSize:"0.72rem",background:"#f5f7fa",padding:"0.15rem 0.4rem",borderRadius:"4px"},children:i.source})]},i.name))]}),n.jsxs("div",{style:{marginTop:"1rem",paddingTop:"0.9rem",borderTop:"1px solid #eef1ef",display:"flex",justifyContent:"space-between",alignItems:"center"},children:[n.jsx("span",{style:{fontSize:"0.82rem",color:hs},children:"Real buying group"}),n.jsx("span",{style:{fontSize:"1.2rem",fontWeight:700,color:X4},children:"7 stakeholders"})]})]})},Tve=[{step:"01",title:"We unify all your GTM data",body:"Upside connects to and extracts data from every system in your GTM stack, including CRM, Marketing automation, meeting recorders, web analytics, and ad platforms. When all your data is in one place, you can cross reference activities across systems and teams.",accent:Pe.blue,accentBg:j0["blue-soft"],visual:n.jsx(Cve,{})},{step:"02",title:"We heal it so that it can be trusted",body:"Upside deduplicates people across systems with our identity resolution engine, fills missing touchpoints, and rebuilds the full buying group for every deal, automatically.",accent:Pe.green,accentBg:j0["green-light"],visual:n.jsx(Ave,{})},{step:"03",title:"We help you understand exactly what's working and what's not",body:"AI-powered zero-sum attribution that's defensible in a board meeting. Advanced influence detection. Pre-built dashboards for the views you run most. And an MCP so you can ask Claude, ChatGPT, or any AI tool you already use the questions only you would think to ask.",accent:Pe.purple,accentBg:j0["purple-soft"],visual:n.jsx(jve,{})}
7717],l7=({eyebrow:e="The Upside approach",heading:t="Three things we do that legacy attribution can't",steps:a=Tve})=>n.jsx("section",{style:{padding:"4.5rem 1.25rem",background:Pe.bgSoft},children:n.jsxs("div",{style:{maxWidth:"1296px",margin:"0 auto"},children:[n.jsxs("div",{style:{textAlign:"center",marginBottom:"3rem"},children:[n.jsx("p",{style:{margin:"0 0 0.75rem 0",fontSize:"0.78rem",fontWeight:700,color:Pe.green,letterSpacing:"0.1em",textTransform:"uppercase"},children:e}),n.jsx("h2",{style:{margin:0,fontSize:"clamp(1.6rem, 3vw, 2.3rem)",fontWeight:700,color:Pe.text,letterSpacing:"-0.01em"},children:t})]}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"3rem"},children:a.map((i,r)=>n.jsxs("div",{style:{display:"flex",flexDirection:r%2===1?"row-reverse":"row",gap:"2.5rem",alignItems:"center"},className:"lp-approach-row",children:[n.jsxs("div",{style:{flex:"1 1 0",minWidth:0},children:[n.jsxs("span",{style:{display:"inline-block",background:i.accentBg,color:i.accent,fontSize:"0.75rem",fontWeight:700,letterSpacing:"0.1em",textTransform:"uppercase",padding:"0.3rem 0.7rem",borderRadius:"999px",marginBottom:"1rem"},children:["Step ",i.step]}),n.jsx("h3",{style:{margin:"0 0 0.85rem 0",fontSize:"1.6rem",fontWeight:700,color:Pe.text,lineHeight:1.2},children:i.title}),n.jsx("div",{style:{margin:0,fontSize:"1.02rem",lineHeight:1.6,color:Pe.muted},children:i.body})]}),n.jsx("div",{style:{flex:"1 1 0",minWidth:0,display:"flex",justifyContent:"center"},children:i.visual})]},i.step))})]})}),c7=({caption:e="See what Upside can do with your data.",ctaLabel:t})=>n.jsx("section",{style:{padding:"3.5rem 1.25rem",background:`linear-gradient(180deg, ${Pe.bgSoft} 0%, ${Pe.greenLight} 100%)`,borderTop:`1px solid ${Pe.border}`,borderBottom:`1px solid ${Pe.border}`},children:n.jsxs("div",{style:{maxWidth:"780px",margin:"0 auto",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",gap:"1.25rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.25rem",fontWeight:600,color:Pe.text,lineHeight:1.4,letterSpacing:"-0.005em"},children:e}),n.jsx(GH,{label:t})]})}),pS={name:"SOC 2 Type II Compliant",src:$G},_ve=[{name:"GDPR Compliant",src:GG},{name:"CCPA / CPRA Compliant",src:FG},{name:"CSA STAR Level 1",src:HG},{name:"CSA Corporate Member",src:YG}],Mve="https://trust.upside.tech",d7=()=>n.jsx("section",{style:{padding:"4.5rem 1.25rem 4rem",background:"#fff"},children:n.jsxs("div",{style:{maxWidth:"1100px",margin:"0 auto"},children:[n.jsxs("div",{style:{textAlign:"center",marginBottom:"2.5rem"},children:[n.jsx("p",{style:{margin:"0 0 0.85rem 0",fontSize:"0.78rem",fontWeight:700,color:Pe.green,letterSpacing:"0.1em",textTransform:"uppercase"},children:"Built for the enterprise"}),n.jsx("h2",{style:{margin:"0 0 1rem 0",fontSize:"clamp(1.6rem, 3vw, 2.3rem)",fontWeight:700,lineHeight:1.15,color:Pe.text,letterSpacing:"-0.01em"},children:"Security isn't an afterthought. It's where we started."}),n.jsx("p",{style:{margin:"0 auto",maxWidth:"720px",fontSize:"1.05rem",lineHeight:1.55,color:Pe.muted},children:"We earned our SOC 2 Type II attestation before we shipped our first product. Your GTM data is the lifeblood of your organization, and we treat it that way."})]}),n.jsxs("div",{className:"lp-security-grid",style:{display:"grid",gridTemplateColumns:"1fr 2fr",gap:"1rem"},children:[n.jsxs("div",{style:{background:"#fff",border:`1px solid ${Pe.border}`,borderRadius:"12px",padding:"3rem 1.5rem",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center",textAlign:"center",gap:"1.5rem"},children:[n.jsx("img",{src:pS.src,alt:pS.name,loading:"lazy",style:{width:144,height:144,objectFit:"contain"}}),n.jsxs("div",{style:{display:"flex",flexDirection:"column",alignItems:"center",gap:"0.4rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.2rem",fontWeight:700,color:Pe.text,lineHeight:1.3},children:pS.name}),n.jsx("a",{href:Mve,target:"_blank",rel:"noopener noreferrer",style:{fontSize:"0.78rem",fontWeight:600,color:Pe.ctaGreen,textDecoration:"none",transition:"color 120ms ease"},onMouseEnter:e=>{e.currentTarget.style.color=Pe.ctaGreenHover},onMouseLeave:e=>{e.currentTarget.style.color=Pe.ctaGreen},children:"View Trust Center →"})]})]}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(2, 1fr)",gap:"1rem"},children:_ve.map(e=>n.jsxs("div",{style:{background:"#fff",border:`1px solid ${Pe.border}`,borderRadius:"12px",padding:"1.5rem 1.4rem",display:"flex",flexDirection:"row",alignItems:"center",gap:"1.1rem"},children:[n.jsx("img",{src:e.src,alt:e.name,loading:"lazy",style:{width:76,height:76,objectFit:"contain",flexShrink:0}}),n.jsx("p",{style:{margin:0,fontSize:"1.05rem",fontWeight:700,color:Pe.text,lineHeight:1.3},children:e.name})]},e.name))})]})]})}),u7=({faqs:e,defaultOpenIndex:t=0})=>{const[a,i]=M.useState(t);return n.jsx("section",{style:{padding:"4.5rem 1.25rem",background:Pe.bgSoft},children:n.jsxs("div",{style:{maxWidth:"960px",margin:"0 auto"},children:[n.jsx("div",{style:{textAlign:"center",marginBottom:"2.5rem"},children:n.jsx("h2",{style:{margin:0,fontSize:"clamp(1.6rem, 3vw, 2.3rem)",fontWeight:700,color:Pe.text,letterSpacing:"-0.01em"},children:"Frequently asked questions"})}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.65rem"},children:e.map((r,o)=>{const l=a===o;return n.jsxs("div",{style:{background:"#fff",border:`1px solid ${l?Pe.green:Pe.border}`,borderRadius:"12px",overflow:"hidden",transition:"border-color 150ms ease"},children:[n.jsxs("button",{type:"button",onClick:()=>i(l?null:o),"aria-expanded":l,style:{width:"100%",background:"transparent",border:"none",padding:"1.35rem 1.5rem",display:"flex",alignItems:"center",justifyContent:"space-between",gap:"1rem",cursor:"pointer",textAlign:"left",fontFamily:"'Geist', sans-serif",fontSize:"1.1rem",fontWeight:600,color:Pe.text,lineHeight:1.4},children:[n.jsx("span",{children:r.question}),n.jsx("span",{style:{color:Pe.green,fontSize:"1.5rem",transform:l?"rotate(45deg)":"rotate(0deg)",transition:"transform 150ms ease",lineHeight:1,flexShrink:0}
7717,"aria-hidden":!0,children:"+"})]}),l&&n.jsx("div",{style:{padding:"0 1.5rem 1.5rem",fontSize:"1.05rem",lineHeight:1.65,color:Pe.muted},children:r.answer})]},r.question)})})]})})},h7=({headline:e="Get started today",subhead:t="Stop reconciling reports. Start funding what actually drives revenue.",ctaLabel:a="Book a Demo"})=>n.jsx("section",{style:{padding:"5rem 1.25rem",background:"linear-gradient(145deg, #0c1a14 0%, #1b2922 100%)",color:"#fff"},children:n.jsxs("div",{style:{maxWidth:"780px",margin:"0 auto",textAlign:"center"},children:[n.jsx("h2",{style:{margin:"0 0 1rem 0",fontSize:"clamp(1.8rem, 3.2vw, 2.6rem)",fontWeight:700,lineHeight:1.15,letterSpacing:"-0.01em",color:"#fff"},children:e}),n.jsx("p",{style:{margin:"0 0 2rem 0",fontSize:"1.1rem",lineHeight:1.55,color:"#c9d1cd"},children:t}),n.jsx(J,{to:Wt,style:{display:"inline-block",background:"#fff",color:Pe.ctaGreen,fontFamily:"'Geist', sans-serif",fontSize:"1.05rem",fontWeight:700,border:"none",borderRadius:"10px",padding:"0.95rem 1.9rem",cursor:"pointer",boxShadow:"0 8px 24px rgba(0,0,0,0.2)",transition:"transform 120ms ease, box-shadow 120ms ease",textDecoration:"none"},onMouseEnter:i=>{i.currentTarget.style.transform="translateY(-1px)",i.currentTarget.style.boxShadow="0 10px 28px rgba(0,0,0,0.28)"},onMouseLeave:i=>{i.currentTarget.style.transform="translateY(0)",i.currentTarget.style.boxShadow="0 8px 24px rgba(0,0,0,0.2)"},children:a})]})}),Eve="B2B Marketing Attribution",Rve="B2B Marketing Attribution, Rebuilt for the AI Era",Nve="AI changed what's possible. See what actually drove every deal. Know where to invest next, with confidence.",Ove="Designed for B2B revenue teams with complex deals",Pve="Trusted by Marketing, RevOps, and GTM leaders at forward-thinking companies:",Ive=["assembled-buyer-journey","comply-pinball","graphite-events-flywheel"],HH=[{question:"My data is messy. Does that matter?",answer:"Most of our customers come to us with messy GTM data. That's the norm, not the exception. Upside is designed to heal it: deduplicating people across systems with our identity resolution engine, reconstructing missing touchpoints, and rebuilding the buying group on every deal even when CRM contact roles are incomplete. The one thing we can't do is invent data that isn't there. Upside doesn't pull from third-party enrichment vendors, so as long as you have a CRM and at least one other GTM system tracking activity, we have something to work with."},{question:"How does your attribution model actually work?",answer:"It's not position-based or rule-weighted like first-touch, last-touch, or W-shaped. Upside uses AI to read every touch on a deal in context, including the full transcripts, emails, and CRM activity, and surface the handful of touchpoints that actually moved the deal forward. We call this approach forensic, not formulaic. For teams that need a dollar-level breakdown for budget reallocation or board reporting, our zero-sum attribution model goes further: AI reasons over the full deal context and assigns real dollars of credit to the specific touchpoints that drove the outcome. The result is attribution you can defend in a board meeting."},{question:"Will this give me better results than my current first-touch, last-touch, or W-shaped model?",answer:"Without a doubt, especially if your deals involve a buying committee and a sales cycle longer than a quarter. Position-based models depend on data being perfectly captured, attributed, and deduplicated in your CRM. For complex B2B deals, that's almost never true. Upside reads what actually happened across all your GTM systems, including emails and meeting transcripts, and surfaces the touches that moved the deal. That's a fundamentally different question than 'which click came first or last.'"},{question:"Can Upside help me identify dark social and self-reported attribution?",answer:"Yes. When there's a record of it anywhere in your systems, Upside can find it. If someone mentions on a discovery call that they saw your content on LinkedIn or heard you on a podcast, or fills out an unstructured form field about how they heard about you, we crawl the unstructured data, extract those signals, and roll them up into your sourced and influenced reporting. That includes review-site mentions, community references, podcast plays, and word-of-mouth that traditional tracking misses entirely."},{question:"Can Upside report on AEO and GEO performance?",answer:"Yes. Upside captures both sides of AEO and GEO measurement. On the structured side, we identify traffic in your systems associated with citation clicks from LLM-provided answers like Perplexity, ChatGPT, Claude, and Gemini. On the unstructured side, we extract signals from call transcripts, emails, and form fields where prospects mention how they used AI tools to research you. Both feed into a unified view of how AI-driven discovery is contributing to your pipeline."},{question:"How is this different from just pointing Claude at Salesforce?",answer:"AI is only as good as the data underneath it, and raw Salesforce data is almost never in shape for it. Pointing Claude at your CRM gets you confident-sounding answers built on duplicate contacts, missing touchpoints, and CRM fields nobody keeps current. Upside does the boring infrastru
7717cture work first: unifying every GTM system, deduplicating people, reconstructing missing touchpoints, and rebuilding buying groups. Then we expose that healed data layer through MCP so you can use the AI tool of your choice on data you can actually trust. And because we're SOC 2 Type II compliant, sandboxed, and never train on your data, the same security posture that blocks 'just use ChatGPT' tends to greenlight Upside."},{question:"How long does implementation and onboarding take?",answer:"Most onboardings take less than 48 hours. You connect your systems with 1 to 3 OAuth clicks, and we handle the rest. No field mapping, no configuration rules, no installations on your website or in your CRM. Your operations team isn't on the hook to set anything up. The platform configures itself against your data, and your dashboard goes live in as little as 24 hours."},{question:"Do I need to install a tracker, a script, or third-party cookies on my website?",answer:"No. Upside doesn't require a tracking script, a snippet, or any third-party cookies. We integrate directly with your existing marketing automation system and extract all of your historic data, including UTM parameters and web visit history. There's nothing new to install, no engineering work to schedule, and no privacy implications to review. You get insights from day one against the full history you've already been collecting."},{question:"Does Upside replace HubSpot or Salesforce?",answer:"No. Upside complements your existing GTM stack. HubSpot and Salesforce stay in place as the systems your reps and marketing team use day-to-day. Upside reads from them, unifies the data with everything else in your stack, and writes enriched attribution back so your existing dashboards get smarter."},{question:"What systems do you integrate with?",answer:"Upside connects to the systems your GTM team already uses: Salesforce and HubSpot for CRM; HubSpot Marketing Hub and Marketo for marketing automation; Gong, Fireflies, Fathom, and Clari Copilot for meeting recordings and call intelligence; Google Ads, LinkedIn Ads, and Reddit Ads for ad platforms. We're shipping new integrations rapidly."},{question:"Do you ingest call recordings, emails, and meeting transcripts?",answer:"Yes. Upside ingests every GTM communication and activity, not just clicks and form fills. We pull full meeting transcripts from Gong, Fireflies, Fathom, and Clari Copilot. We extract emails and call notes from the tasks and activities logged in your CRM, and we read transcripts of customer calls to detect signals like buying group members, deal stage progression, and competitive mentions. All of this gets reconstructed into a unified timeline for every account and opportunity."},{question:"Can I plug Upside into Claude, ChatGPT, or Cursor?",answer:"Absolutely. Upside ships with a full MCP interface, so any AI tool that supports MCP can query Upside's data directly. That includes Claude, ChatGPT, Cursor, Notion, Glean, Dust, and others. You can ask natural language questions, run custom analyses, and even build interactive miniapps on top of your Upside data using AI coding tools. Documentation walks your team through setup, and access is read-only by default so MCP can never modify or write anything to your source systems."}],Dve="B2B Marketing Attribution Software",YH="Upside is B2B marketing attribution rebuilt for the AI era. Connect every dollar to pipeline and revenue, automatically. Account-level, AI-driven, Salesforce and HubSpot native.",Wve={"@context":"https://schema.org","@graph":[{"@type":"Product",name:"Upside B2B Marketing Attribution",description:YH,brand:{"@type":"Brand",name:"Upside"},url:"https://upside.tech/lp/b2b-marketing-attribution"},{"@type":"FAQPage",mainEntity:HH.map(e=>({"@type":"Question",name:e.question,acceptedAnswer:{"@type":"Answer",text:e.answer}}))}]},zve=()=>n.jsxs(a7,{children:[n.jsx(Je,{title:Dve,description:YH,noIndex:!0,jsonLd:Wve}),n.jsx(o7,{eyebrow:Eve,headline:Rve,subhead:Nve}),n.jsx(s7,{heading:Ove,subhead:Pve,testimonialIds:Ive}),n.jsx(l7,{}),n.jsx(c7,{caption:"Want to take your B2B marketing attribution to the next level?"}),n.jsx(d7,{}),n.jsx(u7,{faqs:HH}),n.jsx(h7,{})]}),hp="#2d6a4f",u9="#347BD1",h9="#7a4a9e",Z4="#a1560b",Gd="#1b1f1c",pp="#5f6563",Lve="#b3261e",Uve=[{label:"Pipeline sourced (TTM)",value:"$48.7M",tone:"#5fd4c9"},{label:"Active deals in motion",value:"412",tone:"#c79efb"},{label:"Pipeline won (TTM)",value:"$15.9M",tone:"#86e3a8"}],Bve=[{key:"pipeline",label:"Pipeline by Team"},{key:"top",label:"Top GTM Programs"},{key:"playbook",label:"Keep / Optimize / Stop"}],qve=[{channel:"Marketing",pipeline:"$14.8M",pct:100,tone:hp},{channel:"Sales Development",pipeline:"$10.7M",pct:72,tone:hp},{channel:"Partner Program",pipeline:"$8.4M",pct:57,tone:u9},{channel:"Outbound Sales",pipeline:"$6.1M",pct:41,tone:u9},{channel:"Customer Expansion",pipeline:"$4.2M",pct:28,tone:h9},{channel:"Channel Resellers",pipeline:"$2.6M",pct:18,tone:h9}
7717,{channel:"Inbound Self-Serve",pipeline:"$1.3M",pct:9,tone:Z4},{channel:"Events Co-Sell",pipeline:"$0.6M",pct:4,tone:Z4}],$ve=[{rank:1,name:"Annual user summit",meta:"Marketing · NA flagship",delta:"+22%",influenced:"$4.2M"},{rank:2,name:"Partner co-sell program",meta:"Partner · top 50 accounts",delta:"+18%",influenced:"$3.4M"},{rank:3,name:"ABM outbound (joint)",meta:"Marketing + SDR · ENT",delta:"+15%",influenced:"$2.8M"},{rank:4,name:"Customer story hub",meta:"Marketing · all segments",delta:"+11%",influenced:"$2.1M"}],Fve=[{bucket:"Keep",bg:"#e8f4ed",border:"#b6d7c1",accent:hp,items:[{label:"Annual user summit",note:"Marketing · 84 progressed · $5.8M won"},{label:"Partner co-sell program",note:"Partner · $6.1M influenced pipeline"}]},{bucket:"Optimize",bg:"#fdeccf",border:"#f0d591",accent:Z4,items:[{label:"SDR cold outbound",note:"SDR · 412 sequenced, only 14 progressed"},{label:"Customer expansion plays",note:"CS · activity high, conversion flat"}]},{bucket:"Stop",bg:"#fbe0e0",border:"#e9b9b9",accent:Lve,items:[{label:"Generic email blasts",note:"Marketing · 0.04% click rate"},{label:"Press release distribution",note:"PR · 38 sends · 2 progressed"}]}],Gve=310,p7=({children:e})=>n.jsx("div",{style:{background:"#fff",padding:"1.25rem 1.4rem 1.4rem",height:Gve,boxSizing:"border-box",overflow:"hidden",display:"flex",flexDirection:"column"},children:e}),m7=({eyebrow:e,hint:t})=>n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",marginBottom:"0.85rem",gap:"0.75rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.72rem",fontWeight:700,color:hp,letterSpacing:"0.08em",textTransform:"uppercase"},children:e}),t&&n.jsx("p",{style:{margin:0,fontSize:"0.72rem",color:pp,fontStyle:"italic"},children:t})]}),Hve=()=>n.jsxs(p7,{children:[n.jsx(m7,{eyebrow:"Sourced pipeline · last 90 days",hint:"By GTM source team"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:qve.map(e=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"180px 1fr 64px",gap:"0.6rem",alignItems:"center"},children:[n.jsx("p",{style:{margin:0,fontSize:"0.82rem",fontWeight:600,color:Gd,lineHeight:1.3},children:e.channel}),n.jsx("div",{style:{height:12,borderRadius:999,background:"#f0f3f1",overflow:"hidden",position:"relative"},children:n.jsx("div",{style:{width:`${e.pct}%`,height:"100%",borderRadius:999,background:`linear-gradient(90deg, ${e.tone} 0%, ${e.tone}cc 100%)`,transition:"width 400ms ease"}})}),n.jsx("p",{style:{margin:0,fontSize:"0.82rem",fontWeight:700,color:Gd,textAlign:"right",fontVariantNumeric:"tabular-nums"},children:e.pipeline})]},e.channel))})]}),Yve=()=>n.jsxs(p7,{children:[n.jsx(m7,{eyebrow:"Top GTM programs by influenced pipeline",hint:"Across all teams"}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.5rem"},children:$ve.map(e=>n.jsxs("div",{style:{display:"grid",gridTemplateColumns:"30px 1fr auto auto",alignItems:"center",gap:"0.8rem",padding:"0.65rem 0.8rem",borderRadius:"8px",background:e.rank===1?"#e8f4ed":"#F5F7FA",border:e.rank===1?"1px solid #b6d7c1":"1px solid #eef1ef"},children:[n.jsxs("span",{style:{fontSize:"0.78rem",fontWeight:800,color:e.rank===1?hp:pp,fontVariantNumeric:"tabular-nums"},children:["#",e.rank]}),n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.86rem",fontWeight:700,color:Gd,lineHeight:1.25},children:e.name}),n.jsx("p",{style:{margin:"0.15rem 0 0 0",fontSize:"0.72rem",color:pp},children:e.meta})]}),n.jsxs("span",{style:{fontSize:"0.72rem",fontWeight:700,color:hp,background:"#dff0e6",padding:"0.2rem 0.55rem",borderRadius:999},children:["↑ ",e.delta.replace("+","")]}),n.jsx("span",{style:{fontSize:"0.86rem",fontWeight:700,color:Gd,fontVariantNumeric:"tabular-nums",minWidth:60,textAlign:"right"},children:e.influenced})]},e.name))})]}),Vve=()=>n.jsxs(p7,{children:[n.jsx(m7,{eyebrow:"Recommended GTM moves",hint:"Across teams · last 90 days"}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:"0.65rem",flex:1,minHeight:0},children:Fve.map(e=>n.jsxs("div",{style:{background:e.bg,border:`1px solid ${e.border}`,borderRadius:"10px",padding:"1rem 0.95rem",display:"flex",flexDirection:"column",gap:"0.7rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.3rem",fontWeight:800,color:e.accent,letterSpacing:"-0.005em",lineHeight:1},children:e.bucket}),n.jsx("div",{style:{display:"flex",flexDirection:"column",gap:"0.65rem",borderTop:`1px solid ${e.border}`,paddingTop:"0.75rem"},children:e.items.map(t=>n.jsxs("div",{children:[n.jsx("p",{style:{margin:0,fontSize:"0.82rem",fontWeight:700,color:Gd,lineHeight:1.25},children:t.label}),n.jsx("p",{style:{margin:"0.18rem 0 0 0",fontSize:"0.72rem",color:pp,lineHeight:1.4},children:t.note})]},t.label))})]},e.bucket))})]}),VH=({title:e="GTM Performance",subtitle:t="Cross-team pipeline view · Marketing, SDR, Partner, Sales, CS"}={})=>{const[a,i]=M.useState("pipeline"),r=()=>{switch(a){case"pipeline":return n.jsx(Hve,{});case"top":return n.jsx(Yve,{});case"playbook":return n.jsx(Vve,{})}};return n.jsxs("div",{style:{width:"100%",maxWidth:"820px",fontFamily:"'Geist', sans-serif",borderRadius:"14px",overflow:"hidden",boxShadow:"0 16px 50px rgba(27, 31, 28, 0.18)",background:"#fff"},children:[n.jsx("style",{children:`
7718        @keyframes lp-live-dot-pulse {
7719          0% {
7720            box-shadow: 0 0 0 0 rgba(134,227,168,0.7);
7721            transform: scale(1);
7722          }
7723          70% {
7724            box-shadow: 0 0 0 6px rgba(134,227,168,0);
7725            transform: scale(1.05);
7726          }
7727          100% {
7728            box-shadow: 0 0 0 0 rgba(134,227,168,0);
7729            transform: scale(1);
7730          }
7731        }
7732        @media (prefers-reduced-motion: reduce) {
7733          .lp-live-pill > span[aria-hidden] {
7734            animation: none !important;
7735          }
7736        }
7737      `}),n.jsxs("div",{style:{background:"linear-gradient(145deg, #0c1a14 0%, #1b2922 100%)",color:"#fff",padding:"1.25rem 1.4rem 1.1rem"},children:[n.jsxs("div",{style:{display:"flex",alignItems:"baseline",justifyContent:"space-between",gap:"0.75rem",marginBottom:"0.15rem"},children:[n.jsx("p",{style:{margin:0,fontSize:"1.05rem",fontWeight:700,lineHeight:1.2},children:e}),n.jsxs("span",{className:"lp-live-pill",style:{fontSize:"0.62rem",fontWeight:700,color:"#86e3a8",background:"rgba(134,227,168,0.12)",padding:"0.2rem 0.55rem",borderRadius:999,letterSpacing:"0.05em",display:"inline-flex",alignItems:"center",gap:"0.35rem"},children:[n.jsx("span",{"aria-hidden":!0,style:{width:6,height:6,borderRadius:"50%",background:"#86e3a8",boxShadow:"0 0 0 0 rgba(134,227,168,0.7)",animation:"lp-live-dot-pulse 1.6s ease-out infinite"}}),"LIVE"]})]}),n.jsx("p",{style:{margin:"0 0 0.95rem 0",fontSize:"0.78rem",color:"#c9d1cd"},children:t}),n.jsx("div",{style:{display:"grid",gridTemplateColumns:"repeat(3, 1fr)",gap:"0.55rem"},children:Uve.map(o=>n.jsxs("div",{style:{background:"rgba(255,255,255,0.04)",border:"1px solid rgba(255,255,255,0.08)",borderRadius:"8px",padding:"0.7rem 0.75rem",minWidth:0},children:[n.jsx("p",{style:{margin:0,fontSize:"0.62rem",fontWeight:700,color:"#8a9891",letterSpacing:"0.05em",textTransform:"uppercase",lineHeight:1.3},children:o.label}),n.jsx("p",{style:{margin:"0.4rem 0 0 0",fontSize:"1.6rem",fontWeight:700,color:o.tone,lineHeight:1,fontVariantNumeric:"tabular-nums"},children:o.value})]},o.label))})]}),n.jsx("div",{role:"tablist","aria-label":"Dashboard views",style:{background:"#f5f7fa",borderTop:"1px solid #eaeeea",borderBottom:"1px solid #eaeeea",padding:"0.45rem 0.6rem",display:"flex",gap:"0.2rem",overflowX:"auto",whiteSpace:"nowrap"},children:Bve.map(o=>{const l=a===o.key;return n.jsx("button",{type:"button",role:"tab","aria-selected":l,onClick:()=>i(o.key),style:{appearance:"none",border:"none",fontFamily:"'Geist', sans-serif",padding:"0.45rem 0.85rem",borderRadius:"6px",fontSize:"0.78rem",fontWeight:600,color:l?Gd:pp,background:l?"#fff":"transparent",boxShadow:l?"0 1px 3px rgba(0,0,0,0.06)":"none",cursor:"pointer",flexShrink:0,transition:"background 120ms ease, color 120ms ease"},onMouseEnter:d=>{l||(d.currentTarget.style.color=Gd)},onMouseLeave:d=>{l||(d.currentTarget.style.color=pp)},children:o.label},o.key)})}),r()]})},Kve="AI GTM Analytics",Xve="AI Go-to-Market Analytics for B2B Revenue Teams",Qve="Unify sales, marketing, and meeting data with AI. Finally know what's actually driving pipeline. Make every GTM bet with evidence, not guesswork.",Zve="Trusted by GTM leaders at forward-thinking companies",Jve="Marketing, RevOps, and revenue teams that need to know what's actually driving pipeline.",e0e=["assembled-buyer-journey","comply-ai-use-case","dscout-faith-in-insight"],KH=[{question:"My data is messy. Does that matter?",answer:"Most of our customers come to us with messy GTM data. That's the norm, not the exception. Upside is designed to heal it: deduplicating people across systems with our identity resolution engine, reconstructing missing touchpoints, and rebuilding the buying group on every deal even when CRM contact roles are incomplete. The one thing we can't do is invent data that isn't there. Upside doesn't pull from third-party enrichment vendors, so as long as you have a CRM and at least one other GTM system tracking activity, we have something to work with."},{question:"How is this different from our HubSpot or Salesforce reports?",answer:"HubSpot and Salesforce reports show you what's in HubSpot and Salesforce. The problem is, that's only a fraction of what actually happened on a deal. The conversations on Gong, the meetings logged on someone else's calendar, the emails that never got tracked as activities, the LinkedIn ads, the webinar from three months ago: those signals live across a dozen systems, and your CRM only sees the ones your reps remembered to log. Upside reads from every system in y
7737our GTM stack, reconstructs the full picture, and gives you analytics that reflect what actually happened, not just what made it into the CRM."},{question:"How does your AI model actually work?",answer:"It's not position-based or rule-weighted like first-touch, last-touch, or W-shaped. Upside uses AI to read every signal across your GTM stack in context, including the full meeting transcripts, emails, and CRM activity, and surface the moments that actually moved each deal forward. We call this approach forensic, not formulaic. For teams that need a dollar-level breakdown for budget reallocation or board reporting, our zero-sum attribution model goes further: AI reasons over the full deal context and assigns real dollars of credit to the specific touchpoints that drove the outcome. The result is analytics you can defend in a board meeting."},{question:"Can Upside identify dark social and self-reported attribution?",answer:"Yes. When there's a record of it anywhere in your systems, Upside can find it. If someone mentions on a discovery call that they saw your content on LinkedIn or heard you on a podcast, or fills out an unstructured form field about how they heard about you, we crawl the unstructured data, extract those signals, and roll them up into your sourced and influenced reporting. That includes review-site mentions, community references, podcast plays, and word-of-mouth that traditional tracking misses entirely."},{question:"Can Upside report on AEO and GEO performance?",answer:"Yes. Upside captures both sides of AEO and GEO measurement. On the structured side, we identify traffic in your systems associated with citation clicks from LLM-provided answers like Perplexity, ChatGPT, Claude, and Gemini. On the unstructured side, we extract signals from call transcripts, emails, and form fields where prospects mention how they used AI tools to research you. Both feed into a unified view of how AI-driven discovery is contributing to your pipeline."},{question:"How is this different from just pointing Claude at Salesforce?",answer:"AI is only as good as the data underneath it, and raw Salesforce data is almost never in shape for it. Pointing Claude at your CRM gets you confident-sounding answers built on duplicate contacts, missing touchpoints, and CRM fields nobody keeps current. Upside does the boring infrastructure work first: unifying every GTM system, deduplicating people, reconstructing missing touchpoints, and rebuilding buying groups. Then we expose that healed data layer through MCP so you can use the AI tool of your choice on data you can actually trust. And because we're SOC 2 Type II compliant, sandboxed, and never train on your data, the same security posture that blocks 'just use ChatGPT' tends to greenlight Upside."},{question:"How long does implementation and onboarding take?",answer:"Most onboardings take less than 48 hours. You connect your systems with 1 to 3 OAuth clicks, and we handle the rest. No field mapping, no configuration rules, no installations on your website or in your CRM. Your operations team isn't on the hook to set anything up. The platform configures itself against your data, and your dashboard goes live in as little as 24 hours."},{question:"Do I need to install a tracker, a script, or third-party cookies on my website?",answer:"No. Upside doesn't require a tracking script, a snippet, or any third-party cookies. We integrate directly with your existing marketing automation system and extract all of your historic data, including UTM parameters and web visit history. There's nothing new to install, no engineering work to schedule, and no privacy implications to review. You get insights from day one against the full history you've already been collecting."},{question:"Does Upside replace HubSpot or Salesforce?",answer:"No. Upside complements your existing GTM stack. HubSpot and Salesforce stay in place as the systems your reps and marketing team use day-to-day. Upside reads from them, unifies the data with everything else in your stack, and writes enriched analytics back so your existing dashboards get smarter."},{question:"What systems do you integrate with?",answer:"Upside connects to the systems your GTM team already uses: Salesforce and HubSpot for CRM; HubSpot Marketing Hub and Marketo for marketing automation; Gong, Fireflies, Fathom, and Clari Copilot for meeting recordings and call intelligence; Google Ads, LinkedIn Ads, and Reddit Ads for ad platforms. We're shipping new integrations rapidly."},{question:"Do you ingest call recordings, emails, and meeting transcripts?",answer:"Yes. Upside ingests every GTM communication and activity, not just clicks and form fills. We pull full meeting transcripts from Gong, Fireflies, Fathom, and Clari Copilot. We extract emails and call notes from the tasks and activities logged in your CRM, and we read transcripts of customer calls to detect signals like buying group members, deal stage progression, and competitive mentions. All of this gets reconstructed 
7737into a unified timeline for every account and opportunity."},{question:"Can I plug Upside into Claude, ChatGPT, or Cursor?",answer:"Absolutely. Upside ships with a full MCP interface, so any AI tool that supports MCP can query Upside's data directly. That includes Claude, ChatGPT, Cursor, Notion, Glean, Dust, and others. You can ask natural language questions, run custom analyses, and even build interactive miniapps on top of your Upside data using AI coding tools. Documentation walks your team through setup, and access is read-only by default so MCP can never modify or write anything to your source systems."}],t0e="AI GTM Analytics Platform",XH="Unify your GTM data with AI. See which campaigns, channels, and motions actually drive B2B pipeline and revenue. Book a demo.",n0e={"@context":"https://schema.org","@graph":[{"@type":"Product",name:"Upside AI GTM Analytics",description:XH,brand:{"@type":"Brand",name:"Upside"},url:"https://upside.tech/lp/ai-gtm-analytics"},{"@type":"FAQPage",mainEntity:KH.map(e=>({"@type":"Question",name:e.question,acceptedAnswer:{"@type":"Answer",text:e.answer}}))}]},a0e=()=>n.jsxs(a7,{children:[n.jsx(Je,{title:t0e,description:XH,noIndex:!0,jsonLd:n0e}),n.jsx(o7,{eyebrow:Kve,headline:Xve,subhead:Qve,visual:n.jsx(VH,{})}),n.jsx(s7,{heading:Zve,subhead:Jve,testimonialIds:e0e}),n.jsx(l7,{heading:"How AI GTM analytics actually works"}),n.jsx(c7,{caption:"Want to see what's actually driving your pipeline?"}),n.jsx(d7,{}),n.jsx(u7,{faqs:KH}),n.jsx(h7,{})]}),i0e="Revenue Intelligence",r0e="The Revenue Intelligence Platform That Unifies Sales and Marketing",o0e="Most revenue intelligence platforms show you calls or campaigns. Upside unifies every signal across your GTM stack so you can finally see what drives every deal.",s0e="Trusted by revenue leaders at forward-thinking companies",l0e="CROs, VP Sales, and RevOps teams that need one revenue model instead of two siloed tools.",c0e=["assembled-executive-use","comply-data-trail","syndio-revenue-reporting"],QH=[{question:"How is Upside different from Gong, Clari, or other revenue intelligence platforms?",answer:"Most revenue intelligence platforms specialize in one side of GTM. Gong and Clari are built around sales calls and forecasting. HockeyStack and Dreamdata are built around marketing attribution. Each is great at its slice, but leaves the other half of your GTM out of the picture. Upside is built on a unified data foundation that combines calls, campaigns, emails, meetings, and CRM activity into one revenue model. You get a complete view of what drove every deal across every team, not just the slice your other tools can see."},{question:"My data is messy. Does that matter?",answer:"Most of our customers come to us with messy GTM data. That's the norm, not the exception. Upside is designed to heal it: deduplicating people across systems with our identity resolution engine, reconstructing missing touchpoints, and rebuilding the buying group on every deal even when CRM contact roles are incomplete. The one thing we can't do is invent data that isn't there. Upside doesn't pull from third-party enrichment vendors, so as long as you have a CRM and at least one other GTM system tracking activity, we have something to work with."},{question:"How does your AI model actually work?",answer:"It's not position-based or rule-weighted like first-touch, last-touch, or W-shaped. Upside uses AI to read every signal across your GTM stack in context, including the full meeting transcripts, emails, and CRM activity, and surface the moments that actually moved each deal forward. We call this approach forensic, not formulaic. For teams that need a dollar-level breakdown for budget reallocation or board reporting, our zero-sum attribution model goes further: AI reasons over the full deal context and assigns real dollars of credit to the specific touchpoints that drove the outcome. The result is intelligence you can defend in a board meeting."},{question:"Can Upside identify dark social and self-reported attribution?",answer:"Yes. When there's a record of it anywhere in your systems, Upside can find it. If someone mentions on a discovery call that they s
7737aw your content on LinkedIn or heard you on a podcast, or fills out an unstructured form field about how they heard about you, we crawl the unstructured data, extract those signals, and roll them up into your sourced and influenced reporting. That includes review-site mentions, community references, podcast plays, and word-of-mouth that traditional tracking misses entirely."},{question:"Can Upside report on AEO and GEO performance?",answer:"Yes. Upside captures both sides of AEO and GEO measurement. On the structured side, we identify traffic in your systems associated with citation clicks from LLM-provided answers like Perplexity, ChatGPT, Claude, and Gemini. On the unstructured side, we extract signals from call transcripts, emails, and form fields where prospects mention how they used AI tools to research you. Both feed into a unified view of how AI-driven discovery is contributing to your pipeline."},{question:"How is this different from just pointing Claude at Salesforce?",answer:"AI is only as good as the data underneath it, and raw Salesforce data is almost never in shape for it. Pointing Claude at your CRM gets you confident-sounding answers built on duplicate contacts, missing touchpoints, and CRM fields nobody keeps current. Upside does the boring infrastructure work first: unifying every GTM system, deduplicating people, reconstructing missing touchpoints, and rebuilding buying groups. Then we expose that healed data layer through MCP so you can use the AI tool of your choice on data you can actually trust. And because we're SOC 2 Type II compliant, sandboxed, and never train on your data, the same security posture that blocks 'just use ChatGPT' tends to greenlight Upside."},{question:"How long does implementation and onboarding take?",answer:"Most onboardings take less than 48 hours. You connect your systems with 1 to 3 OAuth clicks, and we handle the rest. No field mapping, no configuration rules, no installations on your website or in your CRM. Your operations team isn't on the hook to set anything up. The platform configures itself against your data, and your dashboard goes live in as little as 24 hours."},{question:"Do I need to install a tracker, a script, or third-party cookies on my website?",answer:"No. Upside doesn't require a tracking script, a snippet, or any third-party cookies. We integrate directly with your existing marketing automation system and extract all of your historic data, including UTM parameters and web visit history. There's nothing new to install, no engineering work to schedule, and no privacy implications to review. You get insights from day one against the full history you've already been collecting."},{question:"Does Upside replace HubSpot or Salesforce?",answer:"No. Upside complements your existing GTM stack. HubSpot and Salesforce stay in place as the systems your reps and marketing team use day-to-day. Upside reads from them, unifies the data with everything else in your stack, and writes enriched intelligence back so your existing dashboards get smarter."},{question:"What systems do you integrate with?",answer:"Upside connects to the systems your GTM team already uses: Salesforce and HubSpot for CRM; HubSpot Marketing Hub and Marketo for marketing automation; Gong, Fireflies, Fathom, and Clari Copilot for meeting recordings and call intelligence; Google Ads, LinkedIn Ads, and Reddit Ads for ad platforms. We're shipping new integrations rapidly."},{question:"Do you ingest call recordings, emails, and meeting transcripts?",answer:"Yes. Upside ingests every GTM communication and activity, not just clicks and form fills. We pull full meeting transcripts from Gong, Fireflies, Fathom, and Clari Copilot. We extract emails and call notes from the tasks and activities logged in your CRM, and we read transcripts of customer calls to detect signals like buying group members, deal stage progression, and competitive mentions. All of this gets reconstructed into a unified timeline for every account and opportunity."},{question:"Can I plug Upside into Claude, ChatGPT, or Cursor?",answer:"Absolutely. Upside ships with a full MCP interface, so any AI tool that supports MCP can query Upside's data directly. That includes Claude, ChatGPT, Cursor, Notion, Glean, Dust, and others. You can ask natural language questions, run custom analyses, and even build interactive miniapps on top of your Upside data using AI coding tools. Documentation walks your team through setup, and access is read-only by default so MCP can never modify or write anything to your source systems."}],d0e="Revenue Intelligence Platform",ZH="Upside is the revenue intelligence platform that unifies calls, campaigns, and CRM activity. See what actually drives B2B revenue. Book a demo.",u0e={"@context":"https://schema.org","@graph":[{"@type":"Product",name:"Upside Revenue Intelligence Platform",description:ZH,brand:{"@type":"Brand",name:"Upside"},url:"https://upside.tech/lp/revenue-intelligence-platform"},{"@type":"FAQPage",mainEntity:QH.map(e=>
7737({"@type":"Question",name:e.question,acceptedAnswer:{"@type":"Answer",text:e.answer}}))}]},h0e=()=>n.jsxs(a7,{children:[n.jsx(Je,{title:d0e,description:ZH,noIndex:!0,jsonLd:u0e}),n.jsx(o7,{eyebrow:i0e,headline:r0e,subhead:o0e,visual:n.jsx(VH,{title:"Revenue Intelligence",subtitle:"Unified revenue view · sales, marketing, partner, CS"})}),n.jsx(s7,{heading:s0e,subhead:l0e,testimonialIds:c0e}),n.jsx(l7,{heading:"What real revenue intelligence requires"}),n.jsx(c7,{caption:"Want true revenue intelligence on your stack?"}),n.jsx(d7,{}),n.jsx(u7,{faqs:QH}),n.jsx(h7,{})]}),p0e=[{label:"Profiles",to:"/gtme",end:!0},{label:"Trends",to:"/gtme/trends"},{label:"Adoption ladder",to:"/gtme/adoption-ladder"},{label:"Job board",to:"/gtme/jobs"},{label:"Practitioners",to:"/gtme/practitioners"},{label:"Events",to:"/gtme/events"},{label:"Submit",to:"/gtme/submit"},{label:"About",to:"/gtme/about"}];function m0e(){return n.jsx("nav",{className:"gtmr-tabs","aria-label":"GTM Engineering Roles sections",children:p0e.map(e=>n.jsx(QF,{to:e.to,end:e.end,className:({isActive:t})=>`gtmr-tab${t?" gtmr-tab--active":""}`,children:e.label},e.to))})}const f0e="https://fonts.googleapis.com/css2?family=Fraunces:ital,opsz,wght@0,9..144,300..700;1,9..144,300..700&display=swap";function Qs(){return M.useEffect(()=>{if(document.getElementById("fraunces-font"))return;const e=document.createElement("link");e.id="fraunces-font",e.rel="stylesheet",e.href=f0e,document.head.appendChild(e)},[]),n.jsx("header",{className:"gtmr-edit__topbar",children:n.jsxs("div",{className:"gtmr-edit__topbar-inner",children:[n.jsx(J,{to:"/",className:"gtmr-edit__brand","aria-label":"Upside home",children:n.jsx(au,{className:"gtmr-edit__brand-mark"})}),n.jsx("div",{className:"gtmr-edit__topbar-divider","aria-hidden":!0}),n.jsx("span",{className:"gtmr-edit__topbar-eyebrow",children:"GTM Engineering"}),n.jsx("div",{className:"gtmr-edit__topbar-spacer"}),n.jsx(m0e,{})]})})}function po(e){const t=Hd.find(a=>a.name===e);return(t==null?void 0:t.displayName)??e}const J4=[{id:"ai",label:"AI fluency",short:"AI",color:"#C99435"},{id:"gtm",label:"GTM knowledge / experience",short:"GTM",color:"#509A79"},{id:"data",label:"Data analytics",short:"DATA",color:"#3D7BC4"},{id:"exp",label:"Experimentation",short:"EXP",color:"#C0534B"},{id:"code",label:"Coding experience",short:"CODE",color:"#5A777D"}],g0e=10,Hd=[{name:"Outbound GTME",slug:"outbound-gtme",short:"Outbound",color:"#2F6E55",description:"Lives in outbound, RevOps, or sales-led growth. Stack: Clay, Salesforce, Gong, 6sense, Apollo, Outreach. Owns pipeline, meetings, speed-to-lead.",metrics:"Pipeline · Meetings · Speed-to-lead",profile:{ai:6.89,gtm:9.61,data:6.16,exp:5.94,code:7.12},fallbackN:304,fallbackOpen:223,fallbackPeople:211},{name:"Executive / CoE Lead",slug:"executive-coe-lead",short:"Executive / CoE",color:"#0C1E20",description:"Senior commercial systems leader. Owns the GTM AI Center of Excellence, sets strategy, governance, and the agent platform standards.",metrics:"Strategy · Governance · CoE adoption",profile:{ai:7.71,gtm:9.84,data:7.27,exp:6.19,code:5.35},fallbackN:168,fallbackOpen:138,fallbackPeople:201},{name:"Marketing Engineer",slug:"marketing-engineer",short:"Marketing",color:"#8B6FD4",description:"Sits inside marketing. Builds agents and workflows for demand gen, content, lifecycle, AEO, campaign personalization, and brand visibility in LLMs.",metrics:"Lifecycle · AEO · Demand · Brand-in-LLMs",profile:{ai:8.89,gtm:8.81,data:6.48,exp:7.33,code:7.06},fallbackN:121,fallbackOpen:96,fallbackPeople:44},{name:"Revenue Architect / RevOps Systems",displayName:"Revenue Architect",slug:"revenue-architect-revops",short:"Revenue Architect",color:"#3D7BC4",description:"Existing RevOps absorbing GTME traits: agents, APIs, enrichment, AI-assisted workflows. Still owns process, governance, attribution, dashboards.",metrics:"Process · Attribution · Forecast accuracy",profile:{ai:5.56,gtm:9,data:6.92,exp:4.12,code:7.39},fallbackN:112,fallbackOpen:71,fallbackPeople:105},{name:"Founding GTME",slug:"founding-gtme",short:"Founding",color:"#D87A4A",description:"First c
7737ommercial hire at an AI-native startup. Builds the entire GTM motion from scratch — outbound, lifecycle, data, first revenue agents.",metrics:"$0 → $1M ARR · First stack · Founder-adjacent",profile:{ai:6.13,gtm:8.06,data:5.23,exp:4.31,code:7.1},fallbackN:90,fallbackOpen:69,fallbackPeople:29},{name:"Fractional / Consulting",slug:"fractional-consulting",short:"Fractional",color:"#7AB69A",description:"Embedded fractional operator or boutique consultancy. Drops into GTM teams, builds the substrate — agents, enrichment, outbound — then hands off.",metrics:"Embed · Build · Hand-off durability",profile:{ai:7.96,gtm:9.69,data:6.16,exp:6.03,code:6.57},fallbackN:86,fallbackOpen:77,fallbackPeople:172},{name:"Growth Engineer",slug:"growth-engineer",short:"Growth",color:"#5C9BD8",description:'Purest "software engineer inside GTM". Ships production code near PLG, activation, self-serve, experimentation, and conversion infrastructure.',metrics:"Activation · Experiments · Free → Paid",profile:{ai:7.73,gtm:8.65,data:7.24,exp:8.56,code:9.29},fallbackN:76,fallbackOpen:59,fallbackPeople:105},{name:"AI Enablement Engineer",slug:"ai-enablement-engineer",short:"AI Enablement",color:"#A88EE0",description:"Infrastructure-native. Owns the agent platform, guardrails, permissions, MCP integrations, context engineering, and security boundaries.",metrics:"Agents · Guardrails · MCP · Adoption",profile:{ai:6.09,gtm:7,data:5.61,exp:4.08,code:7.3},fallbackN:69,fallbackOpen:57,fallbackPeople:32}],y0e=[{name:"Sales Engineer Hybrid",slug:"sales-engineer-hybrid",short:"Sales Engineer Hybrid",description:"Customer-facing technical PoCs + outbound automation. SE who builds, not just demos."},{name:"AI Accelerator / Internal FDE",slug:"ai-accelerator-internal-fde",short:"AI Accelerator / FDE",description:"Forward-deployed coach + builder embedded with a 10–30 person GTM cohort. Stripe FDA pattern."}];function b0e({profile:e,color:t,size:a=190,hideLabels:i=!1}){const r=a/2,o=a/2,l=a*.36,d=5,u=J4.map((y,b)=>{const x=-Math.PI/2+b*2*Math.PI/J4.length;return{...y,angle:x}}),h=(y,b)=>({x:r+Math.cos(y)*b,y:o+Math.sin(y)*b}),m=u.map(y=>{const b=e[y.id]??0;return h(y.angle,b/g0e*l)}),f=m.map((y,b)=>`${b===0?"M":"L"}${y.x.toFixed(2)},${y.y.toFixed(2)}`).join(" ")+" Z";return n.jsxs("svg",{viewBox:`0 0 ${a} ${a}`,preserveAspectRatio:"xMidYMid meet",role:"img","aria-label":"Skill radar",style:{display:"block",width:"100%",height:"auto"},children:[Array.from({length:d},(y,b)=>b+1).map(y=>{const b=y/d*l,k=u.map(v=>h(v.angle,b)).map((v,j)=>`${j===0?"M":"L"}${v.x.toFixed(2)},${v.y.toFixed(2)}`).join(" ")+" Z";return n.jsx("path",{d:k,fill:"none",stroke:"#0C1E20",strokeOpacity:y===d?.2:.07,strokeWidth:1},y)}),u.map(y=>{const b=h(y.angle,l);return n.jsx("line",{x1:r,y1:o,x2:b.x,y2:b.y,stroke:"#0C1E20",strokeOpacity:.1,strokeWidth:1},`axis-${y.id}`)}),!i&&u.map(y=>{const b=h(y.angle,l+13);return n.jsx("text",{x:b.x.toFixed(2),y:(b.y+3).toFixed(2),textAnchor:"middle",fontFamily:"Geist, sans-serif",fontSize:8.5,fontWeight:700,letterSpacing:"0.10em",fill:"#5A777D",children:y.short},`label-${y.id}`)}),n.jsx("path",{d:f,fill:t,fillOpacity:.22,stroke:t,strokeWidth:1.8,strokeLinejoin:"round"}),m.map((y,b)=>n.jsx("circle",{cx:y.x.toFixed(2),cy:y.y.toFixed(2),r:2.4,fill:t},`pt-${b}`))]})}const rx=[{key:"Likely Open",label:"Open",color:"#509A79"},{key:"Unknown",label:"Unknown",color:"#869DA2"},{key:"Unreachable",label:"Unreachable",color:"#C99435"},{key:"Timeout",label:"Timeout",color:"#A88EE0"},{key:"Closed",label:"Closed",color:"#C0534B"},{key:"No URL",label:"No URL",color:"#B5C4C7"}];function v0e(e){const t=(e||"Likely Open").trim();return rx.find(a=>a.key===t)??rx[1]}function x0e({roles:e,hrefForArchetype:t}){const a=M.useMemo(()=>Hd.map(l=>{const d=e.filter(m=>m.flavorNorm===l.name),u=new Map;for(const m of d){const f=v0e(m.status);u.set(f.key,(u.get(f.key)||0)+1)}const h=rx.filter(m=>(u.get(m.key)||0)>0).map(m=>({spec:m,n:u.get(m.key)||0}));return{name:l.name,displayName:l.displayName??l.name,slug:l.slug,color:l.color,total:d.length,byStatus:h}}).sort((l,d)=>d.total-l.total),[e]),i=Math.max(1,...a.map(l=>l.total)),r=a.reduce((l,d)=>l+d.total,0),o=M.useMemo(()=>{const l=new Map;for(const d of a)for(const u of d.byStatus)l.set(u.spec.key,(l.get(u.spec.key)||0)+u.n);return rx.map(d=>({spec:d,n:l.get(d.key)||0}
7737)).filter(d=>d.n>0)},[a]);return n.jsxs("div",{className:"gtmr-edit__dist",children:[n.jsxs("div",{className:"gtmr-edit__dist-legend",children:[o.map(({spec:l,n:d})=>n.jsxs("span",{className:"gtmr-edit__dist-legend-item",children:[n.jsx("span",{className:"gtmr-edit__dist-legend-swatch",style:{background:l.color},"aria-hidden":!0}),l.label," ",n.jsx("b",{children:d.toLocaleString()})]},l.key)),n.jsxs("span",{className:"gtmr-edit__dist-legend-total",children:["Total roles in dataset: ",n.jsx("b",{children:r.toLocaleString()})]})]}),n.jsx("ul",{className:"gtmr-edit__dist-rows",children:a.map(l=>{const d=l.total/i*100,u=t?t(l.name):`/gtme#${l.slug}`;return n.jsxs("li",{className:"gtmr-edit__dist-row",children:[n.jsxs(J,{to:u,className:"gtmr-edit__dist-row-label",children:[n.jsx("span",{className:"gtmr-edit__dist-row-dot",style:{background:l.color},"aria-hidden":!0}),l.displayName]}),n.jsx("div",{className:"gtmr-edit__dist-row-track",role:"img","aria-label":`${l.total.toLocaleString()} roles for ${l.displayName}`,children:n.jsx("div",{className:"gtmr-edit__dist-row-bar",style:{width:`${d}%`},children:l.byStatus.map(({spec:h,n:m})=>{const f=m/l.total*100;return n.jsx("span",{className:"gtmr-edit__dist-seg",style:{width:`${f}%`,background:h.color},title:`${h.label}: ${m.toLocaleString()} (${(m/l.total*100).toFixed(0)}%)`},h.key)})})}),n.jsx("span",{className:"gtmr-edit__dist-row-n",children:l.total.toLocaleString()})]},l.name)})})]})}var mS,p9;function _a(){if(p9)return mS;p9=1;var e=Array.isArray;return mS=e,mS}var fS,m9;function JH(){if(m9)return fS;m9=1;var e=typeof Tv=="object"&&Tv&&Tv.Object===Object&&Tv;return fS=e,fS}var gS,f9;function Yr(){if(f9)return gS;f9=1;var e=JH(),t=typeof self=="object"&&self&&self.Object===Object&&self,a=e||t||Function("return this")();return gS=a,gS}var yS,g9;function em(){if(g9)return yS;g9=1;var e=Yr(),t=e.Symbol;return yS=t,yS}var bS,y9;function w0e(){if(y9)return bS;y9=1;var e=em(),t=Object.prototype,a=t.hasOwnProperty,i=t.toString,r=e?e.toStringTag:void 0;function o(l){var d=a.call(l,r),u=l[r];try{l[r]=void 0;var h=!0}catch{}var m=i.call(l);return h&&(d?l[r]=u:delete l[r]),m}return bS=o,bS}var vS,b9;function k0e(){if(b9)return vS;b9=1;var e=Object.prototype,t=e.toString;function a(i){return t.call(i)}return vS=a,vS}var xS,v9;function Zs(){if(v9)return xS;v9=1;var e=em(),t=w0e(),a=k0e(),i="[object Null]",r="[object Undefined]",o=e?e.toStringTag:void 0;function l(d){return d==null?d===void 0?r:i:o&&o in Object(d)?t(d):a(d)}return xS=l,xS}var wS,x9;function Vr(){if(x9)return wS;x9=1;function e(t){return t!=null&&typeof t=="object"}return wS=e,wS}var kS,w9;function tm(){if(w9)return kS;w9=1;var e=Zs(),t=Vr(),a="[object Symbol]";function i(r){return typeof r=="symbol"||t(r)&&e(r)==a}return kS=i,kS}var jS,k9;function f7(){if(k9)return jS;k9=1;var e=_a(),t=tm(),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/;function r(o,l){if(e(o))return!1;var d=typeof o;return d=="number"||d=="symbol"||d=="boolean"||o==null||t(o)?!0:i.test(o)||!a.test(o)||l!=null&&o in Object(l)}return jS=r,jS}var SS,j9;function Kr(){if(j9)return SS;j9=1;function e(t){var a=typeof t;return t!=null&&(a=="object"||a=="function")}return SS=e,SS}var CS,S9;function g7(){if(S9)return CS;S9=1;var e=Zs(),t=Kr(),a="[object AsyncFunction]",i="[object Function]",r="[object GeneratorFunction]",o="[object Proxy]";function l(d){if(!t(d))return!1;var u=e(d);return u==i||u==r||u==a||u==o}return CS=l,CS}var AS,C9;function j0e(){if(C9)return AS;C9=1;var e=Yr(),t=e["__core-js_shared__"];return AS=t,AS}var TS,A9;function S0e(){if(A9)return TS;A9=1;var e=j0e(),t=(function(){var i=/[^.]+$/.exec(e&&e.keys&&e.keys.IE_PROTO||"");return i?"Symbol(src)_1."+i:""})();function a(i){return!!t&&t in i}return TS=a,TS}var _S,T9;function eY(){if(T9)return _S;T9=1;var e=Function.prototype,t=e.toString;function a(i){if(i!=null){try{return t.call(i)}catch{}try{return i+""}catch{}}return""}return _S=a,_S}var MS,_9;function C0e(){if(_9)return MS;_9=1;var e=g7(),t=S0e(),a=Kr(),i=eY(),r=/[\\^$.*+?()[\]{}|]/g,o=/^\[object .+?Constructor\]$/,l=Function.prototype,d=Object.prototype,u=l.toString,h=d.hasOwnProperty,m=RegExp("^"+u.call(h).replace(r,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function f(y){if(!a(y)||t(y))return!1;var b=e(y)?m:o;return b.test(i(y))}return MS=f,MS}var ES,M9;function A0e(){if(M9)return ES;M9=1;function e(t,a){return t==null?void 0:t[a]}return ES=e,ES}var RS,E9;function ou(){if(E9)return RS;E9=1;var e=C0e(),t=A0e();function a(i,r){var o=t(i,r);return e(o)?o:void 0}return RS=a,RS}var NS,R9;
vendor: 4,371 bytes, line 7737
7737function m1(){if(R9)return NS;R9=1;var e=ou(),t=e(Object,"create");return NS=t,NS}var OS,N9;function T0e(){if(N9)return OS;N9=1;var e=m1();function t(){this.__data__=e?e(null):{},this.size=0}return OS=t,OS}var PS,O9;function _0e(){if(O9)return PS;O9=1;function e(t){var a=this.has(t)&&delete this.__data__[t];return this.size-=a?1:0,a}return PS=e,PS}var IS,P9;function M0e(){if(P9)return IS;P9=1;var e=m1(),t="__lodash_hash_undefined__",a=Object.prototype,i=a.hasOwnProperty;function r(o){var l=this.__data__;if(e){var d=l[o];return d===t?void 0:d}return i.call(l,o)?l[o]:void 0}return IS=r,IS}var DS,I9;function E0e(){if(I9)return DS;I9=1;var e=m1(),t=Object.prototype,a=t.hasOwnProperty;function i(r){var o=this.__data__;return e?o[r]!==void 0:a.call(o,r)}return DS=i,DS}var WS,D9;function R0e(){if(D9)return WS;D9=1;var e=m1(),t="__lodash_hash_undefined__";function a(i,r){var o=this.__data__;return this.size+=this.has(i)?0:1,o[i]=e&&r===void 0?t:r,this}return WS=a,WS}var zS,W9;function N0e(){if(W9)return zS;W9=1;var e=T0e(),t=_0e(),a=M0e(),i=E0e(),r=R0e();function o(l){var d=-1,u=l==null?0:l.length;for(this.clear();++d<u;){var h=l[d];this.set(h[0],h[1])}}return o.prototype.clear=e,o.prototype.delete=t,o.prototype.get=a,o.prototype.has=i,o.prototype.set=r,zS=o,zS}var LS,z9;function O0e(){if(z9)return LS;z9=1;function e(){this.__data__=[],this.size=0}return LS=e,LS}var US,L9;function f1(){if(L9)return US;L9=1;function e(t,a){return t===a||t!==t&&a!==a}return US=e,US}var BS,U9;function g1(){if(U9)return BS;U9=1;var e=f1();function t(a,i){for(var r=a.length;r--;)if(e(a[r][0],i))return r;return-1}return BS=t,BS}var qS,B9;function P0e(){if(B9)return qS;B9=1;var e=g1(),t=Array.prototype,a=t.splice;function i(r){var o=this.__data__,l=e(o,r);if(l<0)return!1;var d=o.length-1;return l==d?o.pop():a.call(o,l,1),--this.size,!0}return qS=i,qS}var $S,q9;function I0e(){if(q9)return $S;q9=1;var e=g1();function t(a){var i=this.__data__,r=e(i,a);return r<0?void 0:i[r][1]}return $S=t,$S}var FS,$9;function D0e(){if($9)return FS;$9=1;var e=g1();function t(a){return e(this.__data__,a)>-1}return FS=t,FS}var GS,F9;function W0e(){if(F9)return GS;F9=1;var e=g1();function t(a,i){var r=this.__data__,o=e(r,a);return o<0?(++this.size,r.push([a,i])):r[o][1]=i,this}return GS=t,GS}var HS,G9;function y1(){if(G9)return HS;G9=1;var e=O0e(),t=P0e(),a=I0e(),i=D0e(),r=W0e();function o(l){var d=-1,u=l==null?0:l.length;for(this.clear();++d<u;){var h=l[d];this.set(h[0],h[1])}}return o.prototype.clear=e,o.prototype.delete=t,o.prototype.get=a,o.prototype.has=i,o.prototype.set=r,HS=o,HS}var YS,H9;function y7(){if(H9)return YS;H9=1;var e=ou(),t=Yr(),a=e(t,"Map");return YS=a,YS}var VS,Y9;function z0e(){if(Y9)return VS;Y9=1;var e=N0e(),t=y1(),a=y7();function i(){this.size=0,this.__data__={hash:new e,map:new(a||t),string:new e}}return VS=i,VS}var KS,V9;function L0e(){if(V9)return KS;V9=1;function e(t){var a=typeof t;return a=="string"||a=="number"||a=="symbol"||a=="boolean"?t!=="__proto__":t===null}return KS=e,KS}var XS,K9;function b1(){if(K9)return XS;K9=1;var e=L0e();function t(a,i){var r=a.__data__;return e(i)?r[typeof i=="string"?"string":"hash"]:r.map}return XS=t,XS}var QS,X9;function U0e(){if(X9)return QS;X9=1;var e=b1();function t(a){var i=e(this,a).delete(a);return this.size-=i?1:0,i}return QS=t,QS}var ZS,Q9;function B0e(){if(Q9)return ZS;Q9=1;var e=b1();function t(a){return e(this,a).get(a)}return ZS=t,ZS}var JS,Z9;function q0e(){if(Z9)return JS;Z9=1;var e=b1();function t(a){return e(this,a).has(a)}return JS=t,JS}var e5,J9;function $0e(){if(J9)return e5;J9=1;var e=b1();function t(a,i){var r=e(this,a),o=r.size;return r.set(a,i),this.size+=r.size==o?0:1,this}return e5=t,e5}var t5,eI;function b7(){if(eI)return t5;eI=1;var e=z0e(),t=U0e(),a=B0e(),i=q0e(),r=$0e();function o(l){var d=-1,u=l==null?0:l.length;for(this.clear();++d<u;){var h=l[d];this.set(h[0],h[1])}}return o.prototype.clear=e,o.prototype.delete=t,o.prototype.get=a,o.prototype.has=i,o.prototype.set=r,t5=o,t5}var n5,tI;function tY(){if(tI)return n5;tI=1;var e=b7(),t="Expected a function";function a(i,r){if(typeof i!="function"||r!=null&&typeof r!="function")throw new TypeError(t);var o=function(){var l=arguments,d=r?r.apply(this,l):l[0],u=o.cache;if(u.has(d))return u.get(d);var h=i.apply(this,l);return o.cache=u.set(d,h)||u,h};return o.cache=new(a.Cache||e),o}return a.Cache=e,n5=a,n5}
vendor: 10,454 bytes, lines 7737-7745
7737var a5,nI;function F0e(){if(nI)return a5;nI=1;var e=tY(),t=500;function a(i){var r=e(i,function(l){return o.size===t&&o.clear(),l}),o=r.cache;return r}return a5=a,a5}var i5,aI;function G0e(){if(aI)return i5;aI=1;var e=F0e(),t=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,i=e(function(r){var o=[];return r.charCodeAt(0)===46&&o.push(""),r.replace(t,function(l,d,u,h){o.push(u?h.replace(a,"$1"):d||l)}),o});return i5=i,i5}var r5,iI;function v1(){if(iI)return r5;iI=1;function e(t,a){for(var i=-1,r=t==null?0:t.length,o=Array(r);++i<r;)o[i]=a(t[i],i,t);return o}return r5=e,r5}var o5,rI;function H0e(){if(rI)return o5;rI=1;var e=em(),t=v1(),a=_a(),i=tm(),r=e?e.prototype:void 0,o=r?r.toString:void 0;function l(d){if(typeof d=="string")return d;if(a(d))return t(d,l)+"";if(i(d))return o?o.call(d):"";var u=d+"";return u=="0"&&1/d==-1/0?"-0":u}return o5=l,o5}var s5,oI;function nY(){if(oI)return s5;oI=1;var e=H0e();function t(a){return a==null?"":e(a)}return s5=t,s5}var l5,sI;function x1(){if(sI)return l5;sI=1;var e=_a(),t=f7(),a=G0e(),i=nY();function r(o,l){return e(o)?o:t(o,l)?[o]:a(i(o))}return l5=r,l5}var c5,lI;function nb(){if(lI)return c5;lI=1;var e=tm();function t(a){if(typeof a=="string"||e(a))return a;var i=a+"";return i=="0"&&1/a==-1/0?"-0":i}return c5=t,c5}var d5,cI;function w1(){if(cI)return d5;cI=1;var e=x1(),t=nb();function a(i,r){r=e(r,i);for(var o=0,l=r.length;i!=null&&o<l;)i=i[t(r[o++])];return o&&o==l?i:void 0}return d5=a,d5}var u5,dI;function aY(){if(dI)return u5;dI=1;var e=w1();function t(a,i,r){var o=a==null?void 0:e(a,i);return o===void 0?r:o}return u5=t,u5}var Y0e=aY();const wi=vt(Y0e);var h5,uI;function V0e(){if(uI)return h5;uI=1;function e(t){return t==null}return h5=e,h5}var K0e=V0e();const dt=vt(K0e);var p5,hI;function X0e(){if(hI)return p5;hI=1;var e=Zs(),t=_a(),a=Vr(),i="[object String]";function r(o){return typeof o=="string"||!t(o)&&a(o)&&e(o)==i}return p5=r,p5}var Q0e=X0e();const Yd=vt(Q0e);var Z0e=g7();const Ke=vt(Z0e);var J0e=Kr();const nm=vt(J0e);var m5={exports:{}},kt={};/**
7738 * @license React
7739 * react-is.production.min.js
7740 *
7741 * Copyright (c) Facebook, Inc. and its affiliates.
7742 *
7743 * This source code is licensed under the MIT license found in the
7744 * LICENSE file in the root directory of this source tree.
7745 */var pI;function exe(){if(pI)return kt;pI=1;var e=Symbol.for("react.element"),t=Symbol.for("react.portal"),a=Symbol.for("react.fragment"),i=Symbol.for("react.strict_mode"),r=Symbol.for("react.profiler"),o=Symbol.for("react.provider"),l=Symbol.for("react.context"),d=Symbol.for("react.server_context"),u=Symbol.for("react.forward_ref"),h=Symbol.for("react.suspense"),m=Symbol.for("react.suspense_list"),f=Symbol.for("react.memo"),y=Symbol.for("react.lazy"),b=Symbol.for("react.offscreen"),x;x=Symbol.for("react.module.reference");function k(v){if(typeof v=="object"&&v!==null){var j=v.$$typeof;switch(j){case e:switch(v=v.type,v){case a:case r:case i:case h:case m:return v;default:switch(v=v&&v.$$typeof,v){case d:case l:case u:case y:case f:case o:return v;default:return j}}case t:return j}}}return kt.ContextConsumer=l,kt.ContextProvider=o,kt.Element=e,kt.ForwardRef=u,kt.Fragment=a,kt.Lazy=y,kt.Memo=f,kt.Portal=t,kt.Profiler=r,kt.StrictMode=i,kt.Suspense=h,kt.SuspenseList=m,kt.isAsyncMode=function(){return!1},kt.isConcurrentMode=function(){return!1},kt.isContextConsumer=function(v){return k(v)===l},kt.isContextProvider=function(v){return k(v)===o},kt.isElement=function(v){return typeof v=="object"&&v!==null&&v.$$typeof===e},kt.isForwardRef=function(v){return k(v)===u},kt.isFragment=function(v){return k(v)===a},kt.isLazy=function(v){return k(v)===y},kt.isMemo=function(v){return k(v)===f},kt.isPortal=function(v){return k(v)===t},kt.isProfiler=function(v){return k(v)===r},kt.isStrictMode=function(v){return k(v)===i},kt.isSuspense=function(v){return k(v)===h},kt.isSuspenseList=function(v){return k(v)===m},kt.isValidElementType=function(v){return typeof v=="string"||typeof v=="function"||v===a||v===r||v===i||v===h||v===m||v===b||typeof v=="object"&&v!==null&&(v.$$typeof===y||v.$$typeof===f||v.$$typeof===o||v.$$typeof===l||v.$$typeof===u||v.$$typeof===x||v.getModuleId!==void 0)},kt.typeOf=k,kt}var mI;function txe(){return mI||(mI=1,m5.exports=exe()),m5.exports}var nxe=txe(),f5,fI;function iY(){if(fI)return f5;fI=1;var e=Zs(),t=Vr(),a="[object Number]";function i(r){return typeof r=="number"||t(r)&&e(r)==a}return f5=i,f5}var g5,gI;function axe(){if(gI)return g5;gI=1;var e=iY();function t(a){return e(a)&&a!=+a}return g5=t,g5}var ixe=axe();const bc=vt(ixe);var rxe=iY();const oxe=vt(rxe);var Mr=function(t){return t===0?0:t>0?1:-1},cd=function(t){return Yd(t)&&t.indexOf("%")===t.length-1},ke=function(t){return oxe(t)&&!bc(t)},sxe=function(t){return dt(t)},Sn=function(t){return ke(t)||Yd(t)},lxe=0,am=function(t){var a=++lxe;return"".concat(t||"").concat(a)},Vd=function(t,a){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!ke(t)&&!Yd(t))return i;var o;if(cd(t)){var l=t.indexOf("%");o=a*parseFloat(t.slice(0,l))/100}else o=+t;return bc(o)&&(o=i),r&&o>a&&(o=a),o},Wl=function(t){if(!t)return null;var a=Object.keys(t);return a&&a.length?t[a[0]]:null},cxe=function(t){if(!Array.isArray(t))return!1;for(var a=t.length,i={},r=0;r<a;r++)if(!i[t[r]])i[t[r]]=!0;else return!0;return!1},$i=function(t,a){return ke(t)&&ke(a)?function(i){return t+i*(a-t)}:function(){return a}};function ox(e,t,a){return!e||!e.length?null:e.find(function(i){return i&&(typeof t=="function"?t(i):wi(i,t))===a})}var dxe=function(t,a){return ke(t)&&ke(a)?t-a:Yd(t)&&Yd(a)?t.localeCompare(a):t instanceof Date&&a instanceof Date?t.getTime()-a.getTime():String(t).localeCompare(String(a))};function Rh(e,t){for(var a in e)if({}.hasOwnProperty.call(e,a)&&(!{}.hasOwnProperty.call(t,a)||e[a]!==t[a]))return!1;for(var i in t)if({}.hasOwnProperty.call(t,i)&&!{}.hasOwnProperty.call(e,i))return!1;return!0}function e3(e){"@babel/helpers - typeof";return e3=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},e3(e)}var uxe=["viewBox","children"],hxe=["aria-activedescendant","aria-atomic","aria-autocomplete","aria-busy","aria-checked","aria-colcount","aria-colindex","aria-colspan","aria-controls","aria-current","aria-describedby","aria-details","aria-disabled","aria-errormessage","aria-expanded","aria-flowto","aria-haspopup","aria-hidden","aria-invalid","aria-keyshortcuts","aria-label","aria-labelledby","aria-level","aria-live","aria-modal","aria-multiline","aria-multiselectable","aria-orientation","aria-owns","aria-placeholder","aria-posinset","aria-pressed","aria-readonly","aria-relevant","aria-required","aria-roledescription","aria-rowcount","aria-rowindex","aria-rowspan","aria-selected","aria-setsize","aria-sort","aria-valuemax","aria-valuemin","aria-valuenow","aria-valuetext","className","color","height","id","lang","max","media","method","min","name","style","target","width","role","tabIndex","accentHeight","accumulate","additive","alignmentBaseline","allowReorder","alphabetic","amplitude","arabicForm","ascent","attributeName","attributeType","autoReverse","azimuth","baseFrequency","baselineShift","baseProfile","bbox","begin","bias","by","calcMode","capHeight","clip","clipPath","clipPathUnits","clipRule","colorInterpolation","colorInterpolationFilters","colorProfile","colorRendering","contentScriptType","contentStyleType","cursor","cx","cy","d","decelerate","descent","diffuseConstant","direction","display","divisor","dominantBaseline","dur","dx","dy","edgeMode","elevation","enableBackground","end","exponent","externalResourcesRequired","fill","fillOpacity","fillRule","filter","filterRes","filterUnits","floodColor","floodOpacity","focusable","fontFamily","fontSize","fontSizeAdjust","fontStretch","fontStyle","fontVariant","fontWeight","format","from","fx","fy","g1","g2","glyphName","glyphOrientationHorizontal","glyphOrientationVertical","glyphRef","gradientTransform","gradientUnits","hanging","horizAdvX","horizOriginX","href","ideographic","imageRendering","in2","in","intercept","k1","k2","k3","k4","k","kernelMatrix","kernelUnitLength","kerning","keyPoints","keySplines","keyTimes","lengthAdjust","letterSpacing","lightingColor","limitingConeAngle","local","markerEnd","markerHeight","markerMid","markerStart","markerUnits","markerWidth","mask","maskContentUnits","maskUnits","mathematical","mode","numOctaves","offset","opacity","operator","order","orient","orientation","origin","overflow","overlinePosition","overlineThickness","paintOrder","panose1","pathLength","patternContentUnits","patternTransform","patternUnits","pointerEvents","pointsAtX","pointsAtY","pointsAtZ","preserveAlpha","preserveAspectRatio","primitiveUnits","r","radius","refX","refY","renderingIntent","repeatCount","repeatDur","requiredExtensions","requiredFeatures","restart","result","rotate","rx","ry","seed","shapeRendering","slope","spacing","specularConstant","specularExponent","speed","spreadMethod","startOffset","stdDeviation","stemh","stemv","stitchTiles","stopColor","stopOpacity","strikethroughPosition","strikethroughThickness","string","stroke","strokeDasharray","strokeDashoffset","strokeLinecap","strokeLinejoin","strokeMiterlimit","strokeOpacity","strokeWidth","surfaceScale","systemLanguage","tableValues","targetX","targetY","textAnchor","textDecoration","textLength","textRendering","to","transform","u1","u2","underlinePosition","underlineThickness","unicode","unicodeBidi","unicodeRange","unitsPerEm","vAlphabetic","values","vectorEffect","version","vertAdvY","vertOriginX","vertOriginY","vHanging","vIdeographic","viewTarget","visibility","vMathematical","widths","wordSpacing","writingMode","x1","x2","x","xChannelSelector","xHeight","xlinkActuate","xlinkArcrole","xlinkHref","xlinkRole","xlinkShow","xlinkTitle","xlinkType","xmlBase","xmlLang","xmlns","xmlnsXlink","xmlSpace","y1","y2","y","yChannelSelector","z","zoomAndPan","ref","key","angle"],yI=["points","pathLength"],y5={svg:uxe,polygon:yI,polyline:yI},v7=["dangerouslySetInnerHTML","onCopy","onCopyCapture","onCut","onCutCapture","onPaste","onPasteCapture","onCompositionEnd","onCompositionEndCapture","onCompositionStart","onCompositionStartCapture","onCompositionUpdate","onCompositionUpdateCapture","onF
7745ocus","onFocusCapture","onBlur","onBlurCapture","onChange","onChangeCapture","onBeforeInput","onBeforeInputCapture","onInput","onInputCapture","onReset","onResetCapture","onSubmit","onSubmitCapture","onInvalid","onInvalidCapture","onLoad","onLoadCapture","onError","onErrorCapture","onKeyDown","onKeyDownCapture","onKeyPress","onKeyPressCapture","onKeyUp","onKeyUpCapture","onAbort","onAbortCapture","onCanPlay","onCanPlayCapture","onCanPlayThrough","onCanPlayThroughCapture","onDurationChange","onDurationChangeCapture","onEmptied","onEmptiedCapture","onEncrypted","onEncryptedCapture","onEnded","onEndedCapture","onLoadedData","onLoadedDataCapture","onLoadedMetadata","onLoadedMetadataCapture","onLoadStart","onLoadStartCapture","onPause","onPauseCapture","onPlay","onPlayCapture","onPlaying","onPlayingCapture","onProgress","onProgressCapture","onRateChange","onRateChangeCapture","onSeeked","onSeekedCapture","onSeeking","onSeekingCapture","onStalled","onStalledCapture","onSuspend","onSuspendCapture","onTimeUpdate","onTimeUpdateCapture","onVolumeChange","onVolumeChangeCapture","onWaiting","onWaitingCapture","onAuxClick","onAuxClickCapture","onClick","onClickCapture","onContextMenu","onContextMenuCapture","onDoubleClick","onDoubleClickCapture","onDrag","onDragCapture","onDragEnd","onDragEndCapture","onDragEnter","onDragEnterCapture","onDragExit","onDragExitCapture","onDragLeave","onDragLeaveCapture","onDragOver","onDragOverCapture","onDragStart","onDragStartCapture","onDrop","onDropCapture","onMouseDown","onMouseDownCapture","onMouseEnter","onMouseLeave","onMouseMove","onMouseMoveCapture","onMouseOut","onMouseOutCapture","onMouseOver","onMouseOverCapture","onMouseUp","onMouseUpCapture","onSelect","onSelectCapture","onTouchCancel","onTouchCancelCapture","onTouchEnd","onTouchEndCapture","onTouchMove","onTouchMoveCapture","onTouchStart","onTouchStartCapture","onPointerDown","onPointerDownCapture","onPointerMove","onPointerMoveCapture","onPointerUp","onPointerUpCapture","onPointerCancel","onPointerCancelCapture","onPointerEnter","onPointerEnterCapture","onPointerLeave","onPointerLeaveCapture","onPointerOver","onPointerOverCapture","onPointerOut","onPointerOutCapture","onGotPointerCapture","onGotPointerCaptureCapture","onLostPointerCapture","onLostPointerCaptureCapture","onScroll","onScrollCapture","onWheel","onWheelCapture","onAnimationStart","onAnimationStartCapture","onAnimationEnd","onAnimationEndCapture","onAnimationIteration","onAnimationIterationCapture","onTransitionEnd","onTransitionEndCapture"],sx=function(t,a){if(!t||typeof t=="function"||typeof t=="boolean")return null;var i=t;if(M.isValidElement(t)&&(i=t.props),!nm(i))return null;var r={};
vendor: 5,149 bytes, line 7745
7745return Object.keys(i).forEach(function(o){v7.includes(o)&&(r[o]=a||function(l){return i[o](i,l)})}),r},pxe=function(t,a,i){return function(r){return t(a,i,r),null}},lx=function(t,a,i){if(!nm(t)||e3(t)!=="object")return null;var r=null;return Object.keys(t).forEach(function(o){var l=t[o];v7.includes(o)&&typeof l=="function"&&(r||(r={}),r[o]=pxe(l,a,i))}),r},mxe=["children"],fxe=["children"];function bI(e,t){if(e==null)return{};var a=gxe(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function gxe(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function t3(e){"@babel/helpers - typeof";return t3=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},t3(e)}var vI={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart",contextmenu:"onContextMenu",dblclick:"onDoubleClick"},Es=function(t){return typeof t=="string"?t:t?t.displayName||t.name||"Component":""},xI=null,b5=null,k1=function e(t){if(t===xI&&Array.isArray(b5))return b5;var a=[];return M.Children.forEach(t,function(i){dt(i)||(nxe.isFragment(i)?a=a.concat(e(i.props.children)):a.push(i))}),b5=a,xI=t,a};function Lr(e,t){var a=[],i=[];return Array.isArray(t)?i=t.map(function(r){return Es(r)}):i=[Es(t)],k1(e).forEach(function(r){var o=wi(r,"type.displayName")||wi(r,"type.name");i.indexOf(o)!==-1&&a.push(r)}),a}function ea(e,t){var a=Lr(e,t);return a&&a[0]}var n3=function(t){if(!t||!t.props)return!1;var a=t.props,i=a.width,r=a.height;return!(!ke(i)||i<=0||!ke(r)||r<=0)},yxe=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],rY=function(t){return t&&t.type&&Yd(t.type)&&yxe.indexOf(t.type)>=0},bxe=function(t){return t&&t3(t)==="object"&&"clipDot"in t},vxe=function(t,a,i,r){var o,l=(o=y5==null?void 0:y5[r])!==null&&o!==void 0?o:[];return a.startsWith("data-")||!Ke(t)&&(r&&l.includes(a)||hxe.includes(a))||i&&v7.includes(a)},xxe=function(t){var a=[];return k1(t).forEach(function(i){rY(i)&&a.push(i)}),a},Ze=function(t,a,i){if(!t||typeof t=="function"||typeof t=="boolean")return null;var r=t;if(M.isValidElement(t)&&(r=t.props),!nm(r))return null;var o={};return Object.keys(r).forEach(function(l){var d;vxe((d=r)===null||d===void 0?void 0:d[l],l,a,i)&&(o[l]=r[l])}),o},a3=function e(t,a){if(t===a)return!0;var i=M.Children.count(t);if(i!==M.Children.count(a))return!1;if(i===0)return!0;if(i===1)return wI(Array.isArray(t)?t[0]:t,Array.isArray(a)?a[0]:a);for(var r=0;r<i;r++){var o=t[r],l=a[r];if(Array.isArray(o)||Array.isArray(l)){if(!e(o,l))return!1}else if(!wI(o,l))return!1}return!0},wI=function(t,a){if(dt(t)&&dt(a))return!0;if(!dt(t)&&!dt(a)){var i=t.props||{},r=i.children,o=bI(i,mxe),l=a.props||{},d=l.children,u=bI(l,fxe);return r&&d?Rh(o,u)&&a3(r,d):!r&&!d?Rh(o,u):!1}return!1},kI=function(t,a){var i=[],r={};return k1(t).forEach(function(o,l){if(rY(o))i.push(o);else if(o){var d=Es(o.type),u=a[d]||{},h=u.handler,m=u.once;if(h&&(!m||!r[d])){var f=h(o,d,l);i.push(f),r[d]=!0}}}),i},wxe=function(t){var a=t&&t.type;return a&&vI[a]?vI[a]:null},kxe=function(t,a){return k1(a).indexOf(t)},jxe=["children","width","height","viewBox","className","style","title","desc"];function i3(){return i3=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},i3.apply(this,arguments)}function Sxe(e,t){if(e==null)return{};var a=Cxe(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function Cxe(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}
7745function cx(e){var t=e.children,a=e.width,i=e.height,r=e.viewBox,o=e.className,l=e.style,d=e.title,u=e.desc,h=Sxe(e,jxe),m=r||{width:a,height:i,x:0,y:0},f=ot("recharts-surface",o);return q.createElement("svg",i3({},Ze(h,!0,"svg"),{className:f,width:a,height:i,style:l,viewBox:"".concat(m.x," ").concat(m.y," ").concat(m.width," ").concat(m.height)}),q.createElement("title",null,d),q.createElement("desc",null,u),t)}var Axe=["children","className"];function r3(){return r3=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},r3.apply(this,arguments)}function Txe(e,t){if(e==null)return{};var a=_xe(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function _xe(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}var Ut=q.forwardRef(function(e,t){var a=e.children,i=e.className,r=Txe(e,Axe),o=ot("recharts-layer",i);return q.createElement("g",r3({className:o},Ze(r,!0),{ref:t}),a)}),Rs=function(t,a){for(var i=arguments.length,r=new Array(i>2?i-2:0),o=2;o<i;o++)r[o-2]=arguments[o]},v5,jI;function oY(){if(jI)return v5;jI=1;function e(t,a,i){var r=-1,o=t.length;a<0&&(a=-a>o?0:o+a),i=i>o?o:i,i<0&&(i+=o),o=a>i?0:i-a>>>0,a>>>=0;for(var l=Array(o);++r<o;)l[r]=t[r+a];return l}return v5=e,v5}var x5,SI;function Mxe(){if(SI)return x5;SI=1;var e=oY();function t(a,i,r){var o=a.length;return r=r===void 0?o:r,!i&&r>=o?a:e(a,i,r)}return x5=t,x5}var w5,CI;function sY(){if(CI)return w5;CI=1;var e="\\ud800-\\udfff",t="\\u0300-\\u036f",a="\\ufe20-\\ufe2f",i="\\u20d0-\\u20ff",r=t+a+i,o="\\ufe0e\\ufe0f",l="\\u200d",d=RegExp("["+l+e+r+o+"]");function u(h){return d.test(h)}return w5=u,w5}var k5,AI;function Exe(){if(AI)return k5;AI=1;function e(t){return t.split("")}return k5=e,k5}var j5,TI;function Rxe(){if(TI)return j5;TI=1;var e="\\ud800-\\udfff",t="\\u0300-\\u036f",a="\\ufe20-\\ufe2f",i="\\u20d0-\\u20ff",r=t+a+i,o="\\ufe0e\\ufe0f",l="["+e+"]",d="["+r+"]",u="\\ud83c[\\udffb-\\udfff]",h="(?:"+d+"|"+u+")",m="[^"+e+"]",f="(?:\\ud83c[\\udde6-\\uddff]){2}",y="[\\ud800-\\udbff][\\udc00-\\udfff]",b="\\u200d",x=h+"?",k="["+o+"]?",v="(?:"+b+"(?:"+[m,f,y].join("|")+")"+k+x+")*",j=k+x+v,T="(?:"+[m+d+"?",d,f,y,l].join("|")+")",A=RegExp(u+"(?="+u+")|"+T+j,"g");function C(_){return _.match(A)||[]}return j5=C,j5}var S5,_I;function Nxe(){if(_I)return S5;_I=1;var e=Exe(),t=sY(),a=Rxe();function i(r){return t(r)?a(r):e(r)}return S5=i,S5}var C5,MI;function Oxe(){if(MI)return C5;MI=1;var e=Mxe(),t=sY(),a=Nxe(),i=nY();function r(o){return function(l){l=i(l);var d=t(l)?a(l):void 0,u=d?d[0]:l.charAt(0),h=d?e(d,1).join(""):l.slice(1);return u[o]()+h}}return C5=r,C5}var A5,EI;function Pxe(){if(EI)return A5;EI=1;var e=Oxe(),t=e("toUpperCase");return A5=t,A5}var Ixe=Pxe();const j1=vt(Ixe);function Lt(e){return function(){return e}}const lY=Math.cos,dx=Math.sin,Xr=Math.sqrt,ux=Math.PI,S1=2*ux,o3=Math.PI,s3=2*o3,Zc=1e-6,Dxe=s3-Zc;function cY(e){this._+=e[0];for(let t=1,a=e.length;t<a;++t)this._+=arguments[t]+e[t]}function Wxe(e){let t=Math.floor(e);if(!(t>=0))throw new Error(`invalid digits: ${e}`);if(t>15)return cY;const a=10**t;return function(i){this._+=i[0];for(let r=1,o=i.length;r<o;++r)this._+=Math.round(arguments[r]*a)/a+i[r]}}class zxe{constructor(t){this._x0=this._y0=this._x1=this._y1=null,this._="",this._append=t==null?cY:Wxe(t)}moveTo(t,a){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+a}`}closePath(){this._x1!==null&&(this._x1=this._x0,this._y1=this._y0,this._append`Z`)}lineTo(t,a){this._append`L${this._x1=+t},${this._y1=+a}`}quadraticCurveTo(t,a,i,r){this._append`Q${+t},${+a},${this._x1=+i},${this._y1=+r}`}bezierCurveTo(t,a,i,r,o,l){this._append`C${+t},${+a},${+i},${+r},${this._x1=+o},${this._y1=+l}`}arcTo(t,a,i,r,o){if(t=+t,a=+a,i=+i,r=+r,o=+o,o<0)throw new Error(`negative radius: ${o}`);let l=this._x1,d=this._y1,u=i-t,h=r-a,m=l-t,f=d-a,y=m*m+f*f;if(this._x1===null)this._append`M${this._x1=t},${this._y1=a}`;else if(y>Zc)if(!(Math.abs(f*u-h*m)>Zc)||!o)this._append`L${this._x1=t},${this._y1=a}`;else{let b=i-l,x=r-d,k=u*u+h*h,v=b*b+x*x,j=Math.sqrt(k),T=Math.sqrt(y),A=o*Math.tan((o3-Math.acos((k+y-v)/(2*j*T)))/2),C=A/T,_=A/j;Math.abs(C-1)>Zc&&this._append`L${t+C*m},${a+C*f}`,this._append`A${o},${o},0,0,${+(f*b>m*x)},${this._x1=t+_*u},${this._y1=a+_*h}`}}arc(t,a,i,r,o,l){if(t=+t,a=+a,i=+i,l=!!l,i<0)throw new Error(`negative radius: ${i}`);let d=i*Math.cos(r),u=i*Math.sin(r),h=t+d,m=a+u,f=1^l,y=l?r-o:o-r;this._x1===null?this._append`M${h},${m}`:(Math.abs(this._x1-h)>Zc||Math.abs(this._y1-m)>Zc)&&this._append`L${h},${m}`,i&&(y<0&&(y=y%s3+s3),y>Dxe?this._append`A${i},${i},0,1,${f},${t-d},${a-u}A${i},${i},0,1,${f},${this._x1=h},${this._y1=m}`:y>Zc&&this._append`A${i},${i},0,${+(y>=o3)},${f},${this._x1=t+i*Math.cos(o)},${this._y1=a+i*Math.sin(o)}`)}rect(t,a,i,r){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+a}h${i=+i}v${+r}h${-i}Z`}toString(){return this._}}function x7(e){let t=3;
7745return e.digits=function(a){if(!arguments.length)return t;if(a==null)t=null;else{const i=Math.floor(a);if(!(i>=0))throw new RangeError(`invalid digits: ${a}`);t=i}return e},()=>new zxe(t)}function w7(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function dY(e){this._context=e}dY.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function C1(e){return new dY(e)}function uY(e){return e[0]}function hY(e){return e[1]}function pY(e,t){var a=Lt(!0),i=null,r=C1,o=null,l=x7(d);e=typeof e=="function"?e:e===void 0?uY:Lt(e),t=typeof t=="function"?t:t===void 0?hY:Lt(t);function d(u){var h,m=(u=w7(u)).length,f,y=!1,b;for(i==null&&(o=r(b=l())),h=0;h<=m;++h)!(h<m&&a(f=u[h],h,u))===y&&((y=!y)?o.lineStart():o.lineEnd()),y&&o.point(+e(f,h,u),+t(f,h,u));if(b)return o=null,b+""||null}return d.x=function(u){return arguments.length?(e=typeof u=="function"?u:Lt(+u),d):e},d.y=function(u){return arguments.length?(t=typeof u=="function"?u:Lt(+u),d):t},d.defined=function(u){return arguments.length?(a=typeof u=="function"?u:Lt(!!u),d):a},d.curve=function(u){return arguments.length?(r=u,i!=null&&(o=r(i)),d):r},d.context=function(u){return arguments.length?(u==null?i=o=null:o=r(i=u),d):i},d}function Fv(e,t,a){var i=null,r=Lt(!0),o=null,l=C1,d=null,u=x7(h);e=typeof e=="function"?e:e===void 0?uY:Lt(+e),t=typeof t=="function"?t:Lt(t===void 0?0:+t),a=typeof a=="function"?a:a===void 0?hY:Lt(+a);function h(f){var y,b,x,k=(f=w7(f)).length,v,j=!1,T,A=new Array(k),C=new Array(k);for(o==null&&(d=l(T=u())),y=0;y<=k;++y){if(!(y<k&&r(v=f[y],y,f))===j)if(j=!j)b=y,d.areaStart(),d.lineStart();else{for(d.lineEnd(),d.lineStart(),x=y-1;x>=b;--x)d.point(A[x],C[x]);d.lineEnd(),d.areaEnd()}j&&(A[y]=+e(v,y,f),C[y]=+t(v,y,f),d.point(i?+i(v,y,f):A[y],a?+a(v,y,f):C[y]))}if(T)return d=null,T+""||null}function m(){return pY().defined(r).curve(l).context(o)}return h.x=function(f){return arguments.length?(e=typeof f=="function"?f:Lt(+f),i=null,h):e},h.x0=function(f){return arguments.length?(e=typeof f=="function"?f:Lt(+f),h):e},h.x1=function(f){return arguments.length?(i=f==null?null:typeof f=="function"?f:Lt(+f),h):i},h.y=function(f){return arguments.length?(t=typeof f=="function"?f:Lt(+f),a=null,h):t},h.y0=function(f){return arguments.length?(t=typeof f=="function"?f:Lt(+f),h):t},h.y1=function(f){return arguments.length?(a=f==null?null:typeof f=="function"?f:Lt(+f),h):a},h.lineX0=h.lineY0=function(){return m().x(e).y(t)},h.lineY1=function(){return m().x(e).y(a)},h.lineX1=function(){return m().x(i).y(t)},h.defined=function(f){return arguments.length?(r=typeof f=="function"?f:Lt(!!f),h):r},h.curve=function(f){return arguments.length?(l=f,o!=null&&(d=l(o)),h):l},h.context=function(f){return arguments.length?(f==null?o=d=null:d=l(o=f),h):o},h}class mY{constructor(t,a){this._context=t,this._x=a}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,a){switch(t=+t,a=+a,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,a):this._context.moveTo(t,a);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,a,t,a):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+a)/2,t,this._y0,t,a);break}}this._x0=t,this._y0=a}}function Lxe(e){return new mY(e,!0)}function Uxe(e){return new mY(e,!1)}const k7={draw(e,t){const a=Xr(t/ux);e.moveTo(a,0),e.arc(0,0,a,0,S1)}},Bxe={draw(e,t){const a=Xr(t/5)/2;e.moveTo(-3*a,-a),e.lineTo(-a,-a),e.lineTo(-a,-3*a),e.lineTo(a,-3*a),e.lineTo(a,-a),e.lineTo(3*a,-a),e.lineTo(3*a,a),e.lineTo(a,a),e.lineTo(a,3*a),e.lineTo(-a,3*a),e.lineTo(-a,a),e.lineTo(-3*a,a),e.closePath()}},fY=Xr(1/3),qxe=fY*2,$xe={draw(e,t){const a=Xr(t/qxe),i=a*fY;e.moveTo(0,-a),e.lineTo(i,0),e.lineTo(0,a),e.lineTo(-i,0),e.closePath()}},Fxe={draw(e,t){const a=Xr(t),i=-a/2;e.rect(i,i,a,a)}},Gxe=.8908130915292852,gY=dx(ux/10)/dx(7*ux/10),Hxe=dx(S1/10)*gY,Yxe=-lY(S1/10)*gY,Vxe={draw(e,t){const a=Xr(t*Gxe),i=Hxe*a,r=Yxe*a;e.moveTo(0,-a),e.lineTo(i,r);for(let o=1;o<5;++o){const l=S1*o/5,d=lY(l),u=dx(l);e.lineTo(u*a,-d*a),e.lineTo(d*i-u*r,u*i+d*r)}e.closePath()}},T5=Xr(3),Kxe={draw(e,t){const a=-Xr(t/(T5*3));e.moveTo(0,a*2),e.lineTo(-T5*a,-a),e.lineTo(T5*a,-a),e.closePath()}}
7745,Ii=-.5,Di=Xr(3)/2,l3=1/Xr(12),Xxe=(l3/2+1)*3,Qxe={draw(e,t){const a=Xr(t/Xxe),i=a/2,r=a*l3,o=i,l=a*l3+a,d=-o,u=l;e.moveTo(i,r),e.lineTo(o,l),e.lineTo(d,u),e.lineTo(Ii*i-Di*r,Di*i+Ii*r),e.lineTo(Ii*o-Di*l,Di*o+Ii*l),e.lineTo(Ii*d-Di*u,Di*d+Ii*u),e.lineTo(Ii*i+Di*r,Ii*r-Di*i),e.lineTo(Ii*o+Di*l,Ii*l-Di*o),e.lineTo(Ii*d+Di*u,Ii*u-Di*d),e.closePath()}};function Zxe(e,t){let a=null,i=x7(r);e=typeof e=="function"?e:Lt(e||k7),t=typeof t=="function"?t:Lt(t===void 0?64:+t);function r(){let o;if(a||(a=o=i()),e.apply(this,arguments).draw(a,+t.apply(this,arguments)),o)return a=null,o+""||null}return r.type=function(o){return arguments.length?(e=typeof o=="function"?o:Lt(o),r):e},r.size=function(o){return arguments.length?(t=typeof o=="function"?o:Lt(+o),r):t},r.context=function(o){return arguments.length?(a=o??null,r):a},r}function hx(){}function px(e,t,a){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+a)/6)}function yY(e){this._context=e}yY.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:px(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:px(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Jxe(e){return new yY(e)}function bY(e){this._context=e}bY.prototype={areaStart:hx,areaEnd:hx,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:px(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function ewe(e){return new bY(e)}function vY(e){this._context=e}vY.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var a=(this._x0+4*this._x1+e)/6,i=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(a,i):this._context.moveTo(a,i);break;case 3:this._point=4;default:px(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function twe(e){return new vY(e)}function xY(e){this._context=e}xY.prototype={areaStart:hx,areaEnd:hx,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function nwe(e){return new xY(e)}function RI(e){return e<0?-1:1}function NI(e,t,a){var i=e._x1-e._x0,r=t-e._x1,o=(e._y1-e._y0)/(i||r<0&&-0),l=(a-e._y1)/(r||i<0&&-0),d=(o*r+l*i)/(i+r);return(RI(o)+RI(l))*Math.min(Math.abs(o),Math.abs(l),.5*Math.abs(d))||0}function OI(e,t){var a=e._x1-e._x0;return a?(3*(e._y1-e._y0)/a-t)/2:t}function _5(e,t,a){var i=e._x0,r=e._y0,o=e._x1,l=e._y1,d=(o-i)/3;
7745e._context.bezierCurveTo(i+d,r+d*t,o-d,l-d*a,o,l)}function mx(e){this._context=e}mx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:_5(this,this._t0,OI(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var a=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,_5(this,OI(this,a=NI(this,e,t)),a);break;default:_5(this,this._t0,a=NI(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=a}}};function wY(e){this._context=new kY(e)}(wY.prototype=Object.create(mx.prototype)).point=function(e,t){mx.prototype.point.call(this,t,e)};function kY(e){this._context=e}kY.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,a,i,r,o){this._context.bezierCurveTo(t,e,i,a,o,r)}};function awe(e){return new mx(e)}function iwe(e){return new wY(e)}function jY(e){this._context=e}jY.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,a=e.length;if(a)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),a===2)this._context.lineTo(e[1],t[1]);else for(var i=PI(e),r=PI(t),o=0,l=1;l<a;++o,++l)this._context.bezierCurveTo(i[0][o],r[0][o],i[1][o],r[1][o],e[l],t[l]);(this._line||this._line!==0&&a===1)&&this._context.closePath(),this._line=1-this._line,this._x=this._y=null},point:function(e,t){this._x.push(+e),this._y.push(+t)}};function PI(e){var t,a=e.length-1,i,r=new Array(a),o=new Array(a),l=new Array(a);for(r[0]=0,o[0]=2,l[0]=e[0]+2*e[1],t=1;t<a-1;++t)r[t]=1,o[t]=4,l[t]=4*e[t]+2*e[t+1];for(r[a-1]=2,o[a-1]=7,l[a-1]=8*e[a-1]+e[a],t=1;t<a;++t)i=r[t]/o[t-1],o[t]-=i,l[t]-=i*l[t-1];for(r[a-1]=l[a-1]/o[a-1],t=a-2;t>=0;--t)r[t]=(l[t]-r[t+1])/o[t];for(o[a-1]=(e[a]+r[a-1])/2,t=0;t<a-1;++t)o[t]=2*e[t+1]-r[t+1];return[r,o]}function rwe(e){return new jY(e)}function A1(e,t){this._context=e,this._t=t}A1.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=this._y=NaN,this._point=0},lineEnd:function(){0<this._t&&this._t<1&&this._point===2&&this._context.lineTo(this._x,this._y),(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line>=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var a=this._x*(1-this._t)+e*this._t;this._context.lineTo(a,this._y),this._context.lineTo(a,t)}break}}this._x=e,this._y=t}};function owe(e){return new A1(e,.5)}function swe(e){return new A1(e,0)}function lwe(e){return new A1(e,1)}function mp(e,t){if((l=e.length)>1)for(var a=1,i,r,o=e[t[0]],l,d=o.length;a<l;++a)for(r=o,o=e[t[a]],i=0;i<d;++i)o[i][1]+=o[i][0]=isNaN(r[i][1])?r[i][0]:r[i][1]}function c3(e){for(var t=e.length,a=new Array(t);--t>=0;)a[t]=t;return a}function cwe(e,t){return e[t]}function dwe(e){const t=[];return t.key=e,t}function uwe(){var e=Lt([]),t=c3,a=mp,i=cwe;function r(o){var l=Array.from(e.apply(this,arguments),dwe),d,u=l.length,h=-1,m;for(const f of o)for(d=0,++h;d<u;++d)(l[d][h]=[0,+i(f,l[d].key,h,o)]).data=f;for(d=0,m=w7(t(l));d<u;++d)l[m[d]].index=d;return a(l,m),l}return r.keys=function(o){return arguments.length?(e=typeof o=="function"?o:Lt(Array.from(o)),r):e},r.value=function(o){return arguments.length?(i=typeof o=="function"?o:Lt(+o),r):i},r.order=function(o){return arguments.length?(t=o==null?c3:typeof o=="function"?o:Lt(Array.from(o)),r):t},r.offset=function(o){return arguments.length?(a=o??mp,r):a},r}function hwe(e,t){if((i=e.length)>0){for(var a,i,r=0,o=e[0].length,l;r<o;++r){for(l=a=0;a<i;++a)l+=e[a][r][1]||0;if(l)for(a=0;a<i;++a)e[a][r][1]/=l}mp(e,t)}}function pwe(e,t){if((r=e.length)>0){for(var a=0,i=e[t[0]],r,o=i.length;a<o;++a){for(var l=0,d=0;l<r;++l)d+=e[l][a][1]||0;i[a][1]+=i[a][0]=-d/2}mp(e,t)}}function mwe(e,t){if(!(!((l=e.length)>0)||!((o=(r=e[t[0]]).length)>0))){for(var a=0,i=1,r,o,l;i<o;++i){for(var d=0,u=0,h=0;d<l;++d){for(var m=e[t[d]],f=m[i][1]||0,y=m[i-1][1]||0,b=(f-y)/2,x=0;x<d;++x){var k=e[t[x]],v=k[i][1]||0,j=k[i-1][1]||0;b+=v-j}u+=f,h+=b*f}r[i-1][1]+=r[i-1][0]=a,u&&(a-=h/u)}r[i-1][1]+=r[i-1][0]=a,mp(e,t)}}function Cg(e){"@babel/helpers - typeof";return Cg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Cg(e)}var fwe=["type","size","sizeType"];function d3(){return d3=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},d3.apply(this,arguments)}function II(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function DI(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};
vendor: 13,234 bytes, lines 7745-7748
7745t%2?II(Object(a),!0).forEach(function(i){gwe(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):II(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function gwe(e,t,a){return t=ywe(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function ywe(e){var t=bwe(e,"string");return Cg(t)=="symbol"?t:t+""}function bwe(e,t){if(Cg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Cg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function vwe(e,t){if(e==null)return{};var a=xwe(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function xwe(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}var SY={symbolCircle:k7,symbolCross:Bxe,symbolDiamond:$xe,symbolSquare:Fxe,symbolStar:Vxe,symbolTriangle:Kxe,symbolWye:Qxe},wwe=Math.PI/180,kwe=function(t){var a="symbol".concat(j1(t));return SY[a]||k7},jwe=function(t,a,i){if(a==="area")return t;switch(i){case"cross":return 5*t*t/9;case"diamond":return .5*t*t/Math.sqrt(3);case"square":return t*t;case"star":{var r=18*wwe;return 1.25*t*t*(Math.tan(r)-Math.tan(r*2)*Math.pow(Math.tan(r),2))}case"triangle":return Math.sqrt(3)*t*t/4;case"wye":return(21-10*Math.sqrt(3))*t*t/8;default:return Math.PI*t*t/4}},Swe=function(t,a){SY["symbol".concat(j1(t))]=a},j7=function(t){var a=t.type,i=a===void 0?"circle":a,r=t.size,o=r===void 0?64:r,l=t.sizeType,d=l===void 0?"area":l,u=vwe(t,fwe),h=DI(DI({},u),{},{type:i,size:o,sizeType:d}),m=function(){var v=kwe(i),j=Zxe().type(v).size(jwe(o,d,i));return j()},f=h.className,y=h.cx,b=h.cy,x=Ze(h,!0);return y===+y&&b===+b&&o===+o?q.createElement("path",d3({},x,{className:ot("recharts-symbols",f),transform:"translate(".concat(y,", ").concat(b,")"),d:m()})):null};j7.registerSymbol=Swe;function fp(e){"@babel/helpers - typeof";return fp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},fp(e)}function u3(){return u3=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},u3.apply(this,arguments)}function WI(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function Cwe(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?WI(Object(a),!0).forEach(function(i){Ag(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):WI(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function Awe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Twe(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,AY(i.key),i)}}function _we(e,t,a){return t&&Twe(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function Mwe(e,t,a){return t=fx(t),Ewe(e,CY()?Reflect.construct(t,a||[],fx(e).constructor):t.apply(e,a))}function Ewe(e,t){if(t&&(fp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Rwe(e)}function Rwe(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function CY(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(CY=function(){return!!e})()}function fx(e){return fx=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},fx(e)}function Nwe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&h3(e,t)}function h3(e,t){return h3=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},h3(e,t)}function Ag(e,t,a){return t=AY(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function AY(e){var t=Owe(e,"string");return fp(t)=="symbol"?t:t+""}function Owe(e,t){if(fp(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(fp(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var Wi=32,S7=(function(e){function t(){return Awe(this,t),Mwe(this,t,arguments)}return Nwe(t,e),_we(t,[{key:"renderIcon",value:function(i){var r=this.props.inactiveColor,o=Wi/2,l=Wi/6,d=Wi/3,u=i.inactive?r:i.color;if(i.type==="plainline")return q.createElement("line",{strokeWidth:4,fill:"none",stroke:u,strokeDasharray:i.payload.strokeDasharray,x1:0,y1:o,x2:Wi,y2:o,className:"recharts-legend-icon"});if(i.type==="line")return q.createElement("path",{strokeWidth:4,fill:"none",stroke:u,d:"M0,".concat(o,"h").concat(d,`
7746            A`).concat(l,",").concat(l,",0,1,1,").concat(2*d,",").concat(o,`
7747            H`).concat(Wi,"M").concat(2*d,",").concat(o,`
7748            A`).concat(l,",").concat(l,",0,1,1,").concat(d,",").concat(o),className:"recharts-legend-icon"});if(i.type==="rect")return q.createElement("path",{stroke:"none",fill:u,d:"M0,".concat(Wi/8,"h").concat(Wi,"v").concat(Wi*3/4,"h").concat(-Wi,"z"),className:"recharts-legend-icon"});if(q.isValidElement(i.legendIcon)){var h=Cwe({},i);return delete h.legendIcon,q.cloneElement(i.legendIcon,h)}return q.createElement(j7,{fill:u,cx:o,cy:o,size:Wi,sizeType:"diameter",type:i.type})}},{key:"renderItems",value:function(){var i=this,r=this.props,o=r.payload,l=r.iconSize,d=r.layout,u=r.formatter,h=r.inactiveColor,m={x:0,y:0,width:Wi,height:Wi},f={display:d==="horizontal"?"inline-block":"block",marginRight:10},y={display:"inline-block",verticalAlign:"middle",marginRight:4};return o.map(function(b,x){var k=b.formatter||u,v=ot(Ag(Ag({"recharts-legend-item":!0},"legend-item-".concat(x),!0),"inactive",b.inactive));if(b.type==="none")return null;var j=Ke(b.value)?null:b.value;Rs(!Ke(b.value),`The name property is also required when using a function for the dataKey of a chart's cartesian components. Ex: <Bar name="Name of my Data"/>`);var T=b.inactive?h:b.color;return q.createElement("li",u3({className:v,style:f,key:"legend-item-".concat(x)},lx(i.props,b,x)),q.createElement(cx,{width:l,height:l,viewBox:m,style:y},i.renderIcon(b)),q.createElement("span",{className:"recharts-legend-item-text",style:{color:T}},k?k(j,b,x):j))})}},{key:"render",value:function(){var i=this.props,r=i.payload,o=i.layout,l=i.align;if(!r||!r.length)return null;var d={padding:0,margin:0,textAlign:o==="horizontal"?l:"left"};return q.createElement("ul",{className:"recharts-default-legend",style:d},this.renderItems())}}])})(M.PureComponent);Ag(S7,"displayName","Legend");Ag(S7,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var M5,zI;function Pwe(){if(zI)return M5;zI=1;var e=y1();function t(){this.__data__=new e,this.size=0}return M5=t,M5}var E5,LI;function Iwe(){if(LI)return E5;LI=1;function e(t){var a=this.__data__,i=a.delete(t);return this.size=a.size,i}return E5=e,E5}var R5,UI;function Dwe(){if(UI)return R5;UI=1;function e(t){return this.__data__.get(t)}return R5=e,R5}var N5,BI;function Wwe(){if(BI)return N5;BI=1;function e(t){return this.__data__.has(t)}return N5=e,N5}var O5,qI;function zwe(){if(qI)return O5;qI=1;var e=y1(),t=y7(),a=b7(),i=200;function r(o,l){var d=this.__data__;if(d instanceof e){var u=d.__data__;if(!t||u.length<i-1)return u.push([o,l]),this.size=++d.size,this;d=this.__data__=new a(u)}return d.set(o,l),this.size=d.size,this}return O5=r,O5}var P5,$I;function C7(){if($I)return P5;$I=1;var e=y1(),t=Pwe(),a=Iwe(),i=Dwe(),r=Wwe(),o=zwe();function l(d){var u=this.__data__=new e(d);this.size=u.size}return l.prototype.clear=t,l.prototype.delete=a,l.prototype.get=i,l.prototype.has=r,l.prototype.set=o,P5=l,P5}var I5,FI;function Lwe(){if(FI)return I5;FI=1;var e="__lodash_hash_undefined__";function t(a){return this.__data__.set(a,e),this}return I5=t,I5}var D5,GI;function Uwe(){if(GI)return D5;GI=1;function e(t){return this.__data__.has(t)}return D5=e,D5}var W5,HI;function TY(){if(HI)return W5;HI=1;var e=b7(),t=Lwe(),a=Uwe();function i(r){var o=-1,l=r==null?0:r.length;for(this.__data__=new e;++o<l;)this.add(r[o])}return i.prototype.add=i.prototype.push=t,i.prototype.has=a,W5=i,W5}var z5,YI;function _Y(){if(YI)return z5;YI=1;function e(t,a){for(var i=-1,r=t==null?0:t.length;++i<r;)if(a(t[i],i,t))return!0;return!1}return z5=e,z5}var L5,VI;function MY(){if(VI)return L5;VI=1;function e(t,a){return t.has(a)}return L5=e,L5}var U5,KI;function EY(){if(KI)return U5;KI=1;var e=TY(),t=_Y(),a=MY(),i=1,r=2;function o(l,d,u,h,m,f){var y=u&i,b=l.length,x=d.length;if(b!=x&&!(y&&x>b))return!1;var k=f.get(l),v=f.get(d);if(k&&v)return k==d&&v==l;var j=-1,T=!0,A=u&r?new e:void 0;for(f.set(l,d),f.set(d,l);++j<b;){var C=l[j],_=d[j];if(h)var E=y?h(_,C,j,d,l,f):h(C,_,j,l,d,f);if(E!==void 0){if(E)continue;T=!1;break}if(A){if(!t(d,function(R,W){if(!a(A,W)&&(C===R||m(C,R,u,h,f)))return A.push(W)})){T=!1;break}}else if(!(C===_||m(C,_,u,h,f))){T=!1;break}}return f.delete(l),f.delete(d),T}return U5=o,U5}var B5,XI;function RY(){if(XI)return B5;XI=1;var e=Yr(),t=e.Uint8Array;return B5=t,B5}var q5,QI;function Bwe(){if(QI)return q5;QI=1;function e(t){var a=-1,i=Array(t.size);return t.forEach(function(r,o){i[++a]=[o,r]}),i}return q5=e,q5}var $5,ZI;function A7(){if(ZI)return $5;ZI=1;function e(t){var a=-1,i=Array(t.size);return t.forEach(function(r){i[++a]=r}),i}return $5=e,$5}var F5,JI;function qwe(){if(JI)return F5;JI=1;var e=em(),t=RY(),a=f1(),i=EY(),r=Bwe(),o=A7(),l=1,d=2,u="[object Boolean]",h="[object Date]",m="[object Error]",f="[object Map]",y="[object Number]",b="[object RegExp]",x="[object Set]",k="[object String]",v="[object Symbol]",j="[object ArrayBuffer]",T="[object DataView]",A=e?e.prototype:void 0,C=A?A.valueOf:void 0;function _(E,R,W,z,H,$,U){switch(W){case T:if(E.byteLength!=R.byteLength||E.byteOffset!=R.byteOffset)return!1;E=E.buffer,R=R.buffer;case j:return!(E.byteLength!=R.byteLength||!$(new t(E),new t(R)));case u:case h:case y:return a(+E,+R);case m:return E.name==R.name&&E.message==R.message;case b:case k:return E==R+"";case f:var X=r;case x:var D=z&l;if(X||(X=o),E.size!=R.size&&!D)return!1;var P=U.get(E);if(P)return P==R;z|=d,U.set(E,R);var O=i(X(E),X(R),z,H,$,U);return U.delete(E),O;case v:if(C)return C.call(E)==C.call(R)}return!1}return F5=_,F5}var G5,eD;function T7(){if(eD)return G5;eD=1;function e(t,a){for(var i=-1,r=a.length,o=t.length;++i<r;)t[o+i]=a[i];return t}return G5=e,G5}var H5,tD;function NY(){if(tD)return H5;tD=1;var e=T7(),t=_a();function a(i,r,o){var l=r(i);return t(i)?l:e(l,o(i))}return H5=a,H5}var Y5,nD;function $we(){if(nD)return Y5;nD=1;function e(t,a){for(var i=-1,r=t==null?0:t.length,o=0,l=[];++i<r;){var d=t[i];a(d,i,t)&&(l[o++]=d)}return l}return Y5=e,Y5}var V5,aD;function OY(){if(aD)return V5;aD=1;function e(){return[]}return V5=e,V5}var K5,iD;function _7(){if(iD)return K5;iD=1;var e=$we(),t=OY(),a=Object.prototype,i=a.propertyIsEnumerable,r=Object.getOwnPropertySymbols,o=r?function(l){return l==null?[]:(l=Object(l),e(r(l),function(d){return i.call(l,d)}))}:t;return K5=o,K5}var X5,rD;function Fwe(){if(rD)return X5;rD=1;function e(t,a){for(var i=-1,r=Array(t);++i<t;)r[i]=a(i);return r}return X5=e,X5}var Q5,oD;function Gwe(){if(oD)return Q5;oD=1;var e=Zs(),t=Vr(),a="[object Arguments]";function i(r){return t(r)&&e(r)==a}return Q5=i,Q5}var Z5,sD;function M7(){if(sD)return Z5;sD=1;var e=Gwe(),t=Vr(),a=Object.prototype,i=a.hasOwnProperty,r=a.propertyIsEnumerable,o=e((function(){return arguments})())?e:function(l){return t(l)&&i.call(l,"callee")&&!r.call(l,"callee")};return Z5=o,Z5}var zf={exports:{}},J5,lD;function Hwe(){if(lD)return J5;lD=1;function e(){return!1}return J5=e,J5}zf.exports;var cD;function E7(){return cD||(cD=1,(function(e,t){var a=Yr(),i=Hwe(),r=t&&!t.nodeType&&t,o=r&&!0&&e&&!e.nodeType&&e,l=o&&o.exports===r,d=l?a.Buffer:void 0,u=d?d.isBuffer:void 0,h=u||i;e.exports=h})(zf,zf.exports)),zf.exports}var eC,dD;function R7(){if(dD)return eC;dD=1;var e=9007199254740991,t=/^(?:0|[1-9]\d*)$/;function a(i,r){var o=typeof i;return r=r??e,!!r&&(o=="number"||o!="symbol"&&t.test(i))&&i>-1&&i%1==0&&i<r}return eC=a,eC}var tC,uD;function N7(){if(uD)return tC;uD=1;var e=9007199254740991;function t(a){return typeof a=="number"&&a>-1&&a%1==0&&a<=e}return tC=t,tC}var nC,hD;
vendor: 4,250 bytes, line 7748
7748function Ywe(){if(hD)return nC;hD=1;var e=Zs(),t=N7(),a=Vr(),i="[object Arguments]",r="[object Array]",o="[object Boolean]",l="[object Date]",d="[object Error]",u="[object Function]",h="[object Map]",m="[object Number]",f="[object Object]",y="[object RegExp]",b="[object Set]",x="[object String]",k="[object WeakMap]",v="[object ArrayBuffer]",j="[object DataView]",T="[object Float32Array]",A="[object Float64Array]",C="[object Int8Array]",_="[object Int16Array]",E="[object Int32Array]",R="[object Uint8Array]",W="[object Uint8ClampedArray]",z="[object Uint16Array]",H="[object Uint32Array]",$={};$[T]=$[A]=$[C]=$[_]=$[E]=$[R]=$[W]=$[z]=$[H]=!0,$[i]=$[r]=$[v]=$[o]=$[j]=$[l]=$[d]=$[u]=$[h]=$[m]=$[f]=$[y]=$[b]=$[x]=$[k]=!1;function U(X){return a(X)&&t(X.length)&&!!$[e(X)]}return nC=U,nC}var aC,pD;function T1(){if(pD)return aC;pD=1;function e(t){return function(a){return t(a)}}return aC=e,aC}var Lf={exports:{}};Lf.exports;var mD;function O7(){return mD||(mD=1,(function(e,t){var a=JH(),i=t&&!t.nodeType&&t,r=i&&!0&&e&&!e.nodeType&&e,o=r&&r.exports===i,l=o&&a.process,d=(function(){try{var u=r&&r.require&&r.require("util").types;return u||l&&l.binding&&l.binding("util")}catch{}})();e.exports=d})(Lf,Lf.exports)),Lf.exports}var iC,fD;function PY(){if(fD)return iC;fD=1;var e=Ywe(),t=T1(),a=O7(),i=a&&a.isTypedArray,r=i?t(i):e;return iC=r,iC}var rC,gD;function IY(){if(gD)return rC;gD=1;var e=Fwe(),t=M7(),a=_a(),i=E7(),r=R7(),o=PY(),l=Object.prototype,d=l.hasOwnProperty;function u(h,m){var f=a(h),y=!f&&t(h),b=!f&&!y&&i(h),x=!f&&!y&&!b&&o(h),k=f||y||b||x,v=k?e(h.length,String):[],j=v.length;for(var T in h)(m||d.call(h,T))&&!(k&&(T=="length"||b&&(T=="offset"||T=="parent")||x&&(T=="buffer"||T=="byteLength"||T=="byteOffset")||r(T,j)))&&v.push(T);return v}return rC=u,rC}var oC,yD;function P7(){if(yD)return oC;yD=1;var e=Object.prototype;function t(a){var i=a&&a.constructor,r=typeof i=="function"&&i.prototype||e;return a===r}return oC=t,oC}var sC,bD;function DY(){if(bD)return sC;bD=1;function e(t,a){return function(i){return t(a(i))}}return sC=e,sC}var lC,vD;function Vwe(){if(vD)return lC;vD=1;var e=DY(),t=e(Object.keys,Object);return lC=t,lC}var cC,xD;function Kwe(){if(xD)return cC;xD=1;var e=P7(),t=Vwe(),a=Object.prototype,i=a.hasOwnProperty;function r(o){if(!e(o))return t(o);var l=[];for(var d in Object(o))i.call(o,d)&&d!="constructor"&&l.push(d);return l}return cC=r,cC}var dC,wD;function im(){if(wD)return dC;wD=1;var e=g7(),t=N7();function a(i){return i!=null&&t(i.length)&&!e(i)}return dC=a,dC}var uC,kD;function rm(){if(kD)return uC;kD=1;var e=IY(),t=Kwe(),a=im();function i(r){return a(r)?e(r):t(r)}return uC=i,uC}var hC,jD;function WY(){if(jD)return hC;jD=1;var e=NY(),t=_7(),a=rm();function i(r){return e(r,a,t)}return hC=i,hC}var pC,SD;function Xwe(){if(SD)return pC;SD=1;var e=WY(),t=1,a=Object.prototype,i=a.hasOwnProperty;function r(o,l,d,u,h,m){var f=d&t,y=e(o),b=y.length,x=e(l),k=x.length;if(b!=k&&!f)return!1;for(var v=b;v--;){var j=y[v];if(!(f?j in l:i.call(l,j)))return!1}var T=m.get(o),A=m.get(l);if(T&&A)return T==l&&A==o;var C=!0;m.set(o,l),m.set(l,o);for(var _=f;++v<b;){j=y[v];var E=o[j],R=l[j];if(u)var W=f?u(R,E,j,l,o,m):u(E,R,j,o,l,m);if(!(W===void 0?E===R||h(E,R,d,u,m):W)){C=!1;break}_||(_=j=="constructor")}if(C&&!_){var z=o.constructor,H=l.constructor;z!=H&&"constructor"in o&&"constructor"in l&&!(typeof z=="function"&&z instanceof z&&typeof H=="function"&&H instanceof H)&&(C=!1)}return m.delete(o),m.delete(l),C}return pC=r,pC}var mC,CD;function Qwe(){if(CD)return mC;CD=1;var e=ou(),t=Yr(),a=e(t,"DataView");return mC=a,mC}var fC,AD;function Zwe(){if(AD)return fC;AD=1;var e=ou(),t=Yr(),a=e(t,"Promise");return fC=a,fC}var gC,TD;function zY(){if(TD)return gC;TD=1;var e=ou(),t=Yr(),a=e(t,"Set");return gC=a,gC}var yC,_D;function Jwe(){if(_D)return yC;_D=1;var e=ou(),t=Yr(),a=e(t,"WeakMap");return yC=a,yC}var bC,MD;function _1(){if(MD)return bC;MD=1;var e=Qwe(),t=y7(),a=Zwe(),i=zY(),r=Jwe(),o=Zs(),l=eY(),d="[object Map]",u="[object Object]",h="[object Promise]",m="[object Set]",f="[object WeakMap]",y="[object DataView]",b=l(e),x=l(t),k=l(a),v=l(i),j=l(r),T=o;return(e&&T(new e(new ArrayBuffer(1)))!=y||t&&T(new t)!=d||a&&T(a.resolve())!=h||i&&T(new i)!=m||r&&T(new r)!=f)&&(T=function(A){var 
vendor: 46,720 bytes, lines 7748-7756
7748C=o(A),_=C==u?A.constructor:void 0,E=_?l(_):"";if(E)switch(E){case b:return y;case x:return d;case k:return h;case v:return m;case j:return f}return C}),bC=T,bC}var vC,ED;function e1e(){if(ED)return vC;ED=1;var e=C7(),t=EY(),a=qwe(),i=Xwe(),r=_1(),o=_a(),l=E7(),d=PY(),u=1,h="[object Arguments]",m="[object Array]",f="[object Object]",y=Object.prototype,b=y.hasOwnProperty;function x(k,v,j,T,A,C){var _=o(k),E=o(v),R=_?m:r(k),W=E?m:r(v);R=R==h?f:R,W=W==h?f:W;var z=R==f,H=W==f,$=R==W;if($&&l(k)){if(!l(v))return!1;_=!0,z=!1}if($&&!z)return C||(C=new e),_||d(k)?t(k,v,j,T,A,C):a(k,v,R,j,T,A,C);if(!(j&u)){var U=z&&b.call(k,"__wrapped__"),X=H&&b.call(v,"__wrapped__");if(U||X){var D=U?k.value():k,P=X?v.value():v;return C||(C=new e),A(D,P,j,T,C)}}return $?(C||(C=new e),i(k,v,j,T,A,C)):!1}return vC=x,vC}var xC,RD;function I7(){if(RD)return xC;RD=1;var e=e1e(),t=Vr();function a(i,r,o,l,d){return i===r?!0:i==null||r==null||!t(i)&&!t(r)?i!==i&&r!==r:e(i,r,o,l,a,d)}return xC=a,xC}var wC,ND;function t1e(){if(ND)return wC;ND=1;var e=C7(),t=I7(),a=1,i=2;function r(o,l,d,u){var h=d.length,m=h,f=!u;if(o==null)return!m;for(o=Object(o);h--;){var y=d[h];if(f&&y[2]?y[1]!==o[y[0]]:!(y[0]in o))return!1}for(;++h<m;){y=d[h];var b=y[0],x=o[b],k=y[1];if(f&&y[2]){if(x===void 0&&!(b in o))return!1}else{var v=new e;if(u)var j=u(x,k,b,o,l,v);if(!(j===void 0?t(k,x,a|i,u,v):j))return!1}}return!0}return wC=r,wC}var kC,OD;function LY(){if(OD)return kC;OD=1;var e=Kr();function t(a){return a===a&&!e(a)}return kC=t,kC}var jC,PD;function n1e(){if(PD)return jC;PD=1;var e=LY(),t=rm();function a(i){for(var r=t(i),o=r.length;o--;){var l=r[o],d=i[l];r[o]=[l,d,e(d)]}return r}return jC=a,jC}var SC,ID;function UY(){if(ID)return SC;ID=1;function e(t,a){return function(i){return i==null?!1:i[t]===a&&(a!==void 0||t in Object(i))}}return SC=e,SC}var CC,DD;function a1e(){if(DD)return CC;DD=1;var e=t1e(),t=n1e(),a=UY();function i(r){var o=t(r);return o.length==1&&o[0][2]?a(o[0][0],o[0][1]):function(l){return l===r||e(l,r,o)}}return CC=i,CC}var AC,WD;function i1e(){if(WD)return AC;WD=1;function e(t,a){return t!=null&&a in Object(t)}return AC=e,AC}var TC,zD;function r1e(){if(zD)return TC;zD=1;var e=x1(),t=M7(),a=_a(),i=R7(),r=N7(),o=nb();function l(d,u,h){u=e(u,d);for(var m=-1,f=u.length,y=!1;++m<f;){var b=o(u[m]);if(!(y=d!=null&&h(d,b)))break;d=d[b]}return y||++m!=f?y:(f=d==null?0:d.length,!!f&&r(f)&&i(b,f)&&(a(d)||t(d)))}return TC=l,TC}var _C,LD;function o1e(){if(LD)return _C;LD=1;var e=i1e(),t=r1e();function a(i,r){return i!=null&&t(i,r,e)}return _C=a,_C}var MC,UD;function s1e(){if(UD)return MC;UD=1;var e=I7(),t=aY(),a=o1e(),i=f7(),r=LY(),o=UY(),l=nb(),d=1,u=2;function h(m,f){return i(m)&&r(f)?o(l(m),f):function(y){var b=t(y,m);return b===void 0&&b===f?a(y,m):e(f,b,d|u)}}return MC=h,MC}var EC,BD;function om(){if(BD)return EC;BD=1;function e(t){return t}return EC=e,EC}var RC,qD;function l1e(){if(qD)return RC;qD=1;function e(t){return function(a){return a==null?void 0:a[t]}}return RC=e,RC}var NC,$D;function c1e(){if($D)return NC;$D=1;var e=w1();function t(a){return function(i){return e(i,a)}}return NC=t,NC}var OC,FD;function d1e(){if(FD)return OC;FD=1;var e=l1e(),t=c1e(),a=f7(),i=nb();function r(o){return a(o)?e(i(o)):t(o)}return OC=r,OC}var PC,GD;function vc(){if(GD)return PC;GD=1;var e=a1e(),t=s1e(),a=om(),i=_a(),r=d1e();function o(l){return typeof l=="function"?l:l==null?a:typeof l=="object"?i(l)?t(l[0],l[1]):e(l):r(l)}return PC=o,PC}var IC,HD;function BY(){if(HD)return IC;HD=1;function e(t,a,i,r){for(var o=t.length,l=i+(r?1:-1);r?l--:++l<o;)if(a(t[l],l,t))return l;return-1}return IC=e,IC}var DC,YD;function u1e(){if(YD)return DC;YD=1;function e(t){return t!==t}return DC=e,DC}var WC,VD;function h1e(){if(VD)return WC;VD=1;function e(t,a,i){for(var r=i-1,o=t.length;++r<o;)if(t[r]===a)return r;return-1}return WC=e,WC}var zC,KD;function p1e(){if(KD)return zC;KD=1;var e=BY(),t=u1e(),a=h1e();function i(r,o,l){return o===o?a(r,o,l):e(r,t,l)}return zC=i,zC}var LC,XD;function m1e(){if(XD)return LC;XD=1;var e=p1e();function t(a,i){var r=a==null?0:a.length;return!!r&&e(a,i,0)>-1}return LC=t,LC}var UC,QD;function f1e(){if(QD)return UC;QD=1;function e(t,a,i){for(var r=-1,o=t==null?0:t.length;++r<o;)if(i(a,t[r]))return!0;return!1}return UC=e,UC}var BC,ZD;function g1e(){if(ZD)return BC;ZD=1;function e(){}return BC=e,BC}var qC,JD;function y1e(){if(JD)return qC;JD=1;var e=zY(),t=g1e(),a=A7(),i=1/0,r=e&&1/a(new e([,-0]))[1]==i?function(o){return new e(o)}:t;return qC=r,qC}var $C,eW;function b1e(){if(eW)return $C;eW=1;var e=TY(),t=m1e(),a=f1e(),i=MY(),r=y1e(),o=A7(),l=200;function d(u,h,m){var f=-1,y=t,b=u.length,x=!0,k=[],v=k;if(m)x=!1,y=a;else if(b>=l){var j=h?null:r(u);if(j)return o(j);x=!1,y=i,v=new e}else v=h?[]:k;e:for(;++f<b;){var T=u[f],A=h?h(T):T;if(T=m||T!==0?T:0,x&&A===A){for(var C=v.length;C--;)if(v[C]===A)continue e;h&&v.push(A),k.push(T)}else y(v,A,m)||(v!==k&&v.push(A),k.push(T))}return k}return $C=d,$C}var FC,tW;function v1e(){if(tW)return FC;tW=1;var e=vc(),t=b1e();function a(i,r){return i&&i.length?t(i,e(r,2)):[]}return FC=a,FC}var x1e=v1e();const nW=vt(x1e);function qY(e,t,a){return t===!0?nW(e,a):Ke(t)?nW(e,t):e}function gp(e){"@babel/helpers - typeof";return gp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},gp(e)}var w1e=["ref"];function aW(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function ds(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?aW(Object(a),!0).forEach(function(i){M1(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):aW(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function k1e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function iW(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,FY(i.key),i)}}function j1e(e,t,a){return t&&iW(e.prototype,t),a&&iW(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e}function S1e(e,t,a){return t=gx(t),C1e(e,$Y()?Reflect.construct(t,a||[],gx(e).constructor):t.apply(e,a))}function C1e(e,t){if(t&&(gp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return A1e(e)}function A1e(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function $Y(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return($Y=function(){return!!e})()}function gx(e){return gx=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},gx(e)}function T1e(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&p3(e,t)}function p3(e,t){return p3=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},p3(e,t)}function M1(e,t,a){return t=FY(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function FY(e){var t=_1e(e,"string");return gp(t)=="symbol"?t:t+""}function _1e(e,t){if(gp(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(gp(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function M1e(e,t){if(e==null)return{};var a=E1e(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function E1e(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function R1e(e){return e.value}function N1e(e,t){if(q.isValidElement(e))return q.cloneElement(e,t);if(typeof e=="function")return q.createElement(e,t);t.ref;var a=M1e(t,w1e);return q.createElement(S7,a)}var rW=1,Ad=(function(e){function t(){var a;k1e(this,t);for(var i=arguments.length,r=new Array(i),o=0;o<i;o++)r[o]=arguments[o];return a=S1e(this,t,[].concat(r)),M1(a,"lastBoundingBox",{width:-1,height:-1}),a}return T1e(t,e),j1e(t,[{key:"componentDidMount",value:function(){this.updateBBox()}},{key:"componentDidUpdate",value:function(){this.updateBBox()}},{key:"getBBox",value:function(){if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var i=this.wrapperNode.getBoundingClientRect();return i.height=this.wrapperNode.offsetHeight,i.width=this.wrapperNode.offsetWidth,i}return null}},{key:"updateBBox",value:function(){var i=this.props.onBBoxUpdate,r=this.getBBox();r?(Math.abs(r.width-this.lastBoundingBox.width)>rW||Math.abs(r.height-this.lastBoundingBox.height)>rW)&&(this.lastBoundingBox.width=r.width,this.lastBoundingBox.height=r.height,i&&i(r)):(this.lastBoundingBox.width!==-1||this.lastBoundingBox.height!==-1)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,i&&i(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?ds({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(i){var r=this.props,o=r.layout,l=r.align,d=r.verticalAlign,u=r.margin,h=r.chartWidth,m=r.chartHeight,f,y;if(!i||(i.left===void 0||i.left===null)&&(i.right===void 0||i.right===null))if(l==="center"&&o==="vertical"){var b=this.getBBoxSnapshot();f={left:((h||0)-b.width)/2}}else f=l==="right"?{right:u&&u.right||0}:{left:u&&u.left||0};if(!i||(i.top===void 0||i.top===null)&&(i.bottom===void 0||i.bottom===null))if(d==="middle"){var x=this.getBBoxSnapshot();y={top:((m||0)-x.height)/2}}else y=d==="bottom"?{bottom:u&&u.bottom||0}:{top:u&&u.top||0};return ds(ds({},f),y)}},{key:"render",value:function(){var i=this,r=this.props,o=r.content,l=r.width,d=r.height,u=r.wrapperStyle,h=r.payloadUniqBy,m=r.payload,f=ds(ds({position:"absolute",width:l||"auto",height:d||"auto"},this.getDefaultPosition(u)),u);return q.createElement("div",{className:"recharts-legend-wrapper",style:f,ref:function(b){i.wrapperNode=b}},N1e(o,ds(ds({},this.props),{},{payload:qY(m,h,R1e)})))}}],[{key:"getWithHeight",value:function(i,r){var o=ds(ds({},this.defaultProps),i.props),l=o.layout;return l==="vertical"&&ke(i.props.height)?{height:i.props.height}:l==="horizontal"?{width:i.props.width||r}:null}}])})(M.PureComponent);M1(Ad,"displayName","Legend");M1(Ad,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var GC,oW;function O1e(){if(oW)return GC;oW=1;var e=em(),t=M7(),a=_a(),i=e?e.isConcatSpreadable:void 0;function r(o){return a(o)||t(o)||!!(i&&o&&o[i])}return GC=r,GC}var HC,sW;function D7(){if(sW)return HC;sW=1;var e=T7(),t=O1e();function a(i,r,o,l,d){var u=-1,h=i.length;for(o||(o=t),d||(d=[]);++u<h;){var m=i[u];r>0&&o(m)?r>1?a(m,r-1,o,l,d):e(d,m):l||(d[d.length]=m)}return d}return HC=a,HC}var YC,lW;function P1e(){if(lW)return YC;lW=1;function e(t){return function(a,i,r){for(var o=-1,l=Object(a),d=r(a),u=d.length;u--;){var h=d[t?u:++o];if(i(l[h],h,l)===!1)break}return a}}return YC=e,YC}var VC,cW;function I1e(){if(cW)return VC;cW=1;var e=P1e(),t=e();return VC=t,VC}var KC,dW;function GY(){if(dW)return KC;dW=1;var e=I1e(),t=rm();function a(i,r){return i&&e(i,r,t)}return KC=a,KC}var XC,uW;function D1e(){if(uW)return XC;uW=1;var e=im();function t(a,i){return function(r,o){if(r==null)return r;if(!e(r))return a(r,o);for(var l=r.length,d=i?l:-1,u=Object(r);(i?d--:++d<l)&&o(u[d],d,u)!==!1;);return r}}return XC=t,XC}var QC,hW;function W7(){if(hW)return QC;hW=1;var e=GY(),t=D1e(),a=t(e);return QC=a,QC}var ZC,pW;function HY(){if(pW)return ZC;pW=1;var e=W7(),t=im();function a(i,r){var o=-1,l=t(i)?Array(i.length):[];return e(i,function(d,u,h){l[++o]=r(d,u,h)}),l}return ZC=a,ZC}var JC,mW;function W1e(){if(mW)return JC;mW=1;function e(t,a){var i=t.length;for(t.sort(a);i--;)t[i]=t[i].value;return t}return JC=e,JC}var eA,fW;function z1e(){if(fW)return eA;fW=1;var e=tm();function t(a,i){if(a!==i){var r=a!==void 0,o=a===null,l=a===a,d=e(a),u=i!==void 0,h=i===null,m=i===i,f=e(i);if(!h&&!f&&!d&&a>i||d&&u&&m&&!h&&!f||o&&u&&m||!r&&m||!l)return 1;if(!o&&!d&&!f&&a<i||f&&r&&l&&!o&&!d||h&&r&&l||!u&&l||!m)return-1}return 0}return eA=t,eA}var tA,gW;function L1e(){if(gW)return tA;gW=1;var e=z1e();function t(a,i,r){for(var o=-1,l=a.criteria,d=i.criteria,u=l.length,h=r.length;++o<u;){var m=e(l[o],d[o]);if(m){if(o>=h)return m;var f=r[o];return m*(f=="desc"?-1:1)}}return a.index-i.index}return tA=t,tA}var nA,yW;function U1e(){if(yW)return nA;yW=1;var e=v1(),t=w1(),a=vc(),i=HY(),r=W1e(),o=T1(),l=L1e(),d=om(),u=_a();function h(m,f,y){f.length?f=e(f,function(k){return u(k)?function(v){return t(v,k.length===1?k[0]:k)}:k}):f=[d];var b=-1;f=e(f,o(a));var x=i(m,function(k,v,j){var T=e(f,function(A){return A(k)});return{criteria:T,index:++b,value:k}});return r(x,function(k,v){return l(k,v,y)})}return nA=h,nA}var aA,bW;function B1e(){if(bW)return aA;bW=1;function e(t,a,i){switch(i.length){case 0:return t.call(a);case 1:return t.call(a,i[0]);case 2:return t.call(a,i[0],i[1]);case 3:return t.call(a,i[0],i[1],i[2])}return t.apply(a,i)}return aA=e,aA}var iA,vW;function YY(){if(vW)return iA;vW=1;var e=B1e(),t=Math.max;function a(i,r,o){return r=t(r===void 0?i.length-1:r,0),function(){for(var l=arguments,d=-1,u=t(l.length-r,0),h=Array(u);++d<u;)h[d]=l[r+d];d=-1;for(var m=Array(r+1);++d<r;)m[d]=l[d];return m[r]=o(h),e(i,this,m)}}return iA=a,iA}var rA,xW;function q1e(){if(xW)return rA;xW=1;function e(t){return function(){return t}}return rA=e,rA}var oA,wW;function VY(){if(wW)return oA;wW=1;var e=ou(),t=(function(){try{var a=e(Object,"defineProperty");return a({},"",{}),a}catch{}})();return oA=t,oA}var sA,kW;function $1e(){if(kW)return sA;kW=1;var e=q1e(),t=VY(),a=om(),i=t?function(r,o){return t(r,"toString",{configurable:!0,enumerable:!1,value:e(o),writable:!0})}:a;return sA=i,sA}var lA,jW;function F1e(){if(jW)return lA;jW=1;var e=800,t=16,a=Date.now;function i(r){var o=0,l=0;return function(){var d=a(),u=t-(d-l);if(l=d,u>0){if(++o>=e)return arguments[0]}else o=0;return r.apply(void 0,arguments)}}return lA=i,lA}var cA,SW;function KY(){if(SW)return cA;SW=1;var e=$1e(),t=F1e(),a=t(e);return cA=a,cA}var dA,CW;function G1e(){if(CW)return dA;CW=1;var e=om(),t=YY(),a=KY();function i(r,o){return a(t(r,o,e),r+"")}return dA=i,dA}var uA,AW;function E1(){if(AW)return uA;AW=1;var e=f1(),t=im(),a=R7(),i=Kr();function r(o,l,d){if(!i(d))return!1;var u=typeof l;return(u=="number"?t(d)&&a(l,d.length):u=="string"&&l in d)?e(d[l],o):!1}return uA=r,uA}var hA,TW;function H1e(){if(TW)return hA;TW=1;var e=D7(),t=U1e(),a=G1e(),i=E1(),r=a(function(o,l){if(o==null)return[];var d=l.length;return d>1&&i(o,l[0],l[1])?l=[]:d>2&&i(l[0],l[1],l[2])&&(l=[l[0]]),t(o,e(l,1),[])});return hA=r,hA}var Y1e=H1e();const z7=vt(Y1e);function Tg(e){"@babel/helpers - typeof";return Tg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Tg(e)}function m3(){return m3=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},m3.apply(this,arguments)}function V1e(e,t){return Z1e(e)||Q1e(e,t)||X1e(e,t)||K1e()}function K1e(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7749In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function X1e(e,t){if(e){if(typeof e=="string")return _W(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return _W(e,t)}}function _W(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function Q1e(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i,r,o,l,d=[],u=!0,h=!1;try{if(o=(a=a.call(e)).next,t!==0)for(;!(u=(i=o.call(a)).done)&&(d.push(i.value),d.length!==t);u=!0);}catch(m){h=!0,r=m}finally{try{if(!u&&a.return!=null&&(l=a.return(),Object(l)!==l))return}finally{if(h)throw r}}return d}}function Z1e(e){if(Array.isArray(e))return e}function MW(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function pA(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?MW(Object(a),!0).forEach(function(i){J1e(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):MW(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function J1e(e,t,a){return t=eke(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function eke(e){var t=tke(e,"string");return Tg(t)=="symbol"?t:t+""}function tke(e,t){if(Tg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Tg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function nke(e){return Array.isArray(e)&&Sn(e[0])&&Sn(e[1])?e.join(" ~ "):e}var ake=function(t){var a=t.separator,i=a===void 0?" : ":a,r=t.contentStyle,o=r===void 0?{}:r,l=t.itemStyle,d=l===void 0?{}:l,u=t.labelStyle,h=u===void 0?{}:u,m=t.payload,f=t.formatter,y=t.itemSorter,b=t.wrapperClassName,x=t.labelClassName,k=t.label,v=t.labelFormatter,j=t.accessibilityLayer,T=j===void 0?!1:j,A=function(){if(m&&m.length){var U={padding:0,margin:0},X=(y?z7(m,y):m).map(function(D,P){if(D.type==="none")return null;var O=pA({display:"block",paddingTop:4,paddingBottom:4,color:D.color||"#000"},d),B=D.formatter||f||nke,Y=D.value,V=D.name,G=Y,I=V;if(B&&G!=null&&I!=null){var F=B(Y,V,D,P,m);if(Array.isArray(F)){var K=V1e(F,2);G=K[0],I=K[1]}else G=F}return q.createElement("li",{className:"recharts-tooltip-item",key:"tooltip-item-".concat(P),style:O},Sn(I)?q.createElement("span",{className:"recharts-tooltip-item-name"},I):null,Sn(I)?q.createElement("span",{className:"recharts-tooltip-item-separator"},i):null,q.createElement("span",{className:"recharts-tooltip-item-value"},G),q.createElement("span",{className:"recharts-tooltip-item-unit"},D.unit||""))});return q.createElement("ul",{className:"recharts-tooltip-item-list",style:U},X)}return null},C=pA({margin:0,padding:10,backgroundColor:"#fff",border:"1px solid #ccc",whiteSpace:"nowrap"},o),_=pA({margin:0},h),E=!dt(k),R=E?k:"",W=ot("recharts-default-tooltip",b),z=ot("recharts-tooltip-label",x);E&&v&&m!==void 0&&m!==null&&(R=v(k,m));var H=T?{role:"status","aria-live":"assertive"}:{};return q.createElement("div",m3({className:W,style:C},H),q.createElement("p",{className:z,style:_},q.isValidElement(R)?R:"".concat(R)),A())};function _g(e){"@babel/helpers - typeof";return _g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_g(e)}function Gv(e,t,a){return t=ike(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function ike(e){var t=rke(e,"string");return _g(t)=="symbol"?t:t+""}function rke(e,t){if(_g(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(_g(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var wf="recharts-tooltip-wrapper",oke={visibility:"hidden"};function ske(e){var t=e.coordinate,a=e.translateX,i=e.translateY;return ot(wf,Gv(Gv(Gv(Gv({},"".concat(wf,"-right"),ke(a)&&t&&ke(t.x)&&a>=t.x),"".concat(wf,"-left"),ke(a)&&t&&ke(t.x)&&a<t.x),"".concat(wf,"-bottom"),ke(i)&&t&&ke(t.y)&&i>=t.y),"".concat(wf,"-top"),ke(i)&&t&&ke(t.y)&&i<t.y))}function EW(e){var t=e.allowEscapeViewBox,a=e.coordinate,i=e.key,r=e.offsetTopLeft,o=e.position,l=e.reverseDirection,d=e.tooltipDimension,u=e.viewBox,h=e.viewBoxDimension;if(o&&ke(o[i]))return o[i];var m=a[i]-d-r,f=a[i]+r;if(t[i])return l[i]?m:f;if(l[i]){var y=m,b=u[i];return y<b?Math.max(f,u[i]):Math.max(m,u[i])}var x=f+d,k=u[i]+h;return x>k?Math.max(m,u[i]):Math.max(f,u[i])}function lke(e){var t=e.translateX,a=e.translateY,i=e.useTranslate3d;return{transform:i?"translate3d(".concat(t,"px, ").concat(a,"px, 0)"):"translate(".concat(t,"px, ").concat(a,"px)")}}function cke(e){var t=e.allowEscapeViewBox,a=e.coordinate,i=e.offsetTopLeft,r=e.position,o=e.reverseDirection,l=e.tooltipBox,d=e.useTranslate3d,u=e.viewBox,h,m,f;return l.height>0&&l.width>0&&a?(m=EW({allowEscapeViewBox:t,coordinate:a,key:"x",offsetTopLeft:i,position:r,reverseDirection:o,tooltipDimension:l.width,viewBox:u,viewBoxDimension:u.width}),f=EW({allowEscapeViewBox:t,coordinate:a,key:"y",offsetTopLeft:i,position:r,reverseDirection:o,tooltipDimension:l.height,viewBox:u,viewBoxDimension:u.height}),h=lke({translateX:m,translateY:f,useTranslate3d:d})):h=oke,{cssProperties:h,cssClasses:ske({translateX:m,translateY:f,coordinate:a})}}function yp(e){"@babel/helpers - typeof";return yp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},yp(e)}function RW(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function NW(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?RW(Object(a),!0).forEach(function(i){g3(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):RW(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function dke(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function uke(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,QY(i.key),i)}}function hke(e,t,a){return t&&uke(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function pke(e,t,a){return t=yx(t),mke(e,XY()?Reflect.construct(t,a||[],yx(e).constructor):t.apply(e,a))}function mke(e,t){if(t&&(yp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return fke(e)}function fke(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function XY(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(XY=function(){return!!e})()}function yx(e){return yx=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},yx(e)}function gke(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&f3(e,t)}function f3(e,t){return f3=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},f3(e,t)}function g3(e,t,a){return t=QY(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function QY(e){var t=yke(e,"string");return yp(t)=="symbol"?t:t+""}function yke(e,t){if(yp(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(yp(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var OW=1,bke=(function(e){function t(){var a;dke(this,t);for(var i=arguments.length,r=new Array(i),o=0;o<i;o++)r[o]=arguments[o];return a=pke(this,t,[].concat(r)),g3(a,"state",{dismissed:!1,dismissedAtCoordinate:{x:0,y:0},lastBoundingBox:{width:-1,height:-1}}),g3(a,"handleKeyDown",function(l){if(l.key==="Escape"){var d,u,h,m;a.setState({dismissed:!0,dismissedAtCoordinate:{x:(d=(u=a.props.coordinate)===null||u===void 0?void 0:u.x)!==null&&d!==void 0?d:0,y:(h=(m=a.props.coordinate)===null||m===void 0?void 0:m.y)!==null&&h!==void 0?h:0}})}}),a}return gke(t,e),hke(t,[{key:"updateBBox",value:function(){if(this.wrapperNode&&this.wrapperNode.getBoundingClientRect){var i=this.wrapperNode.getBoundingClientRect();(Math.abs(i.width-this.state.lastBoundingBox.width)>OW||Math.abs(i.height-this.state.lastBoundingBox.height)>OW)&&this.setState({lastBoundingBox:{width:i.width,height:i.height}})}else(this.state.lastBoundingBox.width!==-1||this.state.lastBoundingBox.height!==-1)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var i,r;this.props.active&&this.updateBBox(),this.state.dismissed&&(((i=this.props.coordinate)===null||i===void 0?void 0:i.x)!==this.state.dismissedAtCoordinate.x||((r=this.props.coordinate)===null||r===void 0?void 0:r.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var i=this,r=this.props,o=r.active,l=r.allowEscapeViewBox,d=r.animationDuration,u=r.animationEasing,h=r.children,m=r.coordinate,f=r.hasPayload,y=r.isAnimationActive,b=r.offset,x=r.position,k=r.reverseDirection,v=r.useTranslate3d,j=r.viewBox,T=r.wrapperStyle,A=cke({allowEscapeViewBox:l,coordinate:m,offsetTopLeft:b,position:x,reverseDirection:k,tooltipBox:this.state.lastBoundingBox,useTranslate3d:v,viewBox:j}),C=A.cssClasses,_=A.cssProperties,E=NW(NW({transition:y&&o?"transform ".concat(d,"ms ").concat(u):void 0},_),{},{pointerEvents:"none",visibility:!this.state.dismissed&&o&&f?"visible":"hidden",position:"absolute",top:0,left:0},T);return q.createElement("div",{tabIndex:-1,className:C,style:E,ref:function(W){i.wrapperNode=W}},h)}}])})(M.PureComponent),vke=function(){return!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout)},mc={isSsr:vke()};function bp(e){"@babel/helpers - typeof";return bp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},bp(e)}function PW(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function IW(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?PW(Object(a),!0).forEach(function(i){L7(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):PW(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function xke(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function wke(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,JY(i.key),i)}}function kke(e,t,a){return t&&wke(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function jke(e,t,a){return t=bx(t),Ske(e,ZY()?Reflect.construct(t,a||[],bx(e).constructor):t.apply(e,a))}function Ske(e,t){if(t&&(bp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Cke(e)}function Cke(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function ZY(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(ZY=function(){return!!e})()}function bx(e){return bx=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},bx(e)}function Ake(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&y3(e,t)}function y3(e,t){return y3=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},y3(e,t)}function L7(e,t,a){return t=JY(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function JY(e){var t=Tke(e,"string");return bp(t)=="symbol"?t:t+""}function Tke(e,t){if(bp(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(bp(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function _ke(e){return e.dataKey}function Mke(e,t){return q.isValidElement(e)?q.cloneElement(e,t):typeof e=="function"?q.createElement(e,t):q.createElement(ake,t)}var za=(function(e){function t(){return xke(this,t),jke(this,t,arguments)}return Ake(t,e),kke(t,[{key:"render",value:function(){var i=this,r=this.props,o=r.active,l=r.allowEscapeViewBox,d=r.animationDuration,u=r.animationEasing,h=r.content,m=r.coordinate,f=r.filterNull,y=r.isAnimationActive,b=r.offset,x=r.payload,k=r.payloadUniqBy,v=r.position,j=r.reverseDirection,T=r.useTranslate3d,A=r.viewBox,C=r.wrapperStyle,_=x??[];f&&_.length&&(_=qY(x.filter(function(R){return R.value!=null&&(R.hide!==!0||i.props.includeHidden)}),k,_ke));var E=_.length>0;return q.createElement(bke,{allowEscapeViewBox:l,animationDuration:d,animationEasing:u,isAnimationActive:y,active:o,coordinate:m,hasPayload:E,offset:b,position:v,reverseDirection:j,useTranslate3d:T,viewBox:A,wrapperStyle:C},Mke(h,IW(IW({},this.props),{},{payload:_})))}}])})(M.PureComponent);L7(za,"displayName","Tooltip");L7(za,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!mc.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var mA,DW;function Eke(){if(DW)return mA;DW=1;var e=Yr(),t=function(){return e.Date.now()};return mA=t,mA}var fA,WW;function Rke(){if(WW)return fA;WW=1;var e=/\s/;function t(a){for(var i=a.length;i--&&e.test(a.charAt(i)););return i}return fA=t,fA}var gA,zW;function Nke(){if(zW)return gA;zW=1;var e=Rke(),t=/^\s+/;function a(i){return i&&i.slice(0,e(i)+1).replace(t,"")}return gA=a,gA}var yA,LW;function eV(){if(LW)return yA;LW=1;var e=Nke(),t=Kr(),a=tm(),i=NaN,r=/^[-+]0x[0-9a-f]+$/i,o=/^0b[01]+$/i,l=/^0o[0-7]+$/i,d=parseInt;function u(h){if(typeof h=="number")return h;if(a(h))return i;if(t(h)){var m=typeof h.valueOf=="function"?h.valueOf():h;h=t(m)?m+"":m}if(typeof h!="string")return h===0?h:+h;h=e(h);var f=o.test(h);return f||l.test(h)?d(h.slice(2),f?2:8):r.test(h)?i:+h}return yA=u,yA}var bA,UW;function Oke(){if(UW)return bA;UW=1;var e=Kr(),t=Eke(),a=eV(),i="Expected a function",r=Math.max,o=Math.min;function l(d,u,h){var m,f,y,b,x,k,v=0,j=!1,T=!1,A=!0;if(typeof d!="function")throw new TypeError(i);u=a(u)||0,e(h)&&(j=!!h.leading,T="maxWait"in h,y=T?r(a(h.maxWait)||0,u):y,A="trailing"in h?!!h.trailing:A);function C(X){var D=m,P=f;return m=f=void 0,v=X,b=d.apply(P,D),b}function _(X){return v=X,x=setTimeout(W,u),j?C(X):b}function E(X){var D=X-k,P=X-v,O=u-D;return T?o(O,y-P):O}function R(X){var D=X-k,P=X-v;return k===void 0||D>=u||D<0||T&&P>=y}function W(){var X=t();if(R(X))return z(X);x=setTimeout(W,E(X))}function z(X){return x=void 0,A&&m?C(X):(m=f=void 0,b)}function H(){x!==void 0&&clearTimeout(x),v=0,m=k=f=x=void 0}function $(){return x===void 0?b:z(t())}function U(){var X=t(),D=R(X);if(m=arguments,f=this,k=X,D){if(x===void 0)return _(k);if(T)return clearTimeout(x),x=setTimeout(W,u),C(k)}return x===void 0&&(x=setTimeout(W,u)),b}return U.cancel=H,U.flush=$,U}return bA=l,bA}var vA,BW;function Pke(){if(BW)return vA;BW=1;var e=Oke(),t=Kr(),a="Expected a function";function i(r,o,l){var d=!0,u=!0;if(typeof r!="function")throw new TypeError(a);return t(l)&&(d="leading"in l?!!l.leading:d,u="trailing"in l?!!l.trailing:u),e(r,o,{leading:d,maxWait:o,trailing:u})}return vA=i,vA}var Ike=Pke();const tV=vt(Ike);function Mg(e){"@babel/helpers - typeof";return Mg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mg(e)}function qW(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function Hv(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?qW(Object(a),!0).forEach(function(i){Dke(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):qW(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function Dke(e,t,a){return t=Wke(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function Wke(e){var t=zke(e,"string");return Mg(t)=="symbol"?t:t+""}function zke(e,t){if(Mg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Mg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Lke(e,t){return $ke(e)||qke(e,t)||Bke(e,t)||Uke()}function Uke(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7750In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Bke(e,t){if(e){if(typeof e=="string")return $W(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return $W(e,t)}}function $W(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function qke(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i,r,o,l,d=[],u=!0,h=!1;try{if(o=(a=a.call(e)).next,t!==0)for(;!(u=(i=o.call(a)).done)&&(d.push(i.value),d.length!==t);u=!0);}catch(m){h=!0,r=m}finally{try{if(!u&&a.return!=null&&(l=a.return(),Object(l)!==l))return}finally{if(h)throw r}}return d}}function $ke(e){if(Array.isArray(e))return e}var b3=M.forwardRef(function(e,t){var a=e.aspect,i=e.initialDimension,r=i===void 0?{width:-1,height:-1}:i,o=e.width,l=o===void 0?"100%":o,d=e.height,u=d===void 0?"100%":d,h=e.minWidth,m=h===void 0?0:h,f=e.minHeight,y=e.maxHeight,b=e.children,x=e.debounce,k=x===void 0?0:x,v=e.id,j=e.className,T=e.onResize,A=e.style,C=A===void 0?{}:A,_=M.useRef(null),E=M.useRef();E.current=T,M.useImperativeHandle(t,function(){return Object.defineProperty(_.current,"current",{get:function(){return console.warn("The usage of ref.current.current is deprecated and will no longer be supported."),_.current},configurable:!0})});var R=M.useState({containerWidth:r.width,containerHeight:r.height}),W=Lke(R,2),z=W[0],H=W[1],$=M.useCallback(function(X,D){H(function(P){var O=Math.round(X),B=Math.round(D);return P.containerWidth===O&&P.containerHeight===B?P:{containerWidth:O,containerHeight:B}})},[]);M.useEffect(function(){var X=function(V){var G,I=V[0].contentRect,F=I.width,K=I.height;$(F,K),(G=E.current)===null||G===void 0||G.call(E,F,K)};k>0&&(X=tV(X,k,{trailing:!0,leading:!1}));var D=new ResizeObserver(X),P=_.current.getBoundingClientRect(),O=P.width,B=P.height;return $(O,B),D.observe(_.current),function(){D.disconnect()}},[$,k]);var U=M.useMemo(function(){var X=z.containerWidth,D=z.containerHeight;if(X<0||D<0)return null;Rs(cd(l)||cd(u),`The width(%s) and height(%s) are both fixed numbers,
7751       maybe you don't need to use a ResponsiveContainer.`,l,u),Rs(!a||a>0,"The aspect(%s) must be greater than zero.",a);var P=cd(l)?X:l,O=cd(u)?D:u;a&&a>0&&(P?O=P/a:O&&(P=O*a),y&&O>y&&(O=y)),Rs(P>0||O>0,`The width(%s) and height(%s) of chart should be greater than 0,
7752       please check the style of container, or the props width(%s) and height(%s),
7753       or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the
7754       height and width.`,P,O,l,u,m,f,a);var B=!Array.isArray(b)&&Es(b.type).endsWith("Chart");return q.Children.map(b,function(Y){return q.isValidElement(Y)?M.cloneElement(Y,Hv({width:P,height:O},B?{style:Hv({height:"100%",width:"100%",maxHeight:O,maxWidth:P},Y.props.style)}:{})):Y})},[a,b,u,y,f,m,z,l]);return q.createElement("div",{id:v?"".concat(v):void 0,className:ot("recharts-responsive-container",j),style:Hv(Hv({},C),{},{width:l,height:u,minWidth:m,minHeight:f,maxHeight:y}),ref:_},U)}),nV=function(t){return null};nV.displayName="Cell";function Eg(e){"@babel/helpers - typeof";return Eg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Eg(e)}function FW(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function v3(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?FW(Object(a),!0).forEach(function(i){Fke(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):FW(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function Fke(e,t,a){return t=Gke(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function Gke(e){var t=Hke(e,"string");return Eg(t)=="symbol"?t:t+""}function Hke(e,t){if(Eg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Eg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var ih={widthCache:{},cacheCount:0},Yke=2e3,Vke={position:"absolute",top:"-20000px",left:0,padding:0,margin:0,border:"none",whiteSpace:"pre"},GW="recharts_measurement_span";function Kke(e){var t=v3({},e);return Object.keys(t).forEach(function(a){t[a]||delete t[a]}),t}var Nh=function(t){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||mc.isSsr)return{width:0,height:0};var i=Kke(a),r=JSON.stringify({text:t,copyStyle:i});if(ih.widthCache[r])return ih.widthCache[r];try{var o=document.getElementById(GW);o||(o=document.createElement("span"),o.setAttribute("id",GW),o.setAttribute("aria-hidden","true"),document.body.appendChild(o));var l=v3(v3({},Vke),i);Object.assign(o.style,l),o.textContent="".concat(t);var d=o.getBoundingClientRect(),u={width:d.width,height:d.height};return ih.widthCache[r]=u,++ih.cacheCount>Yke&&(ih.cacheCount=0,ih.widthCache={}),u}catch{return{width:0,height:0}}},Xke=function(t){return{top:t.top+window.scrollY-document.documentElement.clientTop,left:t.left+window.scrollX-document.documentElement.clientLeft}};function Rg(e){"@babel/helpers - typeof";return Rg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Rg(e)}function vx(e,t){return e2e(e)||Jke(e,t)||Zke(e,t)||Qke()}function Qke(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7755In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function Zke(e,t){if(e){if(typeof e=="string")return HW(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return HW(e,t)}}function HW(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function Jke(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i,r,o,l,d=[],u=!0,h=!1;try{if(o=(a=a.call(e)).next,t===0){if(Object(a)!==a)return;u=!1}else for(;!(u=(i=o.call(a)).done)&&(d.push(i.value),d.length!==t);u=!0);}catch(m){h=!0,r=m}finally{try{if(!u&&a.return!=null&&(l=a.return(),Object(l)!==l))return}finally{if(h)throw r}}return d}}function e2e(e){if(Array.isArray(e))return e}function t2e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function YW(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,a2e(i.key),i)}}function n2e(e,t,a){return t&&YW(e.prototype,t),a&&YW(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e}function a2e(e){var t=i2e(e,"string");return Rg(t)=="symbol"?t:t+""}function i2e(e,t){if(Rg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Rg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var VW=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([*/])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,KW=/(-?\d+(?:\.\d+)?[a-zA-Z%]*)([+-])(-?\d+(?:\.\d+)?[a-zA-Z%]*)/,r2e=/^px|cm|vh|vw|em|rem|%|mm|in|pt|pc|ex|ch|vmin|vmax|Q$/,o2e=/(-?\d+(?:\.\d+)?)([a-zA-Z%]+)?/,aV={cm:96/2.54,mm:96/25.4,pt:96/72,pc:96/6,in:96,Q:96/(2.54*40),px:1},s2e=Object.keys(aV),gh="NaN";function l2e(e,t){return e*aV[t]}var Yv=(function(){function e(t,a){t2e(this,e),this.num=t,this.unit=a,this.num=t,this.unit=a,Number.isNaN(t)&&(this.unit=""),a!==""&&!r2e.test(a)&&(this.num=NaN,this.unit=""),s2e.includes(a)&&(this.num=l2e(t,a),this.unit="px")}return n2e(e,[{key:"add",value:function(a){return this.unit!==a.unit?new e(NaN,""):new e(this.num+a.num,this.unit)}},{key:"subtract",value:function(a){return this.unit!==a.unit?new e(NaN,""):new e(this.num-a.num,this.unit)}},{key:"multiply",value:function(a){return this.unit!==""&&a.unit!==""&&this.unit!==a.unit?new e(NaN,""):new e(this.num*a.num,this.unit||a.unit)}},{key:"divide",value:function(a){return this.unit!==""&&a.unit!==""&&this.unit!==a.unit?new e(NaN,""):new e(this.num/a.num,this.unit||a.unit)}},{key:"toString",value:function(){return"".concat(this.num).concat(this.unit)}},{key:"isNaN",value:function(){return Number.isNaN(this.num)}}],[{key:"parse",value:function(a){var i,r=(i=o2e.exec(a))!==null&&i!==void 0?i:[],o=vx(r,3),l=o[1],d=o[2];return new e(parseFloat(l),d??"")}}])})();function iV(e){if(e.includes(gh))return gh;for(var t=e;t.includes("*")||t.includes("/");){var a,i=(a=VW.exec(t))!==null&&a!==void 0?a:[],r=vx(i,4),o=r[1],l=r[2],d=r[3],u=Yv.parse(o??""),h=Yv.parse(d??""),m=l==="*"?u.multiply(h):u.divide(h);if(m.isNaN())return gh;t=t.replace(VW,m.toString())}for(;t.includes("+")||/.-\d+(?:\.\d+)?/.test(t);){var f,y=(f=KW.exec(t))!==null&&f!==void 0?f:[],b=vx(y,4),x=b[1],k=b[2],v=b[3],j=Yv.parse(x??""),T=Yv.parse(v??""),A=k==="+"?j.add(T):j.subtract(T);if(A.isNaN())return gh;t=t.replace(KW,A.toString())}return t}var XW=/\(([^()]*)\)/;function c2e(e){for(var t=e;t.includes("(");){var a=XW.exec(t),i=vx(a,2),r=i[1];t=t.replace(XW,iV(r))}return t}function d2e(e){var t=e.replace(/\s+/g,"");return t=c2e(t),t=iV(t),t}function u2e(e){try{return d2e(e)}catch{return gh}}function xA(e){var t=u2e(e.slice(5,-1));return t===gh?"":t}var h2e=["x","y","lineHeight","capHeight","scaleToFit","textAnchor","verticalAnchor","fill"],p2e=["dx","dy","angle","className","breakAll"];function x3(){return x3=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},x3.apply(this,arguments)}function QW(e,t){if(e==null)return{};var a=m2e(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function m2e(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function ZW(e,t){return b2e(e)||y2e(e,t)||g2e(e,t)||f2e()}function f2e(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7756In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function g2e(e,t){if(e){if(typeof e=="string")return JW(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return JW(e,t)}}function JW(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function y2e(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i,r,o,l,d=[],u=!0,h=!1;try{if(o=(a=a.call(e)).next,t===0){if(Object(a)!==a)return;u=!1}else for(;!(u=(i=o.call(a)).done)&&(d.push(i.value),d.length!==t);u=!0);}catch(m){h=!0,r=m}finally{try{if(!u&&a.return!=null&&(l=a.return(),Object(l)!==l))return}finally{if(h)throw r}}return d}}function b2e(e){if(Array.isArray(e))return e}var rV=/[ \f\n\r\t\v\u2028\u2029]+/,oV=function(t){var a=t.children,i=t.breakAll,r=t.style;try{var o=[];dt(a)||(i?o=a.toString().split(""):o=a.toString().split(rV));var l=o.map(function(u){return{word:u,width:Nh(u,r).width}}),d=i?0:Nh(" ",r).width;
7756return{wordsWithComputedWidth:l,spaceWidth:d}}catch{return null}},v2e=function(t,a,i,r,o){var l=t.maxLines,d=t.children,u=t.style,h=t.breakAll,m=ke(l),f=d,y=function(){var P=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[];return P.reduce(function(O,B){var Y=B.word,V=B.width,G=O[O.length-1];if(G&&(r==null||o||G.width+V+i<Number(r)))G.words.push(Y),G.width+=V+i;else{var I={words:[Y],width:V};O.push(I)}return O},[])},b=y(a),x=function(P){return P.reduce(function(O,B){return O.width>B.width?O:B})};if(!m)return b;for(var k="…",v=function(P){var O=f.slice(0,P),B=oV({breakAll:h,style:u,children:O+k}).wordsWithComputedWidth,Y=y(B),V=Y.length>l||x(Y).width>Number(r);return[V,Y]},j=0,T=f.length-1,A=0,C;j<=T&&A<=f.length-1;){var _=Math.floor((j+T)/2),E=_-1,R=v(E),W=ZW(R,2),z=W[0],H=W[1],$=v(_),U=ZW($,1),X=U[0];if(!z&&!X&&(j=_+1),z&&X&&(T=_-1),!z&&X){C=H;break}A++}return C||b},ez=function(t){var a=dt(t)?[]:t.toString().split(rV);return[{words:a}]},x2e=function(t){var a=t.width,i=t.scaleToFit,r=t.children,o=t.style,l=t.breakAll,d=t.maxLines;if((a||i)&&!mc.isSsr){var u,h,m=oV({breakAll:l,children:r,style:o});if(m){var f=m.wordsWithComputedWidth,y=m.spaceWidth;u=f,h=y}else return ez(r);return v2e({breakAll:l,children:r,maxLines:d,style:o},u,h,a,i)}return ez(r)},tz="#808080",xx=function(t){var a=t.x,i=a===void 0?0:a,r=t.y,o=r===void 0?0:r,l=t.lineHeight,d=l===void 0?"1em":l,u=t.capHeight,h=u===void 0?"0.71em":u,m=t.scaleToFit,f=m===void 0?!1:m,y=t.textAnchor,b=y===void 0?"start":y,x=t.verticalAnchor,k=x===void 0?"end":x,v=t.fill,j=v===void 0?tz:v,T=QW(t,h2e),A=M.useMemo(function(){return x2e({breakAll:T.breakAll,children:T.children,maxLines:T.maxLines,scaleToFit:f,style:T.style,width:T.width})},[T.breakAll,T.children,T.maxLines,f,T.style,T.width]),C=T.dx,_=T.dy,E=T.angle,R=T.className,W=T.breakAll,z=QW(T,p2e);if(!Sn(i)||!Sn(o))return null;var H=i+(ke(C)?C:0),$=o+(ke(_)?_:0),U;switch(k){case"start":U=xA("calc(".concat(h,")"));break;case"middle":U=xA("calc(".concat((A.length-1)/2," * -").concat(d," + (").concat(h," / 2))"));break;default:U=xA("calc(".concat(A.length-1," * -").concat(d,")"));break}var X=[];if(f){var D=A[0].width,P=T.width;X.push("scale(".concat((ke(P)?P/D:1)/D,")"))}return E&&X.push("rotate(".concat(E,", ").concat(H,", ").concat($,")")),X.length&&(z.transform=X.join(" ")),q.createElement("text",x3({},Ze(z,!0),{x:H,y:$,className:ot("recharts-text",R),textAnchor:b,fill:j.includes("url")?tz:j}),A.map(function(O,B){var Y=O.words.join(W?"":" ");return q.createElement("tspan",{x:H,dy:B===0?U:d,key:"".concat(Y,"-").concat(B)},Y)}))};function nc(e,t){return e==null||t==null?NaN:e<t?-1:e>t?1:e>=t?0:NaN}function w2e(e,t){return e==null||t==null?NaN:t<e?-1:t>e?1:t>=e?0:NaN}function U7(e){let t,a,i;e.length!==2?(t=nc,a=(d,u)=>nc(e(d),u),i=(d,u)=>e(d)-u):(t=e===nc||e===w2e?e:k2e,a=e,i=e);function r(d,u,h=0,m=d.length){if(h<m){if(t(u,u)!==0)return m;do{const f=h+m>>>1;a(d[f],u)<0?h=f+1:m=f}while(h<m)}return h}function o(d,u,h=0,m=d.length){if(h<m){if(t(u,u)!==0)return m;do{const f=h+m>>>1;a(d[f],u)<=0?h=f+1:m=f}while(h<m)}return h}function l(d,u,h=0,m=d.length){const f=r(d,u,h,m-1);return f>h&&i(d[f-1],u)>-i(d[f],u)?f-1:f}return{left:r,center:l,right:o}}function k2e(){return 0}function sV(e){return e===null?NaN:+e}function*j2e(e,t){for(let a of e)a!=null&&(a=+a)>=a&&(yield a)}const S2e=U7(nc),ab=S2e.right;U7(sV).center;class nz extends Map{constructor(t,a=T2e){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:a}}),t!=null)for(const[i,r]of t)this.set(i,r)}get(t){return super.get(az(this,t))}has(t){return super.has(az(this,t))}set(t,a){return super.set(C2e(this,t),a)}delete(t){return super.delete(A2e(this,t))}}function az({_intern:e,_key:t},a){const i=t(a);return e.has(i)?e.get(i):a}function C2e({_intern:e,_key:t},a){const i=t(a);return e.has(i)?e.get(i):(e.set(i,a),a)}function A2e({_intern:e,_key:t},a){const i=t(a);return e.has(i)&&(a=e.get(i),e.delete(i)),a}function T2e(e){return e!==null&&typeof e=="object"?e.valueOf():e}function _2e(e=nc){if(e===nc)return lV;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,a)=>{const i=e(t,a);return i||i===0?i:(e(a,a)===0)-(e(t,t)===0)}}function lV(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(e<t?-1:e>t?1:0)}const M2e=Math.sqrt(50),E2e=Math.sqrt(10),R2e=Math.sqrt(2);function wx(e,t,a){const i=(t-e)/Math.max(0,a),r=Math.floor(Math.log10(i)),o=i/Math.pow(10,r),l=o>=M2e?10:o>=E2e?5:o>=R2e?2:1;let d,u,h;return r<0?(h=Math.pow(10,-r)/l,d=Math.round(e*h),u=Math.round(t*h),d/h<e&&++d,u/h>t&&--u,h=-h):(h=Math.pow(10,r)*l,d=Math.round(e/h),u=Math.round(t/h),d*h<e&&++d,u*h>t&&--u),u<d&&.5<=a&&a<2?wx(e,t,a*2):[d,u,h]}function w3(e,t,a){if(t=+t,e=+e,a=+a,!(a>0))return[];if(e===t)return[e];const i=t<e,[r,o,l]=i?wx(t,e,a):wx(e,t,a);if(!(o>=r))return[];const d=o-r+1,u=new Array(d);if(i)if(l<0)for(let h=0;h<d;
7756++h)u[h]=(o-h)/-l;else for(let h=0;h<d;++h)u[h]=(o-h)*l;else if(l<0)for(let h=0;h<d;++h)u[h]=(r+h)/-l;else for(let h=0;h<d;++h)u[h]=(r+h)*l;return u}function k3(e,t,a){return t=+t,e=+e,a=+a,wx(e,t,a)[2]}function j3(e,t,a){t=+t,e=+e,a=+a;const i=t<e,r=i?k3(t,e,a):k3(e,t,a);return(i?-1:1)*(r<0?1/-r:r)}function iz(e,t){let a;for(const i of e)i!=null&&(a<i||a===void 0&&i>=i)&&(a=i);return a}function rz(e,t){let a;for(const i of e)i!=null&&(a>i||a===void 0&&i>=i)&&(a=i);return a}function cV(e,t,a=0,i=1/0,r){if(t=Math.floor(t),a=Math.floor(Math.max(0,a)),i=Math.floor(Math.min(e.length-1,i)),!(a<=t&&t<=i))return e;for(r=r===void 0?lV:_2e(r);i>a;){if(i-a>600){const u=i-a+1,h=t-a+1,m=Math.log(u),f=.5*Math.exp(2*m/3),y=.5*Math.sqrt(m*f*(u-f)/u)*(h-u/2<0?-1:1),b=Math.max(a,Math.floor(t-h*f/u+y)),x=Math.min(i,Math.floor(t+(u-h)*f/u+y));cV(e,t,b,x,r)}const o=e[t];let l=a,d=i;for(kf(e,a,t),r(e[i],o)>0&&kf(e,a,i);l<d;){for(kf(e,l,d),++l,--d;r(e[l],o)<0;)++l;for(;r(e[d],o)>0;)--d}r(e[a],o)===0?kf(e,a,d):(++d,kf(e,d,i)),d<=t&&(a=d+1),t<=d&&(i=d-1)}return e}function kf(e,t,a){const i=e[t];e[t]=e[a],e[a]=i}function N2e(e,t,a){if(e=Float64Array.from(j2e(e)),!(!(i=e.length)||isNaN(t=+t))){if(t<=0||i<2)return rz(e);if(t>=1)return iz(e);var i,r=(i-1)*t,o=Math.floor(r),l=iz(cV(e,o).subarray(0,o+1)),d=rz(e.subarray(o+1));return l+(d-l)*(r-o)}}function O2e(e,t,a=sV){if(!(!(i=e.length)||isNaN(t=+t))){if(t<=0||i<2)return+a(e[0],0,e);if(t>=1)return+a(e[i-1],i-1,e);var i,r=(i-1)*t,o=Math.floor(r),l=+a(e[o],o,e),d=+a(e[o+1],o+1,e);return l+(d-l)*(r-o)}}function P2e(e,t,a){e=+e,t=+t,a=(r=arguments.length)<2?(t=e,e=0,1):r<3?1:+a;for(var i=-1,r=Math.max(0,Math.ceil((t-e)/a))|0,o=new Array(r);++i<r;)o[i]=e+i*a;return o}function or(e,t){switch(arguments.length){case 0:break;case 1:this.range(e);break;default:this.range(t).domain(e);break}return this}function Js(e,t){switch(arguments.length){case 0:break;case 1:{typeof e=="function"?this.interpolator(e):this.range(e);break}default:{this.domain(e),typeof t=="function"?this.interpolator(t):this.range(t);break}}return this}const S3=Symbol("implicit");function B7(){var e=new nz,t=[],a=[],i=S3;function r(o){let l=e.get(o);if(l===void 0){if(i!==S3)return i;e.set(o,l=t.push(o)-1)}return a[l%a.length]}return r.domain=function(o){if(!arguments.length)return t.slice();t=[],e=new nz;for(const l of o)e.has(l)||e.set(l,t.push(l)-1);return r},r.range=function(o){return arguments.length?(a=Array.from(o),r):a.slice()},r.unknown=function(o){return arguments.length?(i=o,r):i},r.copy=function(){return B7(t,a).unknown(i)},or.apply(r,arguments),r}function Ng(){var e=B7().unknown(void 0),t=e.domain,a=e.range,i=0,r=1,o,l,d=!1,u=0,h=0,m=.5;delete e.unknown;function f(){var y=t().length,b=r<i,x=b?r:i,k=b?i:r;o=(k-x)/Math.max(1,y-u+h*2),d&&(o=Math.floor(o)),x+=(k-x-o*(y-u))*m,l=o*(1-u),d&&(x=Math.round(x),l=Math.round(l));var v=P2e(y).map(function(j){return x+o*j});return a(b?v.reverse():v)}return e.domain=function(y){return arguments.length?(t(y),f()):t()},e.range=function(y){return arguments.length?([i,r]=y,i=+i,r=+r,f()):[i,r]},e.rangeRound=function(y){return[i,r]=y,i=+i,r=+r,d=!0,f()},e.bandwidth=function(){return l},e.step=function(){return o},e.round=function(y){return arguments.length?(d=!!y,f()):d},e.padding=function(y){return arguments.length?(u=Math.min(1,h=+y),f()):u},e.paddingInner=function(y){return arguments.length?(u=Math.min(1,y),f()):u},e.paddingOuter=function(y){return arguments.length?(h=+y,f()):h},e.align=function(y){return arguments.length?(m=Math.max(0,Math.min(1,y)),f()):m},e.copy=function(){return Ng(t(),[i,r]).round(d).paddingInner(u).paddingOuter(h).align(m)},or.apply(f(),arguments)}function dV(e){var t=e.copy;return e.padding=e.paddingOuter,delete e.paddingInner,delete e.paddingOuter,e.copy=function(){return dV(t())},e}function rg(){return dV(Ng.apply(null,arguments).paddingInner(1))}function q7(e,t,a){e.prototype=t.prototype=a,a.constructor=e}function uV(e,t){var a=Object.create(e.prototype);for(var i in t)a[i]=t[i];return a}function ib(){}var Og=.7,kx=1/Og,Oh="\\s*([+-]?\\d+)\\s*",Pg="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",Eo="\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",I2e=/^#([0-9a-f]{3,8})$/,D2e=new RegExp(`^rgb\\(${Oh},${Oh},${Oh}\\)$`),W2e=new RegExp(`^rgb\\(${Eo},${Eo},${Eo}\\)$`),z2e=new RegExp(`^rgba\\(${Oh},${Oh},${Oh},${Pg}\\)$`),L2e=new RegExp(`^rgba\\(${Eo},${Eo},${Eo},${Pg}\\)$`),U2e=new RegExp(`^hsl\\(${Pg},${Eo},${Eo}\\)$`),B2e=new RegExp(`^hsla\\(${Pg},${Eo},${Eo},${Pg}\\)$`),oz={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};q7(ib,Kd,{copy(e){return Object.assign(new this.constructor,this,e)},displayable(){return this.rgb().displayable()},hex:sz,formatHex:sz,formatHex8:q2e,formatHsl:$2e,formatRgb:lz,toString:lz});function sz(){return this.rgb().formatHex()}function q2e(){return this.rgb().formatHex8()}function $2e(){return hV(this).formatHsl()}function lz(){return this.rgb().formatRgb()}function Kd(e){var t,a;return e=(e+"").trim().toLowerCase(),(t=I2e.exec(e))?(a=t[1].length,t=parseInt(t[1],16),a===6?cz(t):a===3?new Ga(t>>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):a===8?Vv(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):a===4?Vv(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=D2e.exec(e))?new Ga(t[1],t[2],t[3],1):(t=W2e.exec(e))?new Ga(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=z2e.exec(e))?Vv(t[1],t[2],t[3],t[4]):(t=L2e.exec(e))?Vv(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=U2e.exec(e))?hz(t[1],t[2]/100,t[3]/100,1):(t=B2e.exec(e))?hz(t[1],t[2]/100,t[3]/100,t[4]):oz.hasOwnProperty(e)?cz(oz[e]):e==="transparent"?new Ga(NaN,NaN,NaN,0):null}function cz(e){return new Ga(e>>16&255,e>>8&255,e&255,1)}function Vv(e,t,a,i){return i<=0&&(e=t=a=NaN),new Ga(e,t,a,i)}function F2e(e){return e instanceof ib||(e=Kd(e)),e?(e=e.rgb(),new Ga(e.r,e.g,e.b,e.opacity)):new Ga}function Ig(e,t,a,i){return arguments.length===1?F2e(e):new Ga(e,t,a,i??1)}function Ga(e,t,a,i){this.r=+e,this.g=+t,this.b=+a,this.opacity=+i}
vendor: 4,545 bytes, line 7756
7756q7(Ga,Ig,uV(ib,{brighter(e){return e=e==null?kx:Math.pow(kx,e),new Ga(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Og:Math.pow(Og,e),new Ga(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Ga(Td(this.r),Td(this.g),Td(this.b),jx(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:dz,formatHex:dz,formatHex8:G2e,formatRgb:uz,toString:uz}));function dz(){return`#${dd(this.r)}${dd(this.g)}${dd(this.b)}`}function G2e(){return`#${dd(this.r)}${dd(this.g)}${dd(this.b)}${dd((isNaN(this.opacity)?1:this.opacity)*255)}`}function uz(){const e=jx(this.opacity);return`${e===1?"rgb(":"rgba("}${Td(this.r)}, ${Td(this.g)}, ${Td(this.b)}${e===1?")":`, ${e})`}`}function jx(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Td(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function dd(e){return e=Td(e),(e<16?"0":"")+e.toString(16)}function hz(e,t,a,i){return i<=0?e=t=a=NaN:a<=0||a>=1?e=t=NaN:t<=0&&(e=NaN),new wr(e,t,a,i)}function hV(e){if(e instanceof wr)return new wr(e.h,e.s,e.l,e.opacity);if(e instanceof ib||(e=Kd(e)),!e)return new wr;if(e instanceof wr)return e;e=e.rgb();var t=e.r/255,a=e.g/255,i=e.b/255,r=Math.min(t,a,i),o=Math.max(t,a,i),l=NaN,d=o-r,u=(o+r)/2;return d?(t===o?l=(a-i)/d+(a<i)*6:a===o?l=(i-t)/d+2:l=(t-a)/d+4,d/=u<.5?o+r:2-o-r,l*=60):d=u>0&&u<1?0:l,new wr(l,d,u,e.opacity)}function H2e(e,t,a,i){return arguments.length===1?hV(e):new wr(e,t,a,i??1)}function wr(e,t,a,i){this.h=+e,this.s=+t,this.l=+a,this.opacity=+i}q7(wr,H2e,uV(ib,{brighter(e){return e=e==null?kx:Math.pow(kx,e),new wr(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Og:Math.pow(Og,e),new wr(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,a=this.l,i=a+(a<.5?a:1-a)*t,r=2*a-i;return new Ga(wA(e>=240?e-240:e+120,r,i),wA(e,r,i),wA(e<120?e+240:e-120,r,i),this.opacity)},clamp(){return new wr(pz(this.h),Kv(this.s),Kv(this.l),jx(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=jx(this.opacity);return`${e===1?"hsl(":"hsla("}${pz(this.h)}, ${Kv(this.s)*100}%, ${Kv(this.l)*100}%${e===1?")":`, ${e})`}`}}));function pz(e){return e=(e||0)%360,e<0?e+360:e}function Kv(e){return Math.max(0,Math.min(1,e||0))}function wA(e,t,a){return(e<60?t+(a-t)*e/60:e<180?a:e<240?t+(a-t)*(240-e)/60:t)*255}const $7=e=>()=>e;function Y2e(e,t){return function(a){return e+a*t}}function V2e(e,t,a){return e=Math.pow(e,a),t=Math.pow(t,a)-e,a=1/a,function(i){return Math.pow(e+i*t,a)}}function K2e(e){return(e=+e)==1?pV:function(t,a){return a-t?V2e(t,a,e):$7(isNaN(t)?a:t)}}function pV(e,t){var a=t-e;return a?Y2e(e,a):$7(isNaN(e)?t:e)}const mz=(function e(t){var a=K2e(t);function i(r,o){var l=a((r=Ig(r)).r,(o=Ig(o)).r),d=a(r.g,o.g),u=a(r.b,o.b),h=pV(r.opacity,o.opacity);return function(m){return r.r=l(m),r.g=d(m),r.b=u(m),r.opacity=h(m),r+""}}return i.gamma=e,i})(1);function X2e(e,t){t||(t=[]);var a=e?Math.min(t.length,e.length):0,i=t.slice(),r;return function(o){for(r=0;r<a;++r)i[r]=e[r]*(1-o)+t[r]*o;return i}}function Q2e(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Z2e(e,t){var a=t?t.length:0,i=e?Math.min(a,e.length):0,r=new Array(i),o=new Array(a),l;for(l=0;l<i;++l)r[l]=sm(e[l],t[l]);for(;l<a;++l)o[l]=t[l];return function(d){for(l=0;l<i;++l)o[l]=r[l](d);return o}}function J2e(e,t){var a=new Date;return e=+e,t=+t,function(i){return a.setTime(e*(1-i)+t*i),a}}function Sx(e,t){return e=+e,t=+t,function(a){return e*(1-a)+t*a}}function eje(e,t){var a={},i={},r;(e===null||typeof e!="object")&&(e={}),(t===null||typeof t!="object")&&(t={});for(r in t)r in e?a[r]=sm(e[r],t[r]):i[r]=t[r];return function(o){for(r in a)i[r]=a[r](o);return i}}var C3=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,kA=new RegExp(C3.source,"g");function tje(e){return function(){return e}}function nje(e){return function(t){return e(t)+""}}function aje(e,t){var a=C3.lastIndex=kA.lastIndex=0,i,r,o,l=-1,d=[],u=[];for(e=e+"",t=t+"";(i=C3.exec(e))&&(r=kA.exec(t));)(o=r.index)>a&&(o=t.slice(a,o),d[l]?d[l]+=o:d[++l]=o),(i=i[0])===(r=r[0])?d[l]?d[l]+=r:d[++l]=r:(d[++l]=null,u.push({i:l,x:Sx(i,r)})),a=kA.lastIndex;return a<t.length&&(o=t.slice(a),d[l]?d[l]+=o:d[++l]=o),d.length<2?u[0]?nje(u[0].x):tje(t):(t=u.length,function(h){for(var m=0,f;m<t;++m)d[(f=u[m]).i]=f.x(h);return d.join("")})}function sm(e,t){var a=typeof t,i;
vendor: 2,367 bytes, line 7756
7756return t==null||a==="boolean"?$7(t):(a==="number"?Sx:a==="string"?(i=Kd(t))?(t=i,mz):aje:t instanceof Kd?mz:t instanceof Date?J2e:Q2e(t)?X2e:Array.isArray(t)?Z2e:typeof t.valueOf!="function"&&typeof t.toString!="function"||isNaN(t)?eje:Sx)(e,t)}function F7(e,t){return e=+e,t=+t,function(a){return Math.round(e*(1-a)+t*a)}}function ije(e,t){t===void 0&&(t=e,e=sm);for(var a=0,i=t.length-1,r=t[0],o=new Array(i<0?0:i);a<i;)o[a]=e(r,r=t[++a]);return function(l){var d=Math.max(0,Math.min(i-1,Math.floor(l*=i)));return o[d](l-d)}}function rje(e){return function(){return e}}function Cx(e){return+e}var fz=[0,1];function va(e){return e}function A3(e,t){return(t-=e=+e)?function(a){return(a-e)/t}:rje(isNaN(t)?NaN:.5)}function oje(e,t){var a;return e>t&&(a=e,e=t,t=a),function(i){return Math.max(e,Math.min(t,i))}}function sje(e,t,a){var i=e[0],r=e[1],o=t[0],l=t[1];return r<i?(i=A3(r,i),o=a(l,o)):(i=A3(i,r),o=a(o,l)),function(d){return o(i(d))}}function lje(e,t,a){var i=Math.min(e.length,t.length)-1,r=new Array(i),o=new Array(i),l=-1;for(e[i]<e[0]&&(e=e.slice().reverse(),t=t.slice().reverse());++l<i;)r[l]=A3(e[l],e[l+1]),o[l]=a(t[l],t[l+1]);return function(d){var u=ab(e,d,1,i)-1;return o[u](r[u](d))}}function rb(e,t){return t.domain(e.domain()).range(e.range()).interpolate(e.interpolate()).clamp(e.clamp()).unknown(e.unknown())}function R1(){var e=fz,t=fz,a=sm,i,r,o,l=va,d,u,h;function m(){var y=Math.min(e.length,t.length);return l!==va&&(l=oje(e[0],e[y-1])),d=y>2?lje:sje,u=h=null,f}function f(y){return y==null||isNaN(y=+y)?o:(u||(u=d(e.map(i),t,a)))(i(l(y)))}return f.invert=function(y){return l(r((h||(h=d(t,e.map(i),Sx)))(y)))},f.domain=function(y){return arguments.length?(e=Array.from(y,Cx),m()):e.slice()},f.range=function(y){return arguments.length?(t=Array.from(y),m()):t.slice()},f.rangeRound=function(y){return t=Array.from(y),a=F7,m()},f.clamp=function(y){return arguments.length?(l=y?!0:va,m()):l!==va},f.interpolate=function(y){return arguments.length?(a=y,m()):a},f.unknown=function(y){return arguments.length?(o=y,f):o},function(y,b){return i=y,r=b,m()}}function G7(){return R1()(va,va)}function cje(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Ax(e,t){if(!isFinite(e)||e===0)return null;var a=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"),i=e.slice(0,a);return[i.length>
vendor: 4,340 bytes, line 7756
77561?i[0]+i.slice(2):i,+e.slice(a+1)]}function vp(e){return e=Ax(Math.abs(e)),e?e[1]:NaN}function dje(e,t){return function(a,i){for(var r=a.length,o=[],l=0,d=e[0],u=0;r>0&&d>0&&(u+d+1>i&&(d=Math.max(1,i-u)),o.push(a.substring(r-=d,r+d)),!((u+=d+1)>i));)d=e[l=(l+1)%e.length];return o.reverse().join(t)}}function uje(e){return function(t){return t.replace(/[0-9]/g,function(a){return e[+a]})}}var hje=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Dg(e){if(!(t=hje.exec(e)))throw new Error("invalid format: "+e);var t;return new H7({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}Dg.prototype=H7.prototype;function H7(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}H7.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function pje(e){e:for(var t=e.length,a=1,i=-1,r;a<t;++a)switch(e[a]){case".":i=r=a;break;case"0":i===0&&(i=a),r=a;break;default:if(!+e[a])break e;i>0&&(i=0);break}return i>0?e.slice(0,i)+e.slice(r+1):e}var Tx;function mje(e,t){var a=Ax(e,t);if(!a)return Tx=void 0,e.toPrecision(t);var i=a[0],r=a[1],o=r-(Tx=Math.max(-8,Math.min(8,Math.floor(r/3)))*3)+1,l=i.length;return o===l?i:o>l?i+new Array(o-l+1).join("0"):o>0?i.slice(0,o)+"."+i.slice(o):"0."+new Array(1-o).join("0")+Ax(e,Math.max(0,t+o-1))[0]}function gz(e,t){var a=Ax(e,t);if(!a)return e+"";var i=a[0],r=a[1];return r<0?"0."+new Array(-r).join("0")+i:i.length>r+1?i.slice(0,r+1)+"."+i.slice(r+1):i+new Array(r-i.length+2).join("0")}const yz={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:cje,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>gz(e*100,t),r:gz,s:mje,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function bz(e){return e}var vz=Array.prototype.map,xz=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function fje(e){var t=e.grouping===void 0||e.thousands===void 0?bz:dje(vz.call(e.grouping,Number),e.thousands+""),a=e.currency===void 0?"":e.currency[0]+"",i=e.currency===void 0?"":e.currency[1]+"",r=e.decimal===void 0?".":e.decimal+"",o=e.numerals===void 0?bz:uje(vz.call(e.numerals,String)),l=e.percent===void 0?"%":e.percent+"",d=e.minus===void 0?"−":e.minus+"",u=e.nan===void 0?"NaN":e.nan+"";function h(f,y){f=Dg(f);var b=f.fill,x=f.align,k=f.sign,v=f.symbol,j=f.zero,T=f.width,A=f.comma,C=f.precision,_=f.trim,E=f.type;E==="n"?(A=!0,E="g"):yz[E]||(C===void 0&&(C=12),_=!0,E="g"),(j||b==="0"&&x==="=")&&(j=!0,b="0",x="=");var R=(y&&y.prefix!==void 0?y.prefix:"")+(v==="$"?a:v==="#"&&/[boxX]/.test(E)?"0"+E.toLowerCase():""),W=(v==="$"?i:/[%p]/.test(E)?l:"")+(y&&y.suffix!==void 0?y.suffix:""),z=yz[E],H=/[defgprs%]/.test(E);C=C===void 0?6:/[gprs]/.test(E)?Math.max(1,Math.min(21,C)):Math.max(0,Math.min(20,C));function $(U){var X=R,D=W,P,O,B;if(E==="c")D=z(U)+D,U="";else{U=+U;var Y=U<0||1/U<0;if(U=isNaN(U)?u:z(Math.abs(U),C),_&&(U=pje(U)),Y&&+U==0&&k!=="+"&&(Y=!1),X=(Y?k==="("?k:d:k==="-"||k==="("?"":k)+X,D=(E==="s"&&!isNaN(U)&&Tx!==void 0?xz[8+Tx/3]:"")+D+(Y&&k==="("?")":""),H){for(P=-1,O=U.length;++P<O;)if(B=U.charCodeAt(P),48>B||B>57){D=(B===46?r+U.slice(P+1):U.slice(P))+D,U=U.slice(0,P);break}}}A&&!j&&(U=t(U,1/0));var V=X.length+U.length+D.length,G=V<T?new Array(T-V+1).join(b):"";switch(A&&j&&(U=t(G+U,G.length?T-D.length:1/0),G=""),x){case"<":U=X+U+D+G;break;case"=":U=X+G+U+D;break;case"^":U=G.slice(0,V=G.length>>1)+X+U+D+G.slice(V);break;default:U=G+X+U+D;break}return o(U)}return $.toString=function(){return f+""},$}function m(f,y){var b=Math.max(-8,Math.min(8,Math.floor(vp(y)/3)))*3,x=Math.pow(10,-b),k=h((f=Dg(f),f.type="f",f),{suffix:xz[8+b/3]});return function(v){return k(x*v)}}return{format:h,formatPrefix:m}}var Xv,Y7,mV;
7756gje({thousands:",",grouping:[3],currency:["$",""]});function gje(e){return Xv=fje(e),Y7=Xv.format,mV=Xv.formatPrefix,Xv}function yje(e){return Math.max(0,-vp(Math.abs(e)))}function bje(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(vp(t)/3)))*3-vp(Math.abs(e)))}function vje(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,vp(t)-vp(e))+1}function fV(e,t,a,i){var r=j3(e,t,a),o;switch(i=Dg(i??",f"),i.type){case"s":{var l=Math.max(Math.abs(e),Math.abs(t));return i.precision==null&&!isNaN(o=bje(r,l))&&(i.precision=o),mV(i,l)}case"":case"e":case"g":case"p":case"r":{i.precision==null&&!isNaN(o=vje(r,Math.max(Math.abs(e),Math.abs(t))))&&(i.precision=o-(i.type==="e"));break}case"f":case"%":{i.precision==null&&!isNaN(o=yje(r))&&(i.precision=o-(i.type==="%")*2);break}}return Y7(i)}function xc(e){var t=e.domain;return e.ticks=function(a){var i=t();return w3(i[0],i[i.length-1],a??10)},e.tickFormat=function(a,i){var r=t();return fV(r[0],r[r.length-1],a??10,i)},e.nice=function(a){a==null&&(a=10);var i=t(),r=0,o=i.length-1,l=i[r],d=i[o],u,h,m=10;for(d<l&&(h=l,l=d,d=h,h=r,r=o,o=h);m-- >0;){if(h=k3(l,d,a),h===u)return i[r]=l,i[o]=d,t(i);if(h>0)l=Math.floor(l/h)*h,d=Math.ceil(d/h)*h;else if(h<0)l=Math.ceil(l*h)/h,d=Math.floor(d*h)/h;else break;u=h}return e},e}function _x(){var e=G7();return e.copy=function(){return rb(e,_x())},or.apply(e,arguments),xc(e)}function gV(e){var t;function a(i){return i==null||isNaN(i=+i)?t:i}return a.invert=a,a.domain=a.range=function(i){return arguments.length?(e=Array.from(i,Cx),a):e.slice()},a.unknown=function(i){return arguments.length?(t=i,a):t},a.copy=function(){return gV(e).unknown(t)},e=arguments.length?Array.from(e,Cx):[0,1],xc(a)}function yV(e,t){e=e.slice();var a=0,i=e.length-1,r=e[a],o=e[i],l;return o<r&&(l=a,a=i,i=l,l=r,r=o,o=l),e[a]=t.floor(r),e[i]=t.ceil(o),e}function wz(e){return Math.log(e)}function kz(e){return Math.exp(e)}function xje(e){return-Math.log(-e)}function wje(e){return-Math.exp(-e)}function kje(e){return isFinite(e)?+("1e"+e):e<0?0:e}function jje(e){return e===10?kje:e===Math.E?Math.exp:t=>Math.pow(e,t)}function Sje(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function jz(e){return(t,a)=>-e(-t,a)}function V7(e){const t=e(wz,kz),a=t.domain;let i=10,r,o;function l(){return r=Sje(i),o=jje(i),a()[0]<0?(r=jz(r),o=jz(o),e(xje,wje)):e(wz,kz),t}return t.base=function(d){return arguments.length?(i=+d,l()):i},t.domain=function(d){return arguments.length?(a(d),l()):a()},t.ticks=d=>{const u=a();let h=u[0],m=u[u.length-1];const f=m<h;f&&([h,m]=[m,h]);let y=r(h),b=r(m),x,k;const v=d==null?10:+d;let j=[];if(!(i%1)&&b-y<v){if(y=Math.floor(y),b=Math.ceil(b),h>0){for(;y<=b;++y)for(x=1;x<i;++x)if(k=y<0?x/o(-y):x*o(y),!(k<h)){if(k>m)break;j.push(k)}}else for(;y<=b;++y)for(x=i-1;x>=1;--x)if(k=y>0?x/o(-y):x*o(y),!(k<h)){if(k>m)break;j.push(k)}j.length*2<v&&(j=w3(h,m,v))}else j=w3(y,b,Math.min(b-y,v)).map(o);return f?j.reverse():j},t.tickFormat=(d,u)=>{if(d==null&&(d=10),u==null&&(u=i===10?"s":","),typeof u!="function"&&(!(i%1)&&(u=Dg(u)).precision==null&&(u.trim=!0),u=Y7(u)),d===1/0)return u;const h=Math.max(1,i*d/t.ticks().length);return m=>{let f=m/o(Math.round(r(m)));return f*i<i-.5&&(f*=i),f<=h?u(m):""}},t.nice=()=>a(yV(a(),{floor:d=>o(Math.floor(r(d))),ceil:d=>o(Math.ceil(r(d)))})),t}function bV(){const e=V7(R1()).domain([1,10]);return e.copy=()=>rb(e,bV()).base(e.base()),or.apply(e,arguments),e}function Sz(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function Cz(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function K7(e){var t=1,a=e(Sz(t),Cz(t));return a.constant=function(i){return arguments.length?e(Sz(t=+i),Cz(t)):t},xc(a)}function vV(){var e=K7(R1());return e.copy=function(){return rb(e,vV()).constant(e.constant())},or.apply(e,arguments)}function Az(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function Cje(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function Aje(e){return e<0?-e*e:e*e}function X7(e){var t=e(va,va),a=1;function i(){return a===1?e(va,va):a===.5?e(Cje,Aje):e(Az(a),Az(1/a))}return t.exponent=function(r){return arguments.length?(a=+r,i()):a},xc(t)}function Q7(){var e=X7(R1());return e.copy=function(){return rb(e,Q7()).exponent(e.exponent())},or.apply(e,arguments),e}function Tje(){return Q7.apply(null,arguments).exponent(.5)}function Tz(e){return Math.sign(e)*e*e}function _je(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function xV(){var e=G7(),t=[0,1],a=!1,i;function r(o){var l=_je(e(o));return isNaN(l)?i:a?Math.round(l):l}return r.invert=function(o){return e.invert(Tz(o))},r.domain=function(o){return arguments.length?(e.domain(o),r):e.domain()},r.range=function(o){return arguments.length?(e.range((t=Array.from(o,Cx)).map(Tz)),r):t.slice()},r.rangeRound=function(o){return r.range(o).round(!0)},r.round=function(o){return arguments.length?(a=!!o,r):a},r.clamp=function(o){return arguments.length?(e.clamp(o),r):e.clamp()},r.unknown=function(o){return arguments.length?(i=o,r):i},r.copy=function(){return xV(e.domain(),t).round(a).clamp(e.clamp()).unknown(i)},or.apply(r,arguments),xc(r)}function wV(){var e=[],t=[],a=[],i;function r(){var l=0,d=Math.max(1,t.length);for(a=new Array(d-1);++l<d;)a[l-1]=O2e(e,l/d);return o}function o(l){return l==null||isNaN(l=+l)?i:t[ab(a,l)]}return o.invertExtent=function(l){var d=t.indexOf(l);return d<0?[NaN,NaN]:[d>0?a[d-1]:e[0],d<a.length?a[d]:e[e.length-1]]},o.domain=function(l){if(!arguments.length)return e.slice();e=[];for(let d of l)d!=null&&!isNaN(d=+d)&&e.push(d);return e.sort(nc),r()},o.range=function(l){return arguments.length?(t=Array.from(l),r()):t.slice()},o.unknown=function(l){return arguments.length?(i=l,o):i},o.quantiles=function(){return a.slice()},o.copy=function(){return wV().domain(e).range(t).unknown(i)},or.apply(o,arguments)}function kV(){var e=0,t=1,a=1,i=[.5],r=[0,1],o;function l(u){return u!=null&&u<=u?r[ab(i,u,0,a)]:o}function d(){var u=-1;for(i=new Array(a);++u<a;)i[u]=((u+1)*t-(u-a)*e)/(a+1);return l}return l.domain=function(u){return arguments.length?([e,t]=u,e=+e,t=+t,d()):[e,t]},l.range=function(u){return arguments.length?(a=(r=Array.from(u)).length-1,d()):r.slice()},l.invertExtent=function(u){var h=r.indexOf(u);return h<0?[NaN,NaN]:h<1?[e,i[0]]:h>=a?[i[a-1],t]:[i[h-1],i[h]]},l.unknown=function(u){return arguments.length&&(o=u),l},l.thresholds=function(){return i.slice()},l.copy=function(){return kV().domain([e,t]).range(r).unknown(o)},or.apply(xc(l),arguments)}function jV(){var e=[.5],t=[0,1],a,i=1;function r(o){return o!=null&&o<=o?t[ab(e,o,0,i)]:a}return r.domain=function(o){return arguments.length?(e=Array.from(o),i=Math.min(e.length,t.length-1),r):e.slice()},r.range=function(o){return arguments.length?(t=Array.from(o),i=Math.min(e.length,t.length-1),r):t.slice()},r.invertExtent=function(o){var l=t.indexOf(o);return[e[l-1],e[l]]},r.unknown=function(o){return arguments.length?(a=o,r):a},r.copy=function(){return jV().domain(e).range(t).unknown(a)},or.apply(r,arguments)}const jA=new Date,SA=new Date;function Cn(e,t,a,i){function r(o){return e(o=arguments.length===0?new Date:new Date(+o)),o}return r.floor=o=>(e(o=new Date(+o)),o),r.ceil=o=>(e(o=new Date(o-1)),t(o,1),e(o),o),r.round=o=>{const l=r(o),d=r.ceil(o);return o-l<d-o?l:d},r.offset=(o,l)=>(t(o=new Date(+o),l==null?1:Math.floor(l)),o),r.range=(o,l,d)=>{const u=[];
vendor: 5,328 bytes, line 7756
7756if(o=r.ceil(o),d=d==null?1:Math.floor(d),!(o<l)||!(d>0))return u;let h;do u.push(h=new Date(+o)),t(o,d),e(o);while(h<o&&o<l);return u},r.filter=o=>Cn(l=>{if(l>=l)for(;e(l),!o(l);)l.setTime(l-1)},(l,d)=>{if(l>=l)if(d<0)for(;++d<=0;)for(;t(l,-1),!o(l););else for(;--d>=0;)for(;t(l,1),!o(l););}),a&&(r.count=(o,l)=>(jA.setTime(+o),SA.setTime(+l),e(jA),e(SA),Math.floor(a(jA,SA))),r.every=o=>(o=Math.floor(o),!isFinite(o)||!(o>0)?null:o>1?r.filter(i?l=>i(l)%o===0:l=>r.count(0,l)%o===0):r)),r}const Mx=Cn(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);Mx.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?Cn(t=>{t.setTime(Math.floor(t/e)*e)},(t,a)=>{t.setTime(+t+a*e)},(t,a)=>(a-t)/e):Mx);Mx.range;const js=1e3,Ji=js*60,Ss=Ji*60,qs=Ss*24,Z7=qs*7,_z=qs*30,CA=qs*365,ud=Cn(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*js)},(e,t)=>(t-e)/js,e=>e.getUTCSeconds());ud.range;const J7=Cn(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*js)},(e,t)=>{e.setTime(+e+t*Ji)},(e,t)=>(t-e)/Ji,e=>e.getMinutes());J7.range;const eE=Cn(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Ji)},(e,t)=>(t-e)/Ji,e=>e.getUTCMinutes());eE.range;const tE=Cn(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*js-e.getMinutes()*Ji)},(e,t)=>{e.setTime(+e+t*Ss)},(e,t)=>(t-e)/Ss,e=>e.getHours());tE.range;const nE=Cn(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*Ss)},(e,t)=>(t-e)/Ss,e=>e.getUTCHours());nE.range;const ob=Cn(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Ji)/qs,e=>e.getDate()-1);ob.range;const N1=Cn(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/qs,e=>e.getUTCDate()-1);N1.range;const SV=Cn(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/qs,e=>Math.floor(e/qs));SV.range;function su(e){return Cn(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,a)=>{t.setDate(t.getDate()+a*7)},(t,a)=>(a-t-(a.getTimezoneOffset()-t.getTimezoneOffset())*Ji)/Z7)}const O1=su(0),Ex=su(1),Mje=su(2),Eje=su(3),xp=su(4),Rje=su(5),Nje=su(6);O1.range;Ex.range;Mje.range;Eje.range;xp.range;Rje.range;Nje.range;function lu(e){return Cn(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,a)=>{t.setUTCDate(t.getUTCDate()+a*7)},(t,a)=>(a-t)/Z7)}const P1=lu(0),Rx=lu(1),Oje=lu(2),Pje=lu(3),wp=lu(4),Ije=lu(5),Dje=lu(6);P1.range;Rx.range;Oje.range;Pje.range;wp.range;Ije.range;Dje.range;const aE=Cn(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());aE.range;const iE=Cn(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());iE.range;const $s=Cn(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());$s.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Cn(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,a)=>{t.setFullYear(t.getFullYear()+a*e)});$s.range;const Fs=Cn(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Fs.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:Cn(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,a)=>{t.setUTCFullYear(t.getUTCFullYear()+a*e)});Fs.range;function CV(e,t,a,i,r,o){const l=[[ud,1,js],[ud,5,5*js],[ud,15,15*js],[ud,30,30*js],[o,1,Ji],[o,5,5*Ji],[o,15,15*Ji],[o,30,30*Ji],[r,1,Ss],[r,3,3*Ss],[r,6,6*Ss],[r,12,12*Ss],[i,1,qs],[i,2,2*qs],[a,1,Z7],[t,1,_z],[t,3,3*_z],[e,1,CA]];function d(h,m,f){const y=m<h;y&&([h,m]=[m,h]);const b=f&&typeof f.range=="function"?f:u(h,m,f),x=b?b.range(h,+m+1):[];return y?x.reverse():x}function u(h,m,f){const y=Math.abs(m-h)/f,b=U7(([,,v])=>v).right(l,y);if(b===l.length)return e.every(j3(h/CA,m/CA,f));if(b===0)return Mx.every(Math.max(j3(h,m,f),1));const[x,k]=l[y/l[b-1][2]<l[b][2]/y?b-1:b];return x.every(k)}return[d,u]}const[Wje,zje]=CV(Fs,iE,P1,SV,nE,eE),[Lje,Uje]=CV($s,aE,O1,ob,tE,J7);function AA(e){if(0<=e.y&&e.y<100){var t=new Date(-1,e.m,e.d,e.H,e.M,e.S,e.L);return t.setFullYear(e.y),t}return new Date(e.y,e.m,e.d,e.H,e.M,e.S,e.L)}function TA(e){if(0<=e.y&&e.y<100){var t=new Date(Date.UTC(-1,e.m,e.d,e.H,e.M,e.S,e.L));return t.setUTCFullYear(e.y),t}return new Date(Date.UTC(e.y,e.m,e.d,e.H,e.M,e.S,e.L))}function jf(e,t,a){return{y:e,m:t,d:a,H:0,M:0,S:0,L:0}}function Bje(e){var t=e.dateTime,a=e.date,i=e.time,r=e.periods,o=e.days,l=e.shortDays,d=e.months,u=e.shortMonths,h=Sf(r),m=Cf(r),f=Sf(o),y=Cf(o),b=Sf(l),x=Cf(l),k=Sf(d),v=Cf(d),j=Sf(u),T=Cf(u),A={a:B,A:Y,b:V,B:G,c:null,d:Pz,e:Pz,f:dSe,g:xSe,G:kSe,H:sSe,I:lSe,j:cSe,L:AV,m:uSe,M:hSe,p:I,q:F,Q:Wz,s:zz,S:pSe,u:mSe,U:fSe,V:gSe,w:ySe,W:bSe,x:null,X:null,y:vSe,Y:wSe,Z:jSe,"%":Dz},C={a:K,A:ne,b:ae,B:ge,c:null,d:Iz,e:Iz,f:TSe,g:WSe,G:LSe,H:SSe,I:CSe,j:ASe,L:_V,m:_Se,M:MSe,p:be,q:le,Q:Wz,s:zz,S:ESe,u:RSe,U:NSe,V:OSe,w:PSe,W:ISe,x:null,X:null,y:DSe,Y:zSe,Z:USe,"%":Dz},_={a:H,A:$,b:U,B:X,c:D,d:Nz,e:Nz,f:aSe,g:Rz,G:Ez,H:Oz,I:Oz,j:Jje,L:nSe,m:Zje,M:eSe,p:z,q:Qje,Q:rSe,s:oSe,S:tSe,u:Hje,
vendor: 7,985 bytes, line 7756
7756U:Yje,V:Vje,w:Gje,W:Kje,x:P,X:O,y:Rz,Y:Ez,Z:Xje,"%":iSe};A.x=E(a,A),A.X=E(i,A),A.c=E(t,A),C.x=E(a,C),C.X=E(i,C),C.c=E(t,C);function E(ee,ve){return function(Se){var pe=[],Ye=-1,ze=0,Re=ee.length,mt,$e,Gt;for(Se instanceof Date||(Se=new Date(+Se));++Ye<Re;)ee.charCodeAt(Ye)===37&&(pe.push(ee.slice(ze,Ye)),($e=Mz[mt=ee.charAt(++Ye)])!=null?mt=ee.charAt(++Ye):$e=mt==="e"?" ":"0",(Gt=ve[mt])&&(mt=Gt(Se,$e)),pe.push(mt),ze=Ye+1);return pe.push(ee.slice(ze,Ye)),pe.join("")}}function R(ee,ve){return function(Se){var pe=jf(1900,void 0,1),Ye=W(pe,ee,Se+="",0),ze,Re;if(Ye!=Se.length)return null;if("Q"in pe)return new Date(pe.Q);if("s"in pe)return new Date(pe.s*1e3+("L"in pe?pe.L:0));if(ve&&!("Z"in pe)&&(pe.Z=0),"p"in pe&&(pe.H=pe.H%12+pe.p*12),pe.m===void 0&&(pe.m="q"in pe?pe.q:0),"V"in pe){if(pe.V<1||pe.V>53)return null;"w"in pe||(pe.w=1),"Z"in pe?(ze=TA(jf(pe.y,0,1)),Re=ze.getUTCDay(),ze=Re>4||Re===0?Rx.ceil(ze):Rx(ze),ze=N1.offset(ze,(pe.V-1)*7),pe.y=ze.getUTCFullYear(),pe.m=ze.getUTCMonth(),pe.d=ze.getUTCDate()+(pe.w+6)%7):(ze=AA(jf(pe.y,0,1)),Re=ze.getDay(),ze=Re>4||Re===0?Ex.ceil(ze):Ex(ze),ze=ob.offset(ze,(pe.V-1)*7),pe.y=ze.getFullYear(),pe.m=ze.getMonth(),pe.d=ze.getDate()+(pe.w+6)%7)}else("W"in pe||"U"in pe)&&("w"in pe||(pe.w="u"in pe?pe.u%7:"W"in pe?1:0),Re="Z"in pe?TA(jf(pe.y,0,1)).getUTCDay():AA(jf(pe.y,0,1)).getDay(),pe.m=0,pe.d="W"in pe?(pe.w+6)%7+pe.W*7-(Re+5)%7:pe.w+pe.U*7-(Re+6)%7);return"Z"in pe?(pe.H+=pe.Z/100|0,pe.M+=pe.Z%100,TA(pe)):AA(pe)}}function W(ee,ve,Se,pe){for(var Ye=0,ze=ve.length,Re=Se.length,mt,$e;Ye<ze;){if(pe>=Re)return-1;if(mt=ve.charCodeAt(Ye++),mt===37){if(mt=ve.charAt(Ye++),$e=_[mt in Mz?ve.charAt(Ye++):mt],!$e||(pe=$e(ee,Se,pe))<0)return-1}else if(mt!=Se.charCodeAt(pe++))return-1}return pe}function z(ee,ve,Se){var pe=h.exec(ve.slice(Se));return pe?(ee.p=m.get(pe[0].toLowerCase()),Se+pe[0].length):-1}function H(ee,ve,Se){var pe=b.exec(ve.slice(Se));return pe?(ee.w=x.get(pe[0].toLowerCase()),Se+pe[0].length):-1}function $(ee,ve,Se){var pe=f.exec(ve.slice(Se));return pe?(ee.w=y.get(pe[0].toLowerCase()),Se+pe[0].length):-1}function U(ee,ve,Se){var pe=j.exec(ve.slice(Se));return pe?(ee.m=T.get(pe[0].toLowerCase()),Se+pe[0].length):-1}function X(ee,ve,Se){var pe=k.exec(ve.slice(Se));return pe?(ee.m=v.get(pe[0].toLowerCase()),Se+pe[0].length):-1}function D(ee,ve,Se){return W(ee,t,ve,Se)}function P(ee,ve,Se){return W(ee,a,ve,Se)}function O(ee,ve,Se){return W(ee,i,ve,Se)}function B(ee){return l[ee.getDay()]}function Y(ee){return o[ee.getDay()]}function V(ee){return u[ee.getMonth()]}function G(ee){return d[ee.getMonth()]}function I(ee){return r[+(ee.getHours()>=12)]}function F(ee){return 1+~~(ee.getMonth()/3)}function K(ee){return l[ee.getUTCDay()]}function ne(ee){return o[ee.getUTCDay()]}function ae(ee){return u[ee.getUTCMonth()]}function ge(ee){return d[ee.getUTCMonth()]}function be(ee){return r[+(ee.getUTCHours()>=12)]}function le(ee){return 1+~~(ee.getUTCMonth()/3)}return{format:function(ee){var ve=E(ee+="",A);return ve.toString=function(){return ee},ve},parse:function(ee){var ve=R(ee+="",!1);return ve.toString=function(){return ee},ve},utcFormat:function(ee){var ve=E(ee+="",C);return ve.toString=function(){return ee},ve},utcParse:function(ee){var ve=R(ee+="",!0);return ve.toString=function(){return ee},ve}}}var Mz={"-":"",_:" ",0:"0"},Pn=/^\s*\d+/,qje=/^%/,$je=/[\\^$*+?|[\]().{}]/g;function bt(e,t,a){var i=e<0?"-":"",r=(i?-e:e)+"",o=r.length;return i+(o<a?new Array(a-o+1).join(t)+r:r)}function Fje(e){return e.replace($je,"\\$&")}function Sf(e){return new RegExp("^(?:"+e.map(Fje).join("|")+")","i")}function Cf(e){return new Map(e.map((t,a)=>[t.toLowerCase(),a]))}function Gje(e,t,a){var i=Pn.exec(t.slice(a,a+1));return i?(e.w=+i[0],a+i[0].length):-1}function Hje(e,t,a){var i=Pn.exec(t.slice(a,a+1));return i?(e.u=+i[0],a+i[0].length):-1}function Yje(e,t,a){var i=Pn.exec(t.slice(a,a+2));return i?(e.U=+i[0],a+i[0].length):-1}function Vje(e,t,a){var i=Pn.exec(t.slice(a,a+2));return i?(e.V=+i[0],a+i[0].length):-1}function Kje(e,t,a){var i=Pn.exec(t.slice(a,a+2));return i?(e.W=+i[0],a+i[0].length):-1}function Ez(e,t,a){var i=Pn.exec(t.slice(a,a+4));return i?(e.y=+i[0],a+i[0].length):-1}function Rz(e,t,a){var i=Pn.exec(t.slice(a,a+2));return i?(e.y=+i[0]+(+i[0]>68?1900:2e3),a+i[0].length):-1}function Xje(e,t,a){var i=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(a,a+6));return i?(e.Z=i[1]?0:-(i[2]+(i[3]||"00")),a+i[0].length):-1}function Qje(e,t,a){var i=Pn.exec(t.slice(a,a+1));return i?(e.q=i[0]*3-3,a+i[0].length):-1}function Zje(e,t,a){var i=Pn.exec(t.slice(a,a+2));return i?(e.m=i[0]-1,a+i[0].length):-1}function Nz(e,t,a){var i=Pn.exec(t.slice(a,a+2));return i?(e.d=+i[0],a+i[0].length):-1}function Jje(e,t,a){var i=Pn.exec(t.slice(a,a+3));return i?(e.m=0,e.d=+i[0],a+i[0].length):-1}function Oz(e,t,a){var i=Pn.exec(t.slice(a,a+2));return i?(e.H=+i[0],a+i[0].length):-1}function eSe(e,t,a){var i=Pn.exec(t.slice(a,a+2));return i?(e.M=+i[0],a+i[0].length):-1}function tSe(e,t,a){var i=Pn.exec(t.slice(a,a+2));return i?(e.S=+i[0],a+i[0].length):-1}function nSe(e,t,a){var i=Pn.exec(t.slice(a,a+3));return i?(e.L=+i[0],a+i[0].length):-1}function aSe(e,t,a){var i=Pn.exec(t.slice(a,a+6));return i?(e.L=Math.floor(i[0]/1e3),a+i[0].length):-1}function iSe(e,t,a){var i=qje.exec(t.slice(a,a+1));return i?a+i[0].length:-1}function rSe(e,t,a){var i=Pn.exec(t.slice(a));return i?(e.Q=+i[0],a+i[0].length):-1}function oSe(e,t,a){var i=Pn.exec(t.slice(a));return i?(e.s=+i[0],a+i[0].length):-1}function Pz(e,t){return bt(e.getDate(),t,2)}function sSe(e,t){return bt(e.getHours(),t,2)}function lSe(e,t){return bt(e.getHours()%12||12,t,2)}function cSe(e,t){return bt(1+ob.count($s(e),e),t,3)}function AV(e,t){return bt(e.getMilliseconds(),t,3)}function dSe(e,t){return AV(e,t)+"000"}function uSe(e,t){return bt(e.getMonth()+1,t,2)}function hSe(e,t){return bt(e.getMinutes(),t,2)}function pSe(e,t){return bt(e.getSeconds(),t,2)}function mSe(e){var t=e.getDay();return t===0?7:t}function fSe(e,t){return bt(O1.count($s(e)-1,e),t,2)}function TV(e){var t=e.getDay();return t>=4||t===0?xp(e):xp.ceil(e)}function gSe(e,t){return e=TV(e),bt(xp.count($s(e),e)+($s(e).getDay()===4),t,2)}function ySe(e){return e.getDay()}function bSe(e,t){return bt(Ex.count($s(e)-1,e),t,2)}function vSe(e,t){return bt(e.getFullYear()%100,t,2)}function xSe(e,t){return e=TV(e),bt(e.getFullYear()%100,t,2)}function wSe(e,t){return bt(e.getFullYear()%1e4,t,4)}function kSe(e,t){var a=e.getDay();return e=a>=4||a===0?xp(e):xp.ceil(e),bt(e.getFullYear()%1e4,t,4)}function jSe(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+bt(t/60|0,"0",2)+bt(t%60,"0",2)}function Iz(e,t){return bt(e.getUTCDate(),t,2)}function SSe(e,t){return bt(e.getUTCHours(),t,2)}function CSe(e,t){return bt(e.getUTCHours()%12||12,t,2)}function ASe(e,t){return bt(1+N1.count(Fs(e),e),t,3)}function _V(e,t){return bt(e.getUTCMilliseconds(),t,3)}function TSe(e,t){return _V(e,t)+"000"}function _Se(e,t){return bt(e.getUTCMonth()+1,t,2)}function MSe(e,t){return bt(e.getUTCMinutes(),t,2)}function ESe(e,t){return bt(e.getUTCSeconds(),t,2)}function RSe(e){var t=e.getUTCDay();return t===0?7:t}function NSe(e,t){return bt(P1.count(Fs(e)-1,e),t,2)}function MV(e){var t=e.getUTCDay();return t>=4||t===0?wp(e):wp.ceil(e)}function OSe(e,t){return e=MV(e),bt(wp.count(Fs(e),e)+(Fs(e).getUTCDay()===4),t,2)}function PSe(e){return e.getUTCDay()}function ISe(e,t){return bt(Rx.count(Fs(e)-1,e),t,2)}function DSe(e,t){return bt(e.getUTCFullYear()%100,t,2)}function WSe(e,t){return e=MV(e),bt(e.getUTCFullYear()%100,t,2)}function zSe(e,t){return bt(e.getUTCFullYear()%1e4,t,4)}function LSe(e,t){var a=e.getUTCDay();return e=a>=4||a===0?wp(e):wp.ceil(e),bt(e.getUTCFullYear()%1e4,t,4)}function USe(){return"+0000"}function Dz(){return"%"}function Wz(e){return+e}function zz(e){return Math.floor(+e/1e3)}var rh,EV,RV;BSe({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Frid
7756ay","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function BSe(e){return rh=Bje(e),EV=rh.format,rh.parse,RV=rh.utcFormat,rh.utcParse,rh}function qSe(e){return new Date(e)}function $Se(e){return e instanceof Date?+e:+new Date(+e)}function rE(e,t,a,i,r,o,l,d,u,h){var m=G7(),f=m.invert,y=m.domain,b=h(".%L"),x=h(":%S"),k=h("%I:%M"),v=h("%I %p"),j=h("%a %d"),T=h("%b %d"),A=h("%B"),C=h("%Y");function _(E){return(u(E)<E?b:d(E)<E?x:l(E)<E?k:o(E)<E?v:i(E)<E?r(E)<E?j:T:a(E)<E?A:C)(E)}return m.invert=function(E){return new Date(f(E))},m.domain=function(E){return arguments.length?y(Array.from(E,$Se)):y().map(qSe)},m.ticks=function(E){var R=y();return e(R[0],R[R.length-1],E??10)},m.tickFormat=function(E,R){return R==null?_:h(R)},m.nice=function(E){var R=y();return(!E||typeof E.range!="function")&&(E=t(R[0],R[R.length-1],E??10)),E?y(yV(R,E)):m},m.copy=function(){return rb(m,rE(e,t,a,i,r,o,l,d,u,h))},m}function FSe(){return or.apply(rE(Lje,Uje,$s,aE,O1,ob,tE,J7,ud,EV).domain([new Date(2e3,0,1),new Date(2e3,0,2)]),arguments)}function GSe(){return or.apply(rE(Wje,zje,Fs,iE,P1,N1,nE,eE,ud,RV).domain([Date.UTC(2e3,0,1),Date.UTC(2e3,0,2)]),arguments)}function I1(){var e=0,t=1,a,i,r,o,l=va,d=!1,u;function h(f){return f==null||isNaN(f=+f)?u:l(r===0?.5:(f=(o(f)-a)*r,d?Math.max(0,Math.min(1,f)):f))}h.domain=function(f){return arguments.length?([e,t]=f,a=o(e=+e),i=o(t=+t),r=a===i?0:1/(i-a),h):[e,t]},h.clamp=function(f){return arguments.length?(d=!!f,h):d},h.interpolator=function(f){return arguments.length?(l=f,h):l};function m(f){return function(y){var b,x;return arguments.length?([b,x]=y,l=f(b,x),h):[l(0),l(1)]}}return h.range=m(sm),h.rangeRound=m(F7),h.unknown=function(f){return arguments.length?(u=f,h):u},function(f){return o=f,a=f(e),i=f(t),r=a===i?0:1/(i-a),h}}function wc(e,t){return t.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function NV(){var e=xc(I1()(va));return e.copy=function(){return wc(e,NV())},Js.apply(e,arguments)}function OV(){var e=V7(I1()).domain([1,10]);return e.copy=function(){return wc(e,OV()).base(e.base())},Js.apply(e,arguments)}function PV(){var e=K7(I1());return e.copy=function(){return wc(e,PV()).constant(e.constant())},Js.apply(e,arguments)}function oE(){var e=X7(I1());return e.copy=function(){return wc(e,oE()).exponent(e.exponent())},Js.apply(e,arguments)}function HSe(){return oE.apply(null,arguments).exponent(.5)}function IV(){var e=[],t=va;function a(i){if(i!=null&&!isNaN(i=+i))return t((ab(e,i,1)-1)/(e.length-1))}return a.domain=function(i){if(!arguments.length)return e.slice();e=[];for(let r of i)r!=null&&!isNaN(r=+r)&&e.push(r);return e.sort(nc),a},a.interpolator=function(i){return arguments.length?(t=i,a):t},a.range=function(){return e.map((i,r)=>t(r/(e.length-1)))},a.quantiles=function(i){return Array.from({length:i+1},(r,o)=>N2e(e,o/i))},a.copy=function(){return IV(t).domain(e)},Js.apply(a,arguments)}function D1(){var e=0,t=.5,a=1,i=1,r,o,l,d,u,h=va,m,f=!1,y;function b(k){return isNaN(k=+k)?y:(k=.5+((k=+m(k))-o)*(i*k<i*o?d:u),h(f?Math.max(0,Math.min(1,k)):k))}b.domain=function(k){return arguments.length?([e,t,a]=k,r=m(e=+e),o=m(t=+t),l=m(a=+a),d=r===o?0:.5/(o-r),u=o===l?0:.5/(l-o),i=o<r?-1:1,b):[e,t,a]},b.clamp=function(k){return arguments.length?(f=!!k,b):f},b.interpolator=function(k){return arguments.length?(h=k,b):h};function x(k){return function(v){var j,T,A;return arguments.length?([j,T,A]=v,h=ije(k,[j,T,A]),b):[h(0),h(.5),h(1)]}}return b.range=x(sm),b.rangeRound=x(F7),b.unknown=function(k){return arguments.length?(y=k,b):y},function(k){return m=k,r=k(e),o=k(t),l=k(a),d=r===o?0:.5/(o-r),u=o===l?0:.5/(l-o),i=o<r?-1:1,b}}function DV(){var e=xc(D1()(va));return e.copy=function(){return wc(e,DV())},Js.apply(e,arguments)}function WV(){var e=V7(D1()).domain([.1,1,10]);return e.copy=function(){return wc(e,WV()).base(e.base())},Js.apply(e,arguments)}function zV(){var e=K7(D1());return e.copy=function(){return wc(e,zV()).constant(e.constant())},Js.apply(e,arguments)}function sE(){var e=X7(D1());return e.copy=function(){return wc(e,sE()).exponent(e.exponent())},Js.apply(e,arguments)}function YSe(){return sE.apply(null,arguments).exponent(.5)}const Lz=Object.freeze(Object.defineProperty({__proto__:null,scaleBand:Ng,scaleDiverging:DV,scaleDivergingLog:WV,scaleDivergingPow:sE,scaleDivergingSqrt:YSe,scaleDivergingSymlog:zV,scaleIdentity:gV,scaleImplicit:S3,scaleLinear:_x,scaleLog:bV,scaleOrdinal:B7,scalePoint:rg,scalePow:Q7,scaleQuantile:wV,scaleQuantize:kV,scaleRadial:xV,scaleSequential:NV,scaleSequentialLog:OV,scaleSequentialPow:oE,scaleSequentialQuantile:IV,scaleSequentialSqrt:HSe,scaleSequentialSymlog:PV,scaleSqrt:Tje,scaleSymlog:vV,scaleThreshold:jV,scaleTime:FSe,scaleUtc:GSe,tickFormat:fV},Symbol.toStringTag,{value:"Module"}));var _A,Uz;function LV(){if(Uz)return _A;Uz=1;var e=tm();function t(a,i,r){for(var o=-1,l=a.length;++o<l;){var d=a[o],u=i(d);if(u!=null&&(h===void 0?u===u&&!e(u):r(u,h)))var h=u,m=d}return m}return _A=t,_A}var MA,Bz;function VSe(){if(Bz)return MA;Bz=1;function e(t,a){return t>a}return MA=e,MA}var EA,qz;function KSe(){if(qz)return EA;qz=1;var e=LV(),t=VSe(),a=om();function i(r){return r&&r.length?e(r,a,t):void 0}return EA=i,EA}var XSe=KSe();const Yl=vt(XSe);var RA,$z;function QSe(){if($z)return RA;$z=1;function e(t,a){return t<a}return RA=e,RA}var NA,Fz;function ZSe(){if(Fz)return NA;Fz=1;var e=LV(),t=QSe(),a=om();function i(r){return r&&r.length?e(r,a,t):void 0}return NA=i,NA}var JSe=ZSe();const W1=vt(JSe);var OA,Gz;function e5e(){if(Gz)return OA;Gz=1;var e=v1(),t=vc(),a=HY(),i=_a();function r(o,l){var d=i(o)?e:a;return d(o,t(l,3))}return OA=r,OA}var PA,Hz;function t5e(){if(Hz)return PA;Hz=1;var e=D7(),t=e5e();function a(i,r){return e(t(i,r),1)}return PA=a,PA}var n5e=t5e();const a5e=vt(n5e);var IA,Yz;
vendor: 67,183 bytes, lines 7756-7782
7756function i5e(){if(Yz)return IA;Yz=1;var e=I7();function t(a,i){return e(a,i)}return IA=t,IA}var r5e=i5e();const Wg=vt(r5e);var lm=1e9,o5e={precision:20,rounding:4,toExpNeg:-7,toExpPos:21,LN10:"2.302585092994045684017991454684364207601101488628772976033327900967572609677352480235997205089598298341967784042286"},cE,Kt=!0,ir="[DecimalError] ",_d=ir+"Invalid argument: ",lE=ir+"Exponent out of range: ",cm=Math.floor,Jc=Math.pow,s5e=/^(\d+(\.\d*)?|\.\d+)(e[+-]?\d+)?$/i,fi,En=1e7,Ft=7,UV=9007199254740991,Nx=cm(UV/Ft),Me={};Me.absoluteValue=Me.abs=function(){var e=new this.constructor(this);return e.s&&(e.s=1),e};Me.comparedTo=Me.cmp=function(e){var t,a,i,r,o=this;if(e=new o.constructor(e),o.s!==e.s)return o.s||-e.s;if(o.e!==e.e)return o.e>e.e^o.s<0?1:-1;for(i=o.d.length,r=e.d.length,t=0,a=i<r?i:r;t<a;++t)if(o.d[t]!==e.d[t])return o.d[t]>e.d[t]^o.s<0?1:-1;return i===r?0:i>r^o.s<0?1:-1};Me.decimalPlaces=Me.dp=function(){var e=this,t=e.d.length-1,a=(t-e.e)*Ft;if(t=e.d[t],t)for(;t%10==0;t/=10)a--;return a<0?0:a};Me.dividedBy=Me.div=function(e){return Ns(this,new this.constructor(e))};Me.dividedToIntegerBy=Me.idiv=function(e){var t=this,a=t.constructor;return Dt(Ns(t,new a(e),0,1),a.precision)};Me.equals=Me.eq=function(e){return!this.cmp(e)};Me.exponent=function(){return bn(this)};Me.greaterThan=Me.gt=function(e){return this.cmp(e)>0};Me.greaterThanOrEqualTo=Me.gte=function(e){return this.cmp(e)>=0};Me.isInteger=Me.isint=function(){return this.e>this.d.length-2};Me.isNegative=Me.isneg=function(){return this.s<0};Me.isPositive=Me.ispos=function(){return this.s>0};Me.isZero=function(){return this.s===0};Me.lessThan=Me.lt=function(e){return this.cmp(e)<0};Me.lessThanOrEqualTo=Me.lte=function(e){return this.cmp(e)<1};Me.logarithm=Me.log=function(e){var t,a=this,i=a.constructor,r=i.precision,o=r+5;if(e===void 0)e=new i(10);else if(e=new i(e),e.s<1||e.eq(fi))throw Error(ir+"NaN");if(a.s<1)throw Error(ir+(a.s?"NaN":"-Infinity"));return a.eq(fi)?new i(0):(Kt=!1,t=Ns(zg(a,o),zg(e,o),o),Kt=!0,Dt(t,r))};Me.minus=Me.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?$V(t,e):BV(t,(e.s=-e.s,e))};Me.modulo=Me.mod=function(e){var t,a=this,i=a.constructor,r=i.precision;if(e=new i(e),!e.s)throw Error(ir+"NaN");return a.s?(Kt=!1,t=Ns(a,e,0,1).times(e),Kt=!0,a.minus(t)):Dt(new i(a),r)};Me.naturalExponential=Me.exp=function(){return qV(this)};Me.naturalLogarithm=Me.ln=function(){return zg(this)};Me.negated=Me.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};Me.plus=Me.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?BV(t,e):$V(t,(e.s=-e.s,e))};Me.precision=Me.sd=function(e){var t,a,i,r=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(_d+e);if(t=bn(r)+1,i=r.d.length-1,a=i*Ft+1,i=r.d[i],i){for(;i%10==0;i/=10)a--;for(i=r.d[0];i>=10;i/=10)a++}return e&&t>a?t:a};Me.squareRoot=Me.sqrt=function(){var e,t,a,i,r,o,l,d=this,u=d.constructor;if(d.s<1){if(!d.s)return new u(0);throw Error(ir+"NaN")}for(e=bn(d),Kt=!1,r=Math.sqrt(+d),r==0||r==1/0?(t=vo(d.d),(t.length+e)%2==0&&(t+="0"),r=Math.sqrt(t),e=cm((e+1)/2)-(e<0||e%2),r==1/0?t="5e"+e:(t=r.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),i=new u(t)):i=new u(r.toString()),a=u.precision,r=l=a+3;;)if(o=i,i=o.plus(Ns(d,o,l+2)).times(.5),vo(o.d).slice(0,l)===(t=vo(i.d)).slice(0,l)){if(t=t.slice(l-3,l+1),r==l&&t=="4999"){if(Dt(o,a+1,0),o.times(o).eq(d)){i=o;break}}else if(t!="9999")break;l+=4}return Kt=!0,Dt(i,a)};Me.times=Me.mul=function(e){var t,a,i,r,o,l,d,u,h,m=this,f=m.constructor,y=m.d,b=(e=new f(e)).d;if(!m.s||!e.s)return new f(0);for(e.s*=m.s,a=m.e+e.e,u=y.length,h=b.length,u<h&&(o=y,y=b,b=o,l=u,u=h,h=l),o=[],l=u+h,i=l;i--;)o.push(0);for(i=h;--i>=0;){for(t=0,r=u+i;r>i;)d=o[r]+b[i]*y[r-i-1]+t,o[r--]=d%En|0,t=d/En|0;o[r]=(o[r]+t)%En|0}for(;!o[--l];)o.pop();return t?++a:o.shift(),e.d=o,e.e=a,Kt?Dt(e,f.precision):e};Me.toDecimalPlaces=Me.todp=function(e,t){var a=this,i=a.constructor;return a=new i(a),e===void 0?a:(Oo(e,0,lm),t===void 0?t=i.rounding:Oo(t,0,8),Dt(a,e+bn(a)+1,t))};Me.toExponential=function(e,t){var a,i=this,r=i.constructor;return e===void 0?a=Xd(i,!0):(Oo(e,0,lm),t===void 0?t=r.rounding:Oo(t,0,8),i=Dt(new r(i),e+1,t),a=Xd(i,!0,e+1)),a};Me.toFixed=function(e,t){var a,i,r=this,o=r.constructor;return e===void 0?Xd(r):(Oo(e,0,lm),t===void 0?t=o.rounding:Oo(t,0,8),i=Dt(new o(r),e+bn(r)+1,t),a=Xd(i.abs(),!1,e+bn(i)+1),r.isneg()&&!r.isZero()?"-"+a:a)};Me.toInteger=Me.toint=function(){var e=this,t=e.constructor;return Dt(new t(e),bn(e)+1,t.rounding)};Me.toNumber=function(){return+this};Me.toPower=Me.pow=function(e){var t,a,i,r,o,l,d=this,u=d.constructor,h=12,m=+(e=new u(e));if(!e.s)return new u(fi);if(d=new u(d),!d.s){if(e.s<1)throw Error(ir+"Infinity");return d}if(d.eq(fi))return d;if(i=u.precision,e.eq(fi))return Dt(d,i);if(t=e.e,a=e.d.length-1,l=t>=a,o=d.s,l){if((a=m<0?-m:m)<=UV){for(r=new u(fi),t=Math.ceil(i/Ft+4),Kt=!1;a%2&&(r=r.times(d),Kz(r.d,t)),a=cm(a/2),a!==0;)d=d.times(d),Kz(d.d,t);return Kt=!0,e.s<0?new u(fi).div(r):Dt(r,i)}}else if(o<0)throw Error(ir+"NaN");return o=o<0&&e.d[Math.max(t,a)]&1?-1:1,d.s=1,Kt=!1,r=e.times(zg(d,i+h)),Kt=!0,r=qV(r),r.s=o,r};Me.toPrecision=function(e,t){var a,i,r=this,o=r.constructor;return e===void 0?(a=bn(r),i=Xd(r,a<=o.toExpNeg||a>=o.toExpPos)):(Oo(e,1,lm),t===void 0?t=o.rounding:Oo(t,0,8),r=Dt(new o(r),e,t),a=bn(r),i=Xd(r,e<=a||a<=o.toExpNeg,e)),i};Me.toSignificantDigits=Me.tosd=function(e,t){var a=this,i=a.constructor;return e===void 0?(e=i.precision,t=i.rounding):(Oo(e,1,lm),t===void 0?t=i.rounding:Oo(t,0,8)),Dt(new i(a),e,t)};Me.toString=Me.valueOf=Me.val=Me.toJSON=Me[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=bn(e),a=e.constructor;return Xd(e,t<=a.toExpNeg||t>=a.toExpPos)};function BV(e,t){var a,i,r,o,l,d,u,h,m=e.constructor,f=m.precision;if(!e.s||!t.s)return t.s||(t=new m(e)),Kt?Dt(t,f):t;if(u=e.d,h=t.d,l=e.e,r=t.e,u=u.slice(),o=l-r,o){for(o<0?(i=u,o=-o,d=h.length):(i=h,r=l,d=u.length),l=Math.ceil(f/Ft),d=l>d?l+1:d+1,o>d&&(o=d,i.length=1),i.reverse();o--;)i.push(0);i.reverse()}for(d=u.length,o=h.length,d-o<0&&(o=d,i=h,h=u,u=i),a=0;o;)a=(u[--o]=u[o]+h[o]+a)/En|0,u[o]%=En;for(a&&(u.unshift(a),++r),d=u.length;u[--d]==0;)u.pop();return t.d=u,t.e=r,Kt?Dt(t,f):t}function Oo(e,t,a){if(e!==~~e||e<t||e>a)throw Error(_d+e)}function vo(e){var t,a,i,r=e.length-1,o="",l=e[0];if(r>0){for(o+=l,t=1;t<r;t++)i=e[t]+"",a=Ft-i.length,a&&(o+=Ol(a)),o+=i;l=e[t],i=l+"",a=Ft-i.length,a&&(o+=Ol(a))}else if(l===0)return"0";for(;l%10===0;)l/=10;return o+l}var Ns=(function(){function e(i,r){var o,l=0,d=i.length;for(i=i.slice();d--;)o=i[d]*r+l,i[d]=o%En|0,l=o/En|0;return l&&i.unshift(l),i}function t(i,r,o,l){var d,u;if(o!=l)u=o>l?1:-1;else for(d=u=0;d<o;d++)if(i[d]!=r[d]){u=i[d]>r[d]?1:-1;break}return u}function a(i,r,o){for(var l=0;o--;)i[o]-=l,l=i[o]<r[o]?1:0,i[o]=l*En+i[o]-r[o];for(;!i[0]&&i.length>1;)i.shift()}return function(i,r,o,l){var d,u,h,m,f,y,b,x,k,v,j,T,A,C,_,E,R,W,z=i.constructor,H=i.s==r.s?1:-1,$=i.d,U=r.d;if(!i.s)return new z(i);if(!r.s)throw Error(ir+"Division by zero");for(u=i.e-r.e,R=U.length,_=$.length,b=new z(H),x=b.d=[],h=0;U[h]==($[h]||0);)++h;if(U[h]>($[h]||0)&&--u,o==null?T=o=z.precision:l?T=o+(bn(i)-bn(r))+1:T=o,T<0)return new z(0);if(T=T/Ft+2|0,h=0,R==1)for(m=0,U=U[0],T++;(h<_||m)&&T--;h++)A=m*En+($[h]||0),x[h]=A/U|0,m=A%U|0;else{for(m=En/(U[0]+1)|0,m>1&&(U=e(U,m),$=e($,m),R=U.length,_=$.length),C=R,k=$.slice(0,R),v=k.length;v<R;)k[v++]=0;W=U.slice(),W.unshift(0),E=U[0],U[1]>=En/2&&++E;do m=0,d=t(U,k,R,v),d<0?(j=k[0],R!=v&&(j=j*En+(k[1]||0)),m=j/E|0,m>1?(m>=En&&(m=En-1),f=e(U,m),y=f.length,v=k.length,d=t(f,k,y,v),d==1&&(m--,a(f,R<y?W:U,y))):(m==0&&(d=m=1),f=U.slice()),y=f.length,y<v&&f.unshift(0),a(k,f,v),d==-1&&(v=k.length,d=t(U,k,R,v),d<1&&(m++,a(k,R<v?W:U,v))),v=k.length):d===0&&(m++,k=[0]),x[h++]=m,d&&k[0]?k[v++]=$[C]||0:(k=[$[C]],v=1);while((C++<_||k[0]!==void 0)&&T--)}return x[0]||x.shift(),b.e=u,Dt(b,l?o+bn(b)+1:o)}})();function qV(e,t){var a,i,r,o,l,d,u=0,h=0,m=e.constructor,f=m.precision;if(bn(e)>16)throw Error(lE+bn(e));if(!e.s)return new m(fi);for(Kt=!1,d=f,l=new m(.03125);e.abs().gte(.1);)e=e.times(l),h+=5;for(i=Math.log(Jc(2,h))/Math.LN10*2+5|0,d+=i,a=r=o=new m(fi),m.precision=d;;){if(r=Dt(r.times(e),d),a=a.times(++u),l=o.plus(Ns(r,a,d)),vo(l.d).slice(0,d)===vo(o.d).slice(0,d)){for(;h--;)o=Dt(o.times(o),d);return m.precision=f,t==null?(Kt=!0,Dt(o,f)):o}o=l}}function bn(e){for(var t=e.e*Ft,a=e.d[0];a>=10;a/=10)t++;return t}function DA(e,t,a){if(t>e.LN10.sd())throw Kt=!0,a&&(e.precision=a),Error(ir+"LN10 precision limit exceeded");return Dt(new e(e.LN10),t)}function Ol(e){for(var t="";e--;)t+="0";return t}function zg(e,t){var a,i,r,o,l,d,u,h,m,f=1,y=10,b=e,x=b.d,k=b.constructor,v=k.precision;if(b.s<1)throw Error(ir+(b.s?"NaN":"-Infinity"));if(b.eq(fi))return new k(0);if(t==null?(Kt=!1,h=v):h=t,b.eq(10))return t==null&&(Kt=!0),DA(k,h);if(h+=y,k.precision=h,a=vo(x),i=a.charAt(0),o=bn(b),Math.abs(o)<15e14){for(;i<7&&i!=1||i==1&&a.charAt(1)>3;)b=b.times(e),a=vo(b.d),i=a.charAt(0),f++;o=bn(b),i>1?(b=new k("0."+a),o++):b=new k(i+"."+a.slice(1))}else return u=DA(k,h+2,v).times(o+""),b=zg(new k(i+"."+a.slice(1)),h-y).plus(u),k.precision=v,t==null?(Kt=!0,Dt(b,v)):b;for(d=l=b=Ns(b.minus(fi),b.plus(fi),h),m=Dt(b.times(b),h),r=3;;){if(l=Dt(l.times(m),h),u=d.plus(Ns(l,new k(r),h)),vo(u.d).slice(0,h)===vo(d.d).slice(0,h))return d=d.times(2),o!==0&&(d=d.plus(DA(k,h+2,v).times(o+""))),d=Ns(d,new k(f),h),k.precision=v,t==null?(Kt=!0,Dt(d,v)):d;d=u,r+=2}}function Vz(e,t){var a,i,r;for((a=t.indexOf("."))>-1&&(t=t.replace(".","")),(i=t.search(/e/i))>0?(a<0&&(a=i),a+=+t.slice(i+1),t=t.substring(0,i)):a<0&&(a=t.length),i=0;t.charCodeAt(i)===48;)++i;for(r=t.length;t.charCodeAt(r-1)===48;)--r;if(t=t.slice(i,r),t){if(r-=i,a=a-i-1,e.e=cm(a/Ft),e.d=[],i=(a+1)%Ft,a<0&&(i+=Ft),i<r){for(i&&e.d.push(+t.slice(0,i)),r-=Ft;i<r;)e.d.push(+t.slice(i,i+=Ft));t=t.slice(i),i=Ft-t.length}else i-=r;for(;i--;)t+="0";if(e.d.push(+t),Kt&&(e.e>Nx||e.e<-Nx))throw Error(lE+a)}else e.s=0,e.e=0,e.d=[0];return e}function Dt(e,t,a){var i,r,o,l,d,u,h,m,f=e.d;for(l=1,o=f[0];o>=10;o/=10)l++;if(i=t-l,i<0)i+=Ft,r=t,h=f[m=0];else{if(m=Math.ceil((i+1)/Ft),o=f.length,m>=o)return e;for(h=o=f[m],l=1;o>=10;o/=10)l++;i%=Ft,r=i-Ft+l}if(a!==void 0&&(o=Jc(10,l-r-1),d=h/o%10|0,u=t<0||f[m+1]!==void 0||h%o,u=a<4?(d||u)&&(a==0||a==(e.s<0?3:2)):d>5||d==5&&(a==4||u||a==6&&(i>0?r>0?h/Jc(10,l-r):0:f[m-1])%10&1||a==(e.s<0?8:7))),t<1||!f[0])return u?(o=bn(e),f.length=1,t=t-o-1,f[0]=Jc(10,(Ft-t%Ft)%Ft),e.e=cm(-t/Ft)||0):(f.length=1,f[0]=e.e=e.s=0),e;if(i==0?(f.length=m,o=1,m--):(f.length=m+1,o=Jc(10,Ft-i),f[m]=r>0?(h/Jc(10,l-r)%Jc(10,r)|0)*o:0),u)for(;;)if(m==0){(f[0]+=o)==En&&(f[0]=1,++e.e);break}else{if(f[m]+=o,f[m]!=En)break;f[m--]=0,o=1}for(i=f.length;f[--i]===0;)f.pop();if(Kt&&(e.e>Nx||e.e<-Nx))throw Error(lE+bn(e));return e}function $V(e,t){var a,i,r,o,l,d,u,h,m,f,y=e.constructor,b=y.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new y(e),Kt?Dt(t,b):t;if(u=e.d,f=t.d,i=t.e,h=e.e,u=u.slice(),l=h-i,l){for(m=l<0,m?(a=u,l=-l,d=f.length):(a=f,i=h,d=u.length),r=Math.max(Math.ceil(b/Ft),d)+2,l>r&&(l=r,a.length=1),a.reverse(),r=l;r--;)a.push(0);a.reverse()}else{for(r=u.length,d=f.length,m=r<d,m&&(d=r),r=0;r<d;r++)if(u[r]!=f[r]){m=u[r]<f[r];break}l=0}for(m&&(a=u,u=f,f=a,t.s=-t.s),d=u.length,r=f.length-d;r>0;--r)u[d++]=0;for(r=f.length;r>l;){if(u[--r]<f[r]){for(o=r;o&&u[--o]===0;)u[o]=En-1;--u[o],u[r]+=En}u[r]-=f[r]}for(;u[--d]===0;)u.pop();for(;u[0]===0;u.shift())--i;return u[0]?(t.d=u,t.e=i,Kt?Dt(t,b):t):new y(0)}function Xd(e,t,a){var i,r=bn(e),o=vo(e.d),l=o.length;return t?(a&&(i=a-l)>0?o=o.charAt(0)+"."+o.slice(1)+Ol(i):l>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(r<0?"e":"e+")+r):r<0?(o="0."+Ol(-r-1)+o,a&&(i=a-l)>0&&(o+=Ol(i))):r>=l?(o+=Ol(r+1-l),a&&(i=a-r-1)>0&&(o=o+"."+Ol(i))):((i=r+1)<l&&(o=o.slice(0,i)+"."+o.slice(i)),a&&(i=a-l)>0&&(r+1===l&&(o+="."),o+=Ol(i))),e.s<0?"-"+o:o}function Kz(e,t){if(e.length>t)return e.length=t,!0}function FV(e){var t,a,i;function r(o){var l=this;if(!(l instanceof r))return new r(o);if(l.constructor=r,o instanceof r){l.s=o.s,l.e=o.e,l.d=(o=o.d)?o.slice():o;return}if(typeof o=="number"){if(o*0!==0)throw Error(_d+o);if(o>0)l.s=1;else if(o<0)o=-o,l.s=-1;else{l.s=0,l.e=0,l.d=[0];return}if(o===~~o&&o<1e7){l.e=0,l.d=[o];return}return Vz(l,o.toString())}else if(typeof o!="string")throw Error(_d+o);if(o.charCodeAt(0)===45?(o=o.slice(1),l.s=-1):l.s=1,s5e.test(o))Vz(l,o);else throw Error(_d+o)}if(r.prototype=Me,r.ROUND_UP=0,r.ROUND_DOWN=1,r.ROUND_CEIL=2,r.ROUND_FLOOR=3,r.ROUND_HALF_UP=4,r.ROUND_HALF_DOWN=5,r.ROUND_HALF_EVEN=6,r.ROUND_HALF_CEIL=7,r.ROUND_HALF_FLOOR=8,r.clone=FV,r.config=r.set=l5e,e===void 0&&(e={}),e)for(i=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t<i.length;)e.hasOwnProperty(a=i[t++])||(e[a]=this[a]);return r.config(e),r}function l5e(e){if(!e||typeof e!="object")throw Error(ir+"Object expected");var t,a,i,r=["precision",1,lm,"rounding",0,8,"toExpNeg",-1/0,0,"toExpPos",0,1/0];for(t=0;t<r.length;t+=3)if((i=e[a=r[t]])!==void 0)if(cm(i)===i&&i>=r[t+1]&&i<=r[t+2])this[a]=i;else throw Error(_d+a+": "+i);if((i=e[a="LN10"])!==void 0)if(i==Math.LN10)this[a]=new this(i);else throw Error(_d+a+": "+i);return this}var cE=FV(o5e);fi=new cE(1);const Et=cE;function c5e(e){return p5e(e)||h5e(e)||u5e(e)||d5e()}function d5e(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
7757In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function u5e(e,t){if(e){if(typeof e=="string")return T3(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return T3(e,t)}}function h5e(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function p5e(e){if(Array.isArray(e))return T3(e)}function T3(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}var m5e=function(t){return t},GV={},HV=function(t){return t===GV},Xz=function(t){return function a(){return arguments.length===0||arguments.length===1&&HV(arguments.length<=0?void 0:arguments[0])?a:t.apply(void 0,arguments)}},f5e=function e(t,a){return t===1?a:Xz(function(){for(var i=arguments.length,r=new Array(i),o=0;o<i;o++)r[o]=arguments[o];var l=r.filter(function(d){return d!==GV}).length;return l>=t?a.apply(void 0,r):e(t-l,Xz(function(){for(var d=arguments.length,u=new Array(d),h=0;h<d;h++)u[h]=arguments[h];var m=r.map(function(f){return HV(f)?u.shift():f});return a.apply(void 0,c5e(m).concat(u))}))})},z1=function(t){return f5e(t.length,t)},_3=function(t,a){for(var i=[],r=t;r<a;++r)i[r-t]=r;return i},g5e=z1(function(e,t){return Array.isArray(t)?t.map(e):Object.keys(t).map(function(a){return t[a]}).map(e)}),y5e=function(){for(var t=arguments.length,a=new Array(t),i=0;i<t;i++)a[i]=arguments[i];if(!a.length)return m5e;var r=a.reverse(),o=r[0],l=r.slice(1);return function(){return l.reduce(function(d,u){return u(d)},o.apply(void 0,arguments))}},M3=function(t){return Array.isArray(t)?t.reverse():t.split("").reverse.join("")},YV=function(t){var a=null,i=null;return function(){for(var r=arguments.length,o=new Array(r),l=0;l<r;l++)o[l]=arguments[l];return a&&o.every(function(d,u){return d===a[u]})||(a=o,i=t.apply(void 0,o)),i}};function b5e(e){var t;return e===0?t=1:t=Math.floor(new Et(e).abs().log(10).toNumber())+1,t}function v5e(e,t,a){for(var i=new Et(e),r=0,o=[];i.lt(t)&&r<1e5;)o.push(i.toNumber()),i=i.add(a),r++;return o}var x5e=z1(function(e,t,a){var i=+e,r=+t;return i+a*(r-i)}),w5e=z1(function(e,t,a){var i=t-+e;return i=i||1/0,(a-e)/i}),k5e=z1(function(e,t,a){var i=t-+e;return i=i||1/0,Math.max(0,Math.min(1,(a-e)/i))});const L1={rangeStep:v5e,getDigitCount:b5e,interpolateNumber:x5e,uninterpolateNumber:w5e,uninterpolateTruncation:k5e};function E3(e){return C5e(e)||S5e(e)||VV(e)||j5e()}function j5e(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
7758In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function S5e(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function C5e(e){if(Array.isArray(e))return R3(e)}function Lg(e,t){return _5e(e)||T5e(e,t)||VV(e,t)||A5e()}function A5e(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7759In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function VV(e,t){if(e){if(typeof e=="string")return R3(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return R3(e,t)}}function R3(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function T5e(e,t){if(!(typeof Symbol>"u"||!(Symbol.iterator in Object(e)))){var a=[],i=!0,r=!1,o=void 0;try{for(var l=e[Symbol.iterator](),d;!(i=(d=l.next()).done)&&(a.push(d.value),!(t&&a.length===t));i=!0);}catch(u){r=!0,o=u}finally{try{!i&&l.return!=null&&l.return()}finally{if(r)throw o}}return a}}function _5e(e){if(Array.isArray(e))return e}function KV(e){var t=Lg(e,2),a=t[0],i=t[1],r=a,o=i;return a>i&&(r=i,o=a),[r,o]}function XV(e,t,a){if(e.lte(0))return new Et(0);var i=L1.getDigitCount(e.toNumber()),r=new Et(10).pow(i),o=e.div(r),l=i!==1?.05:.1,d=new Et(Math.ceil(o.div(l).toNumber())).add(a).mul(l),u=d.mul(r);return t?u:new Et(Math.ceil(u))}function M5e(e,t,a){var i=1,r=new Et(e);if(!r.isint()&&a){var o=Math.abs(e);o<1?(i=new Et(10).pow(L1.getDigitCount(e)-1),r=new Et(Math.floor(r.div(i).toNumber())).mul(i)):o>1&&(r=new Et(Math.floor(e)))}else e===0?r=new Et(Math.floor((t-1)/2)):a||(r=new Et(Math.floor(e)));var l=Math.floor((t-1)/2),d=y5e(g5e(function(u){return r.add(new Et(u-l).mul(i)).toNumber()}),_3);return d(0,t)}function QV(e,t,a,i){var r=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((t-e)/(a-1)))return{step:new Et(0),tickMin:new Et(0),tickMax:new Et(0)};var o=XV(new Et(t).sub(e).div(a-1),i,r),l;e<=0&&t>=0?l=new Et(0):(l=new Et(e).add(t).div(2),l=l.sub(new Et(l).mod(o)));var d=Math.ceil(l.sub(e).div(o).toNumber()),u=Math.ceil(new Et(t).sub(l).div(o).toNumber()),h=d+u+1;return h>a?QV(e,t,a,i,r+1):(h<a&&(u=t>0?u+(a-h):u,d=t>0?d:d+(a-h)),{step:o,tickMin:l.sub(new Et(d).mul(o)),tickMax:l.add(new Et(u).mul(o))})}function E5e(e){var t=Lg(e,2),a=t[0],i=t[1],r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,l=Math.max(r,2),d=KV([a,i]),u=Lg(d,2),h=u[0],m=u[1];if(h===-1/0||m===1/0){var f=m===1/0?[h].concat(E3(_3(0,r-1).map(function(){return 1/0}))):[].concat(E3(_3(0,r-1).map(function(){return-1/0})),[m]);return a>i?M3(f):f}if(h===m)return M5e(h,r,o);var y=QV(h,m,l,o),b=y.step,x=y.tickMin,k=y.tickMax,v=L1.rangeStep(x,k.add(new Et(.1).mul(b)),b);return a>i?M3(v):v}function R5e(e,t){var a=Lg(e,2),i=a[0],r=a[1],o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,l=KV([i,r]),d=Lg(l,2),u=d[0],h=d[1];if(u===-1/0||h===1/0)return[i,r];if(u===h)return[u];var m=Math.max(t,2),f=XV(new Et(h).sub(u).div(m-1),o,0),y=[].concat(E3(L1.rangeStep(new Et(u),new Et(h).sub(new Et(.99).mul(f)),f)),[h]);return i>r?M3(y):y}var N5e=YV(E5e),O5e=YV(R5e),P5e="Invariant failed";function Qd(e,t){throw new Error(P5e)}var I5e=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function kp(e){"@babel/helpers - typeof";return kp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},kp(e)}function Ox(){return Ox=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},Ox.apply(this,arguments)}function D5e(e,t){return U5e(e)||L5e(e,t)||z5e(e,t)||W5e()}function W5e(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7760In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function z5e(e,t){if(e){if(typeof e=="string")return Qz(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return Qz(e,t)}}function Qz(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function L5e(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i,r,o,l,d=[],u=!0,h=!1;try{if(o=(a=a.call(e)).next,t!==0)for(;!(u=(i=o.call(a)).done)&&(d.push(i.value),d.length!==t);u=!0);}catch(m){h=!0,r=m}finally{try{if(!u&&a.return!=null&&(l=a.return(),Object(l)!==l))return}finally{if(h)throw r}}return d}}function U5e(e){if(Array.isArray(e))return e}function B5e(e,t){if(e==null)return{};var a=q5e(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function q5e(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function $5e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function F5e(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,eK(i.key),i)}}function G5e(e,t,a){return t&&F5e(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function H5e(e,t,a){return t=Px(t),Y5e(e,ZV()?Reflect.construct(t,a||[],Px(e).constructor):t.apply(e,a))}function Y5e(e,t){if(t&&(kp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return V5e(e)}function V5e(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function ZV(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(ZV=function(){return!!e})()}function Px(e){return Px=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},Px(e)}function K5e(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&N3(e,t)}function N3(e,t){return N3=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},N3(e,t)}function JV(e,t,a){return t=eK(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function eK(e){var t=X5e(e,"string");return kp(t)=="symbol"?t:t+""}function X5e(e,t){if(kp(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(kp(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var U1=(function(e){function t(){return $5e(this,t),H5e(this,t,arguments)}return K5e(t,e),G5e(t,[{key:"render",value:function(){var i=this.props,r=i.offset,o=i.layout,l=i.width,d=i.dataKey,u=i.data,h=i.dataPointFormatter,m=i.xAxis,f=i.yAxis,y=B5e(i,I5e),b=Ze(y,!1);this.props.direction==="x"&&m.type!=="number"&&Qd();var x=u.map(function(k){var v=h(k,d),j=v.x,T=v.y,A=v.value,C=v.errorVal;if(!C)return null;var _=[],E,R;if(Array.isArray(C)){var W=D5e(C,2);E=W[0],R=W[1]}else E=R=C;if(o==="vertical"){var z=m.scale,H=T+r,$=H+l,U=H-l,X=z(A-E),D=z(A+R);_.push({x1:D,y1:$,x2:D,y2:U}),_.push({x1:X,y1:H,x2:D,y2:H}),_.push({x1:X,y1:$,x2:X,y2:U})}else if(o==="horizontal"){var P=f.scale,O=j+r,B=O-l,Y=O+l,V=P(A-E),G=P(A+R);_.push({x1:B,y1:G,x2:Y,y2:G}),_.push({x1:O,y1:V,x2:O,y2:G}),_.push({x1:B,y1:V,x2:Y,y2:V})}return q.createElement(Ut,Ox({className:"recharts-errorBar",key:"bar-".concat(_.map(function(I){return"".concat(I.x1,"-").concat(I.x2,"-").concat(I.y1,"-").concat(I.y2)}))},b),_.map(function(I){return q.createElement("line",Ox({},I,{key:"line-".concat(I.x1,"-").concat(I.x2,"-").concat(I.y1,"-").concat(I.y2)}))}))});return q.createElement(Ut,{className:"recharts-errorBars"},x)}}])})(q.Component);JV(U1,"defaultProps",{stroke:"black",strokeWidth:1.5,width:5,offset:0,layout:"horizontal"});JV(U1,"displayName","ErrorBar");function Ug(e){"@babel/helpers - typeof";return Ug=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ug(e)}function Zz(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function Yc(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?Zz(Object(a),!0).forEach(function(i){Q5e(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):Zz(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function Q5e(e,t,a){return t=Z5e(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function Z5e(e){var t=J5e(e,"string");return Ug(t)=="symbol"?t:t+""}function J5e(e,t){if(Ug(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Ug(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var tK=function(t){var a=t.children,i=t.formattedGraphicalItems,r=t.legendWidth,o=t.legendContent,l=ea(a,Ad);if(!l)return null;var d=Ad.defaultProps,u=d!==void 0?Yc(Yc({},d),l.props):{},h;return l.props&&l.props.payload?h=l.props&&l.props.payload:o==="children"?h=(i||[]).reduce(function(m,f){var y=f.item,b=f.props,x=b.sectors||b.data||[];return m.concat(x.map(function(k){return{type:l.props.iconType||y.props.legendType,value:k.name,color:k.fill,payload:k}}))},[]):h=(i||[]).map(function(m){var f=m.item,y=f.type.defaultProps,b=y!==void 0?Yc(Yc({},y),f.props):{},x=b.dataKey,k=b.name,v=b.legendType,j=b.hide;return{inactive:j,dataKey:x,type:u.iconType||v||"square",color:dE(f),value:k||x,payload:b}}),Yc(Yc(Yc({},u),Ad.getWithHeight(l,r)),{},{payload:h,item:l})};function Bg(e){"@babel/helpers - typeof";return Bg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Bg(e)}function Jz(e){return aCe(e)||nCe(e)||tCe(e)||eCe()}function eCe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
7761In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function tCe(e,t){if(e){if(typeof e=="string")return O3(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return O3(e,t)}}function nCe(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function aCe(e){if(Array.isArray(e))return O3(e)}function O3(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function eL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function on(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?eL(Object(a),!0).forEach(function(i){Ph(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):eL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function Ph(e,t,a){return t=iCe(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function iCe(e){var t=rCe(e,"string");return Bg(t)=="symbol"?t:t+""}function rCe(e,t){if(Bg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Bg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function ja(e,t,a){return dt(e)||dt(t)?a:Sn(t)?wi(e,t,a):Ke(t)?t(e):a}function og(e,t,a,i){var r=a5e(e,function(d){return ja(d,t)});if(a==="number"){var o=r.filter(function(d){return ke(d)||parseFloat(d)});return o.length?[W1(o),Yl(o)]:[1/0,-1/0]}var l=i?r.filter(function(d){return!dt(d)}):r;return l.map(function(d){return Sn(d)||d instanceof Date?d:""})}var oCe=function(t){var a,i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],r=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,l=-1,d=(a=i==null?void 0:i.length)!==null&&a!==void 0?a:0;if(d<=1)return 0;if(o&&o.axisType==="angleAxis"&&Math.abs(Math.abs(o.range[1]-o.range[0])-360)<=1e-6)for(var u=o.range,h=0;h<d;h++){var m=h>0?r[h-1].coordinate:r[d-1].coordinate,f=r[h].coordinate,y=h>=d-1?r[0].coordinate:r[h+1].coordinate,b=void 0;if(Mr(f-m)!==Mr(y-f)){var x=[];if(Mr(y-f)===Mr(u[1]-u[0])){b=y;var k=f+u[1]-u[0];x[0]=Math.min(k,(k+m)/2),x[1]=Math.max(k,(k+m)/2)}else{b=m;var v=y+u[1]-u[0];x[0]=Math.min(f,(v+f)/2),x[1]=Math.max(f,(v+f)/2)}var j=[Math.min(f,(b+f)/2),Math.max(f,(b+f)/2)];if(t>j[0]&&t<=j[1]||t>=x[0]&&t<=x[1]){l=r[h].index;break}}else{var T=Math.min(m,y),A=Math.max(m,y);if(t>(T+f)/2&&t<=(A+f)/2){l=r[h].index;break}}}else for(var C=0;C<d;C++)if(C===0&&t<=(i[C].coordinate+i[C+1].coordinate)/2||C>0&&C<d-1&&t>(i[C].coordinate+i[C-1].coordinate)/2&&t<=(i[C].coordinate+i[C+1].coordinate)/2||C===d-1&&t>(i[C].coordinate+i[C-1].coordinate)/2){l=i[C].index;break}return l},dE=function(t){var a,i=t,r=i.type.displayName,o=(a=t.type)!==null&&a!==void 0&&a.defaultProps?on(on({},t.type.defaultProps),t.props):t.props,l=o.stroke,d=o.fill,u;switch(r){case"Line":u=l;break;case"Area":case"Radar":u=l&&l!=="none"?l:d;break;default:u=d;break}return u},sCe=function(t){var a=t.barSize,i=t.totalSize,r=t.stackGroups,o=r===void 0?{}:r;if(!o)return{};for(var l={},d=Object.keys(o),u=0,h=d.length;u<h;u++)for(var m=o[d[u]].stackGroups,f=Object.keys(m),y=0,b=f.length;y<b;y++){var x=m[f[y]],k=x.items,v=x.cateAxisId,j=k.filter(function(R){return Es(R.type).indexOf("Bar")>=0});if(j&&j.length){var T=j[0].type.defaultProps,A=T!==void 0?on(on({},T),j[0].props):j[0].props,C=A.barSize,_=A[v];l[_]||(l[_]=[]);var E=dt(C)?a:C;l[_].push({item:j[0],stackList:j.slice(1),barSize:dt(E)?void 0:Vd(E,i,0)})}}return l},lCe=function(t){var a=t.barGap,i=t.barCategoryGap,r=t.bandSize,o=t.sizeList,l=o===void 0?[]:o,d=t.maxBarSize,u=l.length;if(u<1)return null;var h=Vd(a,r,0,!0),m,f=[];if(l[0].barSize===+l[0].barSize){var y=!1,b=r/u,x=l.reduce(function(C,_){return C+_.barSize||0},0);x+=(u-1)*h,x>=r&&(x-=(u-1)*h,h=0),x>=r&&b>0&&(y=!0,b*=.9,x=u*b);var k=(r-x)/2>>0,v={offset:k-h,size:0};m=l.reduce(function(C,_){var E={item:_.item,position:{offset:v.offset+v.size+h,size:y?b:_.barSize}},R=[].concat(Jz(C),[E]);return v=R[R.length-1].position,_.stackList&&_.stackList.length&&_.stackList.forEach(function(W){R.push({item:W,position:v})}),R},f)}else{var j=Vd(i,r,0,!0);r-2*j-(u-1)*h<=0&&(h=0);var T=(r-2*j-(u-1)*h)/u;T>1&&(T>>=0);var A=d===+d?Math.min(T,d):T;m=l.reduce(function(C,_,E){var R=[].concat(Jz(C),[{item:_.item,position:{offset:j+(T+h)*E+(T-A)/2,size:A}}]);return _.stackList&&_.stackList.length&&_.stackList.forEach(function(W){R.push({item:W,position:R[R.length-1].position})}),R},f)}return m},cCe=function(t,a,i,r){var o=i.children,l=i.width,d=i.margin,u=l-(d.left||0)-(d.right||0),h=tK({children:o,legendWidth:u});if(h){var m=r||{},f=m.width,y=m.height,b=h.align,x=h.verticalAlign,k=h.layout;if((k==="vertical"||k==="horizontal"&&x==="middle")&&b!=="center"&&ke(t[b]))return on(on({},t),{},Ph({},b,t[b]+(f||0)));if((k==="horizontal"||k==="vertical"&&b==="center")&&x!=="middle"&&ke(t[x]))return on(on({},t),{},Ph({},x,t[x]+(y||0)))}return t},dCe=function(t,a,i){return dt(a)?!0:t==="horizontal"?a==="yAxis":t==="vertical"||i==="x"?a==="xAxis":i==="y"?a==="yAxis":!0},nK=function(t,a,i,r,o){var l=a.props.children,d=Lr(l,U1).filter(function(h){return dCe(r,o,h.props.direction)});if(d&&d.length){var u=d.map(function(h){return h.props.dataKey});return t.reduce(function(h,m){var f=ja(m,i);if(dt(f))return h;var y=Array.isArray(f)?[W1(f),Yl(f)]:[f,f],b=u.reduce(function(x,k){var v=ja(m,k,0),j=y[0]-Math.abs(Array.isArray(v)?v[0]:v),T=y[1]+Math.abs(Array.isArray(v)?v[1]:v);return[Math.min(j,x[0]),Math.max(T,x[1])]},[1/0,-1/0]);return[Math.min(b[0],h[0]),Math.max(b[1],h[1])]},[1/0,-1/0])}return null},uCe=function(t,a,i,r,o){var l=a.map(function(d){return nK(t,d,i,o,r)}).filter(function(d){return!dt(d)});return l&&l.length?l.reduce(function(d,u){return[Math.min(d[0],u[0]),Math.max(d[1],u[1])]},[1/0,-1/0]):null},aK=function(t,a,i,r,o){var l=a.map(function(u){var h=u.props.dataKey;return i==="number"&&h&&nK(t,u,h,r)||og(t,h,i,o)});if(i==="number")return l.reduce(function(u,h){return[Math.min(u[0],h[0]),Math.max(u[1],h[1])]},[1/0,-1/0]);var d={};return l.reduce(function(u,h){for(var m=0,f=h.length;m<f;m++)d[h[m]]||(d[h[m]]=!0,u.push(h[m]));return u},[])},iK=function(t,a){return t==="horizontal"&&a==="xAxis"||t==="vertical"&&a==="yAxis"||t==="centric"&&a==="angleAxis"||t==="radial"&&a==="radiusAxis"},rK=function(t,a,i,r){if(r)return t.map(function(u){return u.coordinate});var o,l,d=t.map(function(u){return u.coordinate===a&&(o=!0),u.coordinate===i&&(l=!0),u.coordinate});return o||d.push(a),l||d.push(i),d},Cs=function(t,a,i){if(!t)return null;var r=t.scale,o=t.duplicateDomain,l=t.type,d=t.range,u=t.realScaleType==="scaleBand"?r.bandwidth()/2:2,h=(a||i)&&l==="category"&&r.bandwidth?r.bandwidth()/u:0;if(h=t.axisType==="angleAxis"&&(d==null?void 0:d.length)>=2?Mr(d[0]-d[1])*2*h:h,a&&(t.ticks||t.niceTicks)){var m=(t.ticks||t.niceTicks).map(function(f){var y=o?o.indexOf(f):f;return{coordinate:r(y)+h,value:f,offset:h}});return m.filter(function(f){return!bc(f.coordinate)})}return t.isCategorical&&t.categoricalDomain?t.categoricalDomain.map(function(f,y){return{coordinate:r(f)+h,value:f,index:y,offset:h}}):r.ticks&&!i?r.ticks(t.tickCount).map(function(f){return{coordinate:r(f)+h,value:f,offset:h}}):r.domain().map(function(f,y){return{coordinate:r(f)+h,value:o?o[f]:f,index:y,offset:h}})},WA=new WeakMap,Qv=function(t,a){if(typeof a!="function")return t;WA.has(t)||WA.set(t,new WeakMap);var i=WA.get(t);if(i.has(a))return i.get(a);var r=function(){t.apply(void 0,arguments),a.apply(void 0,arguments)};return i.set(a,r),r},hCe=function(t,a,i){var r=t.scale,o=t.type,l=t.layout,d=t.axisType;if(r==="auto")return l==="radial"&&d==="radiusAxis"?{scale:Ng(),realScaleType:"band"}:l==="radial"&&d==="angleAxis"?{scale:_x(),realScaleType:"linear"}:o==="category"&&a&&(a.indexOf("LineChart")>=0||a.indexOf("AreaChart")>=0||a.indexOf("ComposedChart")>=0&&!i)?{scale:rg(),realScaleType:"point"}:o==="category"?{scale:Ng(),realScaleType:"band"}:{scale:_x(),realScaleType:"linear"};if(Yd(r)){var u="scale".concat(j1(r));return{scale:(Lz[u]||rg)(),realScaleType:Lz[u]?u:"point"}}return Ke(r)?{scale:r}:{scale:rg(),realScaleType:"point"}},tL=1e-4,pCe=function(t){var a=t.domain();if(!(!a||a.length<=2)){var i=a.length,r=t.range(),o=Math.min(r[0],r[1])-tL,l=Math.max(r[0],r[1])+tL,d=t(a[0]),u=t(a[i-1]);(d<o||d>l||u<o||u>l)&&t.domain([a[0],a[i-1]])}},mCe=function(t,a){if(!t)return null;for(var i=0,r=t.length;i<r;i++)if(t[i].item===a)return t[i].position;return null},fCe=function(t,a){if(!a||a.length!==2||!ke(a[0])||!ke(a[1]))return t;var i=Math.min(a[0],a[1]),r=Math.max(a[0],a[1]),o=[t[0],t[1]];return(!ke(t[0])||t[0]<i)&&(o[0]=i),(!ke(t[1])||t[1]>r)&&(o[1]=r),o[0]>r&&(o[0]=r),o[1]<i&&(o[1]=i),o},gCe=function(t){var a=t.length;if(!(a<=0))for(var i=0,r=t[0].length;i<r;++i)for(var o=0,l=0,d=0;d<a;++d){var u=bc(t[d][i][1])?t[d][i][0]:t[d][i][1];u>=0?(t[d][i][0]=o,t[d][i][1]=o+u,o=t[d][i][1]):(t[d][i][0]=l,t[d][i][1]=l+u,l=t[d][i][1])}},yCe=function(t){var a=t.length;if(!(a<=0))for(var i=0,r=t[0].length;i<r;++i)for(var o=0,l=0;l<a;++l){var d=bc(t[l][i][1])?t[l][i][0]:t[l][i][1];d>=0?(t[l][i][0]=o,t[l][i][1]=o+d,o=t[l][i][1]):(t[l][i][0]=0,t[l][i][1]=0)}},bCe={sign:gCe,expand:hwe,none:mp,silhouette:pwe,wiggle:mwe,positive:yCe},vCe=function(t,a,i){var r=a.map(function(d){return d.props.dataKey}),o=bCe[i],l=uwe().keys(r).value(function(d,u){return+ja(d,u,0)}).order(c3).offset(o);return l(t)},xCe=function(t,a,i,r,o,l){if(!t)return null;var d=l?a.reverse():a,u={},h=d.reduce(function(f,y){var b,x=(b=y.type)!==null&&b!==void 0&&b.defaultProps?on(on({},y.type.defaultProps),y.props):y.props,k=x.stackId,v=x.hide;if(v)return f;var j=x[i],T=f[j]||{hasStack:!1,stackGroups:{}};if(Sn(k)){var A=T.stackGroups[k]||{numericAxisId:i,cateAxisId:r,items:[]};A.items.push(y),T.hasStack=!0,T.stackGroups[k]=A}else T.stackGroups[am("_stackId_")]={numericAxisId:i,cateAxisId:r,items:[y]};return on(on({},f),{},Ph({},j,T))},u),m={};return Object.keys(h).reduce(function(f,y){var b=h[y];if(b.hasStack){var x={};b.stackGroups=Object.keys(b.stackGroups).reduce(function(k,v){var j=b.stackGroups[v];return on(on({},k),{},Ph({},v,{numericAxisId:i,cateAxisId:r,items:j.items,stackedData:vCe(t,j.items,o)}))},x)}return on(on({},f),{},Ph({},y,b))},m)},wCe=function(t,a){var i=a.realScaleType,r=a.type,o=a.tickCount,l=a.originalDomain,d=a.allowDecimals,u=i||a.scale;if(u!=="auto"&&u!=="linear")return null;if(o&&r==="number"&&l&&(l[0]==="auto"||l[1]==="auto")){var h=t.domain();if(!h.length)return null;var m=N5e(h,o,d);return t.domain([W1(m),Yl(m)]),{niceTicks:m}}if(o&&r==="number"){var f=t.domain(),y=O5e(f,o,d);return{niceTicks:y}}return null};function nL(e){var t=e.axis,a=e.ticks,i=e.bandSize,r=e.entry,o=e.index,l=e.dataKey;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!dt(r[t.dataKey])){var d=ox(a,"value",r[t.dataKey]);if(d)return d.coordinate+i/2}return a[o]?a[o].coordinate+i/2:null}var u=ja(r,dt(l)?t.dataKey:l);return dt(u)?null:t.scale(u)}var aL=function(t){var a=t.axis,i=t.ticks,r=t.offset,o=t.bandSize,l=t.entry,d=t.index;if(a.type==="category")return i[d]?i[d].coordinate+r:null;var u=ja(l,a.dataKey,a.domain[d]);return dt(u)?null:a.scale(u)-o/2+r},kCe=function(t){var a=t.numericAxis,i=a.scale.domain();if(a.type==="number"){var r=Math.min(i[0],i[1]),o=Math.max(i[0],i[1]);return r<=0&&o>=0?0:o<0?o:r}return i[0]},jCe=function(t,a){var i,r=(i=t.type)!==null&&i!==void 0&&i.defaultProps?on(on({},t.type.defaultProps),t.props):t.props,o=r.stackId;if(Sn(o)){var l=a[o];if(l){var d=l.items.indexOf(t);return d>=0?l.stackedData[d]:null}}return null},SCe=function(t){return t.reduce(function(a,i){return[W1(i.concat([a[0]]).filter(ke)),Yl(i.concat([a[1]]).filter(ke))]},[1/0,-1/0])},oK=function(t,a,i){return Object.keys(t).reduce(function(r,o){var l=t[o],d=l.stackedData,u=d.reduce(function(h,m){var f=SCe(m.slice(a,i+1));return[Math.min(h[0],f[0]),Math.max(h[1],f[1])]},[1/0,-1/0]);return[Math.min(u[0],r[0]),Math.max(u[1],r[1])]},[1/0,-1/0]).map(function(r){return r===1/0||r===-1/0?0:r})},iL=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,rL=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,P3=function(t,a,i){if(Ke(t))return t(a,i);if(!Array.isArray(t))return a;var r=[];if(ke(t[0]))r[0]=i?t[0]:Math.min(t[0],a[0]);else if(iL.test(t[0])){var o=+iL.exec(t[0])[1];r[0]=a[0]-o}else Ke(t[0])?r[0]=t[0](a[0]):r[0]=a[0];if(ke(t[1]))r[1]=i?t[1]:Math.max(t[1],a[1]);else if(rL.test(t[1])){var l=+rL.exec(t[1])[1];r[1]=a[1]+l}else Ke(t[1])?r[1]=t[1](a[1]):r[1]=a[1];return r},Ix=function(t,a,i){if(t&&t.scale&&t.scale.bandwidth){var r=t.scale.bandwidth();if(!i||r>0)return r}if(t&&a&&a.length>=2){for(var o=z7(a,function(f){return f.coordinate}),l=1/0,d=1,u=o.length;d<u;d++){var h=o[d],m=o[d-1];l=Math.min((h.coordinate||0)-(m.coordinate||0),l)}return l===1/0?0:l}return i?void 0:0},oL=function(t,a,i){return!t||!t.length||Wg(t,wi(i,"type.defaultProps.domain"))?a:t},sK=function(t,a){var i=t.type.defaultProps?on(on({},t.type.defaultProps),t.props):t.props,r=i.dataKey,o=i.name,l=i.unit,d=i.formatter,u=i.tooltipType,h=i.chartType,m=i.hide;return on(on({},Ze(t,!1)),{},{dataKey:r,unit:l,formatter:d,name:o||r,color:dE(t),value:ja(a,r),type:u,payload:a,chartType:h,hide:m})};function qg(e){"@babel/helpers - typeof";return qg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},qg(e)}function sL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function lL(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?sL(Object(a),!0).forEach(function(i){CCe(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):sL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function CCe(e,t,a){return t=ACe(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function ACe(e){var t=TCe(e,"string");return qg(t)=="symbol"?t:t+""}function TCe(e,t){if(qg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(qg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var Dx=Math.PI/180,_Ce=function(t){return t*180/Math.PI},Yn=function(t,a,i,r){return{x:t+Math.cos(-Dx*r)*i,y:a+Math.sin(-Dx*r)*i}},MCe=function(t,a){var i=t.x,r=t.y,o=a.x,l=a.y;return Math.sqrt(Math.pow(i-o,2)+Math.pow(r-l,2))},ECe=function(t,a){var i=t.x,r=t.y,o=a.cx,l=a.cy,d=MCe({x:i,y:r},{x:o,y:l});if(d<=0)return{radius:d};var u=(i-o)/d,h=Math.acos(u);return r>l&&(h=2*Math.PI-h),{radius:d,angle:_Ce(h),angleInRadian:h}},RCe=function(t){var a=t.startAngle,i=t.endAngle,r=Math.floor(a/360),o=Math.floor(i/360),l=Math.min(r,o);return{startAngle:a-l*360,endAngle:i-l*360}},NCe=function(t,a){var i=a.startAngle,r=a.endAngle,o=Math.floor(i/360),l=Math.floor(r/360),d=Math.min(o,l);return t+d*360},cL=function(t,a){var i=t.x,r=t.y,o=ECe({x:i,y:r},a),l=o.radius,d=o.angle,u=a.innerRadius,h=a.outerRadius;if(l<u||l>h)return!1;if(l===0)return!0;var m=RCe(a),f=m.startAngle,y=m.endAngle,b=d,x;if(f<=y){for(;b>y;)b-=360;for(;b<f;)b+=360;x=b>=f&&b<=y}else{for(;b>f;)b-=360;for(;b<y;)b+=360;x=b>=y&&b<=f}return x?lL(lL({},a),{},{radius:l,angle:NCe(b,a)}):null};function $g(e){"@babel/helpers - typeof";return $g=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},$g(e)}var OCe=["offset"];function PCe(e){return zCe(e)||WCe(e)||DCe(e)||ICe()}function ICe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
7762In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function DCe(e,t){if(e){if(typeof e=="string")return I3(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return I3(e,t)}}function WCe(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function zCe(e){if(Array.isArray(e))return I3(e)}function I3(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function LCe(e,t){if(e==null)return{};var a=UCe(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function UCe(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function dL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function wn(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?dL(Object(a),!0).forEach(function(i){BCe(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):dL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function BCe(e,t,a){return t=qCe(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function qCe(e){var t=$Ce(e,"string");return $g(t)=="symbol"?t:t+""}function $Ce(e,t){if($g(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if($g(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function Fg(){return Fg=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},Fg.apply(this,arguments)}var FCe=function(t){var a=t.value,i=t.formatter,r=dt(t.children)?a:t.children;return Ke(i)?i(r):r},GCe=function(t,a){var i=Mr(a-t),r=Math.min(Math.abs(a-t),360);return i*r},HCe=function(t,a,i){var r=t.position,o=t.viewBox,l=t.offset,d=t.className,u=o,h=u.cx,m=u.cy,f=u.innerRadius,y=u.outerRadius,b=u.startAngle,x=u.endAngle,k=u.clockWise,v=(f+y)/2,j=GCe(b,x),T=j>=0?1:-1,A,C;r==="insideStart"?(A=b+T*l,C=k):r==="insideEnd"?(A=x-T*l,C=!k):r==="end"&&(A=x+T*l,C=k),C=j<=0?C:!C;var _=Yn(h,m,v,A),E=Yn(h,m,v,A+(C?1:-1)*359),R="M".concat(_.x,",").concat(_.y,`
7763    A`).concat(v,",").concat(v,",0,1,").concat(C?0:1,`,
7764    `).concat(E.x,",").concat(E.y),W=dt(t.id)?am("recharts-radial-line-"):t.id;return q.createElement("text",Fg({},i,{dominantBaseline:"central",className:ot("recharts-radial-bar-label",d)}),q.createElement("defs",null,q.createElement("path",{id:W,d:R})),q.createElement("textPath",{xlinkHref:"#".concat(W)},a))},YCe=function(t){var a=t.viewBox,i=t.offset,r=t.position,o=a,l=o.cx,d=o.cy,u=o.innerRadius,h=o.outerRadius,m=o.startAngle,f=o.endAngle,y=(m+f)/2;if(r==="outside"){var b=Yn(l,d,h+i,y),x=b.x,k=b.y;return{x,y:k,textAnchor:x>=l?"start":"end",verticalAnchor:"middle"}}if(r==="center")return{x:l,y:d,textAnchor:"middle",verticalAnchor:"middle"};if(r==="centerTop")return{x:l,y:d,textAnchor:"middle",verticalAnchor:"start"};if(r==="centerBottom")return{x:l,y:d,textAnchor:"middle",verticalAnchor:"end"};var v=(u+h)/2,j=Yn(l,d,v,y),T=j.x,A=j.y;return{x:T,y:A,textAnchor:"middle",verticalAnchor:"middle"}},VCe=function(t){var a=t.viewBox,i=t.parentViewBox,r=t.offset,o=t.position,l=a,d=l.x,u=l.y,h=l.width,m=l.height,f=m>=0?1:-1,y=f*r,b=f>0?"end":"start",x=f>0?"start":"end",k=h>=0?1:-1,v=k*r,j=k>0?"end":"start",T=k>0?"start":"end";if(o==="top"){var A={x:d+h/2,y:u-f*r,textAnchor:"middle",verticalAnchor:b};return wn(wn({},A),i?{height:Math.max(u-i.y,0),width:h}:{})}if(o==="bottom"){var C={x:d+h/2,y:u+m+y,textAnchor:"middle",verticalAnchor:x};return wn(wn({},C),i?{height:Math.max(i.y+i.height-(u+m),0),width:h}:{})}if(o==="left"){var _={x:d-v,y:u+m/2,textAnchor:j,verticalAnchor:"middle"};return wn(wn({},_),i?{width:Math.max(_.x-i.x,0),height:m}:{})}if(o==="right"){var E={x:d+h+v,y:u+m/2,textAnchor:T,verticalAnchor:"middle"};return wn(wn({},E),i?{width:Math.max(i.x+i.width-E.x,0),height:m}:{})}var R=i?{width:h,height:m}:{};return o==="insideLeft"?wn({x:d+v,y:u+m/2,textAnchor:T,verticalAnchor:"middle"},R):o==="insideRight"?wn({x:d+h-v,y:u+m/2,textAnchor:j,verticalAnchor:"middle"},R):o==="insideTop"?wn({x:d+h/2,y:u+y,textAnchor:"middle",verticalAnchor:x},R):o==="insideBottom"?wn({x:d+h/2,y:u+m-y,textAnchor:"middle",verticalAnchor:b},R):o==="insideTopLeft"?wn({x:d+v,y:u+y,textAnchor:T,verticalAnchor:x},R):o==="insideTopRight"?wn({x:d+h-v,y:u+y,textAnchor:j,verticalAnchor:x},R):o==="insideBottomLeft"?wn({x:d+v,y:u+m-y,textAnchor:T,verticalAnchor:b},R):o==="insideBottomRight"?wn({x:d+h-v,y:u+m-y,textAnchor:j,verticalAnchor:b},R):nm(o)&&(ke(o.x)||cd(o.x))&&(ke(o.y)||cd(o.y))?wn({x:d+Vd(o.x,h),y:u+Vd(o.y,m),textAnchor:"end",verticalAnchor:"end"},R):wn({x:d+h/2,y:u+m/2,textAnchor:"middle",verticalAnchor:"middle"},R)},KCe=function(t){return"cx"in t&&ke(t.cx)};function ta(e){var t=e.offset,a=t===void 0?5:t,i=LCe(e,OCe),r=wn({offset:a},i),o=r.viewBox,l=r.position,d=r.value,u=r.children,h=r.content,m=r.className,f=m===void 0?"":m,y=r.textBreakAll;if(!o||dt(d)&&dt(u)&&!M.isValidElement(h)&&!Ke(h))return null;if(M.isValidElement(h))return M.cloneElement(h,r);var b;if(Ke(h)){if(b=M.createElement(h,r),M.isValidElement(b))return b}else b=FCe(r);var x=KCe(o),k=Ze(r,!0);if(x&&(l==="insideStart"||l==="insideEnd"||l==="end"))return HCe(r,b,k);var v=x?YCe(r):VCe(r);return q.createElement(xx,Fg({className:ot("recharts-label",f)},k,v,{breakAll:y}),b)}ta.displayName="Label";var lK=function(t){var a=t.cx,i=t.cy,r=t.angle,o=t.startAngle,l=t.endAngle,d=t.r,u=t.radius,h=t.innerRadius,m=t.outerRadius,f=t.x,y=t.y,b=t.top,x=t.left,k=t.width,v=t.height,j=t.clockWise,T=t.labelViewBox;if(T)return T;if(ke(k)&&ke(v)){if(ke(f)&&ke(y))return{x:f,y,width:k,height:v};if(ke(b)&&ke(x))return{x:b,y:x,width:k,height:v}}return ke(f)&&ke(y)?{x:f,y,width:0,height:0}:ke(a)&&ke(i)?{cx:a,cy:i,startAngle:o||r||0,endAngle:l||r||0,innerRadius:h||0,outerRadius:m||u||d||0,clockWise:j}:t.viewBox?t.viewBox:{}},XCe=function(t,a){return t?t===!0?q.createElement(ta,{key:"label-implicit",viewBox:a}):Sn(t)?q.createElement(ta,{key:"label-implicit",viewBox:a,value:t}):M.isValidElement(t)?t.type===ta?M.cloneElement(t,{key:"label-implicit",viewBox:a}):q.createElement(ta,{key:"label-implicit",content:t,viewBox:a}):Ke(t)?q.createElement(ta,{key:"label-implicit",content:t,viewBox:a}):nm(t)?q.createElement(ta,Fg({viewBox:a},t,{key:"label-implicit"})):null:null},QCe=function(t,a){var i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&i&&!t.label)return null;var r=t.children,o=lK(t),l=Lr(r,ta).map(function(u,h){return M.cloneElement(u,{viewBox:a||o,key:"label-".concat(h)})});if(!i)return l;var d=XCe(t.label,a||o);return[d].concat(PCe(l))};ta.parseViewBox=lK;ta.renderCallByParent=QCe;var zA,uL;function cK(){if(uL)return zA;uL=1;function e(t){var a=t==null?0:t.length;return a?t[a-1]:void 0}return zA=e,zA}var ZCe=cK();const JCe=vt(ZCe);function Gg(e){"@babel/helpers - typeof";return Gg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gg(e)}var eAe=["valueAccessor"],tAe=["data","dataKey","clockWise","id","textBreakAll"];function nAe(e){return oAe(e)||rAe(e)||iAe(e)||aAe()}function aAe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
7765In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function iAe(e,t){if(e){if(typeof e=="string")return D3(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return D3(e,t)}}function rAe(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function oAe(e){if(Array.isArray(e))return D3(e)}function D3(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function Wx(){return Wx=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},Wx.apply(this,arguments)}function hL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function pL(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?hL(Object(a),!0).forEach(function(i){sAe(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):hL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function sAe(e,t,a){return t=lAe(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function lAe(e){var t=cAe(e,"string");return Gg(t)=="symbol"?t:t+""}function cAe(e,t){if(Gg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Gg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function mL(e,t){if(e==null)return{};var a=dAe(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function dAe(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}var uAe=function(t){return Array.isArray(t.value)?JCe(t.value):t.value};function ac(e){var t=e.valueAccessor,a=t===void 0?uAe:t,i=mL(e,eAe),r=i.data,o=i.dataKey,l=i.clockWise,d=i.id,u=i.textBreakAll,h=mL(i,tAe);return!r||!r.length?null:q.createElement(Ut,{className:"recharts-label-list"},r.map(function(m,f){var y=dt(o)?a(m,f):ja(m&&m.payload,o),b=dt(d)?{}:{id:"".concat(d,"-").concat(f)};return q.createElement(ta,Wx({},Ze(m,!0),h,b,{parentViewBox:m.parentViewBox,value:y,textBreakAll:u,viewBox:ta.parseViewBox(dt(l)?m:pL(pL({},m),{},{clockWise:l})),key:"label-".concat(f),index:f}))}))}ac.displayName="LabelList";function hAe(e,t){return e?e===!0?q.createElement(ac,{key:"labelList-implicit",data:t}):q.isValidElement(e)||Ke(e)?q.createElement(ac,{key:"labelList-implicit",data:t,content:e}):nm(e)?q.createElement(ac,Wx({data:t},e,{key:"labelList-implicit"})):null:null}function pAe(e,t){var a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&a&&!e.label)return null;var i=e.children,r=Lr(i,ac).map(function(l,d){return M.cloneElement(l,{data:t,key:"labelList-".concat(d)})});if(!a)return r;var o=hAe(e.label,t);return[o].concat(nAe(r))}ac.renderCallByParent=pAe;function Hg(e){"@babel/helpers - typeof";return Hg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Hg(e)}function W3(){return W3=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},W3.apply(this,arguments)}function fL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function gL(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?fL(Object(a),!0).forEach(function(i){mAe(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):fL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function mAe(e,t,a){return t=fAe(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function fAe(e){var t=gAe(e,"string");return Hg(t)=="symbol"?t:t+""}function gAe(e,t){if(Hg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Hg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var yAe=function(t,a){var i=Mr(a-t),r=Math.min(Math.abs(a-t),359.999);return i*r},Zv=function(t){var a=t.cx,i=t.cy,r=t.radius,o=t.angle,l=t.sign,d=t.isExternal,u=t.cornerRadius,h=t.cornerIsExternal,m=u*(d?1:-1)+r,f=Math.asin(u/m)/Dx,y=h?o:o+l*f,b=Yn(a,i,m,y),x=Yn(a,i,r,y),k=h?o-l*f:o,v=Yn(a,i,m*Math.cos(f*Dx),k);return{center:b,circleTangency:x,lineTangency:v,theta:f}},dK=function(t){var a=t.cx,i=t.cy,r=t.innerRadius,o=t.outerRadius,l=t.startAngle,d=t.endAngle,u=yAe(l,d),h=l+u,m=Yn(a,i,o,l),f=Yn(a,i,o,h),y="M ".concat(m.x,",").concat(m.y,`
7766    A `).concat(o,",").concat(o,`,0,
7767    `).concat(+(Math.abs(u)>180),",").concat(+(l>h),`,
7768    `).concat(f.x,",").concat(f.y,`
7769  `);if(r>0){var b=Yn(a,i,r,l),x=Yn(a,i,r,h);y+="L ".concat(x.x,",").concat(x.y,`
7770            A `).concat(r,",").concat(r,`,0,
7771            `).concat(+(Math.abs(u)>180),",").concat(+(l<=h),`,
7772            `).concat(b.x,",").concat(b.y," Z")}else y+="L ".concat(a,",").concat(i," Z");return y},bAe=function(t){var a=t.cx,i=t.cy,r=t.innerRadius,o=t.outerRadius,l=t.cornerRadius,d=t.forceCornerRadius,u=t.cornerIsExternal,h=t.startAngle,m=t.endAngle,f=Mr(m-h),y=Zv({cx:a,cy:i,radius:o,angle:h,sign:f,cornerRadius:l,cornerIsExternal:u}),b=y.circleTangency,x=y.lineTangency,k=y.theta,v=Zv({cx:a,cy:i,radius:o,angle:m,sign:-f,cornerRadius:l,cornerIsExternal:u}),j=v.circleTangency,T=v.lineTangency,A=v.theta,C=u?Math.abs(h-m):Math.abs(h-m)-k-A;if(C<0)return d?"M ".concat(x.x,",").concat(x.y,`
7773        a`).concat(l,",").concat(l,",0,0,1,").concat(l*2,`,0
7774        a`).concat(l,",").concat(l,",0,0,1,").concat(-l*2,`,0
7775      `):dK({cx:a,cy:i,innerRadius:r,outerRadius:o,startAngle:h,endAngle:m});var _="M ".concat(x.x,",").concat(x.y,`
7776    A`).concat(l,",").concat(l,",0,0,").concat(+(f<0),",").concat(b.x,",").concat(b.y,`
7777    A`).concat(o,",").concat(o,",0,").concat(+(C>180),",").concat(+(f<0),",").concat(j.x,",").concat(j.y,`
7778    A`).concat(l,",").concat(l,",0,0,").concat(+(f<0),",").concat(T.x,",").concat(T.y,`
7779  `);if(r>0){var E=Zv({cx:a,cy:i,radius:r,angle:h,sign:f,isExternal:!0,cornerRadius:l,cornerIsExternal:u}),R=E.circleTangency,W=E.lineTangency,z=E.theta,H=Zv({cx:a,cy:i,radius:r,angle:m,sign:-f,isExternal:!0,cornerRadius:l,cornerIsExternal:u}),$=H.circleTangency,U=H.lineTangency,X=H.theta,D=u?Math.abs(h-m):Math.abs(h-m)-z-X;if(D<0&&l===0)return"".concat(_,"L").concat(a,",").concat(i,"Z");_+="L".concat(U.x,",").concat(U.y,`
7780      A`).concat(l,",").concat(l,",0,0,").concat(+(f<0),",").concat($.x,",").concat($.y,`
7781      A`).concat(r,",").concat(r,",0,").concat(+(D>180),",").concat(+(f>0),",").concat(R.x,",").concat(R.y,`
7782      A`).concat(l,",").concat(l,",0,0,").concat(+(f<0),",").concat(W.x,",").concat(W.y,"Z")}else _+="L".concat(a,",").concat(i,"Z");return _},vAe={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},uK=function(t){var a=gL(gL({},vAe),t),i=a.cx,r=a.cy,o=a.innerRadius,l=a.outerRadius,d=a.cornerRadius,u=a.forceCornerRadius,h=a.cornerIsExternal,m=a.startAngle,f=a.endAngle,y=a.className;if(l<o||m===f)return null;var b=ot("recharts-sector",y),x=l-o,k=Vd(d,x,0,!0),v;return k>0&&Math.abs(m-f)<360?v=bAe({cx:i,cy:r,innerRadius:o,outerRadius:l,cornerRadius:Math.min(k,x/2),forceCornerRadius:u,cornerIsExternal:h,startAngle:m,endAngle:f}):v=dK({cx:i,cy:r,innerRadius:o,outerRadius:l,startAngle:m,endAngle:f}),q.createElement("path",W3({},Ze(a,!0),{className:b,d:v,role:"img"}))};function Yg(e){"@babel/helpers - typeof";return Yg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yg(e)}function z3(){return z3=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},z3.apply(this,arguments)}function yL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function bL(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?yL(Object(a),!0).forEach(function(i){xAe(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):yL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function xAe(e,t,a){return t=wAe(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function wAe(e){var t=kAe(e,"string");return Yg(t)=="symbol"?t:t+""}function kAe(e,t){if(Yg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Yg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var vL={curveBasisClosed:ewe,curveBasisOpen:twe,curveBasis:Jxe,curveBumpX:Lxe,curveBumpY:Uxe,curveLinearClosed:nwe,curveLinear:C1,curveMonotoneX:awe,curveMonotoneY:iwe,curveNatural:rwe,curveStep:owe,curveStepAfter:lwe,curveStepBefore:swe},Jv=function(t){return t.x===+t.x&&t.y===+t.y},Af=function(t){return t.x},Tf=function(t){return t.y},jAe=function(t,a){if(Ke(t))return t;var i="curve".concat(j1(t));return(i==="curveMonotone"||i==="curveBump")&&a?vL["".concat(i).concat(a==="vertical"?"Y":"X")]:vL[i]||C1},SAe=function(t){var a=t.type,i=a===void 0?"linear":a,r=t.points,o=r===void 0?[]:r,l=t.baseLine,d=t.layout,u=t.connectNulls,h=u===void 0?!1:u,m=jAe(i,d),f=h?o.filter(function(k){return Jv(k)}):o,y;if(Array.isArray(l)){var b=h?l.filter(function(k){return Jv(k)}):l,x=f.map(function(k,v){return bL(bL({},k),{},{base:b[v]})});return d==="vertical"?y=Fv().y(Tf).x1(Af).x0(function(k){return k.base.x}):y=Fv().x(Af).y1(Tf).y0(function(k){return k.base.y}),y.defined(Jv).curve(m),y(x)}return d==="vertical"&&ke(l)?y=Fv().y(Tf).x1(Af).x0(l):ke(l)?y=Fv().x(Af).y1(Tf).y0(l):y=pY().x(Af).y(Tf),y.defined(Jv).curve(m),y(f)},sg=function(t){var a=t.className,i=t.points,r=t.path,o=t.pathRef;if((!i||!i.length)&&!r)return null;var l=i&&i.length?SAe(t):r;return M.createElement("path",z3({},Ze(t,!1),sx(t),{className:ot("recharts-curve",a),d:l,ref:o}))},LA={exports:{}},UA,xL;function CAe(){if(xL)return UA;xL=1;var e="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED";return UA=e,UA}var BA,wL;function AAe(){if(wL)return BA;wL=1;var e=CAe();function t(){}function a(){}return a.resetWarningCache=t,BA=function(){function i(l,d,u,h,m,f){if(f!==e){var y=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw y.name="Invariant Violation",y}}i.isRequired=i;function r(){return i}var o={array:i,bigint:i,bool:i,func:i,number:i,object:i,string:i,symbol:i,any:i,arrayOf:r,element:i,elementType:i,instanceOf:r,node:i,objectOf:r,oneOf:r,oneOfType:r,shape:r,exact:r,checkPropTypes:a,resetWarningCache:t};return o.PropTypes=o,o},BA}var kL;function TAe(){return kL||(kL=1,LA.exports=AAe()()),LA.exports}var _Ae=TAe();const ye=vt(_Ae),{getOwnPropertyNames:MAe,getOwnPropertySymbols:EAe}=Object,{hasOwnProperty:RAe}=Object.prototype;function qA(e,t){return function(i,r,o){return e(i,r,o)&&t(i,r,o)}}function e0(e){return function(a,i,r){if(!a||!i||typeof a!="object"||typeof i!="object")return e(a,i,r);const{cache:o}=r,l=o.get(a),d=o.get(i);if(l&&d)return l===i&&d===a;o.set(a,i),o.set(i,a);const u=e(a,i,r);return o.delete(a),o.delete(i),u}}function NAe(e){return e!=null?e[Symbol.toStringTag]:void 0}function jL(e){return MAe(e).concat(EAe(e))}const OAe=Object.hasOwn||((e,t)=>RAe.call(e,t));function cu(e,t){return e===t||!e&&!t&&e!==e&&t!==t}const PAe="__v",IAe="__o",DAe="_owner",{getOwnPropertyDescriptor:SL,keys:CL}=Object;function WAe(e,t){return e.byteLength===t.byteLength&&zx(new Uint8Array(e),new Uint8Array(t))}function zAe(e,t,a){let i=e.length;if(t.length!==i)return!1;for(;i-- >0;)if(!a.equals(e[i],t[i],i,i,e,t,a))return!1;return!0}function LAe(e,t){return e.byteLength===t.byteLength&&zx(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}function UAe(e,t){return cu(e.getTime(),t.getTime())}function BAe(e,t){return e.name===t.name&&e.message===t.message&&e.cause===t.cause&&e.stack===t.stack}function qAe(e,t){return e===t}function AL(e,t,a){const i=e.size;if(i!==t.size)return!1;if(!i)return!0;const r=new Array(i),o=e.entries();let l,d,u=0;for(;(l=o.next())&&!l.done;){const h=t.entries();let m=!1,f=0;for(;(d=h.next())&&!d.done;){if(r[f]){f++;continue}const y=l.value,b=d.value;if(a.equals(y[0],b[0],u,f,e,t,a)&&a.equals(y[1],b[1],y[0],b[0],e,t,a)){m=r[f]=!0;break}f++}if(!m)return!1;u++}return!0}const $Ae=cu;function FAe(e,t,a){const i=CL(e);let r=i.length;if(CL(t).length!==r)return!1;for(;r-- >0;)if(!hK(e,t,a,i[r]))return!1;return!0}function _f(e,t,a){const i=jL(e);let r=i.length;if(jL(t).length!==r)return!1;let o,l,d;for(;r-- >0;)if(o=i[r],!hK(e,t,a,o)||(l=SL(e,o),d=SL(t,o),(l||d)&&(!l||!d||l.configurable!==d.configurable||l.enumerable!==d.enumerable||l.writable!==d.writable)))return!1;return!0}function GAe(e,t){return cu(e.valueOf(),t.valueOf())}function HAe(e,t){return e.source===t.source&&e.flags===t.flags}function TL(e,t,a){const i=e.size;if(i!==t.size)return!1;if(!i)return!0;const r=new Array(i),o=e.values();let l,d;for(;(l=o.next())&&!l.done;){const u=t.values();let h=!1,m=0;for(;(d=u.next())&&!d.done;){if(!r[m]&&a.equals(l.value,d.value,l.value,d.value,e,t,a)){h=r[m]=!0;break}m++}if(!h)return!1}return!0}function zx(e,t){let a=e.byteLength;if(t.byteLength!==a||e.byteOffset!==t.byteOffset)return!1;for(;a-- >0;)if(e[a]!==t[a])return!1;return!0}function YAe(e,t){return e.hostname===t.hostname&&e.pathname===t.pathname&&e.protocol===t.protocol&&e.port===t.port&&e.hash===t.hash&&e.username===t.username&&e.password===t.password}function hK(e,t,a,i){return(i===DAe||i===IAe||i===PAe)&&(e.$$typeof||t.$$typeof)?!0:OAe(t,i)&&a.equals(e[i],t[i],i,i,e,t,a)}const VAe="[object ArrayBuffer]",KAe="[object Arguments]",XAe="[object Boolean]",QAe="[object DataView]",ZAe="[object Date]",JAe="[object Error]",eTe="[object Map]",tTe="[object Number]",nTe="[object Object]",aTe="[object RegExp]",iTe="[object Set]",rTe="[object String]",oTe={"[object Int8Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Int16Array]":!0,"[object Uint16Array]":!0,"[object Int32Array]":!0,"[object Uint32Array]":!0,"[object Float16Array]":!0,"[object Float32Array]":!0,"[object Float64Array
7782]":!0,"[object BigInt64Array]":!0,"[object BigUint64Array]":!0},sTe="[object URL]",lTe=Object.prototype.toString;function cTe({areArrayBuffersEqual:e,areArraysEqual:t,areDataViewsEqual:a,areDatesEqual:i,areErrorsEqual:r,areFunctionsEqual:o,areMapsEqual:l,areNumbersEqual:d,areObjectsEqual:u,arePrimitiveWrappersEqual:h,areRegExpsEqual:m,areSetsEqual:f,areTypedArraysEqual:y,areUrlsEqual:b,unknownTagComparators:x}){return function(v,j,T){if(v===j)return!0;if(v==null||j==null)return!1;const A=typeof v;if(A!==typeof j)return!1;if(A!=="object")return A==="number"?d(v,j,T):A==="function"?o(v,j,T):!1;const C=v.constructor;if(C!==j.constructor)return!1;if(C===Object)return u(v,j,T);if(Array.isArray(v))return t(v,j,T);if(C===Date)return i(v,j,T);if(C===RegExp)return m(v,j,T);if(C===Map)return l(v,j,T);if(C===Set)return f(v,j,T);const _=lTe.call(v);if(_===ZAe)return i(v,j,T);if(_===aTe)return m(v,j,T);if(_===eTe)return l(v,j,T);if(_===iTe)return f(v,j,T);if(_===nTe)return typeof v.then!="function"&&typeof j.then!="function"&&u(v,j,T);if(_===sTe)return b(v,j,T);if(_===JAe)return r(v,j,T);if(_===KAe)return u(v,j,T);if(oTe[_])return y(v,j,T);if(_===VAe)return e(v,j,T);if(_===QAe)return a(v,j,T);if(_===XAe||_===tTe||_===rTe)return h(v,j,T);if(x){let E=x[_];if(!E){const R=NAe(v);R&&(E=x[R])}if(E)return E(v,j,T)}return!1}}function dTe({circular:e,createCustomConfig:t,strict:a}){let i={areArrayBuffersEqual:WAe,areArraysEqual:a?_f:zAe,areDataViewsEqual:LAe,areDatesEqual:UAe,areErrorsEqual:BAe,areFunctionsEqual:qAe,areMapsEqual:a?qA(AL,_f):AL,areNumbersEqual:$Ae,areObjectsEqual:a?_f:FAe,arePrimitiveWrappersEqual:GAe,areRegExpsEqual:HAe,areSetsEqual:a?qA(TL,_f):TL,areTypedArraysEqual:a?qA(zx,_f):zx,areUrlsEqual:YAe,unknownTagComparators:void 0};if(t&&(i=Object.assign({},i,t(i))),e){const r=e0(i.areArraysEqual),o=e0(i.areMapsEqual),l=e0(i.areObjectsEqual),d=e0(i.areSetsEqual);i=Object.assign({},i,{areArraysEqual:r,areMapsEqual:o,areObjectsEqual:l,areSetsEqual:d})}return i}function uTe(e){return function(t,a,i,r,o,l,d){return e(t,a,d)}}function hTe({circular:e,comparator:t,createState:a,equals:i,strict:r}){if(a)return function(d,u){const{cache:h=e?new WeakMap:void 0,meta:m}=a();return t(d,u,{cache:h,equals:i,meta:m,strict:r})};if(e)return function(d,u){return t(d,u,{cache:new WeakMap,equals:i,meta:void 0,strict:r})};const o={cache:void 0,equals:i,meta:void 0,strict:r};return function(d,u){return t(d,u,o)}}const pTe=kc();kc({strict:!0});kc({circular:!0});kc({circular:!0,strict:!0});kc({createInternalComparator:()=>cu});kc({strict:!0,createInternalComparator:()=>cu});kc({circular:!0,createInternalComparator:()=>cu});kc({circular:!0,createInternalComparator:()=>cu,strict:!0});function kc(e={}){const{circular:t=!1,createInternalComparator:a,createState:i,strict:r=!1}=e,o=dTe(e),l=cTe(o),d=a?a(l):uTe(l);return hTe({circular:t,comparator:l,createState:i,equals:d,strict:r})}function mTe(e){typeof requestAnimationFrame<"u"&&requestAnimationFrame(e)}function _L(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,a=-1,i=function r(o){a<0&&(a=o),o-a>t?(e(o),a=-1):mTe(r)};requestAnimationFrame(i)}function L3(e){"@babel/helpers - typeof";return L3=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},L3(e)}function fTe(e){return vTe(e)||bTe(e)||yTe(e)||gTe()}function gTe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7783In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function yTe(e,t){if(e){if(typeof e=="string")return ML(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return ML(e,t)}}function ML(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function bTe(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function vTe(e){if(Array.isArray(e))return e}function xTe(){var e={},t=function(){return null},a=!1,i=function r(o){if(!a){if(Array.isArray(o)){if(!o.length)return;var l=o,d=fTe(l),u=d[0],h=d.slice(1);if(typeof u=="number"){_L(r.bind(null,h),u);return}r(u),_L(r.bind(null,h));return}L3(o)==="object"&&(e=o,t(e)),typeof o=="function"&&o()}};return{stop:function(){a=!0},start:function(o){a=!1,i(o)},subscribe:function(o){return t=o,function(){t=function(){return null}}}}}function Vg(e){"@babel/helpers - typeof";return Vg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Vg(e)}function EL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function RL(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};
vendor: 56,149 bytes, lines 7783-7801
7783t%2?EL(Object(a),!0).forEach(function(i){pK(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):EL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function pK(e,t,a){return t=wTe(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function wTe(e){var t=kTe(e,"string");return Vg(t)==="symbol"?t:String(t)}function kTe(e,t){if(Vg(e)!=="object"||e===null)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Vg(i)!=="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var jTe=function(t,a){return[Object.keys(t),Object.keys(a)].reduce(function(i,r){return i.filter(function(o){return r.includes(o)})})},STe=function(t){return t},CTe=function(t){return t.replace(/([A-Z])/g,function(a){return"-".concat(a.toLowerCase())})},lg=function(t,a){return Object.keys(a).reduce(function(i,r){return RL(RL({},i),{},pK({},r,t(r,a[r])))},{})},NL=function(t,a,i){return t.map(function(r){return"".concat(CTe(r)," ").concat(a,"ms ").concat(i)}).join(",")};function ATe(e,t){return MTe(e)||_Te(e,t)||mK(e,t)||TTe()}function TTe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7784In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function _Te(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i,r,o,l,d=[],u=!0,h=!1;try{if(o=(a=a.call(e)).next,t!==0)for(;!(u=(i=o.call(a)).done)&&(d.push(i.value),d.length!==t);u=!0);}catch(m){h=!0,r=m}finally{try{if(!u&&a.return!=null&&(l=a.return(),Object(l)!==l))return}finally{if(h)throw r}}return d}}function MTe(e){if(Array.isArray(e))return e}function ETe(e){return OTe(e)||NTe(e)||mK(e)||RTe()}function RTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
7785In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function mK(e,t){if(e){if(typeof e=="string")return U3(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return U3(e,t)}}function NTe(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function OTe(e){if(Array.isArray(e))return U3(e)}function U3(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}var Lx=1e-4,fK=function(t,a){return[0,3*t,3*a-6*t,3*t-3*a+1]},gK=function(t,a){return t.map(function(i,r){return i*Math.pow(a,r)}).reduce(function(i,r){return i+r})},OL=function(t,a){return function(i){var r=fK(t,a);return gK(r,i)}},PTe=function(t,a){return function(i){var r=fK(t,a),o=[].concat(ETe(r.map(function(l,d){return l*d}).slice(1)),[0]);return gK(o,i)}},PL=function(){for(var t=arguments.length,a=new Array(t),i=0;i<t;i++)a[i]=arguments[i];var r=a[0],o=a[1],l=a[2],d=a[3];if(a.length===1)switch(a[0]){case"linear":r=0,o=0,l=1,d=1;break;case"ease":r=.25,o=.1,l=.25,d=1;break;case"ease-in":r=.42,o=0,l=1,d=1;break;case"ease-out":r=.42,o=0,l=.58,d=1;break;case"ease-in-out":r=0,o=0,l=.58,d=1;break;default:{var u=a[0].split("(");if(u[0]==="cubic-bezier"&&u[1].split(")")[0].split(",").length===4){var h=u[1].split(")")[0].split(",").map(function(v){return parseFloat(v)}),m=ATe(h,4);r=m[0],o=m[1],l=m[2],d=m[3]}}}var f=OL(r,l),y=OL(o,d),b=PTe(r,l),x=function(j){return j>1?1:j<0?0:j},k=function(j){for(var T=j>1?1:j,A=T,C=0;C<8;++C){var _=f(A)-T,E=b(A);if(Math.abs(_-T)<Lx||E<Lx)return y(A);A=x(A-_/E)}return y(A)};return k.isStepper=!1,k},ITe=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},a=t.stiff,i=a===void 0?100:a,r=t.damping,o=r===void 0?8:r,l=t.dt,d=l===void 0?17:l,u=function(m,f,y){var b=-(m-f)*i,x=y*o,k=y+(b-x)*d/1e3,v=y*d/1e3+m;return Math.abs(v-f)<Lx&&Math.abs(k)<Lx?[f,0]:[v,k]};return u.isStepper=!0,u.dt=d,u},DTe=function(){for(var t=arguments.length,a=new Array(t),i=0;i<t;i++)a[i]=arguments[i];var r=a[0];if(typeof r=="string")switch(r){case"ease":case"ease-in-out":case"ease-out":case"ease-in":case"linear":return PL(r);case"spring":return ITe();default:if(r.split("(")[0]==="cubic-bezier")return PL(r)}return typeof r=="function"?r:null};function Kg(e){"@babel/helpers - typeof";return Kg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Kg(e)}function IL(e){return LTe(e)||zTe(e)||yK(e)||WTe()}function WTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
7786In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function zTe(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function LTe(e){if(Array.isArray(e))return q3(e)}function DL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function $n(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?DL(Object(a),!0).forEach(function(i){B3(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):DL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function B3(e,t,a){return t=UTe(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function UTe(e){var t=BTe(e,"string");return Kg(t)==="symbol"?t:String(t)}function BTe(e,t){if(Kg(e)!=="object"||e===null)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Kg(i)!=="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function qTe(e,t){return GTe(e)||FTe(e,t)||yK(e,t)||$Te()}function $Te(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7787In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function yK(e,t){if(e){if(typeof e=="string")return q3(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return q3(e,t)}}function q3(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function FTe(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i,r,o,l,d=[],u=!0,h=!1;try{if(o=(a=a.call(e)).next,t!==0)for(;!(u=(i=o.call(a)).done)&&(d.push(i.value),d.length!==t);u=!0);}catch(m){h=!0,r=m}finally{try{if(!u&&a.return!=null&&(l=a.return(),Object(l)!==l))return}finally{if(h)throw r}}return d}}function GTe(e){if(Array.isArray(e))return e}var Ux=function(t,a,i){return t+(a-t)*i},$3=function(t){var a=t.from,i=t.to;return a!==i},HTe=function e(t,a,i){var r=lg(function(o,l){if($3(l)){var d=t(l.from,l.to,l.velocity),u=qTe(d,2),h=u[0],m=u[1];return $n($n({},l),{},{from:h,velocity:m})}return l},a);return i<1?lg(function(o,l){return $3(l)?$n($n({},l),{},{velocity:Ux(l.velocity,r[o].velocity,i),from:Ux(l.from,r[o].from,i)}):l},a):e(t,r,i-1)};const YTe=(function(e,t,a,i,r){var o=jTe(e,t),l=o.reduce(function(v,j){return $n($n({},v),{},B3({},j,[e[j],t[j]]))},{}),d=o.reduce(function(v,j){return $n($n({},v),{},B3({},j,{from:e[j],velocity:0,to:t[j]}))},{}),u=-1,h,m,f=function(){return null},y=function(){return lg(function(j,T){return T.from},d)},b=function(){return!Object.values(d).filter($3).length},x=function(j){h||(h=j);var T=j-h,A=T/a.dt;d=HTe(a,d,A),r($n($n($n({},e),t),y())),h=j,b()||(u=requestAnimationFrame(f))},k=function(j){m||(m=j);var T=(j-m)/i,A=lg(function(_,E){return Ux.apply(void 0,IL(E).concat([a(T)]))},l);if(r($n($n($n({},e),t),A)),T<1)u=requestAnimationFrame(f);else{var C=lg(function(_,E){return Ux.apply(void 0,IL(E).concat([a(1)]))},l);r($n($n($n({},e),t),C))}};return f=a.isStepper?x:k,function(){return requestAnimationFrame(f),function(){cancelAnimationFrame(u)}}});function jp(e){"@babel/helpers - typeof";return jp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},jp(e)}var VTe=["children","begin","duration","attributeName","easing","isActive","steps","from","to","canBegin","onAnimationEnd","shouldReAnimate","onAnimationReStart"];function KTe(e,t){if(e==null)return{};var a=XTe(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function XTe(e,t){if(e==null)return{};var a={},i=Object.keys(e),r,o;for(o=0;o<i.length;o++)r=i[o],!(t.indexOf(r)>=0)&&(a[r]=e[r]);return a}function $A(e){return e4e(e)||JTe(e)||ZTe(e)||QTe()}function QTe(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
7788In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ZTe(e,t){if(e){if(typeof e=="string")return F3(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return F3(e,t)}}function JTe(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function e4e(e){if(Array.isArray(e))return F3(e)}function F3(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function WL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function fr(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?WL(Object(a),!0).forEach(function(i){Uf(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):WL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function Uf(e,t,a){return t=bK(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function t4e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n4e(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,bK(i.key),i)}}function a4e(e,t,a){return t&&n4e(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function bK(e){var t=i4e(e,"string");return jp(t)==="symbol"?t:String(t)}function i4e(e,t){if(jp(e)!=="object"||e===null)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(jp(i)!=="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function r4e(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&G3(e,t)}function G3(e,t){return G3=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},G3(e,t)}function o4e(e){var t=s4e();return function(){var i=Bx(e),r;if(t){var o=Bx(this).constructor;r=Reflect.construct(i,arguments,o)}else r=i.apply(this,arguments);return H3(this,r)}}function H3(e,t){if(t&&(jp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Y3(e)}function Y3(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function s4e(){if(typeof Reflect>"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function Bx(e){return Bx=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},Bx(e)}var Fr=(function(e){r4e(a,e);var t=o4e(a);function a(i,r){var o;t4e(this,a),o=t.call(this,i,r);var l=o.props,d=l.isActive,u=l.attributeName,h=l.from,m=l.to,f=l.steps,y=l.children,b=l.duration;if(o.handleStyleChange=o.handleStyleChange.bind(Y3(o)),o.changeStyle=o.changeStyle.bind(Y3(o)),!d||b<=0)return o.state={style:{}},typeof y=="function"&&(o.state={style:m}),H3(o);if(f&&f.length)o.state={style:f[0].style};else if(h){if(typeof y=="function")return o.state={style:h},H3(o);o.state={style:u?Uf({},u,h):h}}else o.state={style:{}};return o}return a4e(a,[{key:"componentDidMount",value:function(){var r=this.props,o=r.isActive,l=r.canBegin;this.mounted=!0,!(!o||!l)&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(r){var o=this.props,l=o.isActive,d=o.canBegin,u=o.attributeName,h=o.shouldReAnimate,m=o.to,f=o.from,y=this.state.style;if(d){if(!l){var b={style:u?Uf({},u,m):m};this.state&&y&&(u&&y[u]!==m||!u&&y!==m)&&this.setState(b);return}if(!(pTe(r.to,m)&&r.canBegin&&r.isActive)){var x=!r.canBegin||!r.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var k=x||h?f:r.to;if(this.state&&y){var v={style:u?Uf({},u,k):k};(u&&y[u]!==k||!u&&y!==k)&&this.setState(v)}this.runAnimation(fr(fr({},this.props),{},{from:k,begin:0}))}}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var r=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),r&&r()}},{key:"handleStyleChange",value:function(r){this.changeStyle(r)}},{key:"changeStyle",value:function(r){this.mounted&&this.setState({style:r})}},{key:"runJSAnimation",value:function(r){var o=this,l=r.from,d=r.to,u=r.duration,h=r.easing,m=r.begin,f=r.onAnimationEnd,y=r.onAnimationStart,b=YTe(l,d,DTe(h),u,this.changeStyle),x=function(){o.stopJSAnimation=b()};this.manager.start([y,m,x,u,f])}},{key:"runStepAnimation",value:function(r){var o=this,l=r.steps,d=r.begin,u=r.onAnimationStart,h=l[0],m=h.style,f=h.duration,y=f===void 0?0:f,b=function(k,v,j){if(j===0)return k;var T=v.duration,A=v.easing,C=A===void 0?"ease":A,_=v.style,E=v.properties,R=v.onAnimationEnd,W=j>0?l[j-1]:v,z=E||Object.keys(_);if(typeof C=="function"||C==="spring")return[].concat($A(k),[o.runJSAnimation.bind(o,{from:W.style,to:_,duration:T,easing:C}),T]);var H=NL(z,T,C),$=fr(fr(fr({},W.style),_),{},{transition:H});return[].concat($A(k),[$,T,R]).filter(STe)};return this.manager.start([u].concat($A(l.reduce(b,[m,Math.max(y,d)])),[r.onAnimationEnd]))}},{key:"runAnimation",value:function(r){this.manager||(this.manager=xTe());var o=r.begin,l=r.duration,d=r.attributeName,u=r.to,h=r.easing,m=r.onAnimationStart,f=r.onAnimationEnd,y=r.steps,b=r.children,x=this.manager;if(this.unSubscribe=x.subscribe(this.handleStyleChange),typeof h=="function"||typeof b=="function"||h==="spring"){this.runJSAnimation(r);return}if(y.length>1){this.runStepAnimation(r);return}var k=d?Uf({},d,u):u,v=NL(Object.keys(k),l,h);x.start([m,o,fr(fr({},k),{},{transition:v}),l,f])}},{key:"render",value:function(){var r=this.props,o=r.children;r.begin;var l=r.duration;r.attributeName,r.easing;var d=r.isActive;r.steps,r.from,r.to,r.canBegin,r.onAnimationEnd,r.shouldReAnimate,r.onAnimationReStart;var u=KTe(r,VTe),h=M.Children.count(o),m=this.state.style;if(typeof o=="function")return o(m);if(!d||h===0||l<=0)return o;var f=function(b){var x=b.props,k=x.style,v=k===void 0?{}:k,j=x.className,T=M.cloneElement(b,fr(fr({},u),{},{style:fr(fr({},v),m),className:j}));return T};return h===1?f(M.Children.only(o)):q.createElement("div",null,M.Children.map(o,function(y){return f(y)}))}}]),a})(M.PureComponent);Fr.displayName="Animate";Fr.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}};Fr.propTypes={from:ye.oneOfType([ye.object,ye.string]),to:ye.oneOfType([ye.object,ye.string]),attributeName:ye.string,duration:ye.number,begin:ye.number,easing:ye.oneOfType([ye.string,ye.func]),steps:ye.arrayOf(ye.shape({duration:ye.number.isRequired,style:ye.object.isRequired,easing:ye.oneOfType([ye.oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),ye.func]),properties:ye.arrayOf("string"),onAnimationEnd:ye.func})),children:ye.oneOfType([ye.node,ye.func]),isActive:ye.bool,canBegin:ye.bool,onAnimationEnd:ye.func,shouldReAnimate:ye.bool,onAnimationStart:ye.func,onAnimationReStart:ye.func};function Xg(e){"@babel/helpers - typeof";return Xg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Xg(e)}function qx(){return qx=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},qx.apply(this,arguments)}function l4e(e,t){return h4e(e)||u4e(e,t)||d4e(e,t)||c4e()}function c4e(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7789In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function d4e(e,t){if(e){if(typeof e=="string")return zL(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return zL(e,t)}}function zL(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function u4e(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i,r,o,l,d=[],u=!0,h=!1;try{if(o=(a=a.call(e)).next,t!==0)for(;!(u=(i=o.call(a)).done)&&(d.push(i.value),d.length!==t);u=!0);}catch(m){h=!0,r=m}finally{try{if(!u&&a.return!=null&&(l=a.return(),Object(l)!==l))return}finally{if(h)throw r}}return d}}function h4e(e){if(Array.isArray(e))return e}function LL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function UL(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?LL(Object(a),!0).forEach(function(i){p4e(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):LL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function p4e(e,t,a){return t=m4e(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function m4e(e){var t=f4e(e,"string");return Xg(t)=="symbol"?t:t+""}function f4e(e,t){if(Xg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Xg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var BL=function(t,a,i,r,o){var l=Math.min(Math.abs(i)/2,Math.abs(r)/2),d=r>=0?1:-1,u=i>=0?1:-1,h=r>=0&&i>=0||r<0&&i<0?1:0,m;if(l>0&&o instanceof Array){for(var f=[0,0,0,0],y=0,b=4;y<b;y++)f[y]=o[y]>l?l:o[y];m="M".concat(t,",").concat(a+d*f[0]),f[0]>0&&(m+="A ".concat(f[0],",").concat(f[0],",0,0,").concat(h,",").concat(t+u*f[0],",").concat(a)),m+="L ".concat(t+i-u*f[1],",").concat(a),f[1]>0&&(m+="A ".concat(f[1],",").concat(f[1],",0,0,").concat(h,`,
7790        `).concat(t+i,",").concat(a+d*f[1])),m+="L ".concat(t+i,",").concat(a+r-d*f[2]),f[2]>0&&(m+="A ".concat(f[2],",").concat(f[2],",0,0,").concat(h,`,
7791        `).concat(t+i-u*f[2],",").concat(a+r)),m+="L ".concat(t+u*f[3],",").concat(a+r),f[3]>0&&(m+="A ".concat(f[3],",").concat(f[3],",0,0,").concat(h,`,
7792        `).concat(t,",").concat(a+r-d*f[3])),m+="Z"}else if(l>0&&o===+o&&o>0){var x=Math.min(l,o);m="M ".concat(t,",").concat(a+d*x,`
7793            A `).concat(x,",").concat(x,",0,0,").concat(h,",").concat(t+u*x,",").concat(a,`
7794            L `).concat(t+i-u*x,",").concat(a,`
7795            A `).concat(x,",").concat(x,",0,0,").concat(h,",").concat(t+i,",").concat(a+d*x,`
7796            L `).concat(t+i,",").concat(a+r-d*x,`
7797            A `).concat(x,",").concat(x,",0,0,").concat(h,",").concat(t+i-u*x,",").concat(a+r,`
7798            L `).concat(t+u*x,",").concat(a+r,`
7799            A `).concat(x,",").concat(x,",0,0,").concat(h,",").concat(t,",").concat(a+r-d*x," Z")}else m="M ".concat(t,",").concat(a," h ").concat(i," v ").concat(r," h ").concat(-i," Z");return m},g4e=function(t,a){if(!t||!a)return!1;var i=t.x,r=t.y,o=a.x,l=a.y,d=a.width,u=a.height;if(Math.abs(d)>0&&Math.abs(u)>0){var h=Math.min(o,o+d),m=Math.max(o,o+d),f=Math.min(l,l+u),y=Math.max(l,l+u);return i>=h&&i<=m&&r>=f&&r<=y}return!1},y4e={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},B1=function(t){var a=UL(UL({},y4e),t),i=M.useRef(),r=M.useState(-1),o=l4e(r,2),l=o[0],d=o[1];M.useEffect(function(){if(i.current&&i.current.getTotalLength)try{var C=i.current.getTotalLength();C&&d(C)}catch{}},[]);var u=a.x,h=a.y,m=a.width,f=a.height,y=a.radius,b=a.className,x=a.animationEasing,k=a.animationDuration,v=a.animationBegin,j=a.isAnimationActive,T=a.isUpdateAnimationActive;if(u!==+u||h!==+h||m!==+m||f!==+f||m===0||f===0)return null;var A=ot("recharts-rectangle",b);return T?q.createElement(Fr,{canBegin:l>0,from:{width:m,height:f,x:u,y:h},to:{width:m,height:f,x:u,y:h},duration:k,animationEasing:x,isActive:T},function(C){var _=C.width,E=C.height,R=C.x,W=C.y;return q.createElement(Fr,{canBegin:l>0,from:"0px ".concat(l===-1?1:l,"px"),to:"".concat(l,"px 0px"),attributeName:"strokeDasharray",begin:v,duration:k,isActive:j,easing:x},q.createElement("path",qx({},Ze(a,!0),{className:A,d:BL(R,W,_,E,y),ref:i})))}):q.createElement("path",qx({},Ze(a,!0),{className:A,d:BL(u,h,m,f,y)}))},b4e=["points","className","baseLinePoints","connectNulls"];function yh(){return yh=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},yh.apply(this,arguments)}function v4e(e,t){if(e==null)return{};var a=x4e(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function x4e(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function qL(e){return S4e(e)||j4e(e)||k4e(e)||w4e()}function w4e(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
7800In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function k4e(e,t){if(e){if(typeof e=="string")return V3(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return V3(e,t)}}function j4e(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function S4e(e){if(Array.isArray(e))return V3(e)}function V3(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}var $L=function(t){return t&&t.x===+t.x&&t.y===+t.y},C4e=function(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],a=[[]];return t.forEach(function(i){$L(i)?a[a.length-1].push(i):a[a.length-1].length>0&&a.push([])}),$L(t[0])&&a[a.length-1].push(t[0]),a[a.length-1].length<=0&&(a=a.slice(0,-1)),a},cg=function(t,a){var i=C4e(t);a&&(i=[i.reduce(function(o,l){return[].concat(qL(o),qL(l))},[])]);var r=i.map(function(o){return o.reduce(function(l,d,u){return"".concat(l).concat(u===0?"M":"L").concat(d.x,",").concat(d.y)},"")}).join("");return i.length===1?"".concat(r,"Z"):r},A4e=function(t,a,i){var r=cg(t,i);return"".concat(r.slice(-1)==="Z"?r.slice(0,-1):r,"L").concat(cg(a.reverse(),i).slice(1))},T4e=function(t){var a=t.points,i=t.className,r=t.baseLinePoints,o=t.connectNulls,l=v4e(t,b4e);if(!a||!a.length)return null;var d=ot("recharts-polygon",i);if(r&&r.length){var u=l.stroke&&l.stroke!=="none",h=A4e(a,r,o);return q.createElement("g",{className:d},q.createElement("path",yh({},Ze(l,!0),{fill:h.slice(-1)==="Z"?l.fill:"none",stroke:"none",d:h})),u?q.createElement("path",yh({},Ze(l,!0),{fill:"none",d:cg(a,o)})):null,u?q.createElement("path",yh({},Ze(l,!0),{fill:"none",d:cg(r,o)})):null)}var m=cg(a,o);return q.createElement("path",yh({},Ze(l,!0),{fill:m.slice(-1)==="Z"?l.fill:"none",className:d,d:m}))};function K3(){return K3=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},K3.apply(this,arguments)}var uE=function(t){var a=t.cx,i=t.cy,r=t.r,o=t.className,l=ot("recharts-dot",o);return a===+a&&i===+i&&r===+r?M.createElement("circle",K3({},Ze(t,!1),sx(t),{className:l,cx:a,cy:i,r})):null};function Qg(e){"@babel/helpers - typeof";return Qg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Qg(e)}var _4e=["x","y","top","left","width","height","className"];function X3(){return X3=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},X3.apply(this,arguments)}function FL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function M4e(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?FL(Object(a),!0).forEach(function(i){E4e(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):FL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function E4e(e,t,a){return t=R4e(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function R4e(e){var t=N4e(e,"string");return Qg(t)=="symbol"?t:t+""}function N4e(e,t){if(Qg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Qg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function O4e(e,t){if(e==null)return{};var a=P4e(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function P4e(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}var I4e=function(t,a,i,r,o,l){return"M".concat(t,",").concat(o,"v").concat(r,"M").concat(l,",").concat(a,"h").concat(i)},D4e=function(t){var a=t.x,i=a===void 0?0:a,r=t.y,o=r===void 0?0:r,l=t.top,d=l===void 0?0:l,u=t.left,h=u===void 0?0:u,m=t.width,f=m===void 0?0:m,y=t.height,b=y===void 0?0:y,x=t.className,k=O4e(t,_4e),v=M4e({x:i,y:o,top:d,left:h,width:f,height:b},k);return!ke(i)||!ke(o)||!ke(f)||!ke(b)||!ke(d)||!ke(h)?null:q.createElement("path",X3({},Ze(v,!0),{className:ot("recharts-cross",x),d:I4e(i,o,f,b,d,h)}))},FA,GL;function hE(){if(GL)return FA;GL=1;var e=DY(),t=e(Object.getPrototypeOf,Object);return FA=t,FA}var GA,HL;function vK(){if(HL)return GA;HL=1;var e=Zs(),t=hE(),a=Vr(),i="[object Object]",r=Function.prototype,o=Object.prototype,l=r.toString,d=o.hasOwnProperty,u=l.call(Object);function h(m){if(!a(m)||e(m)!=i)return!1;var f=t(m);if(f===null)return!0;var y=d.call(f,"constructor")&&f.constructor;return typeof y=="function"&&y instanceof y&&l.call(y)==u}return GA=h,GA}var W4e=vK();const z4e=vt(W4e);var HA,YL;function L4e(){if(YL)return HA;YL=1;var e=Zs(),t=Vr(),a="[object Boolean]";function i(r){return r===!0||r===!1||t(r)&&e(r)==a}return HA=i,HA}var U4e=L4e();const B4e=vt(U4e);function Zg(e){"@babel/helpers - typeof";return Zg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zg(e)}function $x(){return $x=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},$x.apply(this,arguments)}function q4e(e,t){return H4e(e)||G4e(e,t)||F4e(e,t)||$4e()}function $4e(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7801In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function F4e(e,t){if(e){if(typeof e=="string")return VL(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return VL(e,t)}}function VL(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function G4e(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i,r,o,l,d=[],u=!0,h=!1;try{if(o=(a=a.call(e)).next,t!==0)for(;!(u=(i=o.call(a)).done)&&(d.push(i.value),d.length!==t);u=!0);}catch(m){h=!0,r=m}finally{try{if(!u&&a.return!=null&&(l=a.return(),Object(l)!==l))return}finally{if(h)throw r}}return d}}function H4e(e){if(Array.isArray(e))return e}function KL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function XL(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?KL(Object(a),!0).forEach(function(i){Y4e(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):KL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function Y4e(e,t,a){return t=V4e(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function V4e(e){var t=K4e(e,"string");return Zg(t)=="symbol"?t:t+""}function K4e(e,t){if(Zg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Zg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var QL=function(t,a,i,r,o){var l=i-r,d;return d="M ".concat(t,",").concat(a),d+="L ".concat(t+i,",").concat(a),d+="L ".concat(t+i-l/2,",").concat(a+o),d+="L ".concat(t+i-l/2-r,",").concat(a+o),d+="L ".concat(t,",").concat(a," Z"),d},X4e={x:0,y:0,upperWidth:0,lowerWidth:0,height:0,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},Q4e=function(t){var a=XL(XL({},X4e),t),i=M.useRef(),r=M.useState(-1),o=q4e(r,2),l=o[0],d=o[1];M.useEffect(function(){if(i.current&&i.current.getTotalLength)try{var A=i.current.getTotalLength();A&&d(A)}catch{}},[]);var u=a.x,h=a.y,m=a.upperWidth,f=a.lowerWidth,y=a.height,b=a.className,x=a.animationEasing,k=a.animationDuration,v=a.animationBegin,j=a.isUpdateAnimationActive;if(u!==+u||h!==+h||m!==+m||f!==+f||y!==+y||m===0&&f===0||y===0)return null;var T=ot("recharts-trapezoid",b);return j?q.createElement(Fr,{canBegin:l>0,from:{upperWidth:0,lowerWidth:0,height:y,x:u,y:h},to:{upperWidth:m,lowerWidth:f,height:y,x:u,y:h},duration:k,animationEasing:x,isActive:j},function(A){var C=A.upperWidth,_=A.lowerWidth,E=A.height,R=A.x,W=A.y;return q.createElement(Fr,{canBegin:l>0,from:"0px ".concat(l===-1?1:l,"px"),to:"".concat(l,"px 0px"),attributeName:"strokeDasharray",begin:v,duration:k,easing:x},q.createElement("path",$x({},Ze(a,!0),{className:T,d:QL(R,W,C,_,E),ref:i})))}):q.createElement("g",null,q.createElement("path",$x({},Ze(a,!0),{className:T,d:QL(u,h,m,f,y)})))},Z4e=["option","shapeType","propTransformer","activeClassName","isActive"];function Jg(e){"@babel/helpers - typeof";return Jg=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Jg(e)}function J4e(e,t){if(e==null)return{};var a=e3e(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function e3e(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function ZL(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function Fx(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?ZL(Object(a),!0).forEach(function(i){t3e(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):ZL(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function t3e(e,t,a){return t=n3e(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function n3e(e){var t=a3e(e,"string");return Jg(t)=="symbol"?t:t+""}function a3e(e,t){if(Jg(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Jg(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function i3e(e,t){return Fx(Fx({},t),e)}function r3e(e,t){return e==="symbols"}function JL(e){var t=e.shapeType,a=e.elementProps;switch(t){case"rectangle":return q.createElement(B1,a);case"trapezoid":return q.createElement(Q4e,a);case"sector":return q.createElement(uK,a);case"symbols":if(r3e(t))return q.createElement(j7,a);break;default:return null}}function o3e(e){return M.isValidElement(e)?e.props:e}function s3e(e){var t=e.option,a=e.shapeType,i=e.propTransformer,r=i===void 0?i3e:i,o=e.activeClassName,l=o===void 0?"recharts-active-shape":o,d=e.isActive,u=J4e(e,Z4e),h;if(M.isValidElement(t))h=M.cloneElement(t,Fx(Fx({},u),o3e(t)));else if(Ke(t))h=t(u);else if(z4e(t)&&!B4e(t)){var m=r(t,u);h=q.createElement(JL,{shapeType:a,elementProps:m})}else{var f=u;h=q.createElement(JL,{shapeType:a,elementProps:f})}return d?q.createElement(Ut,{className:l},h):h}function q1(e,t){return t!=null&&"trapezoids"in e.props}function $1(e,t){return t!=null&&"sectors"in e.props}function ey(e,t){return t!=null&&"points"in e.props}function l3e(e,t){var a,i,r=e.x===(t==null||(a=t.labelViewBox)===null||a===void 0?void 0:a.x)||e.x===t.x,o=e.y===(t==null||(i=t.labelViewBox)===null||i===void 0?void 0:i.y)||e.y===t.y;return r&&o}function c3e(e,t){var a=e.endAngle===t.endAngle,i=e.startAngle===t.startAngle;return a&&i}function d3e(e,t){var a=e.x===t.x,i=e.y===t.y,r=e.z===t.z;return a&&i&&r}function u3e(e,t){var a;return q1(e,t)?a=l3e:$1(e,t)?a=c3e:ey(e,t)&&(a=d3e),a}function h3e(e,t){var a;return q1(e,t)?a="trapezoids":$1(e,t)?a="sectors":ey(e,t)&&(a="points"),a}function p3e(e,t){if(q1(e,t)){var a;return(a=t.tooltipPayload)===null||a===void 0||(a=a[0])===null||a===void 0||(a=a.payload)===null||a===void 0?void 0:a.payload}if($1(e,t)){var i;return(i=t.tooltipPayload)===null||i===void 0||(i=i[0])===null||i===void 0||(i=i.payload)===null||i===void 0?void 0:i.payload}return ey(e,t)?t.payload:{}}function m3e(e){var t=e.activeTooltipItem,a=e.graphicalItem,i=e.itemData,r=h3e(a,t),o=p3e(a,t),l=i.filter(function(u,h){var m=Wg(o,u),f=a.props[r].filter(function(x){var k=u3e(a,t);return k(x,t)}),y=a.props[r].indexOf(f[f.length-1]),b=h===y;return m&&b}),d=i.indexOf(l[l.length-1]);return d}var YA,eU;function f3e(){if(eU)return YA;eU=1;var e=Math.ceil,t=Math.max;function a(i,r,o,l){for(var d=-1,u=t(e((r-i)/(o||1)),0),h=Array(u);u--;)h[l?u:++d]=i,i+=o;return h}return YA=a,YA}var VA,tU;function xK(){if(tU)return VA;tU=1;var e=eV(),t=1/0,a=17976931348623157e292;function i(r){if(!r)return r===0?r:0;if(r=e(r),r===t||r===-t){var o=r<0?-1:1;return o*a}return r===r?r:0}return VA=i,VA}var KA,nU;function g3e(){if(nU)return KA;nU=1;var e=f3e(),t=E1(),a=xK();function i(r){return function(o,l,d){return d&&typeof d!="number"&&t(o,l,d)&&(l=d=void 0),o=a(o),l===void 0?(l=o,o=0):l=a(l),d=d===void 0?o<l?1:-1:a(d),e(o,l,d,r)}}return KA=i,KA}var XA,aU;function y3e(){if(aU)return XA;aU=1;var e=g3e(),t=e();return XA=t,XA}var b3e=y3e();const Gx=vt(b3e);function ty(e){"@babel/helpers - typeof";return ty=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ty(e)}function iU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function rU(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?iU(Object(a),!0).forEach(function(i){wK(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):iU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function wK(e,t,a){return t=v3e(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function v3e(e){var t=x3e(e,"string");return ty(t)=="symbol"?t:t+""}function x3e(e,t){if(ty(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(ty(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var w3e=["Webkit","Moz","O","ms"],k3e=function(t,a){var i=t.replace(/(\w)/,function(o){return o.toUpperCase()}),r=w3e.reduce(function(o,l){return rU(rU({},o),{},wK({},l+i,a))},{});return r[t]=a,r};function Sp(e){"@babel/helpers - typeof";return Sp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Sp(e)}function Hx(){return Hx=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},Hx.apply(this,arguments)}function oU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function QA(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?oU(Object(a),!0).forEach(function(i){ri(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):oU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function j3e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function sU(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,jK(i.key),i)}}function S3e(e,t,a){return t&&sU(e.prototype,t),a&&sU(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e}function C3e(e,t,a){return t=Yx(t),A3e(e,kK()?Reflect.construct(t,a||[],Yx(e).constructor):t.apply(e,a))}function A3e(e,t){if(t&&(Sp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return T3e(e)}function T3e(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function kK(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(kK=function(){return!!e})()}function Yx(e){return Yx=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},Yx(e)}function _3e(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&Q3(e,t)}function Q3(e,t){return Q3=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},Q3(e,t)}function ri(e,t,a){return t=jK(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function jK(e){var t=M3e(e,"string");return Sp(t)=="symbol"?t:t+""}function M3e(e,t){if(Sp(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Sp(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var E3e=function(t){var a=t.data,i=t.startIndex,r=t.endIndex,o=t.x,l=t.width,d=t.travellerWidth;if(!a||!a.length)return{};var u=a.length,h=rg().domain(Gx(0,u)).range([o,o+l-d]),m=h.domain().map(function(f){return h(f)});return{isTextActive:!1,isSlideMoving:!1,isTravellerMoving:!1,isTravellerFocused:!1,startX:h(i),endX:h(r),scale:h,scaleValues:m}},lU=function(t){return t.changedTouches&&!!t.changedTouches.length},Cp=(function(e){function t(a){var i;return j3e(this,t),i=C3e(this,t,[a]),ri(i,"handleDrag",function(r){i.leaveTimer&&(clearTimeout(i.leaveTimer),i.leaveTimer=null),i.state.isTravellerMoving?i.handleTravellerMove(r):i.state.isSlideMoving&&i.handleSlideDrag(r)}),ri(i,"handleTouchMove",function(r){r.changedTouches!=null&&r.changedTouches.length>0&&i.handleDrag(r.changedTouches[0])}),ri(i,"handleDragEnd",function(){i.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var r=i.props,o=r.endIndex,l=r.onDragEnd,d=r.startIndex;l==null||l({endIndex:o,startIndex:d})}),i.detachDragEndListener()}),ri(i,"handleLeaveWrapper",function(){(i.state.isTravellerMoving||i.state.isSlideMoving)&&(i.leaveTimer=window.setTimeout(i.handleDragEnd,i.props.leaveTimeOut))}),ri(i,"handleEnterSlideOrTraveller",function(){i.setState({isTextActive:!0})}),ri(i,"handleLeaveSlideOrTraveller",function(){i.setState({isTextActive:!1})}),ri(i,"handleSlideDragStart",function(r){var o=lU(r)?r.changedTouches[0]:r;i.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:o.pageX}),i.attachDragEndListener()}),i.travellerDragStartHandlers={startX:i.handleTravellerDragStart.bind(i,"startX"),endX:i.handleTravellerDragStart.bind(i,"endX")},i.state={},i}return _3e(t,e),S3e(t,[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(i){var r=i.startX,o=i.endX,l=this.state.scaleValues,d=this.props,u=d.gap,h=d.data,m=h.length-1,f=Math.min(r,o),y=Math.max(r,o),b=t.getIndexInRange(l,f),x=t.getIndexInRange(l,y);return{startIndex:b-b%u,endIndex:x===m?m:x-x%u}}},{key:"getTextOfTick",value:function(i){var r=this.props,o=r.data,l=r.tickFormatter,d=r.dataKey,u=ja(o[i],d,i);return Ke(l)?l(u,i):u}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(i){var r=this.state,o=r.slideMoveStartX,l=r.startX,d=r.endX,u=this.props,h=u.x,m=u.width,f=u.travellerWidth,y=u.startIndex,b=u.endIndex,x=u.onChange,k=i.pageX-o;k>0?k=Math.min(k,h+m-f-d,h+m-f-l):k<0&&(k=Math.max(k,h-l,h-d));var v=this.getIndex({startX:l+k,endX:d+k});(v.startIndex!==y||v.endIndex!==b)&&x&&x(v),this.setState({startX:l+k,endX:d+k,slideMoveStartX:i.pageX})}},{key:"handleTravellerDragStart",value:function(i,r){var o=lU(r)?r.changedTouches[0]:r;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:i,brushMoveStartX:o.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(i){var r=this.state,o=r.brushMoveStartX,l=r.movingTravellerId,d=r.endX,u=r.startX,h=this.state[l],m=this.props,f=m.x,y=m.width,b=m.travellerWidth,x=m.onChange,k=m.gap,v=m.data,j={startX:this.state.startX,endX:this.state.endX},T=i.pageX-o;T>0?T=Math.min(T,f+y-b-h):T<0&&(T=Math.max(T,f-h)),j[l]=h+T;var A=this.getIndex(j),C=A.startIndex,_=A.endIndex,E=function(){var W=v.length-1;return l==="startX"&&(d>u?C%k===0:_%k===0)||d<u&&_===W||l==="endX"&&(d>u?_%k===0:C%k===0)||d>u&&_===W};this.setState(ri(ri({},l,h+T),"brushMoveStartX",i.pageX),function(){x&&E()&&x(A)})}},{key:"handleTravellerMoveKeyboard",value:function(i,r){var o=this,l=this.state,d=l.scaleValues,u=l.startX,h=l.endX,m=this.state[r],f=d.indexOf(m);if(f!==-1){var y=f+i;if(!(y===-1||y>=d.length)){var b=d[y];r==="startX"&&b>=h||r==="endX"&&b<=u||this.setState(ri({},r,b),function(){o.props.onChange(o.getIndex({startX:o.state.startX,endX:o.state.endX}))})}}}},{key:"renderBackground",value:function(){var i=this.props,r=i.x,o=i.y,l=i.width,d=i.height,u=i.fill,h=i.stroke;return q.createElement("rect",{stroke:h,fill:u,x:r,y:o,width:l,height:d})}},{key:"renderPanorama",value:function(){var i=this.props,r=i.x,o=i.y,l=i.width,d=i.height,u=i.data,h=i.children,m=i.padding,f=M.Children.only(h);return f?q.cloneElement(f,{x:r,y:o,width:l,height:d,margin:m,compact:!0,data:u}):null}},{key:"renderTravellerLayer",value:function(i,r){var o,l,d=this,u=this.props,h=u.y,m=u.travellerWidth,f=u.height,y=u.traveller,b=u.ariaLabel,x=u.data,k=u.startIndex,v=u.endIndex,j=Math.max(i,this.props.x),T=QA(QA({},Ze(this.props,!1)),{},{x:j,y:h,width:m,height:f}),A=b||"Min value: ".concat((o=x[k])===null||o===void 0?void 0:o.name,", Max value: ").concat((l=x[v])===null||l===void 0?void 0:l.name);return q.createElement(Ut,{tabIndex:0,role:"slider","aria-label":A,"aria-valuenow":i,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[r],onTouchStart:this.travellerDragStartHandlers[r],onKeyDown:function(_){["ArrowLeft","ArrowRight"].includes(_.key)&&(_.preventDefault(),_.stopPropagation(),d.handleTravellerMoveKeyboard(_.key==="ArrowRight"?1:-1,r))},onFocus:function(){d.setState({isTravellerFocused:!0})},onBlur:function(){d.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},t.renderTraveller(y,T))}},{key:"renderSlide",value:function(i,r){var o=this.props,l=o.y,d=o.height,u=o.stroke,h=o.travellerWidth,m=Math.min(i,r)+h,f=Math.max(Math.abs(r-i)-h,0);return q.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:u,fillOpacity:.2,x:m,y:l,width:f,height:d})}},{key:"renderText",value:function(){var i=this.props,r=i.startIndex,o=i.endIndex,l=i.y,d=i.height,u=i.travellerWidth,h=i.stroke,m=this.state,f=m.startX,y=m.endX,b=5,x={pointerEvents:"none",fill:h};return q.createElement(Ut,{className:"recharts-brush-texts"},q.createElement(xx,Hx({textAnchor:"end",verticalAnchor:"middle",x:Math.min(f,y)-b,y:l+d/2},x),this.getTextOfTick(r)),q.createElement(xx,Hx({textAnchor:"start",verticalAnchor:"middle",x:Math.max(f,y)+u+b,y:l+d/2},x),this.getTextOfTick(o)))}},{key:"render",value:function(){var i=this.props,r=i.data,o=i.className,l=i.children,d=i.x,u=i.y,h=i.width,m=i.height,f=i.alwaysShowText,y=this.state,b=y.startX,x=y.endX,k=y.isTextActive,v=y.isSlideMoving,j=y.isTravellerMoving,T=y.isTravellerFocused;if(!r||!r.length||!ke(d)||!ke(u)||!ke(h)||!ke(m)||h<=0||m<=0)return null;var A=ot("recharts-brush",o),C=q.Children.count(l)===1,_=k3e("userSelect","none");return q.createElement(Ut,{className:A,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:_},this.renderBackground(),C&&this.renderPanorama(),this.renderSlide(b,x),this.renderTravellerLayer(b,"startX"),this.renderTravellerLayer(x,"endX"),(k||v||j||T||f)&&this.renderText())}}],[{key:"renderDefaultTraveller",value:function(i){var r=i.x,o=i.y,l=i.width,d=i.height,u=i.stroke,h=Math.floor(o+d/2)-1;return q.createElement(q.Fragment,null,q.createElement("rect",{x:r,y:o,width:l,height:d,fill:u,stroke:"none"}),q.createElement("line",{x1:r+1,y1:h,x2:r+l-1,y2:h,fill:"none",stroke:"#fff"}),q.createElement("line",{x1:r+1,y1:h+2,x2:r+l-1,y2:h+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(i,r){var o;return q.isValidElement(i)?o=q.cloneElement(i,r):Ke(i)?o=i(r):o=t.renderDefaultTraveller(r),o}},{key:"getDerivedStateFromProps",value:function(i,r){var o=i.data,l=i.width,d=i.x,u=i.travellerWidth,h=i.updateId,m=i.startIndex,f=i.endIndex;if(o!==r.prevData||h!==r.prevUpdateId)return QA({prevData:o,prevTravellerWidth:u,prevUpdateId:h,prevX:d,prevWidth:l},o&&o.length?E3e({data:o,width:l,x:d,travellerWidth:u,startIndex:m,endIndex:f}):{scale:null,scaleValues:null});if(r.scale&&(l!==r.prevWidth||d!==r.prevX||u!==r.prevTravellerWidth)){r.scale.range([d,d+l-u]);var y=r.scale.domain().map(function(b){return r.scale(b)});return{prevData:o,prevTravellerWidth:u,prevUpdateId:h,prevX:d,prevWidth:l,startX:r.scale(i.startIndex),endX:r.scale(i.endIndex),scaleValues:y}}return null}},{key:"getIndexInRange",value:function(i,r){for(var o=i.length,l=0,d=o-1;d-l>1;){var u=Math.floor((l+d)/2);i[u]>r?d=u:l=u}return r>=i[d]?d:l}}])})(M.PureComponent);ri(Cp,"displayName","Brush");ri(Cp,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var ZA,cU;function R3e(){if(cU)return ZA;cU=1;var e=W7();function t(a,i){var r;return e(a,function(o,l,d){return r=i(o,l,d),!r}),!!r}return ZA=t,ZA}var JA,dU;function N3e(){if(dU)return JA;dU=1;var e=_Y(),t=vc(),a=R3e(),i=_a(),r=E1();function o(l,d,u){var h=i(l)?e:a;return u&&r(l,d,u)&&(d=void 0),h(l,t(d,3))}return JA=o,JA}var O3e=N3e();const P3e=vt(O3e);var Ro=function(t,a){var i=t.alwaysShow,r=t.ifOverflow;return i&&(r="extendDomain"),r===a},eT,uU;function pE(){if(uU)return eT;uU=1;var e=VY();function t(a,i,r){i=="__proto__"&&e?e(a,i,{configurable:!0,enumerable:!0,value:r,writable:!0}):a[i]=r}return eT=t,eT}var tT,hU;function I3e(){if(hU)return tT;hU=1;var e=pE(),t=GY(),a=vc();function i(r,o){var l={};return o=a(o,3),t(r,function(d,u,h){e(l,u,o(d,u,h))}),l}return tT=i,tT}var D3e=I3e();const W3e=vt(D3e);var nT,pU;function z3e(){if(pU)return nT;pU=1;function e(t,a){for(var i=-1,r=t==null?0:t.length;++i<r;)if(!a(t[i],i,t))return!1;return!0}return nT=e,nT}var aT,mU;function L3e(){if(mU)return aT;mU=1;var e=W7();function t(a,i){var r=!0;return e(a,function(o,l,d){return r=!!i(o,l,d),r}),r}return aT=t,aT}var iT,fU;function U3e(){if(fU)return iT;fU=1;var e=z3e(),t=L3e(),a=vc(),i=_a(),r=E1();function o(l,d,u){var h=i(l)?e:t;return u&&r(l,d,u)&&(d=void 0),h(l,a(d,3))}return iT=o,iT}var B3e=U3e();const SK=vt(B3e);var q3e=["x","y"];function ny(e){"@babel/helpers - typeof";return ny=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ny(e)}function Z3(){return Z3=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},Z3.apply(this,arguments)}function gU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function Mf(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?gU(Object(a),!0).forEach(function(i){$3e(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):gU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function $3e(e,t,a){return t=F3e(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function F3e(e){var t=G3e(e,"string");return ny(t)=="symbol"?t:t+""}function G3e(e,t){if(ny(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(ny(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function H3e(e,t){if(e==null)return{};var a=Y3e(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function Y3e(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function V3e(e,t){var a=e.x,i=e.y,r=H3e(e,q3e),o="".concat(a),l=parseInt(o,10),d="".concat(i),u=parseInt(d,10),h="".concat(t.height||r.height),m=parseInt(h,10),f="".concat(t.width||r.width),y=parseInt(f,10);return Mf(Mf(Mf(Mf(Mf({},t),r),l?{x:l}:{}),u?{y:u}:{}),{},{height:m,width:y,name:t.name,radius:t.radius})}function yU(e){return q.createElement(s3e,Z3({shapeType:"rectangle",propTransformer:V3e,activeClassName:"recharts-active-bar"},e))}var K3e=function(t){var a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return function(i,r){if(typeof t=="number")return t;var o=ke(i)||sxe(i);return o?t(i,r):(o||Qd(),a)}},X3e=["value","background"],CK;function Ap(e){"@babel/helpers - typeof";return Ap=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ap(e)}function Q3e(e,t){if(e==null)return{};var a=Z3e(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function Z3e(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function Vx(){return Vx=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},Vx.apply(this,arguments)}function bU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function yn(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};
7801t%2?bU(Object(a),!0).forEach(function(i){Vl(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):bU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function J3e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function vU(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,TK(i.key),i)}}function e_e(e,t,a){return t&&vU(e.prototype,t),a&&vU(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e}function t_e(e,t,a){return t=Kx(t),n_e(e,AK()?Reflect.construct(t,a||[],Kx(e).constructor):t.apply(e,a))}function n_e(e,t){if(t&&(Ap(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return a_e(e)}function a_e(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function AK(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(AK=function(){return!!e})()}
vendor: 107,532 bytes, lines 7801-7805
7801function Kx(e){return Kx=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},Kx(e)}function i_e(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&J3(e,t)}function J3(e,t){return J3=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},J3(e,t)}function Vl(e,t,a){return t=TK(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function TK(e){var t=r_e(e,"string");return Ap(t)=="symbol"?t:t+""}function r_e(e,t){if(Ap(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Ap(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var fc=(function(e){function t(){var a;J3e(this,t);for(var i=arguments.length,r=new Array(i),o=0;o<i;o++)r[o]=arguments[o];return a=t_e(this,t,[].concat(r)),Vl(a,"state",{isAnimationFinished:!1}),Vl(a,"id",am("recharts-bar-")),Vl(a,"handleAnimationEnd",function(){var l=a.props.onAnimationEnd;a.setState({isAnimationFinished:!0}),l&&l()}),Vl(a,"handleAnimationStart",function(){var l=a.props.onAnimationStart;a.setState({isAnimationFinished:!1}),l&&l()}),a}return i_e(t,e),e_e(t,[{key:"renderRectanglesStatically",value:function(i){var r=this,o=this.props,l=o.shape,d=o.dataKey,u=o.activeIndex,h=o.activeBar,m=Ze(this.props,!1);return i&&i.map(function(f,y){var b=y===u,x=b?h:l,k=yn(yn(yn({},m),f),{},{isActive:b,option:x,index:y,dataKey:d,onAnimationStart:r.handleAnimationStart,onAnimationEnd:r.handleAnimationEnd});return q.createElement(Ut,Vx({className:"recharts-bar-rectangle"},lx(r.props,f,y),{key:"rectangle-".concat(f==null?void 0:f.x,"-").concat(f==null?void 0:f.y,"-").concat(f==null?void 0:f.value,"-").concat(y)}),q.createElement(yU,k))})}},{key:"renderRectanglesWithAnimation",value:function(){var i=this,r=this.props,o=r.data,l=r.layout,d=r.isAnimationActive,u=r.animationBegin,h=r.animationDuration,m=r.animationEasing,f=r.animationId,y=this.state.prevData;return q.createElement(Fr,{begin:u,duration:h,isActive:d,easing:m,from:{t:0},to:{t:1},key:"bar-".concat(f),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(b){var x=b.t,k=o.map(function(v,j){var T=y&&y[j];if(T){var A=$i(T.x,v.x),C=$i(T.y,v.y),_=$i(T.width,v.width),E=$i(T.height,v.height);return yn(yn({},v),{},{x:A(x),y:C(x),width:_(x),height:E(x)})}if(l==="horizontal"){var R=$i(0,v.height),W=R(x);return yn(yn({},v),{},{y:v.y+v.height-W,height:W})}var z=$i(0,v.width),H=z(x);return yn(yn({},v),{},{width:H})});return q.createElement(Ut,null,i.renderRectanglesStatically(k))})}},{key:"renderRectangles",value:function(){var i=this.props,r=i.data,o=i.isAnimationActive,l=this.state.prevData;return o&&r&&r.length&&(!l||!Wg(l,r))?this.renderRectanglesWithAnimation():this.renderRectanglesStatically(r)}},{key:"renderBackground",value:function(){var i=this,r=this.props,o=r.data,l=r.dataKey,d=r.activeIndex,u=Ze(this.props.background,!1);return o.map(function(h,m){h.value;var f=h.background,y=Q3e(h,X3e);if(!f)return null;var b=yn(yn(yn(yn(yn({},y),{},{fill:"#eee"},f),u),lx(i.props,h,m)),{},{onAnimationStart:i.handleAnimationStart,onAnimationEnd:i.handleAnimationEnd,dataKey:l,index:m,className:"recharts-bar-background-rectangle"});return q.createElement(yU,Vx({key:"background-bar-".concat(m),option:i.props.background,isActive:m===d},b))})}},{key:"renderErrorBar",value:function(i,r){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var o=this.props,l=o.data,d=o.xAxis,u=o.yAxis,h=o.layout,m=o.children,f=Lr(m,U1);if(!f)return null;var y=h==="vertical"?l[0].height/2:l[0].width/2,b=function(v,j){var T=Array.isArray(v.value)?v.value[1]:v.value;return{x:v.x,y:v.y,value:T,errorVal:ja(v,j)}},x={clipPath:i?"url(#clipPath-".concat(r,")"):null};return q.createElement(Ut,x,f.map(function(k){return q.cloneElement(k,{key:"error-bar-".concat(r,"-").concat(k.props.dataKey),data:l,xAxis:d,yAxis:u,layout:h,offset:y,dataPointFormatter:b})}))}},{key:"render",value:function(){var i=this.props,r=i.hide,o=i.data,l=i.className,d=i.xAxis,u=i.yAxis,h=i.left,m=i.top,f=i.width,y=i.height,b=i.isAnimationActive,x=i.background,k=i.id;if(r||!o||!o.length)return null;var v=this.state.isAnimationFinished,j=ot("recharts-bar",l),T=d&&d.allowDataOverflow,A=u&&u.allowDataOverflow,C=T||A,_=dt(k)?this.id:k;return q.createElement(Ut,{className:j},T||A?q.createElement("defs",null,q.createElement("clipPath",{id:"clipPath-".concat(_)},q.createElement("rect",{x:T?h:h-f/2,y:A?m:m-y/2,width:T?f:f*2,height:A?y:y*2}))):null,q.createElement(Ut,{className:"recharts-bar-rectangles",clipPath:C?"url(#clipPath-".concat(_,")"):null},x?this.renderBackground():null,this.renderRectangles()),this.renderErrorBar(C,_),(!b||v)&&ac.renderCallByParent(this.props,o))}}],[{key:"getDerivedStateFromProps",value:function(i,r){return i.animationId!==r.prevAnimationId?{prevAnimationId:i.animationId,curData:i.data,prevData:r.curData}:i.data!==r.curData?{curData:i.data}:null}}])})(M.PureComponent);CK=fc;Vl(fc,"displayName","Bar");Vl(fc,"defaultProps",{xAxisId:0,yAxisId:0,legendType:"rect",minPointSize:0,hide:!1,data:[],layout:"vertical",activeBar:!1,isAnimationActive:!mc.isSsr,animationBegin:0,animationDuration:400,animationEasing:"ease"});Vl(fc,"getComposedData",function(e){var t=e.props,a=e.item,i=e.barPosition,r=e.bandSize,o=e.xAxis,l=e.yAxis,d=e.xAxisTicks,u=e.yAxisTicks,h=e.stackedData,m=e.dataStartIndex,f=e.displayedData,y=e.offset,b=mCe(i,a);if(!b)return null;var x=t.layout,k=a.type.defaultProps,v=k!==void 0?yn(yn({},k),a.props):a.props,j=v.dataKey,T=v.children,A=v.minPointSize,C=x==="horizontal"?l:o,_=h?C.scale.domain():null,E=kCe({numericAxis:C}),R=Lr(T,nV),W=f.map(function(z,H){var $,U,X,D,P,O;h?$=fCe(h[m+H],_):($=ja(z,j),Array.isArray($)||($=[E,$]));var B=K3e(A,CK.defaultProps.minPointSize)($[1],H);if(x==="horizontal"){var Y,V=[l.scale($[0]),l.scale($[1])],G=V[0],I=V[1];U=aL({axis:o,ticks:d,bandSize:r,offset:b.offset,entry:z,index:H}),X=(Y=I??G)!==null&&Y!==void 0?Y:void 0,D=b.size;var F=G-I;if(P=Number.isNaN(F)?0:F,O={x:U,y:l.y,width:D,height:l.height},Math.abs(B)>0&&Math.abs(P)<Math.abs(B)){var K=Mr(P||B)*(Math.abs(B)-Math.abs(P));X-=K,P+=K}}else{var ne=[o.scale($[0]),o.scale($[1])],ae=ne[0],ge=ne[1];if(U=ae,X=aL({axis:l,ticks:u,bandSize:r,offset:b.offset,entry:z,index:H}),D=ge-ae,P=b.size,O={x:o.x,y:X,width:o.width,height:P},Math.abs(B)>0&&Math.abs(D)<Math.abs(B)){var be=Mr(D||B)*(Math.abs(B)-Math.abs(D));D+=be}}return yn(yn(yn({},z),{},{x:U,y:X,width:D,height:P,value:h?$:$[1],payload:z,background:O},R&&R[H]&&R[H].props),{},{tooltipPayload:[sK(a,z)],tooltipPosition:{x:U+D/2,y:X+P/2}})});return yn({data:W,layout:x},y)});function ay(e){"@babel/helpers - typeof";return ay=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ay(e)}function o_e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function xU(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,_K(i.key),i)}}function s_e(e,t,a){return t&&xU(e.prototype,t),a&&xU(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e}function wU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function br(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?wU(Object(a),!0).forEach(function(i){F1(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):wU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function F1(e,t,a){return t=_K(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function _K(e){var t=l_e(e,"string");return ay(t)=="symbol"?t:t+""}function l_e(e,t){if(ay(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(ay(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var MK=function(t,a,i,r,o){var l=t.width,d=t.height,u=t.layout,h=t.children,m=Object.keys(a),f={left:i.left,leftMirror:i.left,right:l-i.right,rightMirror:l-i.right,top:i.top,topMirror:i.top,bottom:d-i.bottom,bottomMirror:d-i.bottom},y=!!ea(h,fc);return m.reduce(function(b,x){var k=a[x],v=k.orientation,j=k.domain,T=k.padding,A=T===void 0?{}:T,C=k.mirror,_=k.reversed,E="".concat(v).concat(C?"Mirror":""),R,W,z,H,$;if(k.type==="number"&&(k.padding==="gap"||k.padding==="no-gap")){var U=j[1]-j[0],X=1/0,D=k.categoricalDomain.sort(dxe);if(D.forEach(function(ne,ae){ae>0&&(X=Math.min((ne||0)-(D[ae-1]||0),X))}),Number.isFinite(X)){var P=X/U,O=k.layout==="vertical"?i.height:i.width;if(k.padding==="gap"&&(R=P*O/2),k.padding==="no-gap"){var B=Vd(t.barCategoryGap,P*O),Y=P*O/2;R=Y-B-(Y-B)/O*B}}}r==="xAxis"?W=[i.left+(A.left||0)+(R||0),i.left+i.width-(A.right||0)-(R||0)]:r==="yAxis"?W=u==="horizontal"?[i.top+i.height-(A.bottom||0),i.top+(A.top||0)]:[i.top+(A.top||0)+(R||0),i.top+i.height-(A.bottom||0)-(R||0)]:W=k.range,_&&(W=[W[1],W[0]]);var V=hCe(k,o,y),G=V.scale,I=V.realScaleType;G.domain(j).range(W),pCe(G);var F=wCe(G,br(br({},k),{},{realScaleType:I}));r==="xAxis"?($=v==="top"&&!C||v==="bottom"&&C,z=i.left,H=f[E]-$*k.height):r==="yAxis"&&($=v==="left"&&!C||v==="right"&&C,z=f[E]-$*k.width,H=i.top);var K=br(br(br({},k),F),{},{realScaleType:I,x:z,y:H,scale:G,width:r==="xAxis"?i.width:k.width,height:r==="yAxis"?i.height:k.height});return K.bandSize=Ix(K,F),!k.hide&&r==="xAxis"?f[E]+=($?-1:1)*K.height:k.hide||(f[E]+=($?-1:1)*K.width),br(br({},b),{},F1({},x,K))},{})},EK=function(t,a){var i=t.x,r=t.y,o=a.x,l=a.y;return{x:Math.min(i,o),y:Math.min(r,l),width:Math.abs(o-i),height:Math.abs(l-r)}},c_e=function(t){var a=t.x1,i=t.y1,r=t.x2,o=t.y2;return EK({x:a,y:i},{x:r,y:o})},RK=(function(){function e(t){o_e(this,e),this.scale=t}return s_e(e,[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(a){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},r=i.bandAware,o=i.position;if(a!==void 0){if(o)switch(o){case"start":return this.scale(a);case"middle":{var l=this.bandwidth?this.bandwidth()/2:0;return this.scale(a)+l}case"end":{var d=this.bandwidth?this.bandwidth():0;return this.scale(a)+d}default:return this.scale(a)}if(r){var u=this.bandwidth?this.bandwidth()/2:0;return this.scale(a)+u}return this.scale(a)}}},{key:"isInRange",value:function(a){var i=this.range(),r=i[0],o=i[i.length-1];return r<=o?a>=r&&a<=o:a>=o&&a<=r}}],[{key:"create",value:function(a){return new e(a)}}])})();F1(RK,"EPS",1e-4);var mE=function(t){var a=Object.keys(t).reduce(function(i,r){return br(br({},i),{},F1({},r,RK.create(t[r])))},{});return br(br({},a),{},{apply:function(r){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},l=o.bandAware,d=o.position;return W3e(r,function(u,h){return a[h].apply(u,{bandAware:l,position:d})})},isInRange:function(r){return SK(r,function(o,l){return a[l].isInRange(o)})}})};function d_e(e){return(e%180+180)%180}var u_e=function(t){var a=t.width,i=t.height,r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=d_e(r),l=o*Math.PI/180,d=Math.atan(i/a),u=l>d&&l<Math.PI-d?i/Math.sin(l):a/Math.cos(l);return Math.abs(u)},rT,kU;function h_e(){if(kU)return rT;kU=1;var e=vc(),t=im(),a=rm();function i(r){return function(o,l,d){var u=Object(o);if(!t(o)){var h=e(l,3);o=a(o),l=function(f){return h(u[f],f,u)}}var m=r(o,l,d);return m>-1?u[h?o[m]:m]:void 0}}return rT=i,rT}var oT,jU;function p_e(){if(jU)return oT;jU=1;var e=xK();function t(a){var i=e(a),r=i%1;return i===i?r?i-r:i:0}return oT=t,oT}var sT,SU;function m_e(){if(SU)return sT;SU=1;var e=BY(),t=vc(),a=p_e(),i=Math.max;function r(o,l,d){var u=o==null?0:o.length;if(!u)return-1;var h=d==null?0:a(d);return h<0&&(h=i(u+h,0)),e(o,t(l,3),h)}return sT=r,sT}var lT,CU;function f_e(){if(CU)return lT;CU=1;var e=h_e(),t=m_e(),a=e(t);return lT=a,lT}var g_e=f_e();const y_e=vt(g_e);var b_e=tY();const v_e=vt(b_e);var x_e=v_e(function(e){return{x:e.left,y:e.top,width:e.width,height:e.height}},function(e){return["l",e.left,"t",e.top,"w",e.width,"h",e.height].join("")}),fE=M.createContext(void 0),gE=M.createContext(void 0),NK=M.createContext(void 0),OK=M.createContext({}),PK=M.createContext(void 0),IK=M.createContext(0),DK=M.createContext(0),AU=function(t){var a=t.state,i=a.xAxisMap,r=a.yAxisMap,o=a.offset,l=t.clipPathId,d=t.children,u=t.width,h=t.height,m=x_e(o);return q.createElement(fE.Provider,{value:i},q.createElement(gE.Provider,{value:r},q.createElement(OK.Provider,{value:o},q.createElement(NK.Provider,{value:m},q.createElement(PK.Provider,{value:l},q.createElement(IK.Provider,{value:h},q.createElement(DK.Provider,{value:u},d)))))))},w_e=function(){return M.useContext(PK)},WK=function(t){var a=M.useContext(fE);a==null&&Qd();var i=a[t];return i==null&&Qd(),i},k_e=function(){var t=M.useContext(fE);return Wl(t)},j_e=function(){var t=M.useContext(gE),a=y_e(t,function(i){return SK(i.domain,Number.isFinite)});return a||Wl(t)},zK=function(t){var a=M.useContext(gE);a==null&&Qd();var i=a[t];return i==null&&Qd(),i},S_e=function(){var t=M.useContext(NK);return t},C_e=function(){return M.useContext(OK)},yE=function(){return M.useContext(DK)},bE=function(){return M.useContext(IK)};function Tp(e){"@babel/helpers - typeof";return Tp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Tp(e)}function A_e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function T_e(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,UK(i.key),i)}}function __e(e,t,a){return t&&T_e(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function M_e(e,t,a){return t=Xx(t),E_e(e,LK()?Reflect.construct(t,a||[],Xx(e).constructor):t.apply(e,a))}function E_e(e,t){if(t&&(Tp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return R_e(e)}function R_e(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function LK(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(LK=function(){return!!e})()}function Xx(e){return Xx=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},Xx(e)}function N_e(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&e_(e,t)}function e_(e,t){return e_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},e_(e,t)}function TU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function _U(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?TU(Object(a),!0).forEach(function(i){vE(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):TU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function vE(e,t,a){return t=UK(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function UK(e){var t=O_e(e,"string");return Tp(t)=="symbol"?t:t+""}function O_e(e,t){if(Tp(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Tp(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function P_e(e,t){return z_e(e)||W_e(e,t)||D_e(e,t)||I_e()}function I_e(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7802In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function D_e(e,t){if(e){if(typeof e=="string")return MU(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return MU(e,t)}}function MU(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function W_e(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i,r,o,l,d=[],u=!0,h=!1;try{if(o=(a=a.call(e)).next,t!==0)for(;!(u=(i=o.call(a)).done)&&(d.push(i.value),d.length!==t);u=!0);}catch(m){h=!0,r=m}finally{try{if(!u&&a.return!=null&&(l=a.return(),Object(l)!==l))return}finally{if(h)throw r}}return d}}function z_e(e){if(Array.isArray(e))return e}function t_(){return t_=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},t_.apply(this,arguments)}var L_e=function(t,a){var i;return q.isValidElement(t)?i=q.cloneElement(t,a):Ke(t)?i=t(a):i=q.createElement("line",t_({},a,{className:"recharts-reference-line-line"})),i},U_e=function(t,a,i,r,o,l,d,u,h){var m=o.x,f=o.y,y=o.width,b=o.height;if(i){var x=h.y,k=t.y.apply(x,{position:l});if(Ro(h,"discard")&&!t.y.isInRange(k))return null;var v=[{x:m+y,y:k},{x:m,y:k}];return u==="left"?v.reverse():v}if(a){var j=h.x,T=t.x.apply(j,{position:l});if(Ro(h,"discard")&&!t.x.isInRange(T))return null;var A=[{x:T,y:f+b},{x:T,y:f}];return d==="top"?A.reverse():A}if(r){var C=h.segment,_=C.map(function(E){return t.apply(E,{position:l})});return Ro(h,"discard")&&P3e(_,function(E){return!t.isInRange(E)})?null:_}return null};function B_e(e){var t=e.x,a=e.y,i=e.segment,r=e.xAxisId,o=e.yAxisId,l=e.shape,d=e.className,u=e.alwaysShow,h=w_e(),m=WK(r),f=zK(o),y=S_e();if(!h||!y)return null;Rs(u===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.');var b=mE({x:m.scale,y:f.scale}),x=Sn(t),k=Sn(a),v=i&&i.length===2,j=U_e(b,x,k,v,y,e.position,m.orientation,f.orientation,e);if(!j)return null;var T=P_e(j,2),A=T[0],C=A.x,_=A.y,E=T[1],R=E.x,W=E.y,z=Ro(e,"hidden")?"url(#".concat(h,")"):void 0,H=_U(_U({clipPath:z},Ze(e,!0)),{},{x1:C,y1:_,x2:R,y2:W});return q.createElement(Ut,{className:ot("recharts-reference-line",d)},L_e(l,H),ta.renderCallByParent(e,c_e({x1:C,y1:_,x2:R,y2:W})))}var xE=(function(e){function t(){return A_e(this,t),M_e(this,t,arguments)}return N_e(t,e),__e(t,[{key:"render",value:function(){return q.createElement(B_e,this.props)}}])})(q.Component);vE(xE,"displayName","ReferenceLine");vE(xE,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,fill:"none",stroke:"#ccc",fillOpacity:1,strokeWidth:1,position:"middle"});function n_(){return n_=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},n_.apply(this,arguments)}function _p(e){"@babel/helpers - typeof";return _p=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},_p(e)}function EU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function RU(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?EU(Object(a),!0).forEach(function(i){G1(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):EU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function q_e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function $_e(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,qK(i.key),i)}}function F_e(e,t,a){return t&&$_e(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function G_e(e,t,a){return t=Qx(t),H_e(e,BK()?Reflect.construct(t,a||[],Qx(e).constructor):t.apply(e,a))}function H_e(e,t){if(t&&(_p(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return Y_e(e)}function Y_e(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function BK(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(BK=function(){return!!e})()}function Qx(e){return Qx=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},Qx(e)}function V_e(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&a_(e,t)}function a_(e,t){return a_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},a_(e,t)}function G1(e,t,a){return t=qK(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function qK(e){var t=K_e(e,"string");return _p(t)=="symbol"?t:t+""}function K_e(e,t){if(_p(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(_p(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var X_e=function(t){var a=t.x,i=t.y,r=t.xAxis,o=t.yAxis,l=mE({x:r.scale,y:o.scale}),d=l.apply({x:a,y:i},{bandAware:!0});return Ro(t,"discard")&&!l.isInRange(d)?null:d},H1=(function(e){function t(){return q_e(this,t),G_e(this,t,arguments)}return V_e(t,e),F_e(t,[{key:"render",value:function(){var i=this.props,r=i.x,o=i.y,l=i.r,d=i.alwaysShow,u=i.clipPathId,h=Sn(r),m=Sn(o);if(Rs(d===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.'),!h||!m)return null;var f=X_e(this.props);if(!f)return null;var y=f.x,b=f.y,x=this.props,k=x.shape,v=x.className,j=Ro(this.props,"hidden")?"url(#".concat(u,")"):void 0,T=RU(RU({clipPath:j},Ze(this.props,!0)),{},{cx:y,cy:b});return q.createElement(Ut,{className:ot("recharts-reference-dot",v)},t.renderDot(k,T),ta.renderCallByParent(this.props,{x:y-l,y:b-l,width:2*l,height:2*l}))}}])})(q.Component);G1(H1,"displayName","ReferenceDot");G1(H1,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#fff",stroke:"#ccc",fillOpacity:1,strokeWidth:1});G1(H1,"renderDot",function(e,t){var a;return q.isValidElement(e)?a=q.cloneElement(e,t):Ke(e)?a=e(t):a=q.createElement(uE,n_({},t,{cx:t.cx,cy:t.cy,className:"recharts-reference-dot-dot"})),a});function i_(){return i_=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},i_.apply(this,arguments)}function Mp(e){"@babel/helpers - typeof";return Mp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Mp(e)}function NU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function OU(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?NU(Object(a),!0).forEach(function(i){Y1(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):NU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function Q_e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Z_e(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,FK(i.key),i)}}function J_e(e,t,a){return t&&Z_e(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function eMe(e,t,a){return t=Zx(t),tMe(e,$K()?Reflect.construct(t,a||[],Zx(e).constructor):t.apply(e,a))}function tMe(e,t){if(t&&(Mp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return nMe(e)}function nMe(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function $K(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return($K=function(){return!!e})()}function Zx(e){return Zx=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},Zx(e)}function aMe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&r_(e,t)}function r_(e,t){return r_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},r_(e,t)}function Y1(e,t,a){return t=FK(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function FK(e){var t=iMe(e,"string");return Mp(t)=="symbol"?t:t+""}function iMe(e,t){if(Mp(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Mp(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var rMe=function(t,a,i,r,o){var l=o.x1,d=o.x2,u=o.y1,h=o.y2,m=o.xAxis,f=o.yAxis;if(!m||!f)return null;var y=mE({x:m.scale,y:f.scale}),b={x:t?y.x.apply(l,{position:"start"}):y.x.rangeMin,y:i?y.y.apply(u,{position:"start"}):y.y.rangeMin},x={x:a?y.x.apply(d,{position:"end"}):y.x.rangeMax,y:r?y.y.apply(h,{position:"end"}):y.y.rangeMax};return Ro(o,"discard")&&(!y.isInRange(b)||!y.isInRange(x))?null:EK(b,x)},V1=(function(e){function t(){return Q_e(this,t),eMe(this,t,arguments)}return aMe(t,e),J_e(t,[{key:"render",value:function(){var i=this.props,r=i.x1,o=i.x2,l=i.y1,d=i.y2,u=i.className,h=i.alwaysShow,m=i.clipPathId;Rs(h===void 0,'The alwaysShow prop is deprecated. Please use ifOverflow="extendDomain" instead.');var f=Sn(r),y=Sn(o),b=Sn(l),x=Sn(d),k=this.props.shape;if(!f&&!y&&!b&&!x&&!k)return null;var v=rMe(f,y,b,x,this.props);if(!v&&!k)return null;var j=Ro(this.props,"hidden")?"url(#".concat(m,")"):void 0;return q.createElement(Ut,{className:ot("recharts-reference-area",u)},t.renderRect(k,OU(OU({clipPath:j},Ze(this.props,!0)),v)),ta.renderCallByParent(this.props,v))}}])})(q.Component);Y1(V1,"displayName","ReferenceArea");Y1(V1,"defaultProps",{isFront:!1,ifOverflow:"discard",xAxisId:0,yAxisId:0,r:10,fill:"#ccc",fillOpacity:.5,stroke:"none",strokeWidth:1});Y1(V1,"renderRect",function(e,t){var a;return q.isValidElement(e)?a=q.cloneElement(e,t):Ke(e)?a=e(t):a=q.createElement(B1,i_({},t,{className:"recharts-reference-area-rect"})),a});function GK(e,t,a){if(t<1)return[];if(t===1&&a===void 0)return e;for(var i=[],r=0;r<e.length;r+=t)i.push(e[r]);return i}function oMe(e,t,a){var i={width:e.width+t.width,height:e.height+t.height};return u_e(i,a)}function sMe(e,t,a){var i=a==="width",r=e.x,o=e.y,l=e.width,d=e.height;return t===1?{start:i?r:o,end:i?r+l:o+d}:{start:i?r+l:o+d,end:i?r:o}}function Jx(e,t,a,i,r){if(e*t<e*i||e*t>e*r)return!1;var o=a();return e*(t-e*o/2-i)>=0&&e*(t+e*o/2-r)<=0}function lMe(e,t){return GK(e,t+1)}function cMe(e,t,a,i,r){for(var o=(i||[]).slice(),l=t.start,d=t.end,u=0,h=1,m=l,f=function(){var x=i==null?void 0:i[u];if(x===void 0)return{v:GK(i,h)};var k=u,v,j=function(){return v===void 0&&(v=a(x,k)),v},T=x.coordinate,A=u===0||Jx(e,T,j,m,d);A||(u=0,m=l,h+=1),A&&(m=T+e*(j()/2+r),u+=h)},y;h<=o.length;)if(y=f(),y)return y.v;return[]}function iy(e){"@babel/helpers - typeof";return iy=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},iy(e)}function PU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function Jn(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?PU(Object(a),!0).forEach(function(i){dMe(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):PU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function dMe(e,t,a){return t=uMe(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function uMe(e){var t=hMe(e,"string");return iy(t)=="symbol"?t:t+""}function hMe(e,t){if(iy(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(iy(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function pMe(e,t,a,i,r){for(var o=(i||[]).slice(),l=o.length,d=t.start,u=t.end,h=function(y){var b=o[y],x,k=function(){return x===void 0&&(x=a(b,y)),x};if(y===l-1){var v=e*(b.coordinate+e*k()/2-u);o[y]=b=Jn(Jn({},b),{},{tickCoord:v>0?b.coordinate-v*e:b.coordinate})}else o[y]=b=Jn(Jn({},b),{},{tickCoord:b.coordinate});var j=Jx(e,b.tickCoord,k,d,u);j&&(u=b.tickCoord-e*(k()/2+r),o[y]=Jn(Jn({},b),{},{isShow:!0}))},m=l-1;m>=0;m--)h(m);return o}function mMe(e,t,a,i,r,o){var l=(i||[]).slice(),d=l.length,u=t.start,h=t.end;if(o){var m=i[d-1],f=a(m,d-1),y=e*(m.coordinate+e*f/2-h);l[d-1]=m=Jn(Jn({},m),{},{tickCoord:y>0?m.coordinate-y*e:m.coordinate});var b=Jx(e,m.tickCoord,function(){return f},u,h);b&&(h=m.tickCoord-e*(f/2+r),l[d-1]=Jn(Jn({},m),{},{isShow:!0}))}for(var x=o?d-1:d,k=function(T){var A=l[T],C,_=function(){return C===void 0&&(C=a(A,T)),C};if(T===0){var E=e*(A.coordinate-e*_()/2-u);l[T]=A=Jn(Jn({},A),{},{tickCoord:E<0?A.coordinate-E*e:A.coordinate})}else l[T]=A=Jn(Jn({},A),{},{tickCoord:A.coordinate});var R=Jx(e,A.tickCoord,_,u,h);R&&(u=A.tickCoord+e*(_()/2+r),l[T]=Jn(Jn({},A),{},{isShow:!0}))},v=0;v<x;v++)k(v);return l}function wE(e,t,a){var i=e.tick,r=e.ticks,o=e.viewBox,l=e.minTickGap,d=e.orientation,u=e.interval,h=e.tickFormatter,m=e.unit,f=e.angle;if(!r||!r.length||!i)return[];if(ke(u)||mc.isSsr)return lMe(r,typeof u=="number"&&ke(u)?u:0);var y=[],b=d==="top"||d==="bottom"?"width":"height",x=m&&b==="width"?Nh(m,{fontSize:t,letterSpacing:a}):{width:0,height:0},k=function(A,C){var _=Ke(h)?h(A.value,C):A.value;return b==="width"?oMe(Nh(_,{fontSize:t,letterSpacing:a}),x,f):Nh(_,{fontSize:t,letterSpacing:a})[b]},v=r.length>=2?Mr(r[1].coordinate-r[0].coordinate):1,j=sMe(o,v,b);return u==="equidistantPreserveStart"?cMe(v,j,k,r,l):(u==="preserveStart"||u==="preserveStartEnd"?y=mMe(v,j,k,r,l,u==="preserveStartEnd"):y=pMe(v,j,k,r,l),y.filter(function(T){return T.isShow}))}var fMe=["viewBox"],gMe=["viewBox"],yMe=["ticks"];function Ep(e){"@babel/helpers - typeof";return Ep=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ep(e)}function bh(){return bh=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},bh.apply(this,arguments)}function IU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function xn(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?IU(Object(a),!0).forEach(function(i){kE(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):IU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function cT(e,t){if(e==null)return{};var a=bMe(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function bMe(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function vMe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function DU(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,YK(i.key),i)}}function xMe(e,t,a){return t&&DU(e.prototype,t),a&&DU(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e}function wMe(e,t,a){return t=ew(t),kMe(e,HK()?Reflect.construct(t,a||[],ew(e).constructor):t.apply(e,a))}function kMe(e,t){if(t&&(Ep(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return jMe(e)}function jMe(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function HK(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(HK=function(){return!!e})()}function ew(e){return ew=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},ew(e)}function SMe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&o_(e,t)}function o_(e,t){return o_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},o_(e,t)}function kE(e,t,a){return t=YK(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function YK(e){var t=CMe(e,"string");return Ep(t)=="symbol"?t:t+""}function CMe(e,t){if(Ep(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Ep(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var dm=(function(e){function t(a){var i;return vMe(this,t),i=wMe(this,t,[a]),i.state={fontSize:"",letterSpacing:""},i}return SMe(t,e),xMe(t,[{key:"shouldComponentUpdate",value:function(i,r){var o=i.viewBox,l=cT(i,fMe),d=this.props,u=d.viewBox,h=cT(d,gMe);return!Rh(o,u)||!Rh(l,h)||!Rh(r,this.state)}},{key:"componentDidMount",value:function(){var i=this.layerReference;if(i){var r=i.getElementsByClassName("recharts-cartesian-axis-tick-value")[0];r&&this.setState({fontSize:window.getComputedStyle(r).fontSize,letterSpacing:window.getComputedStyle(r).letterSpacing})}}},{key:"getTickLineCoord",value:function(i){var r=this.props,o=r.x,l=r.y,d=r.width,u=r.height,h=r.orientation,m=r.tickSize,f=r.mirror,y=r.tickMargin,b,x,k,v,j,T,A=f?-1:1,C=i.tickSize||m,_=ke(i.tickCoord)?i.tickCoord:i.coordinate;switch(h){case"top":b=x=i.coordinate,v=l+ +!f*u,k=v-A*C,T=k-A*y,j=_;break;case"left":k=v=i.coordinate,x=o+ +!f*d,b=x-A*C,j=b-A*y,T=_;break;case"right":k=v=i.coordinate,x=o+ +f*d,b=x+A*C,j=b+A*y,T=_;break;default:b=x=i.coordinate,v=l+ +f*u,k=v+A*C,T=k+A*y,j=_;break}return{line:{x1:b,y1:k,x2:x,y2:v},tick:{x:j,y:T}}}},{key:"getTickTextAnchor",value:function(){var i=this.props,r=i.orientation,o=i.mirror,l;switch(r){case"left":l=o?"start":"end";break;case"right":l=o?"end":"start";break;default:l="middle";break}return l}},{key:"getTickVerticalAnchor",value:function(){var i=this.props,r=i.orientation,o=i.mirror,l="end";switch(r){case"left":case"right":l="middle";break;case"top":l=o?"start":"end";break;default:l=o?"end":"start";break}return l}},{key:"renderAxisLine",value:function(){var i=this.props,r=i.x,o=i.y,l=i.width,d=i.height,u=i.orientation,h=i.mirror,m=i.axisLine,f=xn(xn(xn({},Ze(this.props,!1)),Ze(m,!1)),{},{fill:"none"});if(u==="top"||u==="bottom"){var y=+(u==="top"&&!h||u==="bottom"&&h);f=xn(xn({},f),{},{x1:r,y1:o+y*d,x2:r+l,y2:o+y*d})}else{var b=+(u==="left"&&!h||u==="right"&&h);f=xn(xn({},f),{},{x1:r+b*l,y1:o,x2:r+b*l,y2:o+d})}return q.createElement("line",bh({},f,{className:ot("recharts-cartesian-axis-line",wi(m,"className"))}))}},{key:"renderTicks",value:function(i,r,o){var l=this,d=this.props,u=d.tickLine,h=d.stroke,m=d.tick,f=d.tickFormatter,y=d.unit,b=wE(xn(xn({},this.props),{},{ticks:i}),r,o),x=this.getTickTextAnchor(),k=this.getTickVerticalAnchor(),v=Ze(this.props,!1),j=Ze(m,!1),T=xn(xn({},v),{},{fill:"none"},Ze(u,!1)),A=b.map(function(C,_){var E=l.getTickLineCoord(C),R=E.line,W=E.tick,z=xn(xn(xn(xn({textAnchor:x,verticalAnchor:k},v),{},{stroke:"none",fill:h},j),W),{},{index:_,payload:C,visibleTicksCount:b.length,tickFormatter:f});return q.createElement(Ut,bh({className:"recharts-cartesian-axis-tick",key:"tick-".concat(C.value,"-").concat(C.coordinate,"-").concat(C.tickCoord)},lx(l.props,C,_)),u&&q.createElement("line",bh({},T,R,{className:ot("recharts-cartesian-axis-tick-line",wi(u,"className"))})),m&&t.renderTickItem(m,z,"".concat(Ke(f)?f(C.value,_):C.value).concat(y||"")))});return q.createElement("g",{className:"recharts-cartesian-axis-ticks"},A)}},{key:"render",value:function(){var i=this,r=this.props,o=r.axisLine,l=r.width,d=r.height,u=r.ticksGenerator,h=r.className,m=r.hide;if(m)return null;var f=this.props,y=f.ticks,b=cT(f,yMe),x=y;return Ke(u)&&(x=y&&y.length>0?u(this.props):u(b)),l<=0||d<=0||!x||!x.length?null:q.createElement(Ut,{className:ot("recharts-cartesian-axis",h),ref:function(v){i.layerReference=v}},o&&this.renderAxisLine(),this.renderTicks(x,this.state.fontSize,this.state.letterSpacing),ta.renderCallByParent(this.props))}}],[{key:"renderTickItem",value:function(i,r,o){var l,d=ot(r.className,"recharts-cartesian-axis-tick-value");return q.isValidElement(i)?l=q.cloneElement(i,xn(xn({},r),{},{className:d})):Ke(i)?l=i(xn(xn({},r),{},{className:d})):l=q.createElement(xx,bh({},r,{className:"recharts-cartesian-axis-tick-value"}),o),l}}])})(M.Component);kE(dm,"displayName","CartesianAxis");kE(dm,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var AMe=["x1","y1","x2","y2","key"],TMe=["offset"];function Zd(e){"@babel/helpers - typeof";return Zd=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zd(e)}function WU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function na(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?WU(Object(a),!0).forEach(function(i){_Me(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):WU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function _Me(e,t,a){return t=MMe(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function MMe(e){var t=EMe(e,"string");return Zd(t)=="symbol"?t:t+""}function EMe(e,t){if(Zd(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Zd(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function hd(){return hd=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},hd.apply(this,arguments)}function zU(e,t){if(e==null)return{};var a=RMe(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function RMe(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}var NMe=function(t){var a=t.fill;if(!a||a==="none")return null;var i=t.fillOpacity,r=t.x,o=t.y,l=t.width,d=t.height,u=t.ry;return q.createElement("rect",{x:r,y:o,ry:u,width:l,height:d,stroke:"none",fill:a,fillOpacity:i,className:"recharts-cartesian-grid-bg"})};function VK(e,t){var a;if(q.isValidElement(e))a=q.cloneElement(e,t);else if(Ke(e))a=e(t);else{var i=t.x1,r=t.y1,o=t.x2,l=t.y2,d=t.key,u=zU(t,AMe),h=Ze(u,!1);h.offset;var m=zU(h,TMe);a=q.createElement("line",hd({},m,{x1:i,y1:r,x2:o,y2:l,fill:"none",key:d}))}return a}function OMe(e){var t=e.x,a=e.width,i=e.horizontal,r=i===void 0?!0:i,o=e.horizontalPoints;if(!r||!o||!o.length)return null;var l=o.map(function(d,u){var h=na(na({},e),{},{x1:t,y1:d,x2:t+a,y2:d,key:"line-".concat(u),index:u});return VK(r,h)});return q.createElement("g",{className:"recharts-cartesian-grid-horizontal"},l)}function PMe(e){var t=e.y,a=e.height,i=e.vertical,r=i===void 0?!0:i,o=e.verticalPoints;if(!r||!o||!o.length)return null;var l=o.map(function(d,u){var h=na(na({},e),{},{x1:d,y1:t,x2:d,y2:t+a,key:"line-".concat(u),index:u});return VK(r,h)});return q.createElement("g",{className:"recharts-cartesian-grid-vertical"},l)}function IMe(e){var t=e.horizontalFill,a=e.fillOpacity,i=e.x,r=e.y,o=e.width,l=e.height,d=e.horizontalPoints,u=e.horizontal,h=u===void 0?!0:u;if(!h||!t||!t.length)return null;var m=d.map(function(y){return Math.round(y+r-r)}).sort(function(y,b){return y-b});r!==m[0]&&m.unshift(0);var f=m.map(function(y,b){var x=!m[b+1],k=x?r+l-y:m[b+1]-y;if(k<=0)return null;var v=b%t.length;return q.createElement("rect",{key:"react-".concat(b),y,x:i,height:k,width:o,stroke:"none",fill:t[v],fillOpacity:a,className:"recharts-cartesian-grid-bg"})});return q.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},f)}function DMe(e){var t=e.vertical,a=t===void 0?!0:t,i=e.verticalFill,r=e.fillOpacity,o=e.x,l=e.y,d=e.width,u=e.height,h=e.verticalPoints;if(!a||!i||!i.length)return null;var m=h.map(function(y){return Math.round(y+o-o)}).sort(function(y,b){return y-b});o!==m[0]&&m.unshift(0);var f=m.map(function(y,b){var x=!m[b+1],k=x?o+d-y:m[b+1]-y;if(k<=0)return null;var v=b%i.length;return q.createElement("rect",{key:"react-".concat(b),x:y,y:l,width:k,height:u,stroke:"none",fill:i[v],fillOpacity:r,className:"recharts-cartesian-grid-bg"})});return q.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},f)}var WMe=function(t,a){var i=t.xAxis,r=t.width,o=t.height,l=t.offset;return rK(wE(na(na(na({},dm.defaultProps),i),{},{ticks:Cs(i,!0),viewBox:{x:0,y:0,width:r,height:o}})),l.left,l.left+l.width,a)},zMe=function(t,a){var i=t.yAxis,r=t.width,o=t.height,l=t.offset;return rK(wE(na(na(na({},dm.defaultProps),i),{},{ticks:Cs(i,!0),viewBox:{x:0,y:0,width:r,height:o}})),l.top,l.top+l.height,a)},oh={horizontal:!0,vertical:!0,stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[]};function s_(e){var t,a,i,r,o,l,d=yE(),u=bE(),h=C_e(),m=na(na({},e),{},{stroke:(t=e.stroke)!==null&&t!==void 0?t:oh.stroke,fill:(a=e.fill)!==null&&a!==void 0?a:oh.fill,horizontal:(i=e.horizontal)!==null&&i!==void 0?i:oh.horizontal,horizontalFill:(r=e.horizontalFill)!==null&&r!==void 0?r:oh.horizontalFill,vertical:(o=e.vertical)!==null&&o!==void 0?o:oh.vertical,verticalFill:(l=e.verticalFill)!==null&&l!==void 0?l:oh.verticalFill,x:ke(e.x)?e.x:h.left,y:ke(e.y)?e.y:h.top,width:ke(e.width)?e.width:h.width,height:ke(e.height)?e.height:h.height}),f=m.x,y=m.y,b=m.width,x=m.height,k=m.syncWithTicks,v=m.horizontalValues,j=m.verticalValues,T=k_e(),A=j_e();if(!ke(b)||b<=0||!ke(x)||x<=0||!ke(f)||f!==+f||!ke(y)||y!==+y)return null;var C=m.verticalCoordinatesGenerator||WMe,_=m.horizontalCoordinatesGenerator||zMe,E=m.horizontalPoints,R=m.verticalPoints;if((!E||!E.length)&&Ke(_)){var W=v&&v.length,z=_({yAxis:A?na(na({},A),{},{ticks:W?v:A.ticks}):void 0,width:d,height:u,offset:h},W?!0:k);Rs(Array.isArray(z),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(Zd(z),"]")),Array.isArray(z)&&(E=z)}if((!R||!R.length)&&Ke(C)){var H=j&&j.length,$=C({xAxis:T?na(na({},T),{},{ticks:H?j:T.ticks}):void 0,width:d,height:u,offset:h},H?!0:k);Rs(Array.isArray($),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(Zd($),"]")),Array.isArray($)&&(R=$)}return q.createElement("g",{className:"recharts-cartesian-grid"},q.createElement(NMe,{fill:m.fill,fillOpacity:m.fillOpacity,x:m.x,y:m.y,width:m.width,height:m.height,ry:m.ry}),q.createElement(OMe,hd({},m,{offset:h,horizontalPoints:E,xAxis:T,yAxis:A})),q.createElement(PMe,hd({},m,{offset:h,verticalPoints:R,xAxis:T,yAxis:A})),q.createElement(IMe,hd({},m,{horizontalPoints:E})),q.createElement(DMe,hd({},m,{verticalPoints:R})))}s_.displayName="CartesianGrid";var LMe=["layout","type","stroke","connectNulls","isRange","ref"],UMe=["key"],KK;function Rp(e){"@babel/helpers - typeof";return Rp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Rp(e)}function XK(e,t){if(e==null)return{};var a=BMe(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function BMe(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function pd(){return pd=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},pd.apply(this,arguments)}function LU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function Nl(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?LU(Object(a),!0).forEach(function(i){xo(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):LU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function qMe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function UU(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,ZK(i.key),i)}}function $Me(e,t,a){return t&&UU(e.prototype,t),a&&UU(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e}function FMe(e,t,a){return t=tw(t),GMe(e,QK()?Reflect.construct(t,a||[],tw(e).constructor):t.apply(e,a))}function GMe(e,t){if(t&&(Rp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return HMe(e)}function HMe(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function QK(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(QK=function(){return!!e})()}function tw(e){return tw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},tw(e)}function YMe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&l_(e,t)}function l_(e,t){return l_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},l_(e,t)}function xo(e,t,a){return t=ZK(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function ZK(e){var t=VMe(e,"string");return Rp(t)=="symbol"?t:t+""}function VMe(e,t){if(Rp(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Rp(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var jc=(function(e){function t(){var a;qMe(this,t);for(var i=arguments.length,r=new Array(i),o=0;o<i;o++)r[o]=arguments[o];return a=FMe(this,t,[].concat(r)),xo(a,"state",{isAnimationFinished:!0}),xo(a,"id",am("recharts-area-")),xo(a,"handleAnimationEnd",function(){var l=a.props.onAnimationEnd;a.setState({isAnimationFinished:!0}),Ke(l)&&l()}),xo(a,"handleAnimationStart",function(){var l=a.props.onAnimationStart;a.setState({isAnimationFinished:!1}),Ke(l)&&l()}),a}return YMe(t,e),$Me(t,[{key:"renderDots",value:function(i,r,o){var l=this.props.isAnimationActive,d=this.state.isAnimationFinished;if(l&&!d)return null;var u=this.props,h=u.dot,m=u.points,f=u.dataKey,y=Ze(this.props,!1),b=Ze(h,!0),x=m.map(function(v,j){var T=Nl(Nl(Nl({key:"dot-".concat(j),r:3},y),b),{},{index:j,cx:v.x,cy:v.y,dataKey:f,value:v.value,payload:v.payload,points:m});return t.renderDotItem(h,T)}),k={clipPath:i?"url(#clipPath-".concat(r?"":"dots-").concat(o,")"):null};return q.createElement(Ut,pd({className:"recharts-area-dots"},k),x)}},{key:"renderHorizontalRect",value:function(i){var r=this.props,o=r.baseLine,l=r.points,d=r.strokeWidth,u=l[0].x,h=l[l.length-1].x,m=i*Math.abs(u-h),f=Yl(l.map(function(y){return y.y||0}));return ke(o)&&typeof o=="number"?f=Math.max(o,f):o&&Array.isArray(o)&&o.length&&(f=Math.max(Yl(o.map(function(y){return y.y||0})),f)),ke(f)?q.createElement("rect",{x:u<h?u:u-m,y:0,width:m,height:Math.floor(f+(d?parseInt("".concat(d),10):1))}):null}},{key:"renderVerticalRect",value:function(i){var r=this.props,o=r.baseLine,l=r.points,d=r.strokeWidth,u=l[0].y,h=l[l.length-1].y,m=i*Math.abs(u-h),f=Yl(l.map(function(y){return y.x||0}));return ke(o)&&typeof o=="number"?f=Math.max(o,f):o&&Array.isArray(o)&&o.length&&(f=Math.max(Yl(o.map(function(y){return y.x||0})),f)),ke(f)?q.createElement("rect",{x:0,y:u<h?u:u-m,width:f+(d?parseInt("".concat(d),10):1),height:Math.floor(m)}):null}},{key:"renderClipRect",value:function(i){var r=this.props.layout;return r==="vertical"?this.renderVerticalRect(i):this.renderHorizontalRect(i)}},{key:"renderAreaStatically",value:function(i,r,o,l){var d=this.props,u=d.layout,h=d.type,m=d.stroke,f=d.connectNulls,y=d.isRange;d.ref;var b=XK(d,LMe);return q.createElement(Ut,{clipPath:o?"url(#clipPath-".concat(l,")"):null},q.createElement(sg,pd({},Ze(b,!0),{points:i,connectNulls:f,type:h,baseLine:r,layout:u,stroke:"none",className:"recharts-area-area"})),m!=="none"&&q.createElement(sg,pd({},Ze(this.props,!1),{className:"recharts-area-curve",layout:u,type:h,connectNulls:f,fill:"none",points:i})),m!=="none"&&y&&q.createElement(sg,pd({},Ze(this.props,!1),{className:"recharts-area-curve",layout:u,type:h,connectNulls:f,fill:"none",points:r})))}},{key:"renderAreaWithAnimation",value:function(i,r){var o=this,l=this.props,d=l.points,u=l.baseLine,h=l.isAnimationActive,m=l.animationBegin,f=l.animationDuration,y=l.animationEasing,b=l.animationId,x=this.state,k=x.prevPoints,v=x.prevBaseLine;return q.createElement(Fr,{begin:m,duration:f,isActive:h,easing:y,from:{t:0},to:{t:1},key:"area-".concat(b),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(j){var T=j.t;if(k){var A=k.length/d.length,C=d.map(function(W,z){var H=Math.floor(z*A);if(k[H]){var $=k[H],U=$i($.x,W.x),X=$i($.y,W.y);return Nl(Nl({},W),{},{x:U(T),y:X(T)})}return W}),_;if(ke(u)&&typeof u=="number"){var E=$i(v,u);_=E(T)}else if(dt(u)||bc(u)){var R=$i(v,0);_=R(T)}else _=u.map(function(W,z){var H=Math.floor(z*A);if(v[H]){var $=v[H],U=$i($.x,W.x),X=$i($.y,W.y);return Nl(Nl({},W),{},{x:U(T),y:X(T)})}return W});return o.renderAreaStatically(C,_,i,r)}return q.createElement(Ut,null,q.createElement("defs",null,q.createElement("clipPath",{id:"animationClipPath-".concat(r)},o.renderClipRect(T))),q.createElement(Ut,{clipPath:"url(#animationClipPath-".concat(r,")")},o.renderAreaStatically(d,u,i,r)))})}},{key:"renderArea",value:function(i,r){var o=this.props,l=o.points,d=o.baseLine,u=o.isAnimationActive,h=this.state,m=h.prevPoints,f=h.prevBaseLine,y=h.totalLength;return u&&l&&l.length&&(!m&&y>0||!Wg(m,l)||!Wg(f,d))?this.renderAreaWithAnimation(i,r):this.renderAreaStatically(l,d,i,r)}},{key:"render",value:function(){var i,r=this.props,o=r.hide,l=r.dot,d=r.points,u=r.className,h=r.top,m=r.left,f=r.xAxis,y=r.yAxis,b=r.width,x=r.height,k=r.isAnimationActive,v=r.id;if(o||!d||!d.length)return null;var j=this.state.isAnimationFinished,T=d.length===1,A=ot("recharts-area",u),C=f&&f.allowDataOverflow,_=y&&y.allowDataOverflow,E=C||_,R=dt(v)?this.id:v,W=(i=Ze(l,!1))!==null&&i!==void 0?i:{r:3,strokeWidth:2},z=W.r,H=z===void 0?3:z,$=W.strokeWidth,U=$===void 0?2:$,X=bxe(l)?l:{},D=X.clipDot,P=D===void 0?!0:D,O=H*2+U;return q.createElement(Ut,{className:A},C||_?q.createElement("defs",null,q.createElement("clipPath",{id:"clipPath-".concat(R)},q.createElement("rect",{x:C?m:m-b/2,y:_?h:h-x/2,width:C?b:b*2,height:_?x:x*2})),!P&&q.createElement("clipPath",{id:"clipPath-dots-".concat(R)},q.createElement("rect",{x:m-O/2,y:h-O/2,width:b+O,height:x+O}))):null,T?null:this.renderArea(E,R),(l||T)&&this.renderDots(E,P,R),(!k||j)&&ac.renderCallByParent(this.props,d))}}],[{key:"getDerivedStateFromProps",value:function(i,r){return i.animationId!==r.prevAnimationId?{prevAnimationId:i.animationId,curPoints:i.points,curBaseLine:i.baseLine,prevPoints:r.curPoints,prevBaseLine:r.curBaseLine}:i.points!==r.curPoints||i.baseLine!==r.curBaseLine?{curPoints:i.points,curBaseLine:i.baseLine}:null}}])})(M.PureComponent);KK=jc;xo(jc,"displayName","Area");xo(jc,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!mc.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});xo(jc,"getBaseValue",function(e,t,a,i){var r=e.layout,o=e.baseValue,l=t.props.baseValue,d=l??o;if(ke(d)&&typeof d=="number")return d;var u=r==="horizontal"?i:a,h=u.scale.domain();if(u.type==="number"){var m=Math.max(h[0],h[1]),f=Math.min(h[0],h[1]);return d==="dataMin"?f:d==="dataMax"||m<0?m:Math.max(Math.min(h[0],h[1]),0)}return d==="dataMin"?h[0]:d==="dataMax"?h[1]:h[0]});xo(jc,"getComposedData",function(e){var t=e.props,a=e.item,i=e.xAxis,r=e.yAxis,o=e.xAxisTicks,l=e.yAxisTicks,d=e.bandSize,u=e.dataKey,h=e.stackedData,m=e.dataStartIndex,f=e.displayedData,y=e.offset,b=t.layout,x=h&&h.length,k=KK.getBaseValue(t,a,i,r),v=b==="horizontal",j=!1,T=f.map(function(C,_){var E;x?E=h[m+_]:(E=ja(C,u),Array.isArray(E)?j=!0:E=[k,E]);var R=E[1]==null||x&&ja(C,u)==null;return v?{x:nL({axis:i,ticks:o,bandSize:d,entry:C,index:_}),y:R?null:r.scale(E[1]),value:E,payload:C}:{x:R?null:i.scale(E[1]),y:nL({axis:r,ticks:l,bandSize:d,entry:C,index:_}),value:E,payload:C}}),A;return x||j?A=T.map(function(C){var _=Array.isArray(C.value)?C.value[0]:null;return v?{x:C.x,y:_!=null&&C.y!=null?r.scale(_):null}:{x:_!=null?i.scale(_):null,y:C.y}}):A=v?r.scale(k):i.scale(k),Nl({points:T,baseLine:A,layout:b,isRange:j},y)});xo(jc,"renderDotItem",function(e,t){var a;if(q.isValidElement(e))a=q.cloneElement(e,t);else if(Ke(e))a=e(t);else{var i=ot("recharts-area-dot",typeof e!="boolean"?e.className:""),r=t.key,o=XK(t,UMe);a=q.createElement(uE,pd({},o,{key:r,className:i}))}return a});function Np(e){"@babel/helpers - typeof";return Np=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Np(e)}function KMe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function XMe(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,tX(i.key),i)}}function QMe(e,t,a){return t&&XMe(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function ZMe(e,t,a){return t=nw(t),JMe(e,JK()?Reflect.construct(t,a||[],nw(e).constructor):t.apply(e,a))}function JMe(e,t){if(t&&(Np(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return e7e(e)}function e7e(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function JK(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(JK=function(){return!!e})()}function nw(e){return nw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},nw(e)}function t7e(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&c_(e,t)}function c_(e,t){return c_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},c_(e,t)}function eX(e,t,a){return t=tX(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function tX(e){var t=n7e(e,"string");return Np(t)=="symbol"?t:t+""}function n7e(e,t){if(Np(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Np(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function d_(){return d_=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},d_.apply(this,arguments)}function a7e(e){var t=e.xAxisId,a=yE(),i=bE(),r=WK(t);return r==null?null:M.createElement(dm,d_({},r,{className:ot("recharts-".concat(r.axisType," ").concat(r.axisType),r.className),viewBox:{x:0,y:0,width:a,height:i},ticksGenerator:function(l){return Cs(l,!0)}}))}var Op=(function(e){function t(){return KMe(this,t),ZMe(this,t,arguments)}return t7e(t,e),QMe(t,[{key:"render",value:function(){return M.createElement(a7e,this.props)}}])})(M.Component);eX(Op,"displayName","XAxis");eX(Op,"defaultProps",{allowDecimals:!0,hide:!1,orientation:"bottom",width:0,height:30,mirror:!1,xAxisId:0,tickCount:5,type:"category",padding:{left:0,right:0},allowDataOverflow:!1,scale:"auto",reversed:!1,allowDuplicatedCategory:!0});function Pp(e){"@babel/helpers - typeof";return Pp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Pp(e)}function i7e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r7e(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,iX(i.key),i)}}function o7e(e,t,a){return t&&r7e(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function s7e(e,t,a){return t=aw(t),l7e(e,nX()?Reflect.construct(t,a||[],aw(e).constructor):t.apply(e,a))}function l7e(e,t){if(t&&(Pp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return c7e(e)}function c7e(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function nX(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(nX=function(){return!!e})()}function aw(e){return aw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},aw(e)}function d7e(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&u_(e,t)}function u_(e,t){return u_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},u_(e,t)}function aX(e,t,a){return t=iX(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function iX(e){var t=u7e(e,"string");return Pp(t)=="symbol"?t:t+""}function u7e(e,t){if(Pp(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Pp(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}function h_(){return h_=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},h_.apply(this,arguments)}var h7e=function(t){var a=t.yAxisId,i=yE(),r=bE(),o=zK(a);return o==null?null:M.createElement(dm,h_({},o,{className:ot("recharts-".concat(o.axisType," ").concat(o.axisType),o.className),viewBox:{x:0,y:0,width:i,height:r},ticksGenerator:function(d){return Cs(d,!0)}}))},Ip=(function(e){function t(){return i7e(this,t),s7e(this,t,arguments)}return d7e(t,e),o7e(t,[{key:"render",value:function(){return M.createElement(h7e,this.props)}}])})(M.Component);aX(Ip,"displayName","YAxis");aX(Ip,"defaultProps",{allowDuplicatedCategory:!0,allowDecimals:!0,hide:!1,orientation:"left",width:60,height:0,mirror:!1,yAxisId:0,tickCount:5,type:"number",padding:{top:0,bottom:0},allowDataOverflow:!1,scale:"auto",reversed:!1});function BU(e){return g7e(e)||f7e(e)||m7e(e)||p7e()}function p7e(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
7803In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function m7e(e,t){if(e){if(typeof e=="string")return p_(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return p_(e,t)}}function f7e(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function g7e(e){if(Array.isArray(e))return p_(e)}function p_(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}var m_=function(t,a,i,r,o){var l=Lr(t,xE),d=Lr(t,H1),u=[].concat(BU(l),BU(d)),h=Lr(t,V1),m="".concat(r,"Id"),f=r[0],y=a;if(u.length&&(y=u.reduce(function(k,v){if(v.props[m]===i&&Ro(v.props,"extendDomain")&&ke(v.props[f])){var j=v.props[f];return[Math.min(k[0],j),Math.max(k[1],j)]}return k},y)),h.length){var b="".concat(f,"1"),x="".concat(f,"2");y=h.reduce(function(k,v){if(v.props[m]===i&&Ro(v.props,"extendDomain")&&ke(v.props[b])&&ke(v.props[x])){var j=v.props[b],T=v.props[x];return[Math.min(k[0],j,T),Math.max(k[1],j,T)]}return k},y)}return o&&o.length&&(y=o.reduce(function(k,v){return ke(v)?[Math.min(k[0],v),Math.max(k[1],v)]:k},y)),y},dT={exports:{}},qU;function y7e(){return qU||(qU=1,(function(e){var t=Object.prototype.hasOwnProperty,a="~";function i(){}Object.create&&(i.prototype=Object.create(null),new i().__proto__||(a=!1));function r(u,h,m){this.fn=u,this.context=h,this.once=m||!1}function o(u,h,m,f,y){if(typeof m!="function")throw new TypeError("The listener must be a function");var b=new r(m,f||u,y),x=a?a+h:h;return u._events[x]?u._events[x].fn?u._events[x]=[u._events[x],b]:u._events[x].push(b):(u._events[x]=b,u._eventsCount++),u}function l(u,h){--u._eventsCount===0?u._events=new i:delete u._events[h]}function d(){this._events=new i,this._eventsCount=0}d.prototype.eventNames=function(){var h=[],m,f;if(this._eventsCount===0)return h;for(f in m=this._events)t.call(m,f)&&h.push(a?f.slice(1):f);return Object.getOwnPropertySymbols?h.concat(Object.getOwnPropertySymbols(m)):h},d.prototype.listeners=function(h){var m=a?a+h:h,f=this._events[m];if(!f)return[];if(f.fn)return[f.fn];for(var y=0,b=f.length,x=new Array(b);y<b;y++)x[y]=f[y].fn;return x},d.prototype.listenerCount=function(h){var m=a?a+h:h,f=this._events[m];return f?f.fn?1:f.length:0},d.prototype.emit=function(h,m,f,y,b,x){var k=a?a+h:h;if(!this._events[k])return!1;var v=this._events[k],j=arguments.length,T,A;if(v.fn){switch(v.once&&this.removeListener(h,v.fn,void 0,!0),j){case 1:return v.fn.call(v.context),!0;case 2:return v.fn.call(v.context,m),!0;case 3:return v.fn.call(v.context,m,f),!0;case 4:return v.fn.call(v.context,m,f,y),!0;case 5:return v.fn.call(v.context,m,f,y,b),!0;case 6:return v.fn.call(v.context,m,f,y,b,x),!0}for(A=1,T=new Array(j-1);A<j;A++)T[A-1]=arguments[A];v.fn.apply(v.context,T)}else{var C=v.length,_;for(A=0;A<C;A++)switch(v[A].once&&this.removeListener(h,v[A].fn,void 0,!0),j){case 1:v[A].fn.call(v[A].context);break;case 2:v[A].fn.call(v[A].context,m);break;case 3:v[A].fn.call(v[A].context,m,f);break;case 4:v[A].fn.call(v[A].context,m,f,y);break;default:if(!T)for(_=1,T=new Array(j-1);_<j;_++)T[_-1]=arguments[_];v[A].fn.apply(v[A].context,T)}}return!0},d.prototype.on=function(h,m,f){return o(this,h,m,f,!1)},d.prototype.once=function(h,m,f){return o(this,h,m,f,!0)},d.prototype.removeListener=function(h,m,f,y){var b=a?a+h:h;if(!this._events[b])return this;if(!m)return l(this,b),this;var x=this._events[b];if(x.fn)x.fn===m&&(!y||x.once)&&(!f||x.context===f)&&l(this,b);else{for(var k=0,v=[],j=x.length;k<j;k++)(x[k].fn!==m||y&&!x[k].once||f&&x[k].context!==f)&&v.push(x[k]);v.length?this._events[b]=v.length===1?v[0]:v:l(this,b)}return this},d.prototype.removeAllListeners=function(h){var m;return h?(m=a?a+h:h,this._events[m]&&l(this,m)):(this._events=new i,this._eventsCount=0),this},d.prototype.off=d.prototype.removeListener,d.prototype.addListener=d.prototype.on,d.prefixed=a,d.EventEmitter=d,e.exports=d})(dT)),dT.exports}var b7e=y7e();const v7e=vt(b7e);var uT=new v7e,hT="recharts.syncMouseEvents";function ry(e){"@babel/helpers - typeof";return ry=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ry(e)}function x7e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function w7e(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,rX(i.key),i)}}function k7e(e,t,a){return t&&w7e(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function pT(e,t,a){return t=rX(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function rX(e){var t=j7e(e,"string");return ry(t)=="symbol"?t:t+""}function j7e(e,t){if(ry(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(ry(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var S7e=(function(){function e(){x7e(this,e),pT(this,"activeIndex",0),pT(this,"coordinateList",[]),pT(this,"layout","horizontal")}return k7e(e,[{key:"setDetails",value:function(a){var i,r=a.coordinateList,o=r===void 0?null:r,l=a.container,d=l===void 0?null:l,u=a.layout,h=u===void 0?null:u,m=a.offset,f=m===void 0?null:m,y=a.mouseHandlerCallback,b=y===void 0?null:y;this.coordinateList=(i=o??this.coordinateList)!==null&&i!==void 0?i:[],this.container=d??this.container,this.layout=h??this.layout,this.offset=f??this.offset,this.mouseHandlerCallback=b??this.mouseHandlerCallback,this.activeIndex=Math.min(Math.max(this.activeIndex,0),this.coordinateList.length-1)}},{key:"focus",value:function(){this.spoofMouse()}},{key:"keyboardEvent",value:function(a){if(this.coordinateList.length!==0)switch(a.key){case"ArrowRight":{if(this.layout!=="horizontal")return;this.activeIndex=Math.min(this.activeIndex+1,this.coordinateList.length-1),this.spoofMouse();break}case"ArrowLeft":{if(this.layout!=="horizontal")return;this.activeIndex=Math.max(this.activeIndex-1,0),this.spoofMouse();break}}}},{key:"setIndex",value:function(a){this.activeIndex=a}},{key:"spoofMouse",value:function(){var a,i;if(this.layout==="horizontal"&&this.coordinateList.length!==0){var r=this.container.getBoundingClientRect(),o=r.x,l=r.y,d=r.height,u=this.coordinateList[this.activeIndex].coordinate,h=((a=window)===null||a===void 0?void 0:a.scrollX)||0,m=((i=window)===null||i===void 0?void 0:i.scrollY)||0,f=o+u+h,y=l+this.offset.top+d/2+m;this.mouseHandlerCallback({pageX:f,pageY:y})}}}])})();function C7e(e,t,a){if(a==="number"&&t===!0&&Array.isArray(e)){var i=e==null?void 0:e[0],r=e==null?void 0:e[1];if(i&&r&&ke(i)&&ke(r))return!0}return!1}function A7e(e,t,a,i){var r=i/2;return{stroke:"none",fill:"#ccc",x:e==="horizontal"?t.x-r:a.left+.5,y:e==="horizontal"?a.top+.5:t.y-r,width:e==="horizontal"?i:a.width-1,height:e==="horizontal"?a.height-1:i}}function oX(e){var t=e.cx,a=e.cy,i=e.radius,r=e.startAngle,o=e.endAngle,l=Yn(t,a,i,r),d=Yn(t,a,i,o);return{points:[l,d],cx:t,cy:a,radius:i,startAngle:r,endAngle:o}}function T7e(e,t,a){var i,r,o,l;if(e==="horizontal")i=t.x,o=i,r=a.top,l=a.top+a.height;else if(e==="vertical")r=t.y,l=r,i=a.left,o=a.left+a.width;else if(t.cx!=null&&t.cy!=null)if(e==="centric"){var d=t.cx,u=t.cy,h=t.innerRadius,m=t.outerRadius,f=t.angle,y=Yn(d,u,h,f),b=Yn(d,u,m,f);i=y.x,r=y.y,o=b.x,l=b.y}else return oX(t);return[{x:i,y:r},{x:o,y:l}]}function oy(e){"@babel/helpers - typeof";return oy=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},oy(e)}function $U(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function t0(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?$U(Object(a),!0).forEach(function(i){_7e(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):$U(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function _7e(e,t,a){return t=M7e(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function M7e(e){var t=E7e(e,"string");return oy(t)=="symbol"?t:t+""}function E7e(e,t){if(oy(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(oy(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}function R7e(e){var t,a,i=e.element,r=e.tooltipEventType,o=e.isActive,l=e.activeCoordinate,d=e.activePayload,u=e.offset,h=e.activeTooltipIndex,m=e.tooltipAxisBandSize,f=e.layout,y=e.chartName,b=(t=i.props.cursor)!==null&&t!==void 0?t:(a=i.type.defaultProps)===null||a===void 0?void 0:a.cursor;if(!i||!b||!o||!l||y!=="ScatterChart"&&r!=="axis")return null;var x,k=sg;if(y==="ScatterChart")x=l,k=D4e;else if(y==="BarChart")x=A7e(f,l,u,m),k=B1;else if(f==="radial"){var v=oX(l),j=v.cx,T=v.cy,A=v.radius,C=v.startAngle,_=v.endAngle;x={cx:j,cy:T,startAngle:C,endAngle:_,innerRadius:A,outerRadius:A},k=uK}else x={points:T7e(f,l,u)},k=sg;var E=t0(t0(t0(t0({stroke:"#ccc",pointerEvents:"none"},u),x),Ze(b,!1)),{},{payload:d,payloadIndex:h,className:ot("recharts-tooltip-cursor",b.className)});return M.isValidElement(b)?M.cloneElement(b,E):M.createElement(k,E)}var N7e=["item"],O7e=["children","className","width","height","style","compact","title","desc"];function Dp(e){"@babel/helpers - typeof";return Dp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Dp(e)}function vh(){return vh=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},vh.apply(this,arguments)}function FU(e,t){return D7e(e)||I7e(e,t)||lX(e,t)||P7e()}function P7e(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7804In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function I7e(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i,r,o,l,d=[],u=!0,h=!1;try{if(o=(a=a.call(e)).next,t!==0)for(;!(u=(i=o.call(a)).done)&&(d.push(i.value),d.length!==t);u=!0);}catch(m){h=!0,r=m}finally{try{if(!u&&a.return!=null&&(l=a.return(),Object(l)!==l))return}finally{if(h)throw r}}return d}}function D7e(e){if(Array.isArray(e))return e}function GU(e,t){if(e==null)return{};var a=W7e(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function W7e(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function z7e(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function L7e(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,cX(i.key),i)}}function U7e(e,t,a){return t&&L7e(e.prototype,t),Object.defineProperty(e,"prototype",{writable:!1}),e}function B7e(e,t,a){return t=iw(t),q7e(e,sX()?Reflect.construct(t,a||[],iw(e).constructor):t.apply(e,a))}function q7e(e,t){if(t&&(Dp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return $7e(e)}function $7e(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function sX(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(sX=function(){return!!e})()}function iw(e){return iw=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},iw(e)}function F7e(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&f_(e,t)}function f_(e,t){return f_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},f_(e,t)}function Wp(e){return Y7e(e)||H7e(e)||lX(e)||G7e()}function G7e(){throw new TypeError(`Invalid attempt to spread non-iterable instance.
7805In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function lX(e,t){if(e){if(typeof e=="string")return g_(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return g_(e,t)}}function H7e(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function Y7e(e){if(Array.isArray(e))return g_(e)}function g_(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function HU(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function he(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?HU(Object(a),!0).forEach(function(i){Fe(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):HU(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function Fe(e,t,a){return t=cX(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function cX(e){var t=V7e(e,"string");return Dp(t)=="symbol"?t:t+""}function V7e(e,t){if(Dp(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(Dp(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return(t==="string"?String:Number)(e)}var K7e={xAxis:["bottom","top"],yAxis:["left","right"]},X7e={width:"100%",height:"100%"},dX={x:0,y:0};function n0(e){return e}var Q7e=function(t,a){return a==="horizontal"?t.x:a==="vertical"?t.y:a==="centric"?t.angle:t.radius},Z7e=function(t,a,i,r){var o=a.find(function(m){return m&&m.index===i});if(o){if(t==="horizontal")return{x:o.coordinate,y:r.y};if(t==="vertical")return{x:r.x,y:o.coordinate};if(t==="centric"){var l=o.coordinate,d=r.radius;return he(he(he({},r),Yn(r.cx,r.cy,d,l)),{},{angle:l,radius:d})}var u=o.coordinate,h=r.angle;return he(he(he({},r),Yn(r.cx,r.cy,u,h)),{},{angle:h,radius:u})}return dX},K1=function(t,a){var i=a.graphicalItems,r=a.dataStartIndex,o=a.dataEndIndex,l=(i??[]).reduce(function(d,u){var h=u.props.data;return h&&h.length?[].concat(Wp(d),Wp(h)):d},[]);return l.length>0?l:t&&t.length&&ke(r)&&ke(o)?t.slice(r,o+1):[]};function uX(e){return e==="number"?[0,"auto"]:void 0}var y_=function(t,a,i,r){var o=t.graphicalItems,l=t.tooltipAxis,d=K1(a,t);return i<0||!o||!o.length||i>=d.length?null:o.reduce(function(u,h){var m,f=(m=h.props.data)!==null&&m!==void 0?m:a;f&&t.dataStartIndex+t.dataEndIndex!==0&&t.dataEndIndex-t.dataStartIndex>=i&&(f=f.slice(t.dataStartIndex,t.dataEndIndex+1));var y;if(l.dataKey&&!l.allowDuplicatedCategory){var b=f===void 0?d:f;y=ox(b,l.dataKey,r)}else y=f&&f[i]||d[i];return y?[].concat(Wp(u),[sK(h,y)]):u},[])},YU=function(t,a,i,r){var o=r||{x:t.chartX,y:t.chartY},l=Q7e(o,i),d=t.orderedTooltipTicks,u=t.tooltipAxis,h=t.tooltipTicks,m=oCe(l,d,h,u);if(m>=0&&h){var f=h[m]&&h[m].value,y=y_(t,a,m,f),b=Z7e(i,d,m,o);return{activeTooltipIndex:m,activeLabel:f,activePayload:y,activeCoordinate:b}}return null},J7e=function(t,a){var i=a.axes,r=a.graphicalItems,o=a.axisType,l=a.axisIdKey,d=a.stackGroups,u=a.dataStartIndex,h=a.dataEndIndex,m=t.layout,f=t.children,y=t.stackOffset,b=iK(m,o);return i.reduce(function(x,k){var v,j=k.type.defaultProps!==void 0?he(he({},k.type.defaultProps),k.props):k.props,T=j.type,A=j.dataKey,C=j.allowDataOverflow,_=j.allowDuplicatedCategory,E=j.scale,R=j.ticks,W=j.includeHidden,z=j[l];if(x[z])return x;var H=K1(t.data,{graphicalItems:r.filter(function(F){var K,ne=l in F.props?F.props[l]:(K=F.type.defaultProps)===null||K===void 0?void 0:K[l];return ne===z}),dataStartIndex:u,dataEndIndex:h}),$=H.length,U,X,D;C7e(j.domain,C,T)&&(U=P3(j.domain,null,C),b&&(T==="number"||E!=="auto")&&(D=og(H,A,"category")));var P=uX(T);if(!U||U.length===0){var O,B=(O=j.domain)!==null&&O!==void 0?O:P;if(A){if(U=og(H,A,T),T==="category"&&b){var Y=cxe(U);_&&Y?(X=U,U=Gx(0,$)):_||(U=oL(B,U,k).reduce(function(F,K){return F.indexOf(K)>=0?F:[].concat(Wp(F),[K])},[]))}else if(T==="category")_?U=U.filter(function(F){return F!==""&&!dt(F)}):U=oL(B,U,k).reduce(function(F,K){return F.indexOf(K)>=0||K===""||dt(K)?F:[].concat(Wp(F),[K])},[]);else if(T==="number"){var V=uCe(H,r.filter(function(F){var K,ne,ae=l in F.props?F.props[l]:(K=F.type.defaultProps)===null||K===void 0?void 0:K[l],ge="hide"in F.props?F.props.hide:(ne=F.type.defaultProps)===null||ne===void 0?void 0:ne.hide;return ae===z&&(W||!ge)}),A,o,m);V&&(U=V)}b&&(T==="number"||E!=="auto")&&(D=og(H,A,"category"))}else b?U=Gx(0,$):d&&d[z]&&d[z].hasStack&&T==="number"?U=y==="expand"?[0,1]:oK(d[z].stackGroups,u,h):U=aK(H,r.filter(function(F){var K=l in F.props?F.props[l]:F.type.defaultProps[l],ne="hide"in F.props?F.props.hide:F.type.defaultProps.hide;return K===z&&(W||!ne)}),T,m,!0);if(T==="number")U=m_(f,U,z,o,R),B&&(U=P3(B,U,C));else if(T==="category"&&B){var G=B,I=U.every(function(F){return G.indexOf(F)>=0});I&&(U=G)}}return he(he({},x),{},Fe({},z,he(he({},j),{},{axisType:o,domain:U,categoricalDomain:D,duplicateDomain:X,originalDomain:(v=j.domain)!==null&&v!==void 0?v:P,isCategorical:b,layout:m})))},{})},eEe=function(t,a){var i=a.graphicalItems,r=a.Axis,o=a.axisType,l=a.axisIdKey,d=a.stackGroups,u=a.dataStartIndex,h=a.dataEndIndex,m=t.layout,f=t.children,y=K1(t.data,{graphicalItems:i,dataStartIndex:u,dataEndIndex:h}),b=y.length,x=iK(m,o),k=-1;return i.reduce(function(v,j){var T=j.type.defaultProps!==void 0?he(he({},j.type.defaultProps),j.props):j.props,A=T[l],C=uX("number");if(!v[A]){k++;var _;return x?_=Gx(0,b):d&&d[A]&&d[A].hasStack?(_=oK(d[A].stackGroups,u,h),_=m_(f,_,A,o)):(_=P3(C,aK(y,i.filter(function(E){var R,W,z=l in E.props?E.props[l]:(R=E.type.defaultProps)===null||R===void 0?void 0:R[l],H="hide"in E.props?E.props.hide:(W=E.type.defaultProps)===null||W===void 0?void 0:W.hide;return z===A&&!H}),"number",m),r.defaultProps.allowDataOverflow),_=m_(f,_,A,o)),he(he({},v),{},Fe({},A,he(he({axisType:o},r.defaultProps),{},{hide:!0,orientation:wi(K7e,"".concat(o,".").concat(k%2),null),domain:_,originalDomain:C,isCategorical:x,layout:m})))}return v},{})},tEe=function(t,a){var i=a.axisType,r=i===void 0?"xAxis":i,o=a.AxisComp,l=a.graphicalItems,d=a.stackGroups,u=a.dataStartIndex,h=a.dataEndIndex,m=t.children,f="".concat(r,"Id"),y=Lr(m,o),b={};return y&&y.length?b=J7e(t,{axes:y,graphicalItems:l,axisType:r,axisIdKey:f,stackGroups:d,dataStartIndex:u,dataEndIndex:h}):l&&l.length&&(b=eEe(t,{Axis:o,graphicalItems:l,axisType:r,axisIdKey:f,stackGroups:d,dataStartIndex:u,dataEndIndex:h})),b},nEe=function(t){var a=Wl(t),i=Cs(a,!1,!0);return{tooltipTicks:i,orderedTooltipTicks:z7(i,function(r){return r.coordinate}),tooltipAxis:a,tooltipAxisBandSize:Ix(a,i)}},VU=function(t){var a=t.children,i=t.defaultShowTooltip,r=ea(a,Cp),o=0,l=0;return t.data&&t.data.length!==0&&(l=t.data.length-1),r&&r.props&&(r.props.startIndex>=0&&(o=r.props.startIndex),r.props.endIndex>=0&&(l=r.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:o,dataEndIndex:l,activeTooltipIndex:-1,isTooltipActive:!!i}},aEe=function(t){return!t||!t.length?!1:t.some(function(a){var i=Es(a&&a.type);return i&&i.indexOf("Bar")>=0})},KU=function(t){return t==="horizontal"?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:t==="vertical"?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:t==="centric"?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},iEe=function(t,a){var i=t.props,r=t.graphicalItems,o=t.xAxisMap,l=o===void 0?{}:o,d=t.yAxisMap,u=d===void 0?{}:d,h=i.width,m=i.height,f=i.children,y=i.margin||{},b=ea(f,Cp),x=ea(f,Ad),k=Object.keys(u).reduce(function(_,E){var R=u[E],W=R.orientation;return!R.mirror&&!R.hide?he(he({},_),{},Fe({},W,_[W]+R.width)):_},{left:y.left||0,right:y.right||0}),v=Object.keys(l).reduce(function(_,E){var R=l[E],W=R.orientation;return!R.mirror&&!R.hide?he(he({},_),{},Fe({},W,wi(_,"".concat(W))+R.height)):_},{top:y.top||0,bottom:y.bottom||0}),j=he(he({},v),k),T=j.bottom;b&&(j.bottom+=b.props.height||Cp.defaultProps.height),x&&a&&(j=cCe(j,r,i,a));var A=h-j.left-j.right,C=m-j.top-j.bottom;return he(he({brushBottom:T},j),{},{width:Math.max(A,0),height:Math.max(C,0)})},rEe=function(t,a){if(a==="xAxis")return t[a].width;if(a==="yAxis")return t[a].height},hX=function(t){var a=t.chartName,i=t.GraphicalChild,r=t.defaultTooltipEventType,o=r===void 0?"axis":r,l=t.validateTooltipEventTypes,d=l===void 0?["axis"]:l,u=t.axisComponents,h=t.legendContent,m=t.formatAxisMap,f=t.defaultProps,y=function(j,T){var A=T.graphicalItems,C=T.stackGroups,_=T.offset,E=T.updateId,R=T.dataStartIndex,W=T.dataEndIndex,z=j.barSize,H=j.layout,$=j.barGap,U=j.barCategoryGap,X=j.maxBarSize,D=KU(H),P=D.numericAxisName,O=D.cateAxisName,B=aEe(A),Y=[];return A.forEach(function(V,G){var I=K1(j.data,{graphicalItems:[V],dataStartIndex:R,dataEndIndex:W}),F=V.type.defaultProps!==void 0?he(he({},V.type.defaultProps),V.props):V.props,K=F.dataKey,ne=F.maxBarSize,ae=F["".concat(P,"Id")],ge=F["".concat(O,"Id")],be={},le=u.reduce(function(en,ln){var Ct=T["".concat(ln.axisType,"Map")],Qt=F["".concat(ln.axisType,"Id")];Ct&&Ct[Qt]||ln.axisType==="zAxis"||Qd();var lr=Ct[Qt];return he(he({},en),{},Fe(Fe({},ln.axisType,lr),"".concat(ln.axisType,"Ticks"),Cs(lr)))},be),ee=le[O],ve=le["".concat(O,"Ticks")],Se=C&&C[ae]&&C[ae].hasStack&&jCe(V,C[ae].stackGroups),pe=Es(V.type).indexOf("Bar")>=0,Ye=Ix(ee,ve),ze=[],Re=B&&sCe({barSize:z,stackGroups:C,totalSize:rEe(le,O)});if(pe){var mt,$e,Gt=dt(ne)?X:ne,Ht=(mt=($e=Ix(ee,ve,!0))!==null&&$e!==void 0?$e:Gt)!==null&&mt!==void 0?mt:0;ze=lCe({barGap:$,barCategoryGap:U,bandSize:Ht!==Ye?Ht:Ye,sizeList:Re[ge],maxBarSize:Gt}),Ht!==Ye&&(ze=ze.map(function(en){return he(he({},en),{},{position:he(he({},en.position),{},{offset:en.position.offset-Ht/2})})}))}var Xa=V&&V.type&&V.type.getComposedData;Xa&&Y.push({props:he(he({},Xa(he(he({},le),{},{displayedData:I,props:j,dataKey:K,item:V,bandSize:Ye,barPosition:ze,offset:_,stackedData:Se,layout:H,dataStartIndex:R,dataEndIndex:W}))),{},Fe(Fe(Fe({key:V.key||"item-".concat(G)},P,le[P]),O,le[O]),"animationId",E)),childIndex:kxe(V,j.children),item:V})}),Y},b=function(j,T){var A=j.props,C=j.dataStartIndex,_=j.dataEndIndex,E=j.updateId;if(!n3({props:A}))return null;var R=A.children,W=A.layout,z=A.stackOffset,H=A.data,$=A.reverseStackOrder,U=KU(W),X=U.numericAxisName,D=U.cateAxisName,P=Lr(R,i),O=xCe(H,P,"".concat(X,"Id"),"".concat(D,"Id"),z,$),B=u.reduce(function(F,K){var ne="".concat(K.axisType,"Map");return he(he({},F),{},Fe({},ne,tEe(A,he(he({},K),{},{graphicalItems:P,stackGroups:K.axisType===X&&O,dataStartIndex:C,dataEndIndex:_}))))},{}),Y=iEe(he(he({},B),{},{props:A,graphicalItems:P}),T==null?void 0:T.legendBBox);Object.keys(B).forEach(function(F){B[F]=m(A,B[F],Y,F.replace("Map",""),a)});var V=B["".concat(D,"Map")],G=nEe(V),I=y(A,he(he({},B),{},{dataStartIndex:C,dataEndIndex:_,updateId:E,graphicalItems:P,stackGroups:O,offset:Y}));return he(he({formattedGraphicalItems:I,graphicalItems:P,offset:Y,stackGroups:O},G),B)},x=(function(v){function j(T){var A,C,_;return z7e(this,j),_=B7e(this,j,[T]),Fe(_,"eventEmitterSymbol",Symbol("rechartsEventEmitter")),Fe(_,"accessibilityManager",new S7e),Fe(_,"handleLegendBBoxUpdate",function(E){if(E){var R=_.state,W=R.dataStartIndex,z=R.dataEndIndex,H=R.updateId;_.setState(he({legendBBox:E},b({props:_.props,dataStartIndex:W,dataEndIndex:z,updateId:H},he(he({},_.state),{},{legendBBox:E}))))}}),Fe(_,"handleReceiveSyncEvent",function(E,R,W){if(_.props.syncId===E){if(W===_.eventEmitterSymbol&&typeof _.props.syncMethod!="function")return;_.applySyncEvent(R)}}),Fe(_,"handleBrushChange",function(E){var R=E.startIndex,W=E.endIndex;if(R!==_.state.dataStartIndex||W!==_.state.dataEndIndex){var z=_.state.updateId;_.setState(function(){return he({dataStartIndex:R,dataEndIndex:W},b({props:_.props,dataStartIndex:R,dataEndIndex:W,updateId:z},_.state))}),_.triggerSyncEvent({dataStartIndex:R,dataEndIndex:W})}}),Fe(_,"handleMouseEnter",function(E){var R=_.getMouseInfo(E);if(R){var W=he(he({},R),{},{isTooltipActive:!0});_.setState(W),_.triggerSyncEvent(W);var z=_.props.onMouseEnter;Ke(z)&&z(W,E)}}),Fe(_,"triggeredAfterMouseMove",function(E){var R=_.getMouseInfo(E),W=R?he(he({},R),{},{isTooltipActive:!0}):{isTooltipActive:!1};_.setState(W),_.triggerSyncEvent(W);var z=_.props.onMouseMove;Ke(z)&&z(W,E)}),Fe(_,"handleItemMouseEnter",function(E){_.setState(function(){return{isTooltipActive:!0,activeItem:E,activePayload:E.tooltipPayload,activeCoordinate:E.tooltipPosition||{x:E.cx,y:E.cy}}})}),Fe(_,"handleItemMouseLeave",function(){_.setState(function(){return{isTooltipActive:!1}})}),Fe(_,"handleMouseMove",function(E){E.persist(),_.throttleTriggeredAfterMouseMove(E)}),Fe(_,"handleMouseLeave",function(E){_.throttleTriggeredAfterMouseMove.cancel();var R={isTooltipActive:!1};_.setState(R),_.triggerSyncEvent(R);var W=_.props.onMouseLeave;Ke(W)&&W(R,E)}),Fe(_,"handleOuterEvent",function(E){var R=wxe(E),W=wi(_.props,"".concat(R));if(R&&Ke(W)){var z,H;/.*touch.*/i.test(R)?H=_.getMouseInfo(E.changedTouches[0]):H=_.getMouseInfo(E),W((z=H)!==null&&z!==void 0?z:{},E)}}),Fe(_,"handleClick",function(E){var R=_.getMouseInfo(E);if(R){var W=he(he({},R),{},{isTooltipActive:!0});_.setState(W),_.triggerSyncEvent(W);var z=_.props.onClick;Ke(z)&&z(W,E)}}),Fe(_,"handleMouseDown",function(E){var R=_.props.onMouseDown;if(Ke(R)){var W=_.getMouseInfo(E);R(W,E)}}),Fe(_,"handleMouseUp",function(E){var R=_.props.onMouseUp;if(Ke(R)){var W=_.getMouseInfo(E);R(W,E)}}),Fe(_,"handleTouchMove",function(E){E.changedTouches!=null&&E.changedTouches.length>0&&_.throttleTriggeredAfterMouseMove(E.changedTouches[0])}),Fe(_,"handleTouchStart",function(E){E.changedTouches!=null&&E.changedTouches.length>0&&_.handleMouseDown(E.changedTouches[0])}),Fe(_,"handleTouchEnd",function(E){E.changedTouches!=null&&E.changedTouches.length>0&&_.handleMouseUp(E.changedTouches[0])}),Fe(_,"handleDoubleClick",function(E){var R=_.props.onDoubleClick;if(Ke(R)){var W=_.getMouseInfo(E);R(W,E)}}),Fe(_,"handleContextMenu",function(E){var R=_.props.onContextMenu;if(Ke(R)){var W=_.getMouseInfo(E);R(W,E)}}),Fe(_,"triggerSyncEvent",function(E){_.props.syncId!==void 0&&uT.emit(hT,_.props.syncId,E,_.eventEmitterSymbol)}),Fe(_,"applySyncEvent",function(E){var R=_.props,W=R.layout,z=R.syncMethod,H=_.state.updateId,$=E.dataStartIndex,U=E.dataEndIndex;if(E.dataStartIndex!==void 0||E.dataEndIndex!==void 0)_.setState(he({dataStartIndex:$,dataEndIndex:U},b({props:_.props,dataStartIndex:$,dataEndIndex:U,updateId:H},_.state)));else if(E.activeTooltipIndex!==void 0){var X=E.chartX,D=E.chartY,P=E.activeTooltipIndex,O=_.state,B=O.offset,Y=O.tooltipTicks;if(!B)return;if(typeof z=="function")P=z(Y,E);else if(z==="value"){P=-1;for(var V=0;V<Y.length;V++)if(Y[V].value===E.activeLabel){P=V;break}}var G=he(he({},B),{},{x:B.left,y:B.top}),I=Math.min(X,G.x+G.width),F=Math.min(D,G.y+G.height),K=Y[P]&&Y[P].value,ne=y_(_.state,_.props.data,P),ae=Y[P]?{x:W==="horizontal"?Y[P].coordinate:I,y:W==="horizontal"?F:Y[P].coordinate}:dX;_.setState(he(he({},E),{},{activeLabel:K,activeCoordinate:ae,activePayload:ne,activeTooltipIndex:P}))}else _.setState(E)}),Fe(_,"renderCursor",function(E){var R,W=_.state,z=W.isTooltipActive,H=W.activeCoordinate,$=W.activePayload,U=W.offset,X=W.activeTooltipIndex,D=W.tooltipAxisBandSize,P=_.getTooltipEventType(),O=(R=E.props.active)!==null&&R!==void 0?R:z,B=_.props.layout,Y=E.key||"_recharts-cursor";return q.createElement(R7e,{key:Y,activeCoordinate:H,activePayload:$,activeTooltipIndex:X,chartName:a,element:E,isActive:O,layout:B,offset:U,tooltipAxisBandSize:D,tooltipEventType:P})}),Fe(_,"renderPolarAxis",function(E,R,W){var z=wi(E,"type.axisType"),H=wi(_.state,"".concat(z,"Map")),$=E.type.defaultProps,U=$!==void 0?he(he({},$),E.props):E.props,X=H&&H[U["".concat(z,"Id")]];return M.cloneElement(E,he(he({},X),{},{className:ot(z,X.className),key:E.key||"".concat(R,"-").concat(W),ticks:Cs(X,!0)}))}),Fe(_,"renderPolarGrid",function(E){var R=E.props,W=R.radialLines,z=R.polarAngles,H=R.polarRadius,$=_.state,U=$.radiusAxisMap,X=$.angleAxisMap,D=Wl(U),P=Wl(X),O=P.cx,B=P.cy,Y=P.innerRadius,V=P.outerRadius;return M.cloneElement(E,{polarAngles:Array.isArray(z)?z:Cs(P,!0).map(function(G){return G.coordinate}),polarRadius:Array.isArray(H)?H:Cs(D,!0).map(function(G){return G.coordinate}),cx:O,cy:B,innerRadius:Y,outerRadius:V,key:E.key||"polar-grid",radialLines:W})}),Fe(_,"renderLegend",function(){var E=_.state.formattedGraphicalItems,R=_.props,W=R.children,z=R.width,H=R.height,$=_.props.margin||{},U=z-($.left||0)-($.right||0),X=tK({children:W,formattedGraphicalItems:E,legendWidth:U,legendContent:h});if(!X)return null;var D=X.item,P=GU(X,N7e);return M.cloneElement(D,he(he({},P),{},{chartWidth:z,chartHeight:H,margin:$,onBBoxUpdate:_.handleLegendBBoxUpdate}))}),Fe(_,"renderTooltip",function(){var E,R=_.props,W=R.children,z=R.accessibilityLayer,H=ea(W,za);if(!H)return null;var $=_.state,U=$.isTooltipActive,X=$.activeCoordinate,D=$.activePayload,P=$.activeLabel,O=$.offset,B=(E=H.props.active)!==null&&E!==void 0?E:U;return M.cloneElement(H,{viewBox:he(he({},O),{},{x:O.left,y:O.top}),active:B,label:P,payload:B?D:[],coordinate:X,accessibilityLayer:z})}),Fe(_,"renderBrush",function(E){var R=_.props,W=R.margin,z=R.data,H=_.state,$=H.offset,U=H.dataStartIndex,X=H.dataEndIndex,D=H.updateId;return M.cloneElement(E,{key:E.key||"_recharts-brush",onChange:Qv(_.handleBrushChange,E.props.onChange),data:z,x:ke(E.props.x)?E.props.x:$.left,y:ke(E.props.y)?E.props.y:$.top+$.height+$.brushBottom-(W.bottom||0),width:ke(E.props.width)?E.props.width:$.width,startIndex:U,endIndex:X,updateId:"brush-".concat(D)})}),Fe(_,"renderReferenceElement",function(E,R,W){if(!E)return null;var z=_,H=z.clipPathId,$=_.state,U=$.xAxisMap,X=$.yAxisMap,D=$.offset,P=E.type.defaultProps||{},O=E.props,B=O.xAxisId,Y=B===void 0?P.xAxisId:B,V=O.yAxisId,G=V===void 0?P.yAxisId:V;return M.cloneElement(E,{key:E.key||"".concat(R,"-").concat(W),xAxis:U[Y],yAxis:X[G],viewBox:{x:D.left,y:D.top,width:D.width,height:D.height},clipPathId:H})}),Fe(_,"renderActivePoints",function(E){var R=E.item,W=E.activePoint,z=E.basePoint,H=E.childIndex,$=E.isRange,U=[],X=R.props.key,D=R.item.type.defaultProps!==void 0?he(he({},R.item.type.defaultProps),R.item.props):R.item.props,P=D.activeDot,O=D.dataKey,B=he(he({index:H,dataKey:O,cx:W.x,cy:W.y,r:4,fill:dE(R.item),strokeWidth:2,stroke:"#fff",payload:W.payload,value:W.value},Ze(P,!1)),sx(P));return U.push(j.renderActiveDot(P,B,"".concat(X,"-activePoint-").concat(H))),z?U.push(j.renderActiveDot(P,he(he({},B),{},{cx:z.x,cy:z.y}),"".concat(X,"-basePoint-").concat(H))):$&&U.push(null),U}),Fe(_,"renderGraphicChild",function(E,R,W){var z=_.filterFormatItem(E,R,W);if(!z)return null;var H=_.getTooltipEventType(),$=_.state,U=$.isTooltipActive,X=$.tooltipAxis,D=$.activeTooltipIndex,P=$.activeLabel,O=_.props.children,B=ea(O,za),Y=z.props,V=Y.points,G=Y.isRange,I=Y.baseLine,F=z.item.type.defaultProps!==void 0?he(he({},z.item.type.defaultProps),z.item.props):z.item.props,K=F.activeDot,ne=F.hide,ae=F.activeBar,ge=F.activeShape,be=!!(!ne&&U&&B&&(K||ae||ge)),le={};H!=="axis"&&B&&B.props.trigger==="click"?le={onClick:Qv(_.handleItemMouseEnter,E.props.onClick)}:H!=="axis"&&(le={onMouseLeave:Qv(_.handleItemMouseLeave,E.props.onMouseLeave),onMouseEnter:Qv(_.handleItemMouseEnter,E.props.onMouseEnter)});var ee=M.cloneElement(E,he(he({},z.props),le));function ve(ln){return typeof X.dataKey=="function"?X.dataKey(ln.payload):null}if(be)if(D>=0){var Se,pe;if(X.dataKey&&!X.allowDuplicatedCategory){var Ye=typeof X.dataKey=="function"?ve:"payload.".concat(X.dataKey.toString());Se=ox(V,Ye,P),pe=G&&I&&ox(I,Ye,P)}else Se=V==null?void 0:V[D],pe=G&&I&&I[D];if(ge||ae){var ze=E.props.activeIndex!==void 0?E.props.activeIndex:D;return[M.cloneElement(E,he(he(he({},z.props),le),{},{activeIndex:ze})),null,null]}if(!dt(Se))return[ee].concat(Wp(_.renderActivePoints({item:z,activePoint:Se,basePoint:pe,childIndex:D,isRange:G})))}else{var Re,mt=(Re=_.getItemByXY(_.state.activeCoordinate))!==null&&Re!==void 0?Re:{graphicalItem:ee},$e=mt.graphicalItem,Gt=$e.item,Ht=Gt===void 0?E:Gt,Xa=$e.childIndex,en=he(he(he({},z.props),le),{},{activeIndex:Xa});return[M.cloneElement(Ht,en),null,null]}return G?[ee,null,null]:[ee,null]}),Fe(_,"renderCustomized",function(E,R,W){return M.cloneElement(E,he(he({key:"recharts-customized-".concat(W)},_.props),_.state))}),Fe(_,"renderMap",{CartesianGrid:{handler:n0,once:!0},ReferenceArea:{handler:_.renderReferenceElement},ReferenceLine:{handler:n0},ReferenceDot:{handler:_.renderReferenceElement},XAxis:{handler:n0},YAxis:{handler:n0},Brush:{handler:_.renderBrush,once:!0},Bar:{handler:_.renderGraphicChild},Line:{handler:_.renderGraphicChild},Area:{handler:_.renderGraphicChild},Radar:{handler:_.renderGraphicChild},RadialBar:{handler:_.renderGraphicChild},Scatter:{handler:_.renderGraphicChild},Pie:{handler:_.renderGraphicChild},Funnel:{handler:_.renderGraphicChild},Tooltip:{handler:_.renderCursor,once:!0},PolarGrid:{handler:_.renderPolarGrid,once:!0},PolarAngleAxis:{handler:_.renderPolarAxis},PolarRadiusAxis:{handler:_.renderPolarAxis},Customized:{handler:_.renderCustomized}}),_.clipPathId="".concat((A=T.id)!==null&&A!==void 0?A:am("recharts"),"-clip"),_.throttleTriggeredAfterMouseMove=tV(_.triggeredAfterMouseMove,(C=T.throttleDelay)!==null&&C!==void 0?C:1e3/60),_.state={},_}return F7e(j,v),U7e(j,[{key:"componentDidMount",value:function(){var A,C;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:(A=this.props.margin.left)!==null&&A!==void 0?A:0,top:(C=this.props.margin.top)!==null&&C!==void 0?C:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var A=this.props,C=A.children,_=A.data,E=A.height,R=A.layout,W=ea(C,za);if(W){var z=W.props.defaultIndex;if(!(typeof z!="number"||z<0||z>this.state.tooltipTicks.length-1)){var H=this.state.tooltipTicks[z]&&this.state.tooltipTicks[z].value,$=y_(this.state,_,z,H),U=this.state.tooltipTicks[z].coordinate,X=(this.state.offset.top+E)/2,D=R==="horizontal",P=D?{x:U,y:X}:{y:U,x:X},O=this.state.formattedGraphicalItems.find(function(Y){var V=Y.item;return V.type.name==="Scatter"});O&&(P=he(he({},P),O.props.points[z].tooltipPosition),$=O.props.points[z].tooltipPayload);var B={activeTooltipIndex:z,isTooltipActive:!0,activeLabel:H,activePayload:$,activeCoordinate:P};this.setState(B),this.renderCursor(W),this.accessibilityManager.setIndex(z)}}}},{key:"getSnapshotBeforeUpdate",value:function(A,C){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==C.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==A.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==A.margin){var _,E;this.accessibilityManager.setDetails({offset:{left:(_=this.props.margin.left)!==null&&_!==void 0?_:0,top:(E=this.props.margin.top)!==null&&E!==void 0?E:0}})}return null}},{key:"componentDidUpdate",value:function(A){a3([ea(A.children,za)],[ea(this.props.children,za)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var A=ea(this.props.children,za);if(A&&typeof A.props.shared=="boolean"){var C=A.props.shared?"axis":"item";return d.indexOf(C)>=0?C:o}return o}},{key:"getMouseInfo",value:function(A){if(!this.container)return null;var C=this.container,_=C.getBoundingClientRect(),E=Xke(_),R={chartX:Math.round(A.pageX-E.left),chartY:Math.round(A.pageY-E.top)},W=_.width/C.offsetWidth||1,z=this.inRange(R.chartX,R.chartY,W);if(!z)return null;var H=this.state,$=H.xAxisMap,U=H.yAxisMap,X=this.getTooltipEventType(),D=YU(this.state,this.props.data,this.props.layout,z);if(X!=="axis"&&$&&U){var P=Wl($).scale,O=Wl(U).scale,B=P&&P.invert?P.invert(R.chartX):null,Y=O&&O.invert?O.invert(R.chartY):null;return he(he({},R),{},{xValue:B,yValue:Y},D)}return D?he(he({},R),D):null}},{key:"inRange",value:function(A,C){var _=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,E=this.props.layout,R=A/_,W=C/_;if(E==="horizontal"||E==="vertical"){var z=this.state.offset,H=R>=z.left&&R<=z.left+z.width&&W>=z.top&&W<=z.top+z.height;return H?{x:R,y:W}:null}var $=this.state,U=$.angleAxisMap,X=$.radiusAxisMap;if(U&&X){var D=Wl(U);return cL({x:R,y:W},D)}return null}},{key:"parseEventsOfWrapper",value:function(){var A=this.props.children,C=this.getTooltipEventType(),_=ea(A,za),E={};_&&C==="axis"&&(_.props.trigger==="click"?E={onClick:this.handleClick}:E={onMouseEnter:this.handleMouseEnter,onDoubleClick:this.handleDoubleClick,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onContextMenu:this.handleContextMenu});var R=sx(this.props,this.handleOuterEvent);return he(he({},R),E)}},{key:"addListener",value:function(){uT.on(hT,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){uT.removeListener(hT,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(A,C,_){for(var E=this.state.formattedGraphicalItems,R=0,W=E.length;R<W;R++){var z=E[R];if(z.item===A||z.props.key===A.key||C===Es(z.item.type)&&_===z.childIndex)return z}return null}},{key:"renderClipPath",value:function(){var A=this.clipPathId,C=this.state.offset,_=C.left,E=C.top,R=C.height,W=C.width;return q.createElement("defs",null,q.createElement("clipPath",{id:A},q.createElement("rect",{x:_,y:E,height:R,width:W})))}},{key:"getXScales",value:function(){var A=this.state.xAxisMap;return A?Object.entries(A).reduce(function(C,_){var E=FU(_,2),R=E[0],W=E[1];return he(he({},C),{},Fe({},R,W.scale))},{}):null}},{key:"getYScales",value:function(){var A=this.state.yAxisMap;return A?Object.entries(A).reduce(function(C,_){var E=FU(_,2),R=E[0],W=E[1];return he(he({},C),{},Fe({},R,W.scale))},{}):null}},{key:"getXScaleByAxisId",value:function(A){var C;return(C=this.state.xAxisMap)===null||C===void 0||(C=C[A])===null||C===void 0?void 0:C.scale}},{key:"getYScaleByAxisId",value:function(A){var C;return(C=this.state.yAxisMap)===null||C===void 0||(C=C[A])===null||C===void 0?void 0:C.scale}},{key:"getItemByXY",value:function(A){var C=this.state,_=C.formattedGraphicalItems,E=C.activeItem;if(_&&_.length)for(var R=0,W=_.length;R<W;R++){var z=_[R],H=z.props,$=z.item,U=$.type.defaultProps!==void 0?he(he({},$.type.defaultProps),$.props):$.props,X=Es($.type);if(X==="Bar"){var D=(H.data||[]).find(function(Y){return g4e(A,Y)});if(D)return{graphicalItem:z,payload:D}}else if(X==="RadialBar"){var P=(H.data||[]).find(function(Y){return cL(A,Y)});if(P)return{graphicalItem:z,payload:P}}else if(q1(z,E)||$1(z,E)||ey(z,E)){var O=m3e({graphicalItem:z,activeTooltipItem:E,itemData:U.data}),B=U.activeIndex===void 0?O:U.activeIndex;return{graphicalItem:he(he({},z),{},{childIndex:B}),payload:ey(z,E)?U.data[O]:z.props.data[O]}}}return null}},{key:"render",value:function(){var A=this;if(!n3(this))return null;var C=this.props,_=C.children,E=C.className,R=C.width,W=C.height,z=C.style,H=C.compact,$=C.title,U=C.desc,X=GU(C,O7e),D=Ze(X,!1);if(H)return q.createElement(AU,{state:this.state,width:this.props.width,height:this.props.height,clipPathId:this.clipPathId},q.createElement(cx,vh({},D,{width:R,height:W,title:$,desc:U}),this.renderClipPath(),kI(_,this.renderMap)));if(this.props.accessibilityLayer){var P,O;D.tabIndex=(P=this.props.tabIndex)!==null&&P!==void 0?P:0,D.role=(O=this.props.role)!==null&&O!==void 0?O:"application",D.onKeyDown=function(Y){A.accessibilityManager.keyboardEvent(Y)},D.onFocus=function(){A.accessibilityManager.focus()}}var B=this.parseEventsOfWrapper();return q.createElement(AU,{state:this.state,width:this.props.width,height:this.props.height,clipPathId:this.clipPathId},q.createElement("div",vh({className:ot("recharts-wrapper",E),style:he({position:"relative",cursor:"default",width:R,height:W},z)},B,{ref:function(V){A.container=V}}),q.createElement(cx,vh({},D,{width:R,height:W,title:$,desc:U,style:X7e}),this.renderClipPath(),kI(_,this.renderMap)),this.renderLegend(),this.renderTooltip()))}}])})(M.Component);Fe(x,"displayName",a),Fe(x,"defaultProps",he({layout:"horizontal",stackOffset:"none",barCategoryGap:"10%",barGap:4,margin:{top:5,right:5,bottom:5,left:5},reverseStackOrder:!1,syncMethod:"index"},f)),Fe(x,"getDerivedStateFromProps",function(v,j){var T=v.dataKey,A=v.data,C=v.children,_=v.width,E=v.height,R=v.layout,W=v.stackOffset,z=v.margin,H=j.dataStartIndex,$=j.dataEndIndex;if(j.updateId===void 0){var U=VU(v);return he(he(he({},U),{},{updateId:0},b(he(he({props:v},U),{},{updateId:0}),j)),{},{prevDataKey:T,prevData:A,prevWidth:_,prevHeight:E,prevLayout:R,prevStackOffset:W,prevMargin:z,prevChildren:C})}if(T!==j.prevDataKey||A!==j.prevData||_!==j.prevWidth||E!==j.prevHeight||R!==j.prevLayout||W!==j.prevStackOffset||!Rh(z,j.prevMargin)){var X=VU(v),D={chartX:j.chartX,chartY:j.chartY,isTooltipActive:j.isTooltipActive},P=he(he({},YU(j,A,R)),{},{updateId:j.updateId+1}),O=he(he(he({},X),D),P);return he(he(he({},O),b(he({props:v},O),j)),{},{prevDataKey:T,prevData:A,prevWidth:_,prevHeight:E,prevLayout:R,prevStackOffset:W,prevMargin:z,prevChildren:C})}if(!a3(C,j.prevChildren)){var B,Y,V,G,I=ea(C,Cp),F=I&&(B=(Y=I.props)===null||Y===void 0?void 0:Y.startIndex)!==null&&B!==void 0?B:H,K=I&&(V=(G=I.props)===null||G===void 0?void 0:G.endIndex)!==null&&V!==void 0?V:$,ne=F!==H||K!==$,ae=!dt(A),ge=ae&&!ne?j.updateId:j.updateId+1;return he(he({updateId:ge},b(he(he({props:v},j),{},{updateId:ge,dataStartIndex:F,dataEndIndex:K}),j)),{},{prevChildren:C,dataStartIndex:F,dataEndIndex:K})}return null}),Fe(x,"renderActiveDot",function(v,j,T){var A;return M.isValidElement(v)?A=M.cloneElement(v,j):Ke(v)?A=v(j):A=q.createElement(uE,j),q.createElement(Ut,{className:"recharts-active-dot",key:T},A)});var k=M.forwardRef(function(j,T){return q.createElement(x,vh({},j,{ref:T}))});return k.displayName=x.displayName,k},oEe=hX({chartName:"BarChart",GraphicalChild:fc,defaultTooltipEventType:"axis",validateTooltipEventTypes:["axis","item"],axisComponents:[{axisType:"xAxis",AxisComp:Op},{axisType:"yAxis",AxisComp:Ip}],formatAxisMap:MK}),mT,XU;function sEe(){if(XU)return mT;XU=1;function e(t,a){for(var i=-1,r=t==null?0:t.length;++i<r&&a(t[i],i,t)!==!1;);return t}return mT=e,mT}var fT,QU;function pX(){if(QU)return fT;QU=1;var e=pE(),t=f1(),a=Object.prototype,i=a.hasOwnProperty;function r(o,l,d){var u=o[l];(!(i.call(o,l)&&t(u,d))||d===void 0&&!(l in o))&&e(o,l,d)}return fT=r,fT}var gT,ZU;
7805function sb(){if(ZU)return gT;ZU=1;var e=pX(),t=pE();function a(i,r,o,l){var d=!o;o||(o={});for(var u=-1,h=r.length;++u<h;){var m=r[u],f=l?l(o[m],i[m],m,o,i):void 0;f===void 0&&(f=i[m]),d?t(o,m,f):e(o,m,f)}return o}return gT=a,gT}var yT,JU;function lEe(){if(JU)return yT;JU=1;var e=sb(),t=rm();function a(i,r){return i&&e(r,t(r),i)}return yT=a,yT}var bT,eB;function cEe(){if(eB)return bT;eB=1;function e(t){var a=[];if(t!=null)for(var i in Object(t))a.push(i);return a}return bT=e,bT}var vT,tB;function dEe(){if(tB)return vT;tB=1;var e=Kr(),t=P7(),a=cEe(),i=Object.prototype,r=i.hasOwnProperty;function o(l){if(!e(l))return a(l);var d=t(l),u=[];for(var h in l)h=="constructor"&&(d||!r.call(l,h))||u.push(h);return u}return vT=o,vT}var xT,nB;function jE(){if(nB)return xT;nB=1;var e=IY(),t=dEe(),a=im();function i(r){return a(r)?e(r,!0):t(r)}return xT=i,xT}var wT,aB;function uEe(){if(aB)return wT;aB=1;var e=sb(),t=jE();function a(i,r){return i&&e(r,t(r),i)}return wT=a,wT}var Bf={exports:{}};Bf.exports;var iB;function hEe(){return iB||(iB=1,(function(e,t){var a=Yr(),i=t&&!t.nodeType&&t,r=i&&!0&&e&&!e.nodeType&&e,o=r&&r.exports===i,l=o?a.Buffer:void 0,d=l?l.allocUnsafe:void 0;function u(h,m){if(m)return h.slice();var f=h.length,y=d?d(f):new h.constructor(f);return h.copy(y),y}e.exports=u})(Bf,Bf.exports)),Bf.exports}var kT,rB;function pEe(){if(rB)return kT;rB=1;function e(t,a){var i=-1,r=t.length;for(a||(a=Array(r));++i<r;)a[i]=t[i];return a}return kT=e,kT}var jT,oB;function mEe(){if(oB)return jT;oB=1;var e=sb(),t=_7();function a(i,r){return e(i,t(i),r)}return jT=a,jT}var ST,sB;function mX(){if(sB)return ST;sB=1;var e=T7(),t=hE(),a=_7(),i=OY(),r=Object.getOwnPropertySymbols,o=r?function(l){for(var d=[];l;)e(d,a(l)),l=t(l);return d}:i;return ST=o,ST}var CT,lB;function fEe(){if(lB)return CT;lB=1;var e=sb(),t=mX();function a(i,r){return e(i,t(i),r)}return CT=a,CT}var AT,cB;function fX(){if(cB)return AT;cB=1;var e=NY(),t=mX(),a=jE();function i(r){return e(r,a,t)}return AT=i,AT}var TT,dB;function gEe(){if(dB)return TT;dB=1;var e=Object.prototype,t=e.hasOwnProperty;function a(i){var r=i.length,o=new i.constructor(r);return r&&typeof i[0]=="string"&&t.call(i,"index")&&(o.index=i.index,o.input=i.input),o}return TT=a,TT}var _T,uB;function SE(){if(uB)return _T;uB=1;var e=RY();function t(a){var i=new a.constructor(a.byteLength);return new e(i).set(new e(a)),i}return _T=t,_T}var MT,hB;function yEe(){if(hB)return MT;hB=1;var e=SE();function t(a,i){var r=i?e(a.buffer):a.buffer;return new a.constructor(r,a.byteOffset,a.byteLength)}return MT=t,MT}var ET,pB;function bEe(){if(pB)return ET;pB=1;var e=/\w*$/;function t(a){var i=new a.constructor(a.source,e.exec(a));return i.lastIndex=a.lastIndex,i}return ET=t,ET}var RT,mB;function vEe(){if(mB)return RT;mB=1;var e=em(),t=e?e.prototype:void 0,a=t?t.valueOf:void 0;function i(r){return a?Object(a.call(r)):{}}return RT=i,RT}var NT,fB;function xEe(){if(fB)return NT;fB=1;var e=SE();function t(a,i){var r=i?e(a.buffer):a.buffer;return new a.constructor(r,a.byteOffset,a.length)}return NT=t,NT}var OT,gB;function wEe(){if(gB)return OT;gB=1;var e=SE(),t=yEe(),a=bEe(),i=vEe(),r=xEe(),o="[object Boolean]",l="[object Date]",d="[object Map]",u="[object Number]",h="[object RegExp]",m="[object Set]",f="[object String]",y="[object Symbol]",b="[object ArrayBuffer]",x="[object DataView]",k="[object Float32Array]",v="[object Float64Array]",j="[object Int8Array]",T="[object Int16Array]",A="[object Int32Array]",C="[object Uint8Array]",_="[object Uint8ClampedArray]",E="[object Uint16Array]",R="[object Uint32Array]";function W(z,H,$){var U=z.constructor;switch(H){case b:return e(z);case o:case l:return new U(+z);case x:return t(z,$);case k:case v:case j:case T:case A:case C:case _:case E:case R:return r(z,$);case d:return new U;case u:case f:return new U(z);case h:return a(z);case m:return new U;case y:return i(z)}}return OT=W,OT}var PT,yB;function kEe(){if(yB)return PT;yB=1;var e=Kr(),t=Object.create,a=(function(){function i(){}return function(r){if(!e(r))return{};if(t)return t(r);i.prototype=r;var o=new i;return i.prototype=void 0,o}})();return PT=a,PT}var IT,bB;function jEe(){if(bB)return IT;bB=1;var e=kEe(),t=hE(),a=P7();function i(r){return typeof r.constructor=="function"&&!a(r)?e(t(r)):{}}
7805return IT=i,IT}var DT,vB;function SEe(){if(vB)return DT;vB=1;var e=_1(),t=Vr(),a="[object Map]";function i(r){return t(r)&&e(r)==a}return DT=i,DT}var WT,xB;function CEe(){if(xB)return WT;xB=1;var e=SEe(),t=T1(),a=O7(),i=a&&a.isMap,r=i?t(i):e;return WT=r,WT}var zT,wB;function AEe(){if(wB)return zT;wB=1;var e=_1(),t=Vr(),a="[object Set]";function i(r){return t(r)&&e(r)==a}return zT=i,zT}var LT,kB;function TEe(){if(kB)return LT;kB=1;var e=AEe(),t=T1(),a=O7(),i=a&&a.isSet,r=i?t(i):e;return LT=r,LT}var UT,jB;function _Ee(){if(jB)return UT;jB=1;var e=C7(),t=sEe(),a=pX(),i=lEe(),r=uEe(),o=hEe(),l=pEe(),d=mEe(),u=fEe(),h=WY(),m=fX(),f=_1(),y=gEe(),b=wEe(),x=jEe(),k=_a(),v=E7(),j=CEe(),T=Kr(),A=TEe(),C=rm(),_=jE(),E=1,R=2,W=4,z="[object Arguments]",H="[object Array]",$="[object Boolean]",U="[object Date]",X="[object Error]",D="[object Function]",P="[object GeneratorFunction]",O="[object Map]",B="[object Number]",Y="[object Object]",V="[object RegExp]",G="[object Set]",I="[object String]",F="[object Symbol]",K="[object WeakMap]",ne="[object ArrayBuffer]",ae="[object DataView]",ge="[object Float32Array]",be="[object Float64Array]",le="[object Int8Array]",ee="[object Int16Array]",ve="[object Int32Array]",Se="[object Uint8Array]",pe="[object Uint8ClampedArray]",Ye="[object Uint16Array]",ze="[object Uint32Array]",Re={};Re[z]=Re[H]=Re[ne]=Re[ae]=Re[$]=Re[U]=Re[ge]=Re[be]=Re[le]=Re[ee]=Re[ve]=Re[O]=Re[B]=Re[Y]=Re[V]=Re[G]=Re[I]=Re[F]=Re[Se]=Re[pe]=Re[Ye]=Re[ze]=!0,Re[X]=Re[D]=Re[K]=!1;function mt($e,Gt,Ht,Xa,en,ln){var Ct,Qt=Gt&E,lr=Gt&R,In=Gt&W;if(Ht&&(Ct=en?Ht($e,Xa,en,ln):Ht($e)),Ct!==void 0)return Ct;if(!T($e))return $e;var ki=k($e);if(ki){if(Ct=y($e),!Qt)return l($e,Ct)}else{var Qa=f($e),du=Qa==D||Qa==P;if(v($e))return o($e,Qt);if(Qa==Y||Qa==z||du&&!en){if(Ct=lr||du?{}:x($e),!Qt)return lr?u($e,r(Ct,$e)):d($e,i(Ct,$e))}else{if(!Re[Qa])return en?$e:{};Ct=b($e,Qa,Qt)}}ln||(ln=new e);var Zr=ln.get($e);if(Zr)return Zr;ln.set($e,Ct),A($e)?$e.forEach(function(An){Ct.add(mt(An,Gt,Ht,An,$e,ln))}):j($e)&&$e.forEach(function(An,At){Ct.set(At,mt(An,Gt,Ht,At,$e,ln))});var hm=In?lr?m:h:lr?_:C,Sc=ki?void 0:hm($e);return t(Sc||$e,function(An,At){Sc&&(At=An,An=$e[At]),a(Ct,At,mt(An,Gt,Ht,At,$e,ln))}),Ct}return UT=mt,UT}var BT,SB;function MEe(){if(SB)return BT;SB=1;var e=w1(),t=oY();function a(i,r){return r.length<2?i:e(i,t(r,0,-1))}return BT=a,BT}var qT,CB;function EEe(){if(CB)return qT;CB=1;var e=x1(),t=cK(),a=MEe(),i=nb(),r=Object.prototype,o=r.hasOwnProperty;function l(d,u){u=e(u,d);var h=-1,m=u.length;if(!m)return!0;for(;++h<m;){var f=i(u[h]);if(f==="__proto__"&&!o.call(d,"__proto__")||(f==="constructor"||f==="prototype")&&h<m-1)return!1}var y=a(d,u);return y==null||delete y[i(t(u))]}return qT=l,qT}var $T,AB;function REe(){if(AB)return $T;AB=1;var e=vK();function t(a){return e(a)?void 0:a}return $T=t,$T}var FT,TB;function NEe(){if(TB)return FT;TB=1;var e=D7();function t(a){var i=a==null?0:a.length;return i?e(a,1):[]}return FT=t,FT}var GT,_B;function OEe(){if(_B)return GT;_B=1;var e=NEe(),t=YY(),a=KY();function i(r){return a(t(r,void 0,e),r+"")}return GT=i,GT}var HT,MB;function PEe(){if(MB)return HT;MB=1;var e=v1(),t=_Ee(),a=EEe(),i=x1(),r=sb(),o=REe(),l=OEe(),d=fX(),u=1,h=2,m=4,f=l(function(y,b){var x={};if(y==null)return x;var k=!1;b=e(b,function(j){return j=i(j,y),k||(k=j.length>1),j}),r(y,d(y),x),k&&(x=t(x,u|h|m,o));for(var v=b.length;v--;)a(x,b[v]);return x});return HT=f,HT}var IEe=PEe();const DEe=vt(IEe);var WEe=["#1890FF","#66B5FF","#41D9C7","#2FC25B","#6EDB8F","#9AE65C","#FACC14","#E6965C","#57AD71","#223273","#738AE6","#7564CC","#8543E0","#A877ED","#5C8EE6","#13C2C2","#70E0E0","#5CA3E6","#3436C7","#8082FF","#DD81E6","#F04864","#FA7D92","#D598D9"],zEe=["width","height","className","style","children","type"];function zp(e){"@babel/helpers - typeof";return zp=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zp(e)}function rw(){return rw=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},rw.apply(this,arguments)}function LEe(e,t){if(e==null)return{};var a=UEe(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function UEe(e,t){if(e==null)return{};var a={};for(var i in e)if(Object.prototype.hasOwnProperty.call(e,i)){if(t.indexOf(i)>=0)continue;a[i]=e[i]}return a}function BEe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function EB(e,t){for(var a=0;a<t.length;a++){var i=t[a];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,yX(i.key),i)}}function qEe(e,t,a){return t&&EB(e.prototype,t),a&&EB(e,a),Object.defineProperty(e,"prototype",{writable:!1}),e}function $Ee(e,t,a){return t=ow(t),FEe(e,gX()?Reflect.construct(t,a||[],ow(e).constructor):t.apply(e,a))}function FEe(e,t){if(t&&(zp(t)==="object"||typeof t=="function"))return t;if(t!==void 0)throw new TypeError("Derived constructors may only return object or undefined");return GEe(e)}function GEe(e){if(e===void 0)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function gX(){try{var e=!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}))}catch{}return(gX=function(){return!!e})()}
7805function ow(e){return ow=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(a){return a.__proto__||Object.getPrototypeOf(a)},ow(e)}function HEe(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Super expression must either be null or a function");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),Object.defineProperty(e,"prototype",{writable:!1}),t&&b_(e,t)}function b_(e,t){return b_=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(i,r){return i.__proto__=r,i},b_(e,t)}function RB(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function zt(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?RB(Object(a),!0).forEach(function(i){Os(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):RB(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function Os(e,t,a){return t=yX(t),t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function yX(e){var t=YEe(e,"string");return zp(t)=="symbol"?t:t+""}function YEe(e,t){if(zp(e)!="object"||!e)return e;var a=e[Symbol.toPrimitive];if(a!==void 0){var i=a.call(e,t);if(zp(i)!="object")return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return String(e)}var sy="value",YT=function e(t){var a=t.depth,i=t.node,r=t.index,o=t.valueKey,l=i.children,d=a+1,u=l&&l.length?l.map(function(m,f){return e({depth:d,node:m,index:f,valueKey:o})}):null,h;return l&&l.length?h=u.reduce(function(m,f){return m+f[sy]},0):h=bc(i[o])||i[o]<=0?0:i[o],zt(zt({},i),{},Os(Os(Os({children:u},sy,h),"depth",a),"index",r))},VEe=function(t){return{x:t.x,y:t.y,width:t.width,height:t.height}},KEe=function(t,a){var i=a<0?0:a;return t.map(function(r){var o=r[sy]*i;return zt(zt({},r),{},{area:bc(o)||o<=0?0:o})})},XEe=function(t,a,i){var r=a*a,o=t.area*t.area,l=t.reduce(function(h,m){return{min:Math.min(h.min,m.area),max:Math.max(h.max,m.area)}},{min:1/0,max:0}),d=l.min,u=l.max;return o?Math.max(r*u*i/o,o/(r*d*i)):1/0},QEe=function(t,a,i,r){var o=a?Math.round(t.area/a):0;(r||o>i.height)&&(o=i.height);for(var l=i.x,d,u=0,h=t.length;u<h;u++)d=t[u],d.x=l,d.y=i.y,d.height=o,d.width=Math.min(o?Math.round(d.area/o):0,i.x+i.width-l),l+=d.width;return d.width+=i.x+i.width-l,zt(zt({},i),{},{y:i.y+o,height:i.height-o})},ZEe=function(t,a,i,r){var o=a?Math.round(t.area/a):0;(r||o>i.width)&&(o=i.width);for(var l=i.y,d,u=0,h=t.length;u<h;u++)d=t[u],d.x=i.x,d.y=l,d.width=o,d.height=Math.min(o?Math.round(d.area/o):0,i.y+i.height-l),l+=d.height;return d&&(d.height+=i.y+i.height-l),zt(zt({},i),{},{x:i.x+o,width:i.width-o})},NB=function(t,a,i,r){return a===i.width?QEe(t,a,i,r):ZEe(t,a,i,r)},VT=function e(t,a){var i=t.children;if(i&&i.length){var r=VEe(t),o=[],l=1/0,d,u,h=Math.min(r.width,r.height),m=KEe(i,r.width*r.height/t[sy]),f=m.slice();for(o.area=0;f.length>0;)o.push(d=f[0]),o.area+=d.area,u=XEe(o,h,a),u<=l?(f.shift(),l=u):(o.area-=o.pop().area,r=NB(o,h,r,!1),h=Math.min(r.width,r.height),o.length=o.area=0,l=1/0);return o.length&&(r=NB(o,h,r,!0),o.length=o.area=0),zt(zt({},t),{},{children:m.map(function(y){return e(y,a)})})}return t},JEe={isTooltipActive:!1,isAnimationFinished:!1,activeNode:null,formatRoot:null,currentRoot:null,nestIndex:[]},CE=(function(e){function t(){var a;BEe(this,t);for(var i=arguments.length,r=new Array(i),o=0;o<i;o++)r[o]=arguments[o];return a=$Ee(this,t,[].concat(r)),Os(a,"state",zt({},JEe)),Os(a,"handleAnimationEnd",function(){var l=a.props.onAnimationEnd;a.setState({isAnimationFinished:!0}),Ke(l)&&l()}),Os(a,"handleAnimationStart",function(){var l=a.props.onAnimationStart;a.setState({isAnimationFinished:!1}),Ke(l)&&l()}),a}return HEe(t,e),qEe(t,[{key:"handleMouseEnter",value:function(i,r){r.persist();var o=this.props,l=o.onMouseEnter,d=o.children,u=ea(d,za);u?this.setState({isTooltipActive:!0,activeNode:i},function(){l&&l(i,r)}):l&&l(i,r)}},{key:"handleMouseLeave",value:function(i,r){r.persist();var o=this.props,l=o.onMouseLeave,d=o.children,u=ea(d,za);u?this.setState({isTooltipActive:!1,activeNode:null},function(){l&&l(i,r)}):l&&l(i,r)}},{key:"handleClick",value:function(i){var r=this.props,o=r.onClick,l=r.type;if(l==="nest"&&i.children){var d=this.props,u=d.width,h=d.height,m=d.dataKey,f=d.aspectRatio,y=YT({depth:0,node:zt(zt({},i),{},{x:0,y:0,width:u,height:h}),index:0,valueKey:m}),b=VT(y,f),x=this.state.nestIndex;x.push(i),this.setState({formatRoot:b,currentRoot:y,nestIndex:x})}o&&o(i)}},{key:"handleNestIndex",value:function(i,r){var o=this.state.nestIndex,l=this.props,d=l.width,u=l.height,h=l.dataKey,m=l.aspectRatio,f=YT({depth:0,node:zt(zt({},i),{},{x:0,y:0,width:d,height:u}),index:0,valueKey:h}),y=VT(f,m);o=o.slice(0,r+1),this.setState({formatRoot:y,currentRoot:i,nestIndex:o})}},{key:"renderItem",value:function(i,r,o){var l=this,d=this.props,u=d.isAnimationActive,h=d.animationBegin,m=d.animationDuration,f=d.animationEasing,y=d.isUpdateAnimationActive,b=d.type,x=d.animationId,k=d.colorPanel,v=this.state.isAnimationFinished,j=r.width,T=r.height,A=r.x,C=r.y,_=r.depth,E=parseInt("".concat((Math.random()*2-1)*j),10),R={};return(o||b==="nest")&&(R={onMouseEnter:this.handleMouseEnter.bind(this,r),onMouseLeave:this.handleMouseLeave.bind(this,r),onClick:this.handleClick.bind(this,r)}),u?q.createElement(Fr,{begin:h,duration:m,isActive:u,easing:f,key:"treemap-".concat(x),from:{x:A,y:C,width:j,height:T},to:{x:A,y:C,width:j,height:T},onAnimationStart:this.handleAnimationStart,onAnimationEnd:this.handleAnimationEnd},function(W){var z=W.x,H=W.y,$=W.width,U=W.height;return q.createElement(Fr,{from:"translate(".concat(E,"px, ").concat(E,"px)"),to:"translate(0, 0)",attributeName:"transform",begin:h,easing:f,isActive:u,duration:m},q.createElement(Ut,R,(function(){return _>2&&!v?null:l.constructor.renderContentItem(i,zt(zt({},r),{},{isAnimationActive:u,isUpdateAnimationActive:!y,width:$,height:U,x:z,y:H}),b,k)})()))}):q.createElement(Ut,R,this.constructor.renderContentItem(i,zt(zt({},r),{},{isAnimationActive:!1,isUpdateAnimationActive:!1,width:j,height:T,x:A,y:C}),b,k))}},{key:"renderNode",value:function(i,r){var o=this,l=this.props,d=l.content,u=l.type,h=zt(zt(zt({},Ze(this.props,!1)),r),{},{root:i}),m=!r.children||!r.children.length,f=this.state.currentRoot,y=(f.children||[]).filter(function(b){return b.depth===r.depth&&b.name===r.name});return!y.length&&i.depth&&u==="nest"?null:q.createElement(Ut,{key:"recharts-treemap-node-".concat(h.x,"-").concat(h.y,"-").concat(h.name),className:"recharts-treemap-depth-".concat(r.depth)},this.renderItem(d,h,m),r.children&&r.children.length?r.children.map(function(b){return o.renderNode(r,b)}):null)}},{key:"renderAllNodes",value:function(){var i=this.state.formatRoot;return i?this.renderNode(i,i):null}},{key:"renderTooltip",value:function(){var i=this.props,r=i.children,o=i.nameKey,l=ea(r,za);if(!l)return null;var d=this.props,u=d.width,h=d.height,m=this.state,f=m.isTooltipActive,y=m.activeNode,b={x:0,y:0,width:u,height:h},x=y?{x:y.x+y.width/2,y:y.y+y.height/2}:null,k=f&&y?[{payload:y,name:ja(y,o,""),value:ja(y,sy)}]:[];return q.cloneElement(l,{viewBox:b,active:f,coordinate:x,label:"",payload:k})}},{key:"renderNestIndex",value:function(){var i=this,r=this.props,o=r.nameKey,l=r.nestIndexContent,d=this.state.nestIndex;return q.createElement("div",{className:"recharts-treemap-nest-index-wrapper",style:{marginTop:"8px",textAlign:"center"}},d.map(function(u,h){var m=wi(u,o,"root"),f=null;return q.isValidElement(l)&&(f=q.cloneElement(l,u,h)),Ke(l)?f=l(u,h):f=m,q.createElement("div",{onClick:i.handleNestIndex.bind(i,u,h),key:"nest-index-".concat(am()),className:"recharts-treemap-nest-index-box",style:{cursor:"pointer",display:"inline-block",padding:"0 7px",background:"#000",color:"#fff",marginRight:"3px"}},f)}))}},{key:"render",value:function(){if(!n3(this))return null;var i=this.props,r=i.width,o=i.height,l=i.className,d=i.style,u=i.children,h=i.type,m=LEe(i,zEe),f=Ze(m,!1);return q.createElement("div",{className:ot("recharts-wrapper",l),style:zt(zt({},d),{}
7805,{position:"relative",cursor:"default",width:r,height:o}),role:"region"},q.createElement(cx,rw({},f,{width:r,height:h==="nest"?o-30:o}),this.renderAllNodes(),xxe(u)),this.renderTooltip(),h==="nest"&&this.renderNestIndex())}}],[{key:"getDerivedStateFromProps",value:function(i,r){if(i.data!==r.prevData||i.type!==r.prevType||i.width!==r.prevWidth||i.height!==r.prevHeight||i.dataKey!==r.prevDataKey||i.aspectRatio!==r.prevAspectRatio){var o=YT({depth:0,node:{children:i.data,x:0,y:0,width:i.width,height:i.height},index:0,valueKey:i.dataKey}),l=VT(o,i.aspectRatio);return zt(zt({},r),{},{formatRoot:l,currentRoot:o,nestIndex:[o],prevAspectRatio:i.aspectRatio,prevData:i.data,prevWidth:i.width,prevHeight:i.height,prevDataKey:i.dataKey,prevType:i.type})}return null}},{key:"renderContentItem",value:function(i,r,o,l){if(q.isValidElement(i))return q.cloneElement(i,r);if(Ke(i))return i(r);var d=r.x,u=r.y,h=r.width,m=r.height,f=r.index,y=null;h>10&&m>10&&r.children&&o==="nest"&&(y=q.createElement(T4e,{points:[{x:d+2,y:u+m/2},{x:d+6,y:u+m/2+3},{x:d+2,y:u+m/2+6}]}));var b=null,x=Nh(r.name);h>20&&m>20&&x.width<h&&x.height<m&&(b=q.createElement("text",{x:d+8,y:u+m/2+7,fontSize:14},r.name));var k=l||WEe;return q.createElement("g",null,q.createElement(B1,rw({fill:r.depth<2?k[f%k.length]:"rgba(255,255,255,0)",stroke:"#fff"},DEe(r,"children"),{role:"img"})),y,b)}}])})(M.PureComponent);Os(CE,"displayName","Treemap");Os(CE,"defaultProps",{aspectRatio:.5*(1+Math.sqrt(5)),dataKey:"value",type:"flat",isAnimationActive:!mc.isSsr,isUpdateAnimationActive:!mc.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"linear"});var e6e=hX({chartName:"AreaChart",GraphicalChild:jc,axisComponents:[{axisType:"xAxis",AxisComp:Op},{axisType:"yAxis",AxisComp:Ip}],formatAxisMap:MK});const KT=[{key:"enterprise",label:"Enterprise (5,000+)",min:5001,color:"#0C1E20"},{key:"midmarket",label:"Mid-market (1k–5k)",min:1001,color:"#3D7BC4"},{key:"growth",label:"Growth (200–1k)",min:201,color:"#5942b0"},{key:"startup",label:"Startup (50–200)",min:51,color:"#509A79"},{key:"seed",label:"Seed-stage (<50)",min:1,color:"#C99435"}],bX={key:"growth",label:"Unknown",min:0,color:"#869DA2"};function vX(e,t){const a=(e||"").toLowerCase().trim(),i=t==null?void 0:t.get(a);if(i==null)return{headcount:null,bucket:bX};for(const r of KT)if(i>=r.min)return{headcount:i,bucket:r};return{headcount:i,bucket:KT[KT.length-1]}}const t6e=new Map;function n6e(){const[e,t]=M.useState(t6e);return M.useEffect(()=>{let a=!1;return fetch("/static/gtme-company-sizes.json").then(i=>i.ok?i.json():Promise.reject(new Error(`HTTP ${i.status}`))).then(i=>{if(a)return;const r=new Map;for(const[o,l]of Object.entries(i.entries??{}))l&&typeof l.headcount=="number"&&Number.isFinite(l.headcount)&&r.set(o.toLowerCase(),l.headcount);t(r)}).catch(()=>{}),()=>{a=!0}},[]),e}const a6e=/(san\s*francisco|^sf$|^sf[\s,(]|bay\s*area|santa\s*clara|san\s*mateo|palo\s*alto|mountain\s*view|sunnyvale|menlo\s*park|oakland|south\s*san\s*francisco|redwood\s*city|berkeley)/i,i6e=/(new\s*york|^nyc$|^nyc[\s,(]|brooklyn|manhattan)/i,r6e=/(remote|global|distributed|anywhere|work\s*from\s*home)/i,o6e=/(london|berlin|paris|amsterdam|dublin|munich|zurich|stockholm|copenhagen|lisbon|madrid|barcelona|tel\s*aviv|israel|united\s*kingdom|^uk$|^uk[\s,(]|germany|france|netherlands|spain|portugal|sweden|denmark|norway|switzerland|ireland|italy)/i,s6e=/(usa|united\s*states|boston|seattle|los\s*angeles|austin|chicago|denver|atlanta|miami|portland|nashville|washington|wa\b|ma\b|tx\b|il\b|co\b|ga\b|fl\b|or\b|pa\b|nc\b|az\b|ca\b|ny\b)/i,l6e=/(singapore|tokyo|sydney|melbourne|bengaluru|bangalore|mumbai|hong\s*kong|shanghai|seoul|taipei|jakarta)/i,Ef=[{key:"bay",label:"Bay Area",color:"#2F6E55",match:a6e},{key:"nyc",label:"NYC",color:"#5942b0",match:i6e},{key:"us",label:"Other US",color:"#3D7BC4",match:s6e},{key:"europe",label:"Europe",color:"#C99435",match:o6e},{key:"apac",label:"Asia / APAC",color:"#A88EE0",match:l6e},{key:"remote",label:"Remote / Global",color:"#509A79",match:r6e},{key:"other",label:"Other / unspecified",color:"#869DA2",match:/^/}];function c6e(e){const t=(e||"").trim();if(!t)return Ef[Ef.length-1];for(const a of Ef)if(a.key!=="other"&&a.match.test(t))return a;return Ef[Ef.length-1]}function xX(e){const t=e.replace("#",""),a=parseInt(t.slice(0,2),16)/255,i=parseInt(t.slice(2,4),16)/255,r=parseInt(t.slice(4,6),16)/255;return .2126*a+.7152*i+.0722*r}const d6e=new Map(Hd.map(e=>[e.name,e])),u6e={"Sales Engineer Hybrid":{displayName:"Sales Engineer Hybrid",color:"#7AB69A",slug:"sales-engineer-hybrid"},"AI Accelerator / Internal FDE":{displayName:"AI Accelerator / FDE",color:"#A88EE0",
7805slug:"ai-accelerator-internal-fde"},"Forward Deployed (customer-facing)":{displayName:"Forward Deployed",color:"#5C9BD8"},Other:{displayName:"Other / Adjacent",color:"#869DA2"},"":{displayName:"Unclassified",color:"#869DA2"}};function h6e(e){const t=d6e.get(e);return t?{displayName:t.displayName??t.name,color:t.color,slug:t.slug,avgAi:t.profile.ai,avgCode:t.profile.code}:u6e[e]??{displayName:e,color:"#869DA2"}}function sw(e){return(e.status||"Likely Open").trim()==="Likely Open"}function p6e(e){var a;const t=new Map;for(const i of e){const r=(a=i.company)==null?void 0:a.trim();r&&t.set(r,(t.get(r)||0)+1)}return t}function m6e(e,{mode:t,sizeCache:a}){var r;if(t==="archetype"){const o=new Map;for(const l of e){const d=l.flavorNorm||"";(o.get(d)??o.set(d,[]).get(d)).push(l)}return[...o.entries()].map(([l,d])=>{const u=h6e(l);return{key:l,label:u.displayName,color:u.color,roles:d}})}if(t==="location"){const o=new Map;for(const l of e){const d=c6e(l.location),u=o.get(d.key)??{spec:d,roles:[]};u.roles.push(l),o.set(d.key,u)}return[...o.values()].map(l=>({key:l.spec.key,label:l.spec.label,color:l.spec.color,roles:l.roles}))}const i=new Map;for(const o of e){const l=(r=o.company)==null?void 0:r.trim();if(!l)continue;const{bucket:d}=vX(l,a),u=d===bX?"unknown":d.key,h=i.get(u)??{spec:d,roles:[]};h.roles.push(o),i.set(u,h)}return[...i.entries()].map(([o,l])=>({key:o,label:l.spec.label,color:l.spec.color,roles:l.roles}))}function f6e(e,t){return e.find(a=>a.key===t)}function g6e(e){return e.filter(t=>t.roles.length>0).map(t=>{const a=t.roles.filter(sw).length;return{kind:"archetype",name:t.label,size:t.roles.length,color:t.color,invertText:xX(t.color)<.55,payload:t.key,caption:`${t.roles.length.toLocaleString()} total · ${a.toLocaleString()} open`,tooltip:`${t.label} · ${t.roles.length.toLocaleString()} total roles · ${a.toLocaleString()} open · click to drill in`}}).sort((t,a)=>a.size-t.size)}function y6e(e,t,a){var r;const i=new Map;for(const o of e.roles){const l=(r=o.company)==null?void 0:r.trim();l&&(i.get(l)??i.set(l,[]).get(l)).push(o)}return[...i.entries()].map(([o,l])=>{const d=l.filter(sw).length,u=t.get(o)??l.length,{headcount:h}=vX(o,a),m=h?` · ~${h.toLocaleString()} employees`:"";return{kind:"company",name:o,size:l.length,color:e.color,invertText:xX(e.color)<.55,payload:o,caption:`${l.length} role${l.length===1?"":"s"} · ${d} open`,tooltip:`${o}${m} · ${l.length} role${l.length===1?"":"s"} in ${e.label}${u>l.length?` (${u} total in dataset)`:""}`}}).sort((o,l)=>l.size-o.size)}const OB={archetype:"Archetype",location:"Location",size:"Company size"},b6e={archetype:{unit:"archetypes",back:"All archetypes"},location:{unit:"locations",back:"All locations"},size:{unit:"size buckets",back:"All company sizes"}};function v6e({roles:e}){const[t,a]=M.useState("archetype"),[i,r]=M.useState(null),o=gc(),l=M.useMemo(()=>p6e(e),[e]),d=n6e(),u=M.useMemo(()=>m6e(e,{mode:t,sizeCache:d}),[e,t,l,d]),h=i?f6e(u,i):void 0,m=M.useMemo(()=>h?y6e(h,l,d):g6e(u),[u,h,l,d]),f=m.reduce((j,T)=>j+T.size,0),y=M.useMemo(()=>h?h.roles.filter(sw).length:e.filter(sw).length,[e,h]),b=(h==null?void 0:h.label)??null,x=b6e[t];function k(j){a(j),r(null)}function v(j){j.kind==="archetype"?r(j.payload):o(`/gtme/jobs?company=${encodeURIComponent(j.payload)}`)}return n.jsxs("div",{className:"gtmr-edit__treemap",children:[n.jsxs("div",{className:"gtmr-edit__treemap-controls",children:[h?n.jsxs("button",{type:"button",className:"gtmr-edit__treemap-back",onClick:()=>r(null),children:["← ",x.back]}):n.jsx("span",{className:"gtmr-edit__treemap-label",children:"Group by"}),n.jsx("div",{className:"gtmr-edit__treemap-modes",role:"tablist","aria-label":"Treemap grouping",children:Object.keys(OB).map(j=>n.jsx("button",{type:"button",role:"tab","aria-selected":t===j,className:`gtmr-edit__treemap-mode${t===j?" gtmr-edit__treemap-mode--active":""}`,onClick:()=>k(j),children:OB[j]},j))}),n.jsx("span",{className:"gtmr-edit__treemap-meta",children:b?n.jsxs(n.Fragment,{children:[n.jsx("b",{children:b})," · ",m.length.toLocaleString()," companies ·"," ",f.toLocaleString()," total roles · ",y.toLocaleStr
vendor: 9,282 bytes, line 7805
7805ing()," open"]}):n.jsxs(n.Fragment,{children:[m.length," ",x.unit," · ",f.toLocaleString()," total roles ·"," ",y.toLocaleString()," open · click a tile to drill in"]})})]}),n.jsx("div",{className:"gtmr-edit__treemap-canvas",children:n.jsx(b3,{width:"100%",height:h?480:380,children:n.jsx(CE,{data:m,dataKey:"size",isAnimationActive:!1,content:n.jsx(x6e,{onTileClick:v})})})}),!h&&n.jsx("div",{className:"gtmr-edit__treemap-archetype-legend",children:m.map(j=>n.jsxs("span",{className:"gtmr-edit__treemap-archetype-chip",children:[n.jsx("span",{className:"gtmr-edit__treemap-archetype-swatch",style:{background:j.color},"aria-hidden":!0}),j.name]},j.payload))})]})}function x6e(e){const{x:t=0,y:a=0,width:i=0,height:r=0,name:o="",size:l=0,color:d="#869DA2",invertText:u=!0,payload:h="",caption:m="",tooltip:f="",kind:y="archetype",onTileClick:b}=e;if(i<=0||r<=0)return null;const x=u?"#ffffff":"#1b1f1c",k=u?"rgba(255,255,255,0.78)":"rgba(27,31,28,0.65)",v=i>60&&r>28,j=i>96&&r>56,A=Math.max(3,Math.floor((i-16)/7.2)),C=o.length>A?`${o.slice(0,Math.max(3,A-1))}…`:o;return n.jsxs("g",{style:{cursor:h?"pointer":"default"},onClick:()=>h&&(b==null?void 0:b({kind:y,name:o,size:l,color:d,invertText:u,payload:h,caption:m,tooltip:f})),children:[n.jsx("title",{children:f||o}),n.jsx("rect",{x:t,y:a,width:i,height:r,fill:d,stroke:"#ffffff",strokeWidth:1}),v&&n.jsx("text",{x:t+10,y:a+22,fill:x,stroke:"none",fontFamily:"Geist, sans-serif",fontSize:Math.min(18,Math.max(11,Math.sqrt(i*r)/11)),fontWeight:600,letterSpacing:"-0.012em",style:{pointerEvents:"none"},children:C}),j&&n.jsx("text",{x:t+10,y:a+r-12,fill:k,stroke:"none",fontFamily:"Geist, sans-serif",fontSize:11.5,fontWeight:500,style:{pointerEvents:"none"},children:m})]})}class la{constructor(){this._partials=new Float64Array(32),this._n=0}add(t){const a=this._partials;let i=0;for(let r=0;r<this._n&&r<32;r++){const o=a[r],l=t+o,d=Math.abs(t)<Math.abs(o)?t-(l-o):o-(l-t);d&&(a[i++]=d),t=l}return a[i]=t,this._n=i+1,this}valueOf(){const t=this._partials;let a=this._n,i,r,o,l=0;if(a>0){for(l=t[--a];a>0&&(i=l,r=t[--a],l=i+r,o=r-(l-i),!o););a>0&&(o<0&&t[a-1]<0||o>0&&t[a-1]>0)&&(r=o*2,i=l+r,r==i-l&&(l=i))}return l}}function*w6e(e){for(const t of e)yield*t}function wX(e){return Array.from(w6e(e))}function xh(e,t,a){e=+e,t=+t,a=(r=arguments.length)<2?(t=e,e=0,1):r<3?1:+a;for(var i=-1,r=Math.max(0,Math.ceil((t-e)/a))|0,o=new Array(r);++i<r;)o[i]=e+i*a;return o}var Ue=1e-6,ly=1e-12,at=Math.PI,sn=at/2,lw=at/4,Sa=at*2,It=180/at,Be=at/180,ht=Math.abs,um=Math.atan,Ca=Math.atan2,Oe=Math.cos,a0=Math.ceil,kX=Math.exp,v_=Math.hypot,cw=Math.log,XT=Math.pow,Te=Math.sin,er=Math.sign||function(e){return e>0?1:e<0?-1:0},On=Math.sqrt,AE=Math.tan;function jX(e){return e>1?0:e<-1?at:Math.acos(e)}function Aa(e){return e>1?sn:e<-1?-sn:Math.asin(e)}function PB(e){return(e=Te(e/2))*e}function Jt(){}function dw(e,t){e&&DB.hasOwnProperty(e.type)&&DB[e.type](e,t)}var IB={Feature:function(e,t){dw(e.geometry,t)},FeatureCollection:function(e,t){for(var a=e.features,i=-1,r=a.length;++i<r;)dw(a[i].geometry,t)}},DB={Sphere:function(e,t){t.sphere()},Point:function(e,t){e=e.coordinates,t.point(e[0],e[1],e[2])},MultiPoint:function(e,t){for(var a=e.coordinates,i=-1,r=a.length;++i<r;)e=a[i],t.point(e[0],e[1],e[2])},LineString:function(e,t){x_(e.coordinates,t,0)},MultiLineString:function(e,t){for(var a=e.coordinates,i=-1,r=a.length;++i<r;)x_(a[i],t,0)},Polygon:function(e,t){WB(e.coordinates,t)},MultiPolygon:function(e,t){for(var a=e.coordinates,i=-1,r=a.length;++i<r;)WB(a[i],t)},GeometryCollection:function(e,t){for(var a=e.geometries,i=-1,r=a.length;++i<r;)dw(a[i],t)}};function x_(e,t,a){var i=-1,r=e.length-a,o;for(t.lineStart();++i<r;)o=e[i],t.point(o[0],o[1],o[2]);t.lineEnd()}function WB(e,t){var a=-1,i=e.length;for(t.polygonStart();++a<i;)x_(e[a],t,1);t.polygonEnd()}function kr(e,t){e&&IB.hasOwnProperty(e.type)?IB[e.type](e,t):dw(e,t)}var uw=new la,hw=new la,SX,CX,w_,k_,j_,Po={point:Jt,lineStart:Jt,lineEnd:Jt,polygonStart:function(){uw=new la,Po.lineStart=k6e,Po.lineEnd=j6e},polygonEnd:function(){var e=+uw;hw.add(e<0?Sa+e:e),this.lineStart=this.lineEnd=this.point=Jt},sphere:function(){hw.add(Sa)}};function k6e(){Po.point=S6e}function j6e(){AX(SX,CX)}function S6e(e,t){Po.point=AX,SX=e,CX=t,e*=Be,t*=Be,w_=e,k_=Oe(t=t/2+lw),j_=Te(t)}function AX(e,t){e*=Be,t*=Be,t=t/2+lw;var a=e-w_,i=a>=0?1:-1,r=i*a,o=Oe(t),l=Te(t),d=j_*l,u=k_*o+d*Oe(r),h=d*i*Te(r);uw.add(Ca(h,u)),w_=e,k_=o,j_=l}function C6e(e){return hw=new la,kr(e,Po),hw*2}function pw(e){return[Ca(e[1],e[0]),Aa(e[2])]}function Jd(e){var t=e[0],a=e[1],i=Oe(a);return[i*Oe(t),i*Te(t),Te(a)]}function i0(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function Lp(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function QT(e,t){e[0]+=t[0],e[1]+=t[1],e[2]+=t[2]}function r0(e,t){return[e[0]*t,e[1]*t,e[2]*t]}function mw(e){var t=On(e[0]*e[0]+e[1]*e[1]+e[2]*e[2]);e[0]/=t,e[1]/=t,e[2]/=t}var Zt,La,rn,di,ed,TX,_X,Ih,dg,Pl,Gs,ms={point:S_,lineStart:zB,lineEnd:LB,polygonStart:function(){ms.point=EX,ms.lineStart=A6e,ms.lineEnd=T6e,dg=new la,Po.polygonStart()},polygonEnd:function(){Po.polygonEnd(),ms.point=S_,ms.lineStart=zB,ms.lineEnd=LB,uw<0?(Zt=-(rn=180),La=-(di=90)):dg>Ue?di=90:dg<-Ue&&(La=-90),Gs[0]=Zt,Gs[1]=rn},sphere:function(){Zt=-(rn=180),La=-(di=90)}};function S_(e,t){Pl.push(Gs=[Zt=e,rn=e]),t<La&&(La=t),t>di&&(di=t)}function MX(e,t){var a=Jd([e*Be,t*Be]);if(Ih){var i=Lp(Ih,a),r=[i[1],-i[0],0],o=Lp(r,i);mw(o),o=pw(o);var l=e-ed,d=l>0?1:-1,u=o[0]*It*d,h,m=ht(l)>180;m^(d*ed<u&&u<d*e)?(h=o[1]*It,h>di&&(di=h)):(u=(u+360)%360-180,m^(d*ed<u&&u<d*e)?(h=-o[1]*It,h<La&&(La=h)):(t<La&&(La=t),t>di&&(di=t))),m?e<ed?oi(Zt,e)>oi(Zt,rn)&&(rn=e):oi(e,rn)>oi(Zt,rn)&&(Zt=e):rn>=Zt?(e<Zt&&(Zt=e),e>rn&&(rn=e)):e>ed?oi(Zt,e)>oi(Zt,rn)&&(rn=e):oi(e,rn)>oi(Zt,rn)&&(Zt=e)}else Pl.push(Gs=[Zt=e,rn=e]);t<La&&(La=t),t>di&&(di=t),Ih=a,ed=e}function zB(){ms.point=MX}function LB(){Gs[0]=Zt,Gs[1]=rn,ms.point=S_,Ih=null}function EX(e,t){if(Ih){var a=e-ed;dg.add(ht(a)>180?a+(a>0?360:-360):a)}else TX=e,_X=t;Po.point(e,t),MX(e,t)}function A6e(){Po.lineStart()}function T6e(){EX(TX,_X),Po.lineEnd(),ht(dg)>Ue&&(Zt=-(rn=180)),Gs[0]=Zt,Gs[1]=rn,Ih=null}function oi(e,t){return(t-=e)<0?t+360:t}function _6e(e,t){return e[0]-t[0]}function UB(e,t){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:t<e[0]||e[1]<t}function M6e(e){var t,a,i,r,o,l,d;if(di=rn=-(Zt=La=1/0),Pl=[],kr(e,ms),a=Pl.length){for(Pl.sort(_6e),t=1,i=Pl[0],o=[i];t<a;++t)r=Pl[t],UB(i,r[0])||UB(i,r[1])?(oi(i[0],r[1])>oi(i[0],i[1])&&(i[1]=r[1]),oi(r[0],i[1])>oi(i[0],i[1])&&(i[0]=r[0])):o.push(i=r);for(l=-1/0,a=o.length-1,t=0,i=o[a];t<=a;i=r,++t)r=o[t],(d=oi(i[1],r[0]))>l&&(l=d,Zt=r[0],rn=i[1])}return Pl=Gs=null,Zt===1/0||La===1/0?[[NaN,NaN],[NaN,NaN]]:[[Zt,La],[rn,di]]}var qf,fw,gw,yw,bw,vw,xw,ww,C_,A_,T_,RX,NX,fa,ga,ya,Er={sphere:Jt,point:TE,lineStart:BB,lineEnd:qB,polygonStart:function(){Er.lineStart=N6e,Er.lineEnd=O6e},polygonEnd:function(){Er.lineStart=BB,Er.lineEnd=qB}};function TE(e,t){e*=Be,t*=Be;var a=Oe(t);lb(a*Oe(e),a*Te(e),Te(t))}function lb(e,t,a){++qf,gw+=(e-gw)/qf,yw+=(t-yw)/qf,bw+=(a-bw)/qf}function BB(){Er.point=E6e}function E6e(e,t){e*=Be,t*=Be;var a=Oe(t);fa=a*Oe(e),ga=a*Te(e),ya=Te(t),Er.point=R6e,lb(fa,ga,ya)}function R6e(e,t){e*=Be,t*=Be;var a=Oe(t),i=a*Oe(e),r=a*Te(e),o=Te(t),l=Ca(On((l=ga*o-ya*r)*l+(l=ya*i-fa*o)*l+(l=fa*r-ga*i)*l),fa*i+ga*r+ya*o);fw+=l,vw+=l*(fa+(fa=i)),xw+=l*(ga+(ga=r)),ww+=l*(ya+(ya=o)),lb(fa,ga,ya)}function qB(){Er.point=TE}function N6e(){Er.point=P6e}function O6e(){OX(RX,NX),Er.point=TE}function P6e(e,t){RX=e,NX=t,e*=Be,t*=Be,Er.point=OX;var a=Oe(t);fa=a*Oe(e),ga=a*Te(e),ya=Te(t),lb(fa,ga,ya)}function OX(e,t){e*=Be,t*=Be;var a=Oe(t),i=a*Oe(e),r=a*Te(e),o=Te(t),l=ga*o-ya*r,d=ya*i-fa*o,u=fa*r-ga*i,h=v_(l,d,u),m=Aa(h),f=h&&-m/h;C_.add(f*l),A_.add(f*d),T_.add(f*u),fw+=m,vw+=m*(fa+(fa=i)),xw+=m*(ga+(ga=r)),ww+=m*(ya+(ya=o)),lb(fa,ga,ya)}function I6e(e){qf=fw=gw=yw=bw=vw=xw=ww=0,C_=new la,A_=new la,T_=new la,kr(e,Er);var t=+C_,a=+A_,i=+T_,r=v_(t,a,i);return r<ly&&(t=vw,a=xw,i=ww,fw<Ue&&(t=gw,a=yw,i=bw),r=v_(t,a,i),r<ly)?[NaN,NaN]:[Ca(a,t)*It,Aa(i/r)*It]}function sh(e){return function(){return e}}function __(e,t){function a(i,r){return i=e(i,r),t(i[0],i[1])}return e.invert&&t.invert&&(a.invert=function(i,r){return i=t.invert(i,r),i&&e.invert(i[0],i[1])}),a}function M_(e,t){return[ht(e)>at?e+Math.round(-e/Sa)*Sa:e,t]}M_.invert=M_;function _E(e,t,a){return(e%=Sa)?t||a?__(FB(e),GB(t,a)):FB(e):t||a?GB(t,a):M_}function $B(e){return function(t,a){return t+=e,[t>at?t-Sa:t<-at?t+Sa:t,a]}}function FB(e){var t=$B(e);return t.invert=$B(-e),t}function GB(e,t){var a=Oe(e),i=Te(e),r=Oe(t),o=Te(t);function l(d,u){var h=Oe(u),m=Oe(d)*h,f=Te(d)*h,y=Te(u),b=y*a+m*i;return[Ca(f*r-b*o,m*a-y*i),Aa(b*r+f*o)]}return l.invert=function(d,u){var h=Oe(u),m=Oe(d)*h,f=Te(d)*h,y=Te(u),b=y*r-f*o;return[Ca(f*r+y*o,m*a+b*i),Aa(b*a-m*i)]},l}function PX(e){e=_E(e[0]*Be,e[1]*Be,e.length>2?e[2]*Be:0);function t(a){return a=e(a[0]*Be,a[1]*Be),a[0]*=It,a[1]*=It,a}return t.invert=function(a){return a=e.invert(a[0]*Be,a[1]*Be),a[0]*=It,a[1]*=It,a},t}function IX(e,t,a,i,r,o){if(a){var l=Oe(t),d=Te(t),u=i*a;r==null?(r=t+i*Sa,o=t-u/2):(r=HB(l,r),o=HB(l,o),(i>0?r<o:r>o)&&(r+=i*Sa));for(var h,m=r;i>0?m>o:m<o;m-=u)h=pw([l,-d*Oe(m),-d*Te(m)]),e.point(h[0],h[1])}}
vendor: 8,367 bytes, line 7805
7805function HB(e,t){t=Jd(t),t[0]-=e,mw(t);var a=jX(-t[1]);return((-t[2]<0?-a:a)+Sa-Ue)%Sa}function D6e(){var e=sh([0,0]),t=sh(90),a=sh(6),i,r,o={point:l};function l(u,h){i.push(u=r(u,h)),u[0]*=It,u[1]*=It}function d(){var u=e.apply(this,arguments),h=t.apply(this,arguments)*Be,m=a.apply(this,arguments)*Be;return i=[],r=_E(-u[0]*Be,-u[1]*Be,0).invert,IX(o,h,m,1),u={type:"Polygon",coordinates:[i]},i=r=null,u}return d.center=function(u){return arguments.length?(e=typeof u=="function"?u:sh([+u[0],+u[1]]),d):e},d.radius=function(u){return arguments.length?(t=typeof u=="function"?u:sh(+u),d):t},d.precision=function(u){return arguments.length?(a=typeof u=="function"?u:sh(+u),d):a},d}function DX(){var e=[],t;return{point:function(a,i,r){t.push([a,i,r])},lineStart:function(){e.push(t=[])},lineEnd:Jt,rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))},result:function(){var a=e;return e=[],t=null,a}}}function N0(e,t){return ht(e[0]-t[0])<Ue&&ht(e[1]-t[1])<Ue}function o0(e,t,a,i){this.x=e,this.z=t,this.o=a,this.e=i,this.v=!1,this.n=this.p=null}function WX(e,t,a,i,r){var o=[],l=[],d,u;if(e.forEach(function(x){if(!((k=x.length-1)<=0)){var k,v=x[0],j=x[k],T;if(N0(v,j)){if(!v[2]&&!j[2]){for(r.lineStart(),d=0;d<k;++d)r.point((v=x[d])[0],v[1]);r.lineEnd();return}j[0]+=2*Ue}o.push(T=new o0(v,x,null,!0)),l.push(T.o=new o0(v,null,T,!1)),o.push(T=new o0(j,x,null,!1)),l.push(T.o=new o0(j,null,T,!0))}}),!!o.length){for(l.sort(t),YB(o),YB(l),d=0,u=l.length;d<u;++d)l[d].e=a=!a;for(var h=o[0],m,f;;){for(var y=h,b=!0;y.v;)if((y=y.n)===h)return;m=y.z,r.lineStart();do{if(y.v=y.o.v=!0,y.e){if(b)for(d=0,u=m.length;d<u;++d)r.point((f=m[d])[0],f[1]);else i(y.x,y.n.x,1,r);y=y.n}else{if(b)for(m=y.p.z,d=m.length-1;d>=0;--d)r.point((f=m[d])[0],f[1]);else i(y.x,y.p.x,-1,r);y=y.p}y=y.o,m=y.z,b=!b}while(!y.v);r.lineEnd()}}}function YB(e){if(t=e.length){for(var t,a=0,i=e[0],r;++a<t;)i.n=r=e[a],r.p=i,i=r;i.n=r=e[0],r.p=i}}function ZT(e){return ht(e[0])<=at?e[0]:er(e[0])*((ht(e[0])+at)%Sa-at)}function zX(e,t){var a=ZT(t),i=t[1],r=Te(i),o=[Te(a),-Oe(a),0],l=0,d=0,u=new la;r===1?i=sn+Ue:r===-1&&(i=-sn-Ue);for(var h=0,m=e.length;h<m;++h)if(y=(f=e[h]).length)for(var f,y,b=f[y-1],x=ZT(b),k=b[1]/2+lw,v=Te(k),j=Oe(k),T=0;T<y;++T,x=C,v=E,j=R,b=A){var A=f[T],C=ZT(A),_=A[1]/2+lw,E=Te(_),R=Oe(_),W=C-x,z=W>=0?1:-1,H=z*W,$=H>at,U=v*E;if(u.add(Ca(U*z*Te(H),j*R+U*Oe(H))),l+=$?W+z*Sa:W,$^x>=a^C>=a){var X=Lp(Jd(b),Jd(A));mw(X);var D=Lp(o,X);mw(D);var P=($^W>=0?-1:1)*Aa(D[2]);(i>P||i===P&&(X[0]||X[1]))&&(d+=$^W>=0?1:-1)}}return(l<-Ue||l<Ue&&u<-ly)^d&1}function LX(e,t,a,i){return function(r){var o=t(r),l=DX(),d=t(l),u=!1,h,m,f,y={point:b,lineStart:k,lineEnd:v,polygonStart:function(){y.point=j,y.lineStart=T,y.lineEnd=A,m=[],h=[]},polygonEnd:function(){y.point=b,y.lineStart=k,y.lineEnd=v,m=wX(m);var C=zX(h,i);m.length?(u||(r.polygonStart(),u=!0),WX(m,z6e,C,a,r)):C&&(u||(r.polygonStart(),u=!0),r.lineStart(),a(null,null,1,r),r.lineEnd()),u&&(r.polygonEnd(),u=!1),m=h=null},sphere:function(){r.polygonStart(),r.lineStart(),a(null,null,1,r),r.lineEnd(),r.polygonEnd()}};function b(C,_){e(C,_)&&r.point(C,_)}function x(C,_){o.point(C,_)}function k(){y.point=x,o.lineStart()}function v(){y.point=b,o.lineEnd()}function j(C,_){f.push([C,_]),d.point(C,_)}function T(){d.lineStart(),f=[]}function A(){j(f[0][0],f[0][1]),d.lineEnd();var C=d.clean(),_=l.result(),E,R=_.length,W,z,H;if(f.pop(),h.push(f),f=null,!!R){if(C&1){if(z=_[0],(W=z.length-1)>0){for(u||(r.polygonStart(),u=!0),r.lineStart(),E=0;E<W;++E)r.point((H=z[E])[0],H[1]);r.lineEnd()}return}R>1&&C&2&&_.push(_.pop().concat(_.shift())),m.push(_.filter(W6e))}}return y}}function W6e(e){return e.length>1}function z6e(e,t){return((e=e.x)[0]<0?e[1]-sn-Ue:sn-e[1])-((t=t.x)[0]<0?t[1]-sn-Ue:sn-t[1])}const E_=LX(function(){return!0},L6e,B6e,[-at,-sn]);function L6e(e){var t=NaN,a=NaN,i=NaN,r;return{lineStart:function(){e.lineStart(),r=1},point:function(o,l){var d=o>0?at:-at,u=ht(o-t);ht(u-at)<Ue?(e.point(t,a=(a+l)/2>0?sn:-sn),e.point(i,a),e.lineEnd(),e.lineStart(),e.point(d,a),e.point(o,a),r=0):i!==d&&u>=at&&(ht(t-i)<Ue&&(t-=i*Ue),ht(o-d)<Ue&&(o-=d*Ue),a=U6e(t,a,o,l),e.point(i,a),e.lineEnd(),e.lineStart(),e.point(d,a),r=0),e.point(t=o,a=l),i=d},lineEnd:function(){e.lineEnd(),t=a=NaN},clean:function(){return 2-r}}}function U6e(e,t,a,i){var r,o,l=Te(e-a);return ht(l)>Ue?um((Te(t)*(o=Oe(i))*Te(a)-Te(i)*(r=Oe(t))*Te(e))/(r*o*l)):(t+i)/2}function B6e(e,t,a,i){var r;if(e==null)r=a*sn,i.point(-at,r),i.point(0,r),i.point(at,r),i.point(at,0),i.point(at,-r),i.point(0,-r),i.point(-at,-r),i.point(-at,0),i.point(-at,r);else if(ht(e[0]-t[0])>Ue){var o=e[0]<t[0]?at:-at;r=a*o/2,i.point(-o,r),i.point(0,r),i.point(o,r)}else i.point(t[0],t[1])}function UX(e){var t=Oe(e),a=6*Be,i=t>0,r=ht(t)>Ue;function o(m,f,y,b){IX(b,e,a,y,m,f)}function l(m,f){return Oe(m)*Oe(f)>t}function d(m){var f,y,b,x,k;return{lineStart:function(){x=b=!1,k=1},point:function(v,j){var T=[v,j],A,C=l(v,j),_=i?C?0:h(v,j):C?h(v+(v<0?at:-at),j):0;if(!f&&(x=b=C)&&m.lineStart(),C!==b&&(A=u(f,T),(!A||N0(f,A)||N0(T,A))&&(T[2]=1)),C!==b)k=0,C?(m.lineStart(),A=u(T,f),m.point(A[0],A[1])):(A=u(f,T),m.point(A[0],A[1],2),m.lineEnd()),f=A;else if(r&&f&&i^C){var E;!(_&y)&&(E=u(T,f,!0))&&(k=0,i?(m.lineStart(),m.point(E[0][0],E[0][1]),m.point(E[1][0],E[1][1]),m.lineEnd()):(m.point(E[1][0],E[1][1]),m.lineEnd(),m.lineStart(),m.point(E[0][0],E[0][1],3)))}C&&(!f||!N0(f,T))&&m.point(T[0],T[1]),f=T,b=C,y=_},lineEnd:function(){b&&m.lineEnd(),f=null},clean:function(){return k|(x&&b)<<1}}}function u(m,f,y){var b=Jd(m),x=Jd(f),k=[1,0,0],v=Lp(b,x),j=i0(v,v),T=v[0],A=j-T*T;if(!A)return!y&&m;var C=t*j/A,_=-t*T/A,E=Lp(k,v),R=r0(k,C),W=r0(v,_);QT(R,W);var z=E,H=i0(R,z),$=i0(z,z),U=H*H-$*(i0(R,R)-1);if(!(U<0)){var X=On(U),D=r0(z,(-H-X)/$);if(QT(D,R),D=pw(D),!y)return D;var P=m[0],O=f[0],B=m[1],Y=f[1],V;O<P&&(V=P,P=O,O=V);var G=O-P,I=ht(G-at)<Ue,F=I||G<Ue;if(!I&&Y<B&&(V=B,B=Y,Y=V),F?I?B+Y>0^D[1]<(ht(D[0]-P)<Ue?B:Y):B<=D[1]&&D[1]<=Y:G>at^(P<=D[0]&&D[0]<=O)){var K=r0(z,(-H+X)/$);return QT(K,R),[D,pw(K)]}}}function h(m,f){var y=i?e:at-e,b=0;return m<-y?b|=1:m>y&&(b|=2),f<-y?b|=4:f>y&&(b|=8),b}return LX(l,d,o,i?[0,-e]:[-at,e-at])}function q6e(e,t,a,i,r,o){var l=e[0],d=e[1],u=t[0],h=t[1],m=0,f=1,y=u-l,b=h-d,x;if(x=a-l,!(!y&&x>0)){if(x/=y,y<0){if(x<m)return;x<f&&(f=x)}else if(y>0){if(x>f)return;x>m&&(m=x)}if(x=r-l,!(!y&&x<0)){if(x/=y,y<0){if(x>f)return;x>m&&(m=x)}else if(y>0){if(x<m)return;x<f&&(f=x)}if(x=i-d,!(!b&&x>0)){if(x/=b,b<0){if(x<m)return;x<f&&(f=x)}else if(b>0){if(x>f)return;x>m&&(m=x)}if(x=o-d,!(!b&&x<0)){if(x/=b,b<0){if(x>f)return;x>m&&(m=x)}else if(b>0){if(x<m)return;x<f&&(f=x)}return m>0&&(e[0]=l+m*y,e[1]=d+m*b),f<1&&(t[0]=l+f*y,t[1]=d+f*b),!0}}}}}var $f=1e9,s0=-$f;function X1(e,t,a,i){function r(h,m){return e<=h&&h<=a&&t<=m&&m<=i}function o(h,m,f,y){var b=0,x=0;if(h==null||(b=l(h,f))!==(x=l(m,f))||u(h,m)<0^f>0)do y.point(b===0||b===3?e:a,b>1?i:t);while((b=(b+f+4)%4)!==x);else y.point(m[0],m[1])}function l(h,m){return ht(h[0]-e)<Ue?m>0?0:3:ht(h[0]-a)<Ue?m>0?2:1:ht(h[1]-t)<Ue?m>0?1:0:m>0?3:2}function d(h,m){return u(h.x,m.x)}function u(h,m){var f=l(h,1),y=l(m,1);return f!==y?f-y:f===0?m[1]-h[1]:f===1?h[0]-m[0]:f===2?h[1]-m[1]:m[0]-h[0]}return function(h){var m=h,f=DX(),y,b,x,k,v,j,T,A,C,_,E,R={point:W,lineStart:U,lineEnd:X,polygonStart:H,polygonEnd:$};function W(P,O){r(P,O)&&m.point(P,O)}function z(){for(var P=0,O=0,B=b.length;O<B;++O)for(var Y=b[O],V=1,G=Y.length,I=Y[0],F,K,ne=I[0],ae=I[1];V<G;++V)F=ne,K=ae,I=Y[V],ne=I[0],ae=I[1],K<=i?ae>i&&(ne-F)*(i-K)>(ae-K)*(e-F)&&++P:ae<=i&&(ne-F)*(i-K)<(ae-K)*(e-F)&&--P;return P}function H(){m=f,y=[],b=[],E=!0}function $(){var P=z(),O=E&&P,B=(y=wX(y)).length;(O||B)&&(h.polygonStart(),O&&(h.lineStart(),o(null,null,1,h),h.lineEnd()),B&&WX(y,d,P,o,h),h.polygonEnd()),m=h,y=b=x=null}function U(){R.point=D,b&&b.push(x=[]),_=!0,C=!1,T=A=NaN}function X(){y&&(D(k,v),j&&C&&f.rejoin(),y.push(f.result())),R.point=W,C&&m.lineEnd()}function D(P,O){var B=r(P,O);if(b&&x.push([P,O]),_)k=P,v=O,j=B,_=!1,B&&(m.lineStart(),m.point(P,O));else if(B&&C)m.point(P,O);else{var Y=[T=Math.max(s0,Math.min($f,T)),A=Math.max(s0,Math.min($f,A))],V=[P=Math.max(s0,Math.min($f,P)),O=Math.max(s0,Math.min($f,O))];q6e(Y,V,e,t,a,i)?(C||(m.lineStart(),m.point(Y[0],Y[1])),m.point(V[0],V[1]),B||m.lineEnd(),E=!1):B&&(m.lineStart(),m.point(P,O),E=!1)}T=P,A=O,C=B}return R}}function $6e(){var e=0,t=0,a=960,i=500,r,o,l;
vendor: 7,929 bytes, line 7805
7805return l={stream:function(d){return r&&o===d?r:r=X1(e,t,a,i)(o=d)},extent:function(d){return arguments.length?(e=+d[0][0],t=+d[0][1],a=+d[1][0],i=+d[1][1],r=o=null,l):[[e,t],[a,i]]}}}var R_,N_,O0,P0,Up={sphere:Jt,point:Jt,lineStart:F6e,lineEnd:Jt,polygonStart:Jt,polygonEnd:Jt};function F6e(){Up.point=H6e,Up.lineEnd=G6e}function G6e(){Up.point=Up.lineEnd=Jt}function H6e(e,t){e*=Be,t*=Be,N_=e,O0=Te(t),P0=Oe(t),Up.point=Y6e}function Y6e(e,t){e*=Be,t*=Be;var a=Te(t),i=Oe(t),r=ht(e-N_),o=Oe(r),l=Te(r),d=i*l,u=P0*a-O0*i*o,h=O0*a+P0*i*o;R_.add(Ca(On(d*d+u*u),h)),N_=e,O0=a,P0=i}function BX(e){return R_=new la,kr(e,Up),+R_}var O_=[null,null],V6e={type:"LineString",coordinates:O_};function kw(e,t){return O_[0]=e,O_[1]=t,BX(V6e)}var VB={Feature:function(e,t){return jw(e.geometry,t)},FeatureCollection:function(e,t){for(var a=e.features,i=-1,r=a.length;++i<r;)if(jw(a[i].geometry,t))return!0;return!1}},KB={Sphere:function(){return!0},Point:function(e,t){return XB(e.coordinates,t)},MultiPoint:function(e,t){for(var a=e.coordinates,i=-1,r=a.length;++i<r;)if(XB(a[i],t))return!0;return!1},LineString:function(e,t){return QB(e.coordinates,t)},MultiLineString:function(e,t){for(var a=e.coordinates,i=-1,r=a.length;++i<r;)if(QB(a[i],t))return!0;return!1},Polygon:function(e,t){return ZB(e.coordinates,t)},MultiPolygon:function(e,t){for(var a=e.coordinates,i=-1,r=a.length;++i<r;)if(ZB(a[i],t))return!0;return!1},GeometryCollection:function(e,t){for(var a=e.geometries,i=-1,r=a.length;++i<r;)if(jw(a[i],t))return!0;return!1}};function jw(e,t){return e&&KB.hasOwnProperty(e.type)?KB[e.type](e,t):!1}function XB(e,t){return kw(e,t)===0}function QB(e,t){for(var a,i,r,o=0,l=e.length;o<l;o++){if(i=kw(e[o],t),i===0||o>0&&(r=kw(e[o],e[o-1]),r>0&&a<=r&&i<=r&&(a+i-r)*(1-Math.pow((a-i)/r,2))<ly*r))return!0;a=i}return!1}function ZB(e,t){return!!zX(e.map(K6e),qX(t))}function K6e(e){return e=e.map(qX),e.pop(),e}function qX(e){return[e[0]*Be,e[1]*Be]}function X6e(e,t){return(e&&VB.hasOwnProperty(e.type)?VB[e.type]:jw)(e,t)}function JB(e,t,a){var i=xh(e,t-Ue,a).concat(t);return function(r){return i.map(function(o){return[r,o]})}}function eq(e,t,a){var i=xh(e,t-Ue,a).concat(t);return function(r){return i.map(function(o){return[o,r]})}}function ME(){var e,t,a,i,r,o,l,d,u=10,h=u,m=90,f=360,y,b,x,k,v=2.5;function j(){return{type:"MultiLineString",coordinates:T()}}function T(){return xh(a0(i/m)*m,a,m).map(x).concat(xh(a0(d/f)*f,l,f).map(k)).concat(xh(a0(t/u)*u,e,u).filter(function(A){return ht(A%m)>Ue}).map(y)).concat(xh(a0(o/h)*h,r,h).filter(function(A){return ht(A%f)>Ue}).map(b))}return j.lines=function(){return T().map(function(A){return{type:"LineString",coordinates:A}})},j.outline=function(){return{type:"Polygon",coordinates:[x(i).concat(k(l).slice(1),x(a).reverse().slice(1),k(d).reverse().slice(1))]}},j.extent=function(A){return arguments.length?j.extentMajor(A).extentMinor(A):j.extentMinor()},j.extentMajor=function(A){return arguments.length?(i=+A[0][0],a=+A[1][0],d=+A[0][1],l=+A[1][1],i>a&&(A=i,i=a,a=A),d>l&&(A=d,d=l,l=A),j.precision(v)):[[i,d],[a,l]]},j.extentMinor=function(A){return arguments.length?(t=+A[0][0],e=+A[1][0],o=+A[0][1],r=+A[1][1],t>e&&(A=t,t=e,e=A),o>r&&(A=o,o=r,r=A),j.precision(v)):[[t,o],[e,r]]},j.step=function(A){return arguments.length?j.stepMajor(A).stepMinor(A):j.stepMinor()},j.stepMajor=function(A){return arguments.length?(m=+A[0],f=+A[1],j):[m,f]},j.stepMinor=function(A){return arguments.length?(u=+A[0],h=+A[1],j):[u,h]},j.precision=function(A){return arguments.length?(v=+A,y=JB(o,r,90),b=eq(t,e,v),x=JB(d,l,90),k=eq(i,a,v),j):v},j.extentMajor([[-180,-90+Ue],[180,90-Ue]]).extentMinor([[-180,-80-Ue],[180,80+Ue]])}function Q6e(){return ME()()}function Z6e(e,t){var a=e[0]*Be,i=e[1]*Be,r=t[0]*Be,o=t[1]*Be,l=Oe(i),d=Te(i),u=Oe(o),h=Te(o),m=l*Oe(a),f=l*Te(a),y=u*Oe(r),b=u*Te(r),x=2*Aa(On(PB(o-i)+l*u*PB(r-a))),k=Te(x),v=x?function(j){var T=Te(j*=x)/k,A=Te(x-j)/k,C=A*m+T*y,_=A*f+T*b,E=A*d+T*h;return[Ca(_,C)*It,Ca(E,On(C*C+_*_))*It]}:function(){return[a*It,i*It]};return v.distance=x,v}const cy=e=>e;var JT=new la,P_=new la,$X,FX,I_,D_,ys={point:Jt,lineStart:Jt,lineEnd:Jt,polygonStart:function(){ys.lineStart=J6e,ys.lineEnd=t8e},polygonEnd:function(){ys.lineStart=ys.lineEnd=ys.point=Jt,JT.add(ht(P_)),P_=new la},result:function(){var e=JT/2;return JT=new la,e}};function J6e(){ys.point=e8e}function e8e(e,t){ys.point=GX,$X=I_=e,FX=D_=t}function GX(e,t){P_.add(D_*e-I_*t),I_=e,D_=t}function t8e(){GX($X,FX)}var Bp=1/0,Sw=Bp,dy=-Bp,Cw=dy,Aw={point:n8e,lineStart:Jt,lineEnd:Jt,polygonStart:Jt,polygonEnd:Jt,result:function(){var e=[[Bp,Sw],[dy,Cw]];return dy=Cw=-(Sw=Bp=1/0),e}};function n8e(e,t){e<Bp&&(Bp=e),e>dy&&(dy=e),t<Sw&&(Sw=t),t>Cw&&(Cw=t)}var W_=0,z_=0,Ff=0,Tw=0,_w=0,wh=0,L_=0,U_=0,Gf=0,HX,YX,mo,fo,Yi={point:eu,lineStart:tq,lineEnd:nq,polygonStart:function(){Yi.lineStart=r8e,Yi.lineEnd=o8e},polygonEnd:function(){Yi.point=eu,Yi.lineStart=tq,Yi.lineEnd=nq},result:function(){var e=Gf?[L_/Gf,U_/Gf]:wh?[Tw/wh,_w/wh]:Ff?[W_/Ff,z_/Ff]:[NaN,NaN];return W_=z_=Ff=Tw=_w=wh=L_=U_=Gf=0,e}};function eu(e,t){W_+=e,z_+=t,++Ff}function tq(){Yi.point=a8e}function a8e(e,t){Yi.point=i8e,eu(mo=e,fo=t)}function i8e(e,t){var a=e-mo,i=t-fo,r=On(a*a+i*i);Tw+=r*(mo+e)/2,_w+=r*(fo+t)/2,wh+=r,eu(mo=e,fo=t)}function nq(){Yi.point=eu}function r8e(){Yi.point=s8e}function o8e(){VX(HX,YX)}function s8e(e,t){Yi.point=VX,eu(HX=mo=e,YX=fo=t)}function VX(e,t){var a=e-mo,i=t-fo,r=On(a*a+i*i);Tw+=r*(mo+e)/2,_w+=r*(fo+t)/2,wh+=r,r=fo*e-mo*t,L_+=r*(mo+e),U_+=r*(fo+t),Gf+=r*3,eu(mo=e,fo=t)}function KX(e){this._context=e}KX.prototype={_radius:4.5,pointRadius:function(e){return this._radius=e,this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){this._line===0&&this._context.closePath(),this._point=NaN},point:function(e,t){switch(this._point){case 0:{this._context.moveTo(e,t),this._point=1;break}case 1:{this._context.lineTo(e,t);break}default:{this._context.moveTo(e+this._radius,t),this._context.arc(e,t,this._radius,0,Sa);break}}},result:Jt};var B_=new la,e4,XX,QX,Hf,Yf,uy={point:Jt,lineStart:function(){uy.point=l8e},lineEnd:function(){e4&&ZX(XX,QX),uy.point=Jt},polygonStart:function(){e4=!0},polygonEnd:function(){e4=null},result:function(){var e=+B_;return B_=new la,e}};function l8e(e,t){uy.point=ZX,XX=Hf=e,QX=Yf=t}function ZX(e,t){Hf-=e,Yf-=t,B_.add(On(Hf*Hf+Yf*Yf)),Hf=e,Yf=t}function JX(){this._string=[]}JX.prototype={_radius:4.5,_circle:aq(4.5),pointRadius:function(e){return(e=+e)!==this._radius&&(this._radius=e,this._circle=null),this},polygonStart:function(){this._line=0},polygonEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){this._line===0&&this._string.push("Z"),this._point=NaN},point:function(e,t){switch(this._point){case 0:{this._string.push("M",e,",",t),this._point=1;break}case 1:{this._string.push("L",e,",",t);break}default:{this._circle==null&&(this._circle=aq(this._radius)),this._string.push("M",e,",",t,this._circle);break}}},result:function(){if(this._string.length){var e=this._string.join("");return this._string=[],e}else return null}};function aq(e){return"m0,"+e+"a"+e+","+e+" 0 1,1 0,"+-2*e+"a"+e+","+e+" 0 1,1 0,"+2*e+"z"}function eQ(e,t){var a=4.5,i,r;function o(l){return l&&(typeof a=="function"&&r.pointRadius(+a.apply(this,arguments)),kr(l,i(r))),r.result()}return o.area=function(l){return kr(l,i(ys)),ys.result()},o.measure=function(l){return kr(l,i(uy)),uy.result()},o.bounds=function(l){return kr(l,i(Aw)),Aw.result()},o.centroid=function(l){return kr(l,i(Yi)),Yi.result()},o.projection=function(l){return arguments.length?(i=l==null?(e=null,cy):(e=l).stream,o):e},o.context=function(l){return arguments.length?(r=l==null?(t=null,new JX):new KX(t=l),typeof a!="function"&&r.pointRadius(a),o):t},o.pointRadius=function(l){return arguments.length?(a=typeof l=="function"?l:(r.pointRadius(+l),+l),o):a},o.projection(e).context(t)}
vendor: 1,372 bytes, line 7805
7805function c8e(e){return{stream:cb(e)}}function cb(e){return function(t){var a=new q_;for(var i in e)a[i]=e[i];return a.stream=t,a}}function q_(){}q_.prototype={constructor:q_,point:function(e,t){this.stream.point(e,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}};function EE(e,t,a){var i=e.clipExtent&&e.clipExtent();return e.scale(150).translate([0,0]),i!=null&&e.clipExtent(null),kr(a,e.stream(Aw)),t(Aw.result()),i!=null&&e.clipExtent(i),e}function Q1(e,t,a){return EE(e,function(i){var r=t[1][0]-t[0][0],o=t[1][1]-t[0][1],l=Math.min(r/(i[1][0]-i[0][0]),o/(i[1][1]-i[0][1])),d=+t[0][0]+(r-l*(i[1][0]+i[0][0]))/2,u=+t[0][1]+(o-l*(i[1][1]+i[0][1]))/2;e.scale(150*l).translate([d,u])},a)}function RE(e,t,a){return Q1(e,[[0,0],t],a)}function NE(e,t,a){return EE(e,function(i){var r=+t,o=r/(i[1][0]-i[0][0]),l=(r-o*(i[1][0]+i[0][0]))/2,d=-o*i[0][1];e.scale(150*o).translate([l,d])},a)}function OE(e,t,a){return EE(e,function(i){var r=+t,o=r/(i[1][1]-i[0][1]),l=-o*i[0][0],d=(r-o*(i[1][1]+i[0][1]))/2;e.scale(150*o).translate([l,d])},a)}var iq=16,d8e=Oe(30*Be);function rq(e,t){return+t?h8e(e,t):u8e(e)}function u8e(e){return cb({point:function(t,a){t=e(t,a),this.stream.point(t[0],t[1])}})}
vendor: 14,349 bytes, line 7805
7805function h8e(e,t){function a(i,r,o,l,d,u,h,m,f,y,b,x,k,v){var j=h-i,T=m-r,A=j*j+T*T;if(A>4*t&&k--){var C=l+y,_=d+b,E=u+x,R=On(C*C+_*_+E*E),W=Aa(E/=R),z=ht(ht(E)-1)<Ue||ht(o-f)<Ue?(o+f)/2:Ca(_,C),H=e(z,W),$=H[0],U=H[1],X=$-i,D=U-r,P=T*X-j*D;(P*P/A>t||ht((j*X+T*D)/A-.5)>.3||l*y+d*b+u*x<d8e)&&(a(i,r,o,l,d,u,$,U,z,C/=R,_/=R,E,k,v),v.point($,U),a($,U,z,C,_,E,h,m,f,y,b,x,k,v))}}return function(i){var r,o,l,d,u,h,m,f,y,b,x,k,v={point:j,lineStart:T,lineEnd:C,polygonStart:function(){i.polygonStart(),v.lineStart=_},polygonEnd:function(){i.polygonEnd(),v.lineStart=T}};function j(W,z){W=e(W,z),i.point(W[0],W[1])}function T(){f=NaN,v.point=A,i.lineStart()}function A(W,z){var H=Jd([W,z]),$=e(W,z);a(f,y,m,b,x,k,f=$[0],y=$[1],m=W,b=H[0],x=H[1],k=H[2],iq,i),i.point(f,y)}function C(){v.point=j,i.lineEnd()}function _(){T(),v.point=E,v.lineEnd=R}function E(W,z){A(r=W,z),o=f,l=y,d=b,u=x,h=k,v.point=A}function R(){a(f,y,m,b,x,k,o,l,r,d,u,h,iq,i),v.lineEnd=C,C()}return v}}var p8e=cb({point:function(e,t){this.stream.point(e*Be,t*Be)}});function m8e(e){return cb({point:function(t,a){var i=e(t,a);return this.stream.point(i[0],i[1])}})}function f8e(e,t,a,i,r){function o(l,d){return l*=i,d*=r,[t+e*l,a-e*d]}return o.invert=function(l,d){return[(l-t)/e*i,(a-d)/e*r]},o}function oq(e,t,a,i,r,o){if(!o)return f8e(e,t,a,i,r);var l=Oe(o),d=Te(o),u=l*e,h=d*e,m=l/e,f=d/e,y=(d*a-l*t)/e,b=(d*t+l*a)/e;function x(k,v){return k*=i,v*=r,[u*k-h*v+t,a-h*k-u*v]}return x.invert=function(k,v){return[i*(m*k-f*v+y),r*(b-f*k-m*v)]},x}function Lo(e){return PE(function(){return e})()}function PE(e){var t,a=150,i=480,r=250,o=0,l=0,d=0,u=0,h=0,m,f=0,y=1,b=1,x=null,k=E_,v=null,j,T,A,C=cy,_=.5,E,R,W,z,H;function $(P){return W(P[0]*Be,P[1]*Be)}function U(P){return P=W.invert(P[0],P[1]),P&&[P[0]*It,P[1]*It]}$.stream=function(P){return z&&H===P?z:z=p8e(m8e(m)(k(E(C(H=P)))))},$.preclip=function(P){return arguments.length?(k=P,x=void 0,D()):k},$.postclip=function(P){return arguments.length?(C=P,v=j=T=A=null,D()):C},$.clipAngle=function(P){return arguments.length?(k=+P?UX(x=P*Be):(x=null,E_),D()):x*It},$.clipExtent=function(P){return arguments.length?(C=P==null?(v=j=T=A=null,cy):X1(v=+P[0][0],j=+P[0][1],T=+P[1][0],A=+P[1][1]),D()):v==null?null:[[v,j],[T,A]]},$.scale=function(P){return arguments.length?(a=+P,X()):a},$.translate=function(P){return arguments.length?(i=+P[0],r=+P[1],X()):[i,r]},$.center=function(P){return arguments.length?(o=P[0]%360*Be,l=P[1]%360*Be,X()):[o*It,l*It]},$.rotate=function(P){return arguments.length?(d=P[0]%360*Be,u=P[1]%360*Be,h=P.length>2?P[2]%360*Be:0,X()):[d*It,u*It,h*It]},$.angle=function(P){return arguments.length?(f=P%360*Be,X()):f*It},$.reflectX=function(P){return arguments.length?(y=P?-1:1,X()):y<0},$.reflectY=function(P){return arguments.length?(b=P?-1:1,X()):b<0},$.precision=function(P){return arguments.length?(E=rq(R,_=P*P),D()):On(_)},$.fitExtent=function(P,O){return Q1($,P,O)},$.fitSize=function(P,O){return RE($,P,O)},$.fitWidth=function(P,O){return NE($,P,O)},$.fitHeight=function(P,O){return OE($,P,O)};function X(){var P=oq(a,0,0,y,b,f).apply(null,t(o,l)),O=oq(a,i-P[0],r-P[1],y,b,f);return m=_E(d,u,h),R=__(t,O),W=__(m,R),E=rq(R,_),D()}function D(){return z=H=null,$}return function(){return t=e.apply(this,arguments),$.invert=t.invert&&U,X()}}function IE(e){var t=0,a=at/3,i=PE(e),r=i(t,a);return r.parallels=function(o){return arguments.length?i(t=o[0]*Be,a=o[1]*Be):[t*It,a*It]},r}function g8e(e){var t=Oe(e);function a(i,r){return[i*t,Te(r)/t]}return a.invert=function(i,r){return[i/t,Aa(r*t)]},a}function tQ(e,t){var a=Te(e),i=(a+Te(t))/2;if(ht(i)<Ue)return g8e(e);var r=1+a*(2*i-a),o=On(r)/i;function l(d,u){var h=On(r-2*i*Te(u))/i;return[h*Te(d*=i),o-h*Oe(d)]}return l.invert=function(d,u){var h=o-u,m=Ca(d,ht(h))*er(h);return h*i<0&&(m-=at*er(d)*er(h)),[m/i,Aa((r-(d*d+h*h)*i*i)/(2*i))]},l}function Mw(){return IE(tQ).scale(155.424).center([0,33.6442])}function nQ(){return Mw().parallels([29.5,45.5]).scale(1070).translate([480,250]).rotate([96,0]).center([-.6,38.7])}function y8e(e){var t=e.length;return{point:function(a,i){for(var r=-1;++r<t;)e[r].point(a,i)},sphere:function(){for(var a=-1;++a<t;)e[a].sphere()},lineStart:function(){for(var a=-1;++a<t;)e[a].lineStart()},lineEnd:function(){for(var a=-1;++a<t;)e[a].lineEnd()},polygonStart:function(){for(var a=-1;++a<t;)e[a].polygonStart()},polygonEnd:function(){for(var a=-1;++a<t;)e[a].polygonEnd()}}}function b8e(){var e,t,a=nQ(),i,r=Mw().rotate([154,0]).center([-2,58.5]).parallels([55,65]),o,l=Mw().rotate([157,0]).center([-3,19.9]).parallels([8,18]),d,u,h={point:function(y,b){u=[y,b]}};function m(y){var b=y[0],x=y[1];return u=null,i.point(b,x),u||(o.point(b,x),u)||(d.point(b,x),u)}m.invert=function(y){var b=a.scale(),x=a.translate(),k=(y[0]-x[0])/b,v=(y[1]-x[1])/b;return(v>=.12&&v<.234&&k>=-.425&&k<-.214?r:v>=.166&&v<.234&&k>=-.214&&k<-.115?l:a).invert(y)},m.stream=function(y){return e&&t===y?e:e=y8e([a.stream(t=y),r.stream(y),l.stream(y)])},m.precision=function(y){return arguments.length?(a.precision(y),r.precision(y),l.precision(y),f()):a.precision()},m.scale=function(y){return arguments.length?(a.scale(y),r.scale(y*.35),l.scale(y),m.translate(a.translate())):a.scale()},m.translate=function(y){if(!arguments.length)return a.translate();var b=a.scale(),x=+y[0],k=+y[1];return i=a.translate(y).clipExtent([[x-.455*b,k-.238*b],[x+.455*b,k+.238*b]]).stream(h),o=r.translate([x-.307*b,k+.201*b]).clipExtent([[x-.425*b+Ue,k+.12*b+Ue],[x-.214*b-Ue,k+.234*b-Ue]]).stream(h),d=l.translate([x-.205*b,k+.212*b]).clipExtent([[x-.214*b+Ue,k+.166*b+Ue],[x-.115*b-Ue,k+.234*b-Ue]]).stream(h),f()},m.fitExtent=function(y,b){return Q1(m,y,b)},m.fitSize=function(y,b){return RE(m,y,b)},m.fitWidth=function(y,b){return NE(m,y,b)},m.fitHeight=function(y,b){return OE(m,y,b)};function f(){return e=t=null,m}return m.scale(1070)}function aQ(e){return function(t,a){var i=Oe(t),r=Oe(a),o=e(i*r);return o===1/0?[2,0]:[o*r*Te(t),o*Te(a)]}}function db(e){return function(t,a){var i=On(t*t+a*a),r=e(i),o=Te(r),l=Oe(r);return[Ca(t*o,i*l),Aa(i&&a*o/i)]}}var DE=aQ(function(e){return On(2/(1+e))});DE.invert=db(function(e){return 2*Aa(e/2)});function v8e(){return Lo(DE).scale(124.75).clipAngle(180-.001)}var WE=aQ(function(e){return(e=jX(e))&&e/Te(e)});WE.invert=db(function(e){return e});function x8e(){return Lo(WE).scale(79.4188).clipAngle(180-.001)}function ub(e,t){return[e,cw(AE((sn+t)/2))]}ub.invert=function(e,t){return[e,2*um(kX(t))-sn]};function w8e(){return iQ(ub).scale(961/Sa)}function iQ(e){var t=Lo(e),a=t.center,i=t.scale,r=t.translate,o=t.clipExtent,l=null,d,u,h;t.scale=function(f){return arguments.length?(i(f),m()):i()},t.translate=function(f){return arguments.length?(r(f),m()):r()},t.center=function(f){return arguments.length?(a(f),m()):a()},t.clipExtent=function(f){return arguments.length?(f==null?l=d=u=h=null:(l=+f[0][0],d=+f[0][1],u=+f[1][0],h=+f[1][1]),m()):l==null?null:[[l,d],[u,h]]};function m(){var f=at*i(),y=t(PX(t.rotate()).invert([0,0]));return o(l==null?[[y[0]-f,y[1]-f],[y[0]+f,y[1]+f]]:e===ub?[[Math.max(y[0]-f,l),d],[Math.min(y[0]+f,u),h]]:[[l,Math.max(y[1]-f,d)],[u,Math.min(y[1]+f,h)]])}return m()}function l0(e){return AE((sn+e)/2)}function rQ(e,t){var a=Oe(e),i=e===t?Te(e):cw(a/Oe(t))/cw(l0(t)/l0(e)),r=a*XT(l0(e),i)/i;if(!i)return ub;function o(l,d){r>0?d<-sn+Ue&&(d=-sn+Ue):d>sn-Ue&&(d=sn-Ue);var u=r/XT(l0(d),i);return[u*Te(i*l),r-u*Oe(i*l)]}return o.invert=function(l,d){var u=r-d,h=er(i)*On(l*l+u*u),m=Ca(l,ht(u))*er(u);return u*i<0&&(m-=at*er(l)*er(u)),[m/i,2*um(XT(r/h,1/i))-sn]},o}function k8e(){return IE(rQ).scale(109.5).parallels([30,30])}function hy(e,t){return[e,t]}hy.invert=hy;function j8e(){return Lo(hy).scale(152.63)}function oQ(e,t){var a=Oe(e),i=e===t?Te(e):(a-Oe(t))/(t-e),r=a/i+e;if(ht(i)<Ue)return hy;function o(l,d){var u=r-d,h=i*l;return[u*Te(h),r-u*Oe(h)]}return o.invert=function(l,d){var u=r-d,h=Ca(l,ht(u))*er(u);return u*i<0&&(h-=at*er(l)*er(u)),[h/i,r-er(i)*On(l*l+u*u)]},o}function S8e(){return IE(oQ).scale(131.154).center([0,13.9389])}var ug=1.340264,hg=-.081106,pg=893e-6,mg=.003796,Ew=On(3)/2,C8e=12;function zE(e,t){var a=Aa(Ew*Te(t)),i=a*a,r=i*i*i;return[e*Oe(a)/(Ew*(ug+3*hg*i+r*(7*pg+9*mg*i))),a*(ug+hg*i+r*(pg+mg*i))]}zE.invert=function(e,t){for(var a=t,i=a*a,r=i*i*i,o=0,l,d,u;o<C8e&&(d=a*(ug+hg*i+r*(pg+mg*i))-t,u=ug+3*hg*i+r*(7*pg+9*mg*i),a-=l=d/u,i=a*a,r=i*i*i,!(ht(l)<ly));++o);return[Ew*e*(ug+3*hg*i+r*(7*pg+9*mg*i))/Oe(a),Aa(Te(a)/Ew)]};function A8e(){return Lo(zE).scale(177.158)}function LE(e,t){var a=Oe(t),i=Oe(e)*a;return[a*Te(e)/i,Te(t)/i]}LE.invert=db(um);function T8e(){return Lo(LE).scale(144.049).clipAngle(60)}function _8e(){var e=1,t=0,a=0,i=1,r=1,o=0,l,d,u=null,h,m,f,y=1,b=1,x=cb({point:function(C,_){var E=A([C,_]);this.stream.point(E[0],E[1])}}),k=cy,v,j;function T(){return y=e*i,b=e*r,v=j=null,A}function A(C){var _=C[0]*y,E=C[1]*b;if(o){var R=E*l-_*d;_=_*l+E*d,E=R}return[_+t,E+a]}return A.invert=function(C){var _=C[0]-t,E=C[1]-a;if(o){var R=E*l+_*d;_=_*l-E*d,E=R}return[_/y,E/b]},A.stream=function(C){return v&&j===C?v:v=x(k(j=C))},A.postclip=function(C){return arguments.length?(k=C,u=h=m=f=null,T()):k},A.clipExtent=function(C){return arguments.length?(k=C==null?(u=h=m=f=null,cy):X1(u=+C[0][0],h=+C[0][1],m=+C[1][0],f=+C[1][1]),T()):u==null?null:[[u,h],[m,f]]},A.scale=function(C){return arguments.length?(e=+C,T()):e},A.translate=function(C){return arguments.length?(t=+C[0],a=+C[1],T()):[t,a]},A.angle=function(C){return arguments.length?(o=C%360*Be,d=Te(o),l=Oe(o),T()):o*It},A.reflectX=function(C){return arguments.length?(i=C?-1:1,T()):i<0},A.reflectY=function(C){return arguments.length?(r=C?-1:1,T()):r<0},A.fitExtent=function(C,_){return Q1(A,C,_)},A.fitSize=function(C,_){return RE(A,C,_)},A.fitWidth=function(C,_){return NE(A,C,_)},A.fitHeight=function(C,_){return OE(A,C,_)},A}function UE(e,t){var a=t*t,i=a*a;return[e*(.8707-.131979*a+i*(-.013791+i*(.003971*a-.001529*i))),t*(1.007226+a*(.015085+i*(-.044475+.028874*a-.005916*i)))]}UE.invert=function(e,t){var a=t,i=25,r;do{var o=a*a,l=o*o;a-=r=(a*(1.007226+o*(.015085+l*(-.044475+.028874*o-.005916*l)))-t)/(1.007226+o*(.015085*3+l*(-.044475*7+.028874*9*o-.005916*11*l)))}while(ht(r)>Ue&&--i>0);return[e/(.8707+(o=a*a)*(-.131979+o*(-.013791+o*o*o*(.003971-.001529*o)))),a]};function M8e(){return Lo(UE).scale(175.295)}function BE(e,t){return[Oe(t)*Te(e),Te(t)]}BE.invert=db(Aa);function E8e(){return Lo(BE).scale(249.5).clipAngle(90+Ue)}function qE(e,t){var a=Oe(t),i=1+Oe(e)*a;return[a*Te(e)/i,Te(t)/i]}qE.invert=db(function(e){return 2*um(e)});function R8e(){return Lo(qE).scale(250).clipAngle(142)}function $E(e,t){return[cw(AE((sn+t)/2)),-e]}$E.invert=function(e,t){return[-t,2*um(kX(e))-sn]};function N8e(){var e=iQ($E),t=e.center,a=e.rotate;return e.center=function(i){return arguments.length?t([-i[1],i[0]]):(i=t(),[i[1],-i[0]])},e.rotate=function(i){return arguments.length?a([i[0],i[1],i.length>2?i[2]+90:90]):(i=a(),[i[0],i[1],i[2]-90])},a([0,0,90]).scale(159.155)}const O8e=Object.freeze(Object.defineProperty({__proto__:null,geoAlbers:nQ,geoAlbersUsa:b8e,geoArea:C6e,geoAzimuthalEqualArea:v8e,geoAzimuthalEqualAreaRaw:DE,geoAzimuthalEquidistant:x8e,geoAzimuthalEquidistantRaw:WE,geoBounds:M6e,geoCentroid:I6e,geoCircle:D6e,geoClipAntimeridian:E_,geoClipCircle:UX,geoClipExtent:$6e,geoClipRectangle:X1,geoConicConformal:k8e,geoConicConformalRaw:rQ,geoConicEqualArea:Mw,geoConicEqualAreaRaw:tQ,geoConicEquidistant:S8e,geoConicEquidistantRaw:oQ,geoContains:X6e,geoDistance:kw,geoEqualEarth:A8e,geoEqualEarthRaw:zE,geoEquirectangular:j8e,geoEquirectangularRaw:hy,geoGnomonic:T8e,geoGnomonicRaw:LE,geoGraticule:ME,geoGraticule10:Q6e,geoIdentity:_8e,geoInterpolate:Z6e,geoLength:BX,geoMercator:w8e,geoMercatorRaw:ub,geoNaturalEarth1:M8e,geoNaturalEarth1Raw:UE,geoOrthographic:E8e,geoOrthographicRaw:BE,geoPath:eQ,geoProjection:Lo,geoProjectionMutator:PE,geoRotation:PX,geoStereographic:R8e,geoStereographicRaw:qE,geoStream:kr,geoTransform:c8e,geoTransverseMercator:N8e,geoTransverseMercatorRaw:$E},Symbol.toStringTag,{value:"Module"}));function P8e(e){return e}function I8e(e){if(e==null)return P8e;var t,a,i=e.scale[0],r=e.scale[1],o=e.translate[0],l=e.translate[1];return function(d,u){u||(t=a=0);var h=2,m=d.length,f=new Array(m);for(f[0]=(t+=d[0])*i+o,f[1]=(a+=d[1])*r+l;h<m;)f[h]=d[h],++h;return f}}function D8e(e,t){for(var a,i=e.length,r=i-t;r<--i;)a=e[r],e[r++]=e[i],e[i]=a}function W8e(e,t){return typeof t=="string"&&(t=e.objects[t]),t.type==="GeometryCollection"?{type:"FeatureCollection",features:t.geometries.map(function(a){return sq(e,a)})}:sq(e,t)}function sq(e,t){var a=t.id,i=t.bbox,r=t.properties==null?{}:t.properties,o=sQ(e,t);return a==null&&i==null?{type:"Feature",properties:r,geometry:o}:i==null?{type:"Feature",id:a,properties:r,geometry:o}:{type:"Feature",id:a,bbox:i,properties:r,geometry:o}}function sQ(e,t){var a=I8e(e.transform),i=e.arcs;function r(m,f){f.length&&f.pop();for(var y=i[m<0?~m:m],b=0,x=y.length;b<x;++b)f.push(a(y[b],b));m<0&&D8e(f,x)}function o(m){return a(m)}function l(m){for(var f=[],y=0,b=m.length;y<b;++y)r(m[y],f);return f.length<2&&f.push(f[0]),f}function d(m){for(var f=l(m);f.length<4;)f.push(f[0]);return f}function u(m){return m.map(d)}function h(m){var f=m.type,y;switch(f){case"GeometryCollection":return{type:f,geometries:m.geometries.map(h)};case"Point":y=o(m.coordinates);break;case"MultiPoint":y=m.coordinates.map(o);break;case"LineString":y=l(m.arcs);break;case"MultiLineString":y=m.arcs.map(l);break;case"Polygon":y=u(m.arcs);break;case"MultiPolygon":y=m.arcs.map(u);break;default:return null}return{type:f,coordinates:y}}return h(t)}function z8e(e,t){var a={},i={},r={},o=[],l=-1;t.forEach(function(h,m){var f=e.arcs[h<0?~h:h],y;f.length<3&&!f[1][0]&&!f[1][1]&&(y=t[++l],t[l]=h,t[m]=y)}),t.forEach(function(h){var m=d(h),f=m[0],y=m[1],b,x;if(b=r[f])if(delete r[b.end],b.push(h),b.end=y,x=i[y]){delete i[x.start];var k=x===b?b:b.concat(x);i[k.start=b.start]=r[k.end=x.end]=k}else i[b.start]=r[b.end]=b;else if(b=i[y])if(delete i[b.start],b.unshift(h),b.start=f,x=r[f]){delete r[x.end];var v=x===b?b:x.concat(b);i[v.start=x.start]=r[v.end=b.end]=v}else i[b.start]=r[b.end]=b;else b=[h],i[b.start=f]=r[b.end=y]=b});function d(h){var m=e.arcs[h<0?~h:h],f=m[0],y;return e.transform?(y=[0,0],m.forEach(function(b){y[0]+=b[0],y[1]+=b[1]})):y=m[m.length-1],h<0?[y,f]:[f,y]}function u(h,m){for(var f in h){var y=h[f];
7805delete m[y.start],delete y.start,delete y.end,y.forEach(function(b){a[b<0?~b:b]=1}),o.push(y)}}return u(r,i),u(i,r),t.forEach(function(h){a[h<0?~h:h]||o.push([h])}),o}function lq(e){return sQ(e,L8e.apply(this,arguments))}function L8e(e,t,a){var i,r,o;if(arguments.length>1)i=U8e(e,t,a);else for(r=0,i=new Array(o=e.arcs.length);r<o;++r)i[r]=r;return{type:"MultiLineString",arcs:z8e(e,i)}}function U8e(e,t,a){var i=[],r=[],o;function l(f){var y=f<0?~f:f;(r[y]||(r[y]=[])).push({i:f,g:o})}function d(f){f.forEach(l)}function u(f){f.forEach(d)}function h(f){f.forEach(u)}function m(f){switch(o=f,f.type){case"GeometryCollection":f.geometries.forEach(m);break;case"LineString":d(f.arcs);break;case"MultiLineString":case"Polygon":u(f.arcs);break;case"MultiPolygon":h(f.arcs);break}}return m(t),r.forEach(a==null?function(f){i.push(f[0].i)}:function(f){a(f[0].g,f[f.length-1].g)&&i.push(f[0].i)}),i}var B8e={value:()=>{}};function FE(){for(var e=0,t=arguments.length,a={},i;e<t;++e){if(!(i=arguments[e]+"")||i in a||/[\s.]/.test(i))throw new Error("illegal type: "+i);a[i]=[]}return new I0(a)}function I0(e){this._=e}function q8e(e,t){return e.trim().split(/^|\s+/).map(function(a){var i="",r=a.indexOf(".");if(r>=0&&(i=a.slice(r+1),a=a.slice(0,r)),a&&!t.hasOwnProperty(a))throw new Error("unknown type: "+a);return{type:a,name:i}})}I0.prototype=FE.prototype={constructor:I0,on:function(e,t){var a=this._,i=q8e(e+"",a),r,o=-1,l=i.length;if(arguments.length<2){for(;++o<l;)if((r=(e=i[o]).type)&&(r=$8e(a[r],e.name)))return r;return}if(t!=null&&typeof t!="function")throw new Error("invalid callback: "+t);for(;++o<l;)if(r=(e=i[o]).type)a[r]=cq(a[r],e.name,t);else if(t==null)for(r in a)a[r]=cq(a[r],e.name,null);return this},copy:function(){var e={},t=this._;for(var a in t)e[a]=t[a].slice();return new I0(e)},call:function(e,t){if((r=arguments.length-2)>0)for(var a=new Array(r),i=0,r,o;i<r;++i)a[i]=arguments[i+2];if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(o=this._[e],i=0,r=o.length;i<r;++i)o[i].value.apply(t,a)},apply:function(e,t,a){if(!this._.hasOwnProperty(e))throw new Error("unknown type: "+e);for(var i=this._[e],r=0,o=i.length;r<o;++r)i[r].value.apply(t,a)}};function $8e(e,t){for(var a=0,i=e.length,r;a<i;++a)if((r=e[a]).name===t)return r.value}function cq(e,t,a){for(var i=0,r=e.length;i<r;++i)if(e[i].name===t){e[i]=B8e,e=e.slice(0,i).concat(e.slice(i+1));break}return a!=null&&e.push({name:t,value:a}),e}var $_="http://www.w3.org/1999/xhtml";const dq={svg:"http://www.w3.org/2000/svg",xhtml:$_,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};function Z1(e){var t=e+="",a=t.indexOf(":");return a>=0&&(t=e.slice(0,a))!=="xmlns"&&(e=e.slice(a+1)),dq.hasOwnProperty(t)?{space:dq[t],local:e}:e}function F8e(e){return function(){var t=this.ownerDocument,a=this.namespaceURI;return a===$_&&t.documentElement.namespaceURI===$_?t.createElement(e):t.createElementNS(a,e)}}function G8e(e){return function(){return this.ownerDocument.createElementNS(e.space,e.local)}}function lQ(e){var t=Z1(e);return(t.local?G8e:F8e)(t)}function H8e(){}function GE(e){return e==null?H8e:function(){return this.querySelector(e)}}function Y8e(e){typeof e!="function"&&(e=GE(e));for(var t=this._groups,a=t.length,i=new Array(a),r=0;r<a;++r)for(var o=t[r],l=o.length,d=i[r]=new Array(l),u,h,m=0;m<l;++m)(u=o[m])&&(h=e.call(u,u.__data__,m,o))&&("__data__"in u&&(h.__data__=u.__data__),d[m]=h);return new Ya(i,this._parents)}function cQ(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function V8e(){return[]}function dQ(e){return e==null?V8e:function(){return this.querySelectorAll(e)}}function K8e(e){return function(){var t=e.apply(this,arguments);return t==null?[]:cQ(t)}}function X8e(e){typeof e=="function"?e=K8e(e):e=dQ(e);for(var t=this._groups,a=t.length,i=[],r=[],o=0;o<a;++o)for(var l=t[o],d=l.length,u,h=0;h<d;++h)(u=l[h])&&(i.push(e.call(u,u.__data__,h,l)),r.push(u));return new Ya(i,r)}function uQ(e){return function(){return this.matches(e)}}function hQ(e){return function(t){return t.matches(e)}}var Q8e=Array.prototype.find;
vendor: 4,158 bytes, line 7805
7805function Z8e(e){return function(){return Q8e.call(this.children,e)}}function J8e(){return this.firstElementChild}function eRe(e){return this.select(e==null?J8e:Z8e(typeof e=="function"?e:hQ(e)))}var tRe=Array.prototype.filter;function nRe(){return this.children}function aRe(e){return function(){return tRe.call(this.children,e)}}function iRe(e){return this.selectAll(e==null?nRe:aRe(typeof e=="function"?e:hQ(e)))}function rRe(e){typeof e!="function"&&(e=uQ(e));for(var t=this._groups,a=t.length,i=new Array(a),r=0;r<a;++r)for(var o=t[r],l=o.length,d=i[r]=[],u,h=0;h<l;++h)(u=o[h])&&e.call(u,u.__data__,h,o)&&d.push(u);return new Ya(i,this._parents)}function pQ(e){return new Array(e.length)}function oRe(){return new Ya(this._enter||this._groups.map(pQ),this._parents)}function Rw(e,t){this.ownerDocument=e.ownerDocument,this.namespaceURI=e.namespaceURI,this._next=null,this._parent=e,this.__data__=t}Rw.prototype={constructor:Rw,appendChild:function(e){return this._parent.insertBefore(e,this._next)},insertBefore:function(e,t){return this._parent.insertBefore(e,t)},querySelector:function(e){return this._parent.querySelector(e)},querySelectorAll:function(e){return this._parent.querySelectorAll(e)}};function sRe(e){return function(){return e}}function lRe(e,t,a,i,r,o){for(var l=0,d,u=t.length,h=o.length;l<h;++l)(d=t[l])?(d.__data__=o[l],i[l]=d):a[l]=new Rw(e,o[l]);for(;l<u;++l)(d=t[l])&&(r[l]=d)}function cRe(e,t,a,i,r,o,l){var d,u,h=new Map,m=t.length,f=o.length,y=new Array(m),b;for(d=0;d<m;++d)(u=t[d])&&(y[d]=b=l.call(u,u.__data__,d,t)+"",h.has(b)?r[d]=u:h.set(b,u));for(d=0;d<f;++d)b=l.call(e,o[d],d,o)+"",(u=h.get(b))?(i[d]=u,u.__data__=o[d],h.delete(b)):a[d]=new Rw(e,o[d]);for(d=0;d<m;++d)(u=t[d])&&h.get(y[d])===u&&(r[d]=u)}function dRe(e){return e.__data__}function uRe(e,t){if(!arguments.length)return Array.from(this,dRe);var a=t?cRe:lRe,i=this._parents,r=this._groups;typeof e!="function"&&(e=sRe(e));for(var o=r.length,l=new Array(o),d=new Array(o),u=new Array(o),h=0;h<o;++h){var m=i[h],f=r[h],y=f.length,b=cQ(e.call(m,m&&m.__data__,h,i)),x=b.length,k=d[h]=new Array(x),v=l[h]=new Array(x),j=u[h]=new Array(y);a(m,f,k,v,j,b,t);for(var T=0,A=0,C,_;T<x;++T)if(C=k[T]){for(T>=A&&(A=T+1);!(_=v[A])&&++A<x;);C._next=_||null}}return l=new Ya(l,i),l._enter=d,l._exit=u,l}function hRe(){return new Ya(this._exit||this._groups.map(pQ),this._parents)}function pRe(e,t,a){var i=this.enter(),r=this,o=this.exit();return i=typeof e=="function"?e(i):i.append(e+""),t!=null&&(r=t(r)),a==null?o.remove():a(o),i&&r?i.merge(r).order():r}function mRe(e){if(!(e instanceof Ya))throw new Error("invalid merge");for(var t=this._groups,a=e._groups,i=t.length,r=a.length,o=Math.min(i,r),l=new Array(i),d=0;d<o;++d)for(var u=t[d],h=a[d],m=u.length,f=l[d]=new Array(m),y,b=0;b<m;++b)(y=u[b]||h[b])&&(f[b]=y);for(;d<i;++d)l[d]=t[d];return new Ya(l,this._parents)}function fRe(){for(var e=this._groups,t=-1,a=e.length;++t<a;)for(var i=e[t],r=i.length-1,o=i[r],l;--r>=0;)(l=i[r])&&(o&&l.compareDocumentPosition(o)^4&&o.parentNode.insertBefore(l,o),o=l);return this}function gRe(e){e||(e=yRe);function t(f,y){return f&&y?e(f.__data__,y.__data__):!f-!y}for(var a=this._groups,i=a.length,r=new Array(i),o=0;o<i;++o){for(var l=a[o],d=l.length,u=r[o]=new Array(d),h,m=0;m<d;++m)(h=l[m])&&(u[m]=h);u.sort(t)}return new Ya(r,this._parents).order()}function yRe(e,t){return e<t?-1:e>t?1:e>=t?0:NaN}function bRe(){var e=arguments[0];return arguments[0]=this,e.apply(null,arguments),this}function vRe(){return Array.from(this)}function xRe(){for(var e=this._groups,t=0,a=e.length;t<a;++t)for(var i=e[t],r=0,o=i.length;r<o;++r){var l=i[r];if(l)return l}return null}function wRe(){let e=0;for(const t of this)++e;return e}function kRe(){return!this.node()}function jRe(e){for(var t=this._groups,a=0,i=t.length;a<i;++a)for(var r=t[a],o=0,l=r.length,d;o<l;++o)(d=r[o])&&e.call(d,d.__data__,o,r);return this}function SRe(e){return function(){this.removeAttribute(e)}}function CRe(e){return function(){this.removeAttributeNS(e.space,e.local)}}function ARe(e,t){return function(){this.setAttribute(e,t)}}function TRe(e,t){return function(){this.setAttributeNS(e.space,e.local,t)}}
vendor: 34,822 bytes, line 7805
7805function _Re(e,t){return function(){var a=t.apply(this,arguments);a==null?this.removeAttribute(e):this.setAttribute(e,a)}}function MRe(e,t){return function(){var a=t.apply(this,arguments);a==null?this.removeAttributeNS(e.space,e.local):this.setAttributeNS(e.space,e.local,a)}}function ERe(e,t){var a=Z1(e);if(arguments.length<2){var i=this.node();return a.local?i.getAttributeNS(a.space,a.local):i.getAttribute(a)}return this.each((t==null?a.local?CRe:SRe:typeof t=="function"?a.local?MRe:_Re:a.local?TRe:ARe)(a,t))}function mQ(e){return e.ownerDocument&&e.ownerDocument.defaultView||e.document&&e||e.defaultView}function RRe(e){return function(){this.style.removeProperty(e)}}function NRe(e,t,a){return function(){this.style.setProperty(e,t,a)}}function ORe(e,t,a){return function(){var i=t.apply(this,arguments);i==null?this.style.removeProperty(e):this.style.setProperty(e,i,a)}}function PRe(e,t,a){return arguments.length>1?this.each((t==null?RRe:typeof t=="function"?ORe:NRe)(e,t,a??"")):qp(this.node(),e)}function qp(e,t){return e.style.getPropertyValue(t)||mQ(e).getComputedStyle(e,null).getPropertyValue(t)}function IRe(e){return function(){delete this[e]}}function DRe(e,t){return function(){this[e]=t}}function WRe(e,t){return function(){var a=t.apply(this,arguments);a==null?delete this[e]:this[e]=a}}function zRe(e,t){return arguments.length>1?this.each((t==null?IRe:typeof t=="function"?WRe:DRe)(e,t)):this.node()[e]}function fQ(e){return e.trim().split(/^|\s+/)}function HE(e){return e.classList||new gQ(e)}function gQ(e){this._node=e,this._names=fQ(e.getAttribute("class")||"")}gQ.prototype={add:function(e){var t=this._names.indexOf(e);t<0&&(this._names.push(e),this._node.setAttribute("class",this._names.join(" ")))},remove:function(e){var t=this._names.indexOf(e);t>=0&&(this._names.splice(t,1),this._node.setAttribute("class",this._names.join(" ")))},contains:function(e){return this._names.indexOf(e)>=0}};function yQ(e,t){for(var a=HE(e),i=-1,r=t.length;++i<r;)a.add(t[i])}function bQ(e,t){for(var a=HE(e),i=-1,r=t.length;++i<r;)a.remove(t[i])}function LRe(e){return function(){yQ(this,e)}}function URe(e){return function(){bQ(this,e)}}function BRe(e,t){return function(){(t.apply(this,arguments)?yQ:bQ)(this,e)}}function qRe(e,t){var a=fQ(e+"");if(arguments.length<2){for(var i=HE(this.node()),r=-1,o=a.length;++r<o;)if(!i.contains(a[r]))return!1;return!0}return this.each((typeof t=="function"?BRe:t?LRe:URe)(a,t))}function $Re(){this.textContent=""}function FRe(e){return function(){this.textContent=e}}function GRe(e){return function(){var t=e.apply(this,arguments);this.textContent=t??""}}function HRe(e){return arguments.length?this.each(e==null?$Re:(typeof e=="function"?GRe:FRe)(e)):this.node().textContent}function YRe(){this.innerHTML=""}function VRe(e){return function(){this.innerHTML=e}}function KRe(e){return function(){var t=e.apply(this,arguments);this.innerHTML=t??""}}function XRe(e){return arguments.length?this.each(e==null?YRe:(typeof e=="function"?KRe:VRe)(e)):this.node().innerHTML}function QRe(){this.nextSibling&&this.parentNode.appendChild(this)}function ZRe(){return this.each(QRe)}function JRe(){this.previousSibling&&this.parentNode.insertBefore(this,this.parentNode.firstChild)}function eNe(){return this.each(JRe)}function tNe(e){var t=typeof e=="function"?e:lQ(e);return this.select(function(){return this.appendChild(t.apply(this,arguments))})}function nNe(){return null}function aNe(e,t){var a=typeof e=="function"?e:lQ(e),i=t==null?nNe:typeof t=="function"?t:GE(t);return this.select(function(){return this.insertBefore(a.apply(this,arguments),i.apply(this,arguments)||null)})}function iNe(){var e=this.parentNode;e&&e.removeChild(this)}function rNe(){return this.each(iNe)}function oNe(){var e=this.cloneNode(!1),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function sNe(){var e=this.cloneNode(!0),t=this.parentNode;return t?t.insertBefore(e,this.nextSibling):e}function lNe(e){return this.select(e?sNe:oNe)}function cNe(e){return arguments.length?this.property("__data__",e):this.node().__data__}function dNe(e){return function(t){e.call(this,t,this.__data__)}}function uNe(e){return e.trim().split(/^|\s+/).map(function(t){var a="",i=t.indexOf(".");return i>=0&&(a=t.slice(i+1),t=t.slice(0,i)),{type:t,name:a}})}function hNe(e){return function(){var t=this.__on;if(t){for(var a=0,i=-1,r=t.length,o;a<r;++a)o=t[a],(!e.type||o.type===e.type)&&o.name===e.name?this.removeEventListener(o.type,o.listener,o.options):t[++i]=o;++i?t.length=i:delete this.__on}}}function pNe(e,t,a){return function(){var i=this.__on,r,o=dNe(t);if(i){for(var l=0,d=i.length;l<d;++l)if((r=i[l]).type===e.type&&r.name===e.name){this.removeEventListener(r.type,r.listener,r.options),this.addEventListener(r.type,r.listener=o,r.options=a),r.value=t;return}}this.addEventListener(e.type,o,a),r={type:e.type,name:e.name,value:t,listener:o,options:a},i?i.push(r):this.__on=[r]}}function mNe(e,t,a){var i=uNe(e+""),r,o=i.length,l;if(arguments.length<2){var d=this.node().__on;if(d){for(var u=0,h=d.length,m;u<h;++u)for(r=0,m=d[u];r<o;++r)if((l=i[r]).type===m.type&&l.name===m.name)return m.value}return}for(d=t?pNe:hNe,r=0;r<o;++r)this.each(d(i[r],t,a));return this}function vQ(e,t,a){var i=mQ(e),r=i.CustomEvent;typeof r=="function"?r=new r(t,a):(r=i.document.createEvent("Event"),a?(r.initEvent(t,a.bubbles,a.cancelable),r.detail=a.detail):r.initEvent(t,!1,!1)),e.dispatchEvent(r)}function fNe(e,t){return function(){return vQ(this,e,t)}}function gNe(e,t){return function(){return vQ(this,e,t.apply(this,arguments))}}function yNe(e,t){return this.each((typeof t=="function"?gNe:fNe)(e,t))}function*bNe(){for(var e=this._groups,t=0,a=e.length;t<a;++t)for(var i=e[t],r=0,o=i.length,l;r<o;++r)(l=i[r])&&(yield l)}var xQ=[null];function Ya(e,t){this._groups=e,this._parents=t}function hb(){return new Ya([[document.documentElement]],xQ)}function vNe(){return this}Ya.prototype=hb.prototype={constructor:Ya,select:Y8e,selectAll:X8e,selectChild:eRe,selectChildren:iRe,filter:rRe,data:uRe,enter:oRe,exit:hRe,join:pRe,merge:mRe,selection:vNe,order:fRe,sort:gRe,call:bRe,nodes:vRe,node:xRe,size:wRe,empty:kRe,each:jRe,attr:ERe,style:PRe,property:zRe,classed:qRe,text:HRe,html:XRe,raise:ZRe,lower:eNe,append:tNe,insert:aNe,remove:rNe,clone:lNe,datum:cNe,on:mNe,dispatch:yNe,[Symbol.iterator]:bNe};function bs(e){return typeof e=="string"?new Ya([[document.querySelector(e)]],[document.documentElement]):new Ya([[e]],xQ)}function xNe(e){let t;for(;t=e.sourceEvent;)e=t;return e}function Vc(e,t){if(e=xNe(e),t===void 0&&(t=e.currentTarget),t){var a=t.ownerSVGElement||t;if(a.createSVGPoint){var i=a.createSVGPoint();return i.x=e.clientX,i.y=e.clientY,i=i.matrixTransform(t.getScreenCTM().inverse()),[i.x,i.y]}if(t.getBoundingClientRect){var r=t.getBoundingClientRect();return[e.clientX-r.left-t.clientLeft,e.clientY-r.top-t.clientTop]}}return[e.pageX,e.pageY]}function F_(e){e.preventDefault(),e.stopImmediatePropagation()}function wNe(e){var t=e.document.documentElement,a=bs(e).on("dragstart.drag",F_,!0);"onselectstart"in t?a.on("selectstart.drag",F_,!0):(t.__noselect=t.style.MozUserSelect,t.style.MozUserSelect="none")}function kNe(e,t){var a=e.document.documentElement,i=bs(e).on("dragstart.drag",null);t&&(i.on("click.drag",F_,!0),setTimeout(function(){i.on("click.drag",null)},0)),"onselectstart"in a?i.on("selectstart.drag",null):(a.style.MozUserSelect=a.__noselect,delete a.__noselect)}const wQ=e=>()=>e;function jNe(e,t){return function(a){return e+a*t}}function SNe(e,t,a){return e=Math.pow(e,a),t=Math.pow(t,a)-e,a=1/a,function(i){return Math.pow(e+i*t,a)}}function CNe(e){return(e=+e)==1?kQ:function(t,a){return a-t?SNe(t,a,e):wQ(isNaN(t)?a:t)}}function kQ(e,t){var a=t-e;return a?jNe(e,a):wQ(isNaN(e)?t:e)}const uq=(function e(t){var a=CNe(t);function i(r,o){var l=a((r=Ig(r)).r,(o=Ig(o)).r),d=a(r.g,o.g),u=a(r.b,o.b),h=kQ(r.opacity,o.opacity);return function(m){return r.r=l(m),r.g=d(m),r.b=u(m),r.opacity=h(m),r+""}}return i.gamma=e,i})(1);function Il(e,t){return e=+e,t=+t,function(a){return e*(1-a)+t*a}}var G_=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,t4=new RegExp(G_.source,"g");function ANe(e){return function(){return e}}function TNe(e){return function(t){return e(t)+""}}function _Ne(e,t){var a=G_.lastIndex=t4.lastIndex=0,i,r,o,l=-1,d=[],u=[];for(e=e+"",t=t+"";(i=G_.exec(e))&&(r=t4.exec(t));)(o=r.index)>a&&(o=t.slice(a,o),d[l]?d[l]+=o:d[++l]=o),(i=i[0])===(r=r[0])?d[l]?d[l]+=r:d[++l]=r:(d[++l]=null,u.push({i:l,x:Il(i,r)})),a=t4.lastIndex;return a<t.length&&(o=t.slice(a),d[l]?d[l]+=o:d[++l]=o),d.length<2?u[0]?TNe(u[0].x):ANe(t):(t=u.length,function(h){for(var m=0,f;m<t;++m)d[(f=u[m]).i]=f.x(h);return d.join("")})}var hq=180/Math.PI,H_={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1};function jQ(e,t,a,i,r,o){var l,d,u;return(l=Math.sqrt(e*e+t*t))&&(e/=l,t/=l),(u=e*a+t*i)&&(a-=e*u,i-=t*u),(d=Math.sqrt(a*a+i*i))&&(a/=d,i/=d,u/=d),e*i<t*a&&(e=-e,t=-t,u=-u,l=-l),{translateX:r,translateY:o,rotate:Math.atan2(t,e)*hq,skewX:Math.atan(u)*hq,scaleX:l,scaleY:d}}var c0;function MNe(e){const t=new(typeof DOMMatrix=="function"?DOMMatrix:WebKitCSSMatrix)(e+"");return t.isIdentity?H_:jQ(t.a,t.b,t.c,t.d,t.e,t.f)}function ENe(e){return e==null||(c0||(c0=document.createElementNS("http://www.w3.org/2000/svg","g")),c0.setAttribute("transform",e),!(e=c0.transform.baseVal.consolidate()))?H_:(e=e.matrix,jQ(e.a,e.b,e.c,e.d,e.e,e.f))}function SQ(e,t,a,i){function r(h){return h.length?h.pop()+" ":""}function o(h,m,f,y,b,x){if(h!==f||m!==y){var k=b.push("translate(",null,t,null,a);x.push({i:k-4,x:Il(h,f)},{i:k-2,x:Il(m,y)})}else(f||y)&&b.push("translate("+f+t+y+a)}function l(h,m,f,y){h!==m?(h-m>180?m+=360:m-h>180&&(h+=360),y.push({i:f.push(r(f)+"rotate(",null,i)-2,x:Il(h,m)})):m&&f.push(r(f)+"rotate("+m+i)}function d(h,m,f,y){h!==m?y.push({i:f.push(r(f)+"skewX(",null,i)-2,x:Il(h,m)}):m&&f.push(r(f)+"skewX("+m+i)}function u(h,m,f,y,b,x){if(h!==f||m!==y){var k=b.push(r(b)+"scale(",null,",",null,")");x.push({i:k-4,x:Il(h,f)},{i:k-2,x:Il(m,y)})}else(f!==1||y!==1)&&b.push(r(b)+"scale("+f+","+y+")")}return function(h,m){var f=[],y=[];return h=e(h),m=e(m),o(h.translateX,h.translateY,m.translateX,m.translateY,f,y),l(h.rotate,m.rotate,f,y),d(h.skewX,m.skewX,f,y),u(h.scaleX,h.scaleY,m.scaleX,m.scaleY,f,y),h=m=null,function(b){for(var x=-1,k=y.length,v;++x<k;)f[(v=y[x]).i]=v.x(b);return f.join("")}}}var RNe=SQ(MNe,"px, ","px)","deg)"),NNe=SQ(ENe,", ",")",")"),ONe=1e-12;function pq(e){return((e=Math.exp(e))+1/e)/2}function PNe(e){return((e=Math.exp(e))-1/e)/2}function INe(e){return((e=Math.exp(2*e))-1)/(e+1)}const DNe=(function e(t,a,i){function r(o,l){var d=o[0],u=o[1],h=o[2],m=l[0],f=l[1],y=l[2],b=m-d,x=f-u,k=b*b+x*x,v,j;if(k<ONe)j=Math.log(y/h)/t,v=function(R){return[d+R*b,u+R*x,h*Math.exp(t*R*j)]};else{var T=Math.sqrt(k),A=(y*y-h*h+i*k)/(2*h*a*T),C=(y*y-h*h-i*k)/(2*y*a*T),_=Math.log(Math.sqrt(A*A+1)-A),E=Math.log(Math.sqrt(C*C+1)-C);j=(E-_)/t,v=function(R){var W=R*j,z=pq(_),H=h/(a*T)*(z*INe(t*W+_)-PNe(_));return[d+H*b,u+H*x,h*z/pq(t*W+_)]}}return v.duration=j*1e3*t/Math.SQRT2,v}return r.rho=function(o){var l=Math.max(.001,+o),d=l*l,u=d*d;return e(l,d,u)},r})(Math.SQRT2,2,4);var $p=0,Vf=0,Rf=0,CQ=1e3,Nw,Kf,Ow=0,tu=0,J1=0,py=typeof performance=="object"&&performance.now?performance:Date,AQ=typeof window=="object"&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):function(e){setTimeout(e,17)};function YE(){return tu||(AQ(WNe),tu=py.now()+J1)}function WNe(){tu=0}function Pw(){this._call=this._time=this._next=null}Pw.prototype=TQ.prototype={constructor:Pw,restart:function(e,t,a){if(typeof e!="function")throw new TypeError("callback is not a function");a=(a==null?YE():+a)+(t==null?0:+t),!this._next&&Kf!==this&&(Kf?Kf._next=this:Nw=this,Kf=this),this._call=e,this._time=a,Y_()},stop:function(){this._call&&(this._call=null,this._time=1/0,Y_())}};function TQ(e,t,a){var i=new Pw;return i.restart(e,t,a),i}function zNe(){YE(),++$p;for(var e=Nw,t;e;)(t=tu-e._time)>=0&&e._call.call(null,t),e=e._next;--$p}function mq(){tu=(Ow=py.now())+J1,$p=Vf=0;try{zNe()}finally{$p=0,UNe(),tu=0}}function LNe(){var e=py.now(),t=e-Ow;t>CQ&&(J1-=t,Ow=e)}function UNe(){for(var e,t=Nw,a,i=1/0;t;)t._call?(i>t._time&&(i=t._time),e=t,t=t._next):(a=t._next,t._next=null,t=e?e._next=a:Nw=a);Kf=e,Y_(i)}function Y_(e){if(!$p){Vf&&(Vf=clearTimeout(Vf));var t=e-tu;t>24?(e<1/0&&(Vf=setTimeout(mq,e-py.now()-J1)),Rf&&(Rf=clearInterval(Rf))):(Rf||(Ow=py.now(),Rf=setInterval(LNe,CQ)),$p=1,AQ(mq))}}function fq(e,t,a){var i=new Pw;return t=t==null?0:+t,i.restart(r=>{i.stop(),e(r+t)},t,a),i}var BNe=FE("start","end","cancel","interrupt"),qNe=[],_Q=0,gq=1,V_=2,D0=3,yq=4,K_=5,W0=6;function ek(e,t,a,i,r,o){var l=e.__transition;if(!l)e.__transition={};else if(a in l)return;$Ne(e,a,{name:t,index:i,group:r,on:BNe,tween:qNe,time:o.time,delay:o.delay,duration:o.duration,ease:o.ease,timer:null,state:_Q})}function VE(e,t){var a=Qr(e,t);if(a.state>_Q)throw new Error("too late; already scheduled");return a}function Uo(e,t){var a=Qr(e,t);if(a.state>D0)throw new Error("too late; already running");return a}function Qr(e,t){var a=e.__transition;if(!a||!(a=a[t]))throw new Error("transition not found");return a}function $Ne(e,t,a){var i=e.__transition,r;i[t]=a,a.timer=TQ(o,0,a.time);function o(h){a.state=gq,a.timer.restart(l,a.delay,a.time),a.delay<=h&&l(h-a.delay)}function l(h){var m,f,y,b;if(a.state!==gq)return u();for(m in i)if(b=i[m],b.name===a.name){if(b.state===D0)return fq(l);b.state===yq?(b.state=W0,b.timer.stop(),b.on.call("interrupt",e,e.__data__,b.index,b.group),delete i[m]):+m<t&&(b.state=W0,b.timer.stop(),b.on.call("cancel",e,e.__data__,b.index,b.group),delete i[m])}if(fq(function(){a.state===D0&&(a.state=yq,a.timer.restart(d,a.delay,a.time),d(h))}),a.state=V_,a.on.call("start",e,e.__data__,a.index,a.group),a.state===V_){for(a.state=D0,r=new Array(y=a.tween.length),m=0,f=-1;m<y;++m)(b=a.tween[m].value.call(e,e.__data__,a.index,a.group))&&(r[++f]=b);r.length=f+1}}function d(h){for(var m=h<a.duration?a.ease.call(null,h/a.duration):(a.timer.restart(u),a.state=K_,1),f=-1,y=r.length;++f<y;)r[f].call(e,m);a.state===K_&&(a.on.call("end",e,e.__data__,a.index,a.group),u())}function u(){a.state=W0,a.timer.stop(),delete i[t];for(var h in i)return;delete e.__transition}}function z0(e,t){var a=e.__transition,i,r,o=!0,l;if(a){t=t==null?null:t+"";for(l in a){if((i=a[l]).name!==t){o=!1;continue}r=i.state>V_&&i.state<K_,i.state=W0,i.timer.stop(),i.on.call(r?"interrupt":"cancel",e,e.__data__,i.index,i.group),delete a[l]}o&&delete e.__transition}}function FNe(e){return this.each(function(){z0(this,e)})}function GNe(e,t){var a,i;return function(){var r=Uo(this,e),o=r.tween;if(o!==a){i=a=o;for(var l=0,d=i.length;l<d;++l)if(i[l].name===t){i=i.slice(),i.splice(l,1);break}}r.tween=i}}function HNe(e,t,a){var i,r;if(typeof a!="function")throw new Error;return function(){var o=Uo(this,e),l=o.tween;if(l!==i){r=(i=l).slice();for(var d={name:t,value:a},u=0,h=r.length;u<h;++u)if(r[u].name===t){r[u]=d;break}u===h&&r.push(d)}o.tween=r}}function YNe(e,t){var a=this._id;if(e+="",arguments.length<2){for(var i=Qr(this.node(),a).tween,r=0,o=i.length,l;r<o;++r)if((l=i[r]).name===e)return l.value;return null}return this.each((t==null?GNe:HNe)(a,e,t))}function KE(e,t,a){var i=e._id;return e.each(function(){var r=Uo(this,i);(r.value||(r.value={}))[t]=a.apply(this,arguments)}),function(r){return Qr(r,i).value[t]}}function MQ(e,t){var a;return(typeof t=="number"?Il:t instanceof Kd?uq:(a=Kd(t))?(t=a,uq):_Ne)(e,t)}function VNe(e){return function(){this.removeAttribute(e)}}function KNe(e){return function(){this.removeAttributeNS(e.space,e.local)}}function XNe(e,t,a){var i,r=a+"",o;return function(){var l=this.getAttribute(e);return l===r?null:l===i?o:o=t(i=l,a)}}function QNe(e,t,a){var i,r=a+"",o;return function(){var l=this.getAttributeNS(e.space,e.local);return l===r?null:l===i?o:o=t(i=l,a)}}function ZNe(e,t,a){var i,r,o;return function(){var l,d=a(this),u;return d==null?void this.removeAttribute(e):(l=this.getAttribute(e),u=d+"",l===u?null:l===i&&u===r?o:(r=u,o=t(i=l,d)))}}function JNe(e,t,a){var i,r,o;return function(){var l,d=a(this),u;return d==null?void this.removeAttributeNS(e.space,e.local):(l=this.getAttributeNS(e.space,e.local),u=d+"",l===u?null:l===i&&u===r?o:(r=u,o=t(i=l,d)))}}function eOe(e,t){var a=Z1(e),i=a==="transform"?NNe:MQ;return this.attrTween(e,typeof t=="function"?(a.local?JNe:ZNe)(a,i,KE(this,"attr."+e,t)):t==null?(a.local?KNe:VNe)(a):(a.local?QNe:XNe)(a,i,t))}function tOe(e,t){return function(a){this.setAttribute(e,t.call(this,a))}}function nOe(e,t){return function(a){this.setAttributeNS(e.space,e.local,t.call(this,a))}}function aOe(e,t){var a,i;function r(){var o=t.apply(this,arguments);return o!==i&&(a=(i=o)&&nOe(e,o)),a}return r._value=t,r}function iOe(e,t){var a,i;function r(){var o=t.apply(this,arguments);return o!==i&&(a=(i=o)&&tOe(e,o)),a}return r._value=t,r}function rOe(e,t){var a="attr."+e;if(arguments.length<2)return(a=this.tween(a))&&a._value;if(t==null)return this.tween(a,null);if(typeof t!="function")throw new Error;var i=Z1(e);return this.tween(a,(i.local?aOe:iOe)(i,t))}function oOe(e,t){return function(){VE(this,e).delay=+t.apply(this,arguments)}}function sOe(e,t){return t=+t,function(){VE(this,e).delay=t}}function lOe(e){var t=this._id;return arguments.length?this.each((typeof e=="function"?oOe:sOe)(t,e)):Qr(this.node(),t).delay}function cOe(e,t){return function(){Uo(this,e).duration=+t.apply(this,arguments)}}function dOe(e,t){return t=+t,function(){Uo(this,e).duration=t}}function uOe(e){var t=this._id;return arguments.length?this.each((typeof e=="function"?cOe:dOe)(t,e)):Qr(this.node(),t).duration}function hOe(e,t){if(typeof t!="function")throw new Error;return function(){Uo(this,e).ease=t}}function pOe(e){var t=this._id;return arguments.length?this.each(hOe(t,e)):Qr(this.node(),t).ease}function mOe(e,t){return function(){var a=t.apply(this,arguments);if(typeof a!="function")throw new Error;Uo(this,e).ease=a}}function fOe(e){if(typeof e!="function")throw new Error;return this.each(mOe(this._id,e))}function gOe(e){typeof e!="function"&&(e=uQ(e));for(var t=this._groups,a=t.length,i=new Array(a),r=0;r<a;++r)for(var o=t[r],l=o.length,d=i[r]=[],u,h=0;h<l;++h)(u=o[h])&&e.call(u,u.__data__,h,o)&&d.push(u);return new Hs(i,this._parents,this._name,this._id)}function yOe(e){if(e._id!==this._id)throw new Error;for(var t=this._groups,a=e._groups,i=t.length,r=a.length,o=Math.min(i,r),l=new Array(i),d=0;d<o;++d)for(var u=t[d],h=a[d],m=u.length,f=l[d]=new Array(m),y,b=0;b<m;++b)(y=u[b]||h[b])&&(f[b]=y);for(;d<i;++d)l[d]=t[d];return new Hs(l,this._parents,this._name,this._id)}function bOe(e){return(e+"").trim().split(/^|\s+/).every(function(t){var a=t.indexOf(".");return a>=0&&(t=t.slice(0,a)),!t||t==="start"})}function vOe(e,t,a){var i,r,o=bOe(t)?VE:Uo;return function(){var l=o(this,e),d=l.on;d!==i&&(r=(i=d).copy()).on(t,a),l.on=r}}function xOe(e,t){var a=this._id;return arguments.length<2?Qr(this.node(),a).on.on(e):this.each(vOe(a,e,t))}function wOe(e){return function(){var t=this.parentNode;for(var a in this.__transition)if(+a!==e)return;t&&t.removeChild(this)}}function kOe(){return this.on("end.remove",wOe(this._id))}function jOe(e){var t=this._name,a=this._id;typeof e!="function"&&(e=GE(e));for(var i=this._groups,r=i.length,o=new Array(r),l=0;l<r;++l)for(var d=i[l],u=d.length,h=o[l]=new Array(u),m,f,y=0;y<u;++y)(m=d[y])&&(f=e.call(m,m.__data__,y,d))&&("__data__"in m&&(f.__data__=m.__data__),h[y]=f,ek(h[y],t,a,y,h,Qr(m,a)));return new Hs(o,this._parents,t,a)}function SOe(e){var t=this._name,a=this._id;typeof e!="function"&&(e=dQ(e));for(var i=this._groups,r=i.length,o=[],l=[],d=0;d<r;++d)for(var u=i[d],h=u.length,m,f=0;f<h;++f)if(m=u[f]){for(var y=e.call(m,m.__data__,f,u),b,x=Qr(m,a),k=0,v=y.length;k<v;++k)(b=y[k])&&ek(b,t,a,k,y,x);o.push(y),l.push(m)}return new Hs(o,l,t,a)}var COe=hb.prototype.constructor;function AOe(){return new COe(this._groups,this._parents)}function TOe(e,t){var a,i,r;return function(){var o=qp(this,e),l=(this.style.removeProperty(e),qp(this,e));return o===l?null:o===a&&l===i?r:r=t(a=o,i=l)}}function EQ(e){return function(){this.style.removeProperty(e)}}function _Oe(e,t,a){var i,r=a+"",o;return function(){var l=qp(this,e);return l===r?null:l===i?o:o=t(i=l,a)}}function MOe(e,t,a){var i,r,o;return function(){var l=qp(this,e),d=a(this),u=d+"";return d==null&&(u=d=(this.style.removeProperty(e),qp(this,e))),l===u?null:l===i&&u===r?o:(r=u,o=t(i=l,d))}}function EOe(e,t){var a,i,r,o="style."+t,l="end."+o,d;return function(){var u=Uo(this,e),h=u.on,m=u.value[o]==null?d||(d=EQ(t)):void 0;(h!==a||r!==m)&&(i=(a=h).copy()).on(l,r=m),u.on=i}}function ROe(e,t,a){var i=(e+="")=="transform"?RNe:MQ;return t==null?this.styleTween(e,TOe(e,i)).on("end.style."+e,EQ(e)):typeof t=="function"?this.styleTween(e,MOe(e,i,KE(this,"style."+e,t))).each(EOe(this._id,e)):this.styleTween(e,_Oe(e,i,t),a).on("end.style."+e,null)}function NOe(e,t,a){return function(i){this.style.setProperty(e,t.call(this,i),a)}}function OOe(e,t,a){var i,r;function o(){var l=t.apply(this,arguments);return l!==r&&(i=(r=l)&&NOe(e,l,a)),i}return o._value=t,o}function POe(e,t,a){var i="style."+(e+="");if(arguments.length<2)return(i=this.tween(i))&&i._value;if(t==null)return this.tween(i,null);if(typeof t!="function")throw new Error;return this.tween(i,OOe(e,t,a??""))}function IOe(e){return function(){this.textContent=e}}function DOe(e){return function(){var t=e(this);this.textContent=t??""}}function WOe(e){return this.tween("text",typeof e=="function"?DOe(KE(this,"text",e)):IOe(e==null?"":e+""))}function zOe(e){return function(t){this.textContent=e.call(this,t)}}function LOe(e){var t,a;function i(){var r=e.apply(this,arguments);return r!==a&&(t=(a=r)&&zOe(r)),t}return i._value=e,i}function UOe(e){var t="text";if(arguments.length<1)return(t=this.tween(t))&&t._value;if(e==null)return this.tween(t,null);if(typeof e!="function")throw new Error;return this.tween(t,LOe(e))}function BOe(){for(var e=this._name,t=this._id,a=RQ(),i=this._groups,r=i.length,o=0;o<r;++o)for(var l=i[o],d=l.length,u,h=0;h<d;++h)if(u=l[h]){var m=Qr(u,t);ek(u,e,a,h,l,{time:m.time+m.delay+m.duration,delay:0,duration:m.duration,ease:m.ease})}return new Hs(i,this._parents,e,a)}function qOe(){var e,t,a=this,i=a._id,r=a.size();return new Promise(function(o,l){var d={value:l},u={value:function(){--r===0&&o()}};a.each(function(){var h=Uo(this,i),m=h.on;m!==e&&(t=(e=m).copy(),t._.cancel.push(d),t._.interrupt.push(d),t._.end.push(u)),h.on=t}),r===0&&o()})}var $Oe=0;function Hs(e,t,a,i){this._groups=e,this._parents=t,this._name=a,this._id=i}function RQ(){return++$Oe}var Kc=hb.prototype;Hs.prototype={constructor:Hs,select:jOe,selectAll:SOe,filter:gOe,merge:yOe,selection:AOe,transition:BOe,call:Kc.call,nodes:Kc.nodes,node:Kc.node,size:Kc.size,empty:Kc.empty,each:Kc.each,on:xOe,attr:eOe,attrTween:rOe,style:ROe,styleTween:POe,text:WOe,textTween:UOe,remove:kOe,tween:YNe,delay:lOe,duration:uOe,ease:pOe,easeVarying:fOe,end:qOe,[Symbol.iterator]:Kc[Symbol.iterator]};function FOe(e){return((e*=2)<=1?e*e*e:(e-=2)*e*e+2)/2}var GOe={time:null,delay:0,duration:250,ease:FOe};function HOe(e,t){for(var a;!(a=e.__transition)||!(a=a[t]);)if(!(e=e.parentNode))throw new Error(`transition ${t} not found`);return a}function YOe(e){var t,a;e instanceof Hs?(t=e._id,e=e._name):(t=RQ(),(a=GOe).time=YE(),e=e==null?null:e+"");for(var i=this._groups,r=i.length,o=0;o<r;++o)for(var l=i[o],d=l.length,u,h=0;h<d;++h)(u=l[h])&&ek(u,e,t,h,l,a||HOe(u,t));return new Hs(i,this._parents,e,t)}hb.prototype.interrupt=FNe;hb.prototype.transition=YOe;const d0=e=>()=>e;function VOe(e,{sourceEvent:t,target:a,transform:i,dispatch:r}){Object.defineProperties(this,{type:{value:e,enumerable:!0,configurable:!0},sourceEvent:{value:t,enumerable:!0,configurable:!0},target:{value:a,enumerable:!0,configurable:!0},transform:{value:i,enumerable:!0,configurable:!0},_:{value:r}})}function As(e,t,a){this.k=e,this.x=t,this.y=a}As.prototype={constructor:As,scale:function(e){return e===1?this:new As(this.k*e,this.x,this.y)},translate:function(e,t){return e===0&t===0?this:new As(this.k,this.x+this.k*e,this.y+this.k*t)},apply:function(e){return[e[0]*this.k+this.x,e[1]*this.k+this.y]},applyX:function(e){return e*this.k+this.x},applyY:function(e){return e*this.k+this.y},invert:function(e){return[(e[0]-this.x)/this.k,(e[1]-this.y)/this.k]},invertX:function(e){return(e-this.x)/this.k},invertY:function(e){return(e-this.y)/this.k},rescaleX:function(e){return e.copy().domain(e.range().map(this.invertX,this).map(e.invert,e))},rescaleY:function(e){return e.copy().domain(e.range().map(this.invertY,this).map(e.invert,e))},toString:function(){return"translate("+this.x+","+this.y+") scale("+this.k+")"}};var XE=new As(1,0,0);As.prototype;function n4(e){e.stopImmediatePropagation()}function Nf(e){e.preventDefault(),e.stopImmediatePropagation()}function KOe(e){return(!e.ctrlKey||e.type==="wheel")&&!e.button}function XOe(){var e=this;return e instanceof SVGElement?(e=e.ownerSVGElement||e,e.hasAttribute("viewBox")?(e=e.viewBox.baseVal,[[e.x,e.y],[e.x+e.width,e.y+e.height]]):[[0,0],[e.width.baseVal.value,e.height.baseVal.value]]):[[0,0],[e.clientWidth,e.clientHeight]]}function bq(){return this.__zoom||XE}function QOe(e){return-e.deltaY*(e.deltaMode===1?.05:e.deltaMode?1:.002)*(e.ctrlKey?10:1)}function ZOe(){return navigator.maxTouchPoints||"ontouchstart"in this}function JOe(e,t,a){var i=e.invertX(t[0][0])-a[0][0],r=e.invertX(t[1][0])-a[1][0],o=e.invertY(t[0][1])-a[0][1],l=e.invertY(t[1][1])-a[1][1];return e.translate(r>i?(i+r)/2:Math.min(0,i)||Math.max(0,r),l>o?(o+l)/2:Math.min(0,o)||Math.max(0,l))}function ePe(){var e=KOe,t=XOe,a=JOe,i=QOe,r=ZOe,o=[0,1/0],l=[[-1/0,-1/0],[1/0,1/0]],d=250,u=DNe,h=FE("start","zoom","end"),m,f,y,b=500,x=150,k=0,v=10;function j(D){D.property("__zoom",bq).on("wheel.zoom",W).on("mousedown.zoom",z).on("dblclick.zoom",H).filter(r).on("touchstart.zoom",$).on("touchmove.zoom",U).on("touchend.zoom touchcancel.zoom",X).style("-webkit-tap-highlight-color","rgba(0,0,0,0)")}j.transform=function(D,P,O,B){var Y=D.selection?D.selection():D;Y.property("__zoom",bq),D!==Y?_(D,P,O,B):Y.interrupt().each(function(){E(this,arguments).event(B).start().zoom(null,typeof P=="function"?P.apply(this,arguments):P).end()})},j.scaleBy=function(D,P,O,B){j.scaleTo(D,function(){var Y=this.__zoom.k,V=typeof P=="function"?P.apply(this,arguments):P;return Y*V},O,B)},j.scaleTo=function(D,P,O,B){j.transform(D,function(){var Y=t.apply(this,arguments),V=this.__zoom,G=O==null?C(Y):typeof O=="function"?O.apply(this,arguments):O,I=V.invert(G),F=typeof P=="function"?P.apply(this,arguments):P;return a(A(T(V,F),G,I),Y,l)},O,B)},j.translateBy=function(D,P,O,B){j.transform(D,function(){return a(this.__zoom.translate(typeof P=="function"?P.apply(this,arguments):P,typeof O=="function"?O.apply(this,arguments):O),t.apply(this,arguments),l)},null,B)},j.translateTo=function(D,P,O,B,Y){j.transform(D,function(){var V=t.apply(this,arguments),G=this.__zoom,I=B==null?C(V):typeof B=="function"?B.apply(this,arguments):B;return a(XE.translate(I[0],I[1]).scale(G.k).translate(typeof P=="function"?-P.apply(this,arguments):-P,typeof O=="function"?-O.apply(this,arguments):-O),V,l)},B,Y)};function T(D,P){return P=Math.max(o[0],Math.min(o[1],P)),P===D.k?D:new As(P,D.x,D.y)}function A(D,P,O){var B=P[0]-O[0]*D.k,Y=P[1]-O[1]*D.k;return B===D.x&&Y===D.y?D:new As(D.k,B,Y)}function C(D){return[(+D[0][0]+ +D[1][0])/2,(+D[0][1]+ +D[1][1])/2]}function _(D,P,O,B){D.on("start.zoom",function(){E(this,arguments).event(B).start()}).on("interrupt.zoom end.zoom",function(){E(this,arguments).event(B).end()}).tween("zoom",function(){var Y=this,V=arguments,G=E(Y,V).event(B),I=t.apply(Y,V),F=O==null?C(I):typeof O=="function"?O.apply(Y,V):O,K=Math.max(I[1][0]-I[0][0],I[1][1]-I[0][1]),ne=Y.__zoom,ae=typeof P=="function"?P.apply(Y,V):P,ge=u(ne.invert(F).concat(K/ne.k),ae.invert(F).concat(K/ae.k));return function(be){if(be===1)be=ae;else{var le=ge(be),ee=K/le[2];be=new As(ee,F[0]-le[0]*ee,F[1]-le[1]*ee)}G.zoom(null,be)}})}function E(D,P,O){return!O&&D.__zooming||new R(D,P)}function R(D,P){this.that=D,this.args=P,this.active=0,this.sourceEvent=null,this.extent=t.apply(D,P),this.taps=0}R.prototype={event:function(D){return D&&(this.sourceEvent=D),this},start:function(){return++this.active===1&&(this.that.__zooming=this,this.emit("start")),this},zoom:function(D,P){return this.mouse&&D!=="mouse"&&(this.mouse[1]=P.invert(this.mouse[0])),this.touch0&&D!=="touch"&&(this.touch0[1]=P.invert(this.touch0[0])),this.touch1&&D!=="touch"&&(this.touch1[1]=P.invert(this.touch1[0])),this.that.__zoom=P,this.emit("zoom"),this},end:function(){return--this.active===0&&(delete this.that.__zooming,this.emit("end")),this},emit:function(D){var P=bs(this.that).datum();h.call(D,this.that,new VOe(D,{sourceEvent:this.sourceEvent,target:j,transform:this.that.__zoom,dispatch:h}),P)}};function W(D,...P){if(!e.apply(this,arguments))return;var O=E(this,P).event(D),B=this.__zoom,Y=Math.max(o[0],Math.min(o[1],B.k*Math.pow(2,i.apply(this,arguments)))),V=Vc(D);if(O.wheel)(O.mouse[0][0]!==V[0]||O.mouse[0][1]!==V[1])&&(O.mouse[1]=B.invert(O.mouse[0]=V)),clearTimeout(O.wheel);else{if(B.k===Y)return;O.mouse=[V,B.invert(V)],z0(this),O.start()}Nf(D),O.wheel=setTimeout(G,x),O.zoom("mouse",a(A(T(B,Y),O.mouse[0],O.mouse[1]),O.extent,l));function G(){O.wheel=null,O.end()}}function z(D,...P){if(y||!e.apply(this,arguments))return;var O=E(this,P,!0).event(D),B=bs(D.view).on("mousemove.zoom",F,!0).on("mouseup.zoom",K,!0),Y=Vc(D,V),V=D.currentTarget,G=D.clientX,I=D.clientY;wNe(D.view),n4(D),O.mouse=[Y,this.__zoom.invert(Y)],z0(this),O.start();function F(ne){if(Nf(ne),!O.moved){var ae=ne.clientX-G,ge=ne.clientY-I;O.moved=ae*ae+ge*ge>k}O.event(ne).zoom("mouse",a(A(O.that.__zoom,O.mouse[0]=Vc(ne,V),O.mouse[1]),O.extent,l))}function K(ne){B.on("mousemove.zoom mouseup.zoom",null),kNe(ne.view,O.moved),Nf(ne),O.event(ne).end()}}function H(D,...P){if(e.apply(this,arguments)){var O=this.__zoom,B=Vc(D.changedTouches?D.changedTouches[0]:D,this),Y=O.invert(B),V=O.k*(D.shiftKey?.5:2),G=a(A(T(O,V),B,Y),t.apply(this,P),l);Nf(D),d>0?bs(this).transition().duration(d).call(_,G,B,D):bs(this).call(j.transform,G,B,D)}}function $(D,...P){if(e.apply(this,arguments)){var O=D.touches,B=O.length,Y=E(this,P,D.changedTouches.length===B).event(D),V,G,I,F;for(n4(D),G=0;G<B;++G)I=O[G],F=Vc(I,this),F=[F,this.__zoom.invert(F),I.identifier],Y.touch0?!Y.touch1&&Y.touch0[2]!==F[2]&&(Y.touch1=F,Y.taps=0):(Y.touch0=F,V=!0,Y.taps=1+!!m);m&&(m=clearTimeout(m)),V&&(Y.taps<2&&(f=F[0],m=setTimeout(function(){m=null},b)),z0(this),Y.start())}}function U(D,...P){if(this.__zooming){var O=E(this,P).event(D),B=D.changedTouches,Y=B.length,V,G,I,F;for(Nf(D),V=0;V<Y;++V)G=B[V],I=Vc(G,this),O.touch0&&O.touch0[2]===G.identifier?O.touch0[0]=I:O.touch1&&O.touch1[2]===G.identifier&&(O.touch1[0]=I);if(G=O.that.__zoom,O.touch1){var K=O.touch0[0],ne=O.touch0[1],ae=O.touch1[0],ge=O.touch1[1],be=(be=ae[0]-K[0])*be+(be=ae[1]-K[1])*be,le=(le=ge[0]-ne[0])*le+(le=ge[1]-ne[1])*le;G=T(G,Math.sqrt(be/le)),I=[(K[0]+ae[0])/2,(K[1]+ae[1])/2],F=[(ne[0]+ge[0])/2,(ne[1]+ge[1])/2]}else if(O.touch0)I=O.touch0[0],F=O.touch0[1];else return;O.zoom("touch",a(A(G,I,F),O.extent,l))}}function X(D,...P){if(this.__zooming){var O=E(this,P).event(D),B=D.changedTouches,Y=B.length,V,G;for(n4(D),y&&clearTimeout(y),y=setTimeout(function(){y=null},b),V=0;V<Y;++V)G=B[V],O.touch0&&O.touch0[2]===G.identifier?delete O.touch0:O.touch1&&O.touch1[2]===G.identifier&&delete O.touch1;if(O.touch1&&!O.touch0&&(O.touch0=O.touch1,delete O.touch1),O.touch0)O.touch0[1]=this.__zoom.invert(O.touch0[0]);else if(O.end(),O.taps===2&&(G=Vc(G,this),Math.hypot(f[0]-G[0],f[1]-G[1])<v)){var I=bs(this).on("dblclick.zoom");I&&I.apply(this,arguments)}}}return j.wheelDelta=function(D){return arguments.length?(i=typeof D=="function"?D:d0(+D),j):i},j.filter=function(D){return arguments.length?(e=typeof D=="function"?D:d0(!!D),j):e},j.touchable=function(D){return arguments.length?(r=typeof D=="function"?D:d0(!!D),j):r},j.extent=function(D){return arguments.length?(t=typeof D=="function"?D:d0([[+D[0][0],+D[0][1]],[+D[1][0],+D[1][1]]]),j):t},j.scaleExtent=function(D){return arguments.length?(o[0]=+D[0],o[1]=+D[1],j):[o[0],o[1]]},j.translateExtent=function(D){return arguments.length?(l[0][0]=+D[0][0],l[1][0]=+D[1][0],l[0][1]=+D[0][1],l[1][1]=+D[1][1],j):[[l[0][0],l[0][1]],[l[1][0],l[1][1]]]},j.constrain=function(D){return arguments.length?(a=D,j):a},j.duration=function(D){return arguments.length?(d=+D,j):d},j.interpolate=function(D){return arguments.length?(u=D,j):u},j.on=function(){var D=h.on.apply(h,arguments);return D===h?j:D},j.clickDistance=function(D){return arguments.length?(k=(D=+D)*D,j):Math.sqrt(k)},j.tapDistance=function(D){return arguments.length?(v=+D,j):v},j}function vq(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),a.push.apply(a,i)}return a}function kh(e){for(var t=1;t<arguments.length;t++){var a=arguments[t]!=null?arguments[t]:{};t%2?vq(Object(a),!0).forEach(function(i){tPe(e,i,a[i])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):vq(Object(a)).forEach(function(i){Object.defineProperty(e,i,Object.getOwnPropertyDescriptor(a,i))})}return e}function X_(e){"@babel/helpers - typeof";return X_=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},X_(e)}function tPe(e,t,a){return t in e?Object.defineProperty(e,t,{value:a,enumerable:!0,configurable:!0,writable:!0}):e[t]=a,e}function Va(){return Va=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var a=arguments[t];for(var i in a)Object.prototype.hasOwnProperty.call(a,i)&&(e[i]=a[i])}return e},Va.apply(this,arguments)}function nPe(e,t){if(e==null)return{};var a={},i=Object.keys(e),r,o;for(o=0;o<i.length;o++)r=i[o],!(t.indexOf(r)>=0)&&(a[r]=e[r]);return a}function sr(e,t){if(e==null)return{};var a=nPe(e,t),i,r;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(r=0;r<o.length;r++)i=o[r],!(t.indexOf(i)>=0)&&Object.prototype.propertyIsEnumerable.call(e,i)&&(a[i]=e[i])}return a}function Fn(e,t){return aPe(e)||iPe(e,t)||rPe(e,t)||oPe()}function aPe(e){if(Array.isArray(e))return e}function iPe(e,t){var a=e==null?null:typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(a!=null){var i=[],r=!0,o=!1,l,d;try{for(a=a.call(e);!(r=(l=a.next()).done)&&(i.push(l.value),!(t&&i.length===t));r=!0);}catch(u){o=!0,d=u}finally{try{!r&&a.return!=null&&a.return()}finally{if(o)throw d}}return i}}
7805function rPe(e,t){if(e){if(typeof e=="string")return xq(e,t);var a=Object.prototype.toString.call(e).slice(8,-1);if(a==="Object"&&e.constructor&&(a=e.constructor.name),a==="Map"||a==="Set")return Array.from(e);if(a==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a))return xq(e,t)}}function xq(e,t){(t==null||t>e.length)&&(t=e.length);for(var a=0,i=new Array(t);a<t;a++)i[a]=e[a];return i}function oPe(){throw new TypeError(`Invalid attempt to destructure non-iterable instance.
7806In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var sPe=["width","height","projection","projectionConfig"],lPe=eQ,cPe=sr(O8e,["geoPath"]),Bo=M.createContext(),dPe=function(t){var a=t.projectionConfig,i=a===void 0?{}:a,r=t.projection,o=r===void 0?"geoEqualEarth":r,l=t.width,d=l===void 0?800:l,u=t.height,h=u===void 0?600:u,m=typeof o=="function";if(m)return o;var f=cPe[o]().translate([d/2,h/2]),y=[f.center?"center":null,f.rotate?"rotate":null,f.scale?"scale":null,f.parallels?"parallels":null];return y.forEach(function(b){b&&(f=f[b](i[b]||f[b]()))}),f},NQ=function(t){var a=t.width,i=t.height,r=t.projection,o=t.projectionConfig,l=sr(t,sPe),d=o.center||[],u=Fn(d,2),h=u[0],m=u[1],f=o.rotate||[],y=Fn(f,3),b=y[0],x=y[1],k=y[2],v=o.parallels||[],j=Fn(v,2),T=j[0],A=j[1],C=o.scale||null,_=M.useMemo(function(){return dPe({projectionConfig:{center:h||h===0||m||m===0?[h,m]:null,rotate:b||b===0||x||x===0?[b,x,k]:null,parallels:T||T===0||A||A===0?[T,A]:null,scale:C},projection:r,width:a,height:i})},[a,i,r,h,m,b,x,k,T,A,C]),E=M.useCallback(_,[_]),R=M.useMemo(function(){return{width:a,height:i,projection:E,path:lPe().projection(E)}},[a,i,E]);return q.createElement(Bo.Provider,Va({value:R},l))};NQ.propTypes={width:ye.number,height:ye.number,projection:ye.oneOfType([ye.string,ye.func]),projectionConfig:ye.object};var uPe=["width","height","projection","projectionConfig","className"],QE=M.forwardRef(function(e,t){var a=e.width,i=a===void 0?800:a,r=e.height,o=r===void 0?600:r,l=e.projection,d=l===void 0?"geoEqualEarth":l,u=e.projectionConfig,h=u===void 0?{}:u,m=e.className,f=m===void 0?"":m,y=sr(e,uPe);return q.createElement(NQ,{width:i,height:o,projection:d,projectionConfig:h},q.createElement("svg",Va({ref:t,viewBox:"0 0 ".concat(i," ").concat(o),className:"rsm-svg ".concat(f)},y)))});QE.displayName="ComposableMap";QE.propTypes={width:ye.number,height:ye.number,projection:ye.oneOfType([ye.string,ye.func]),projectionConfig:ye.object,className:ye.string};function wq(e,t,a){var i=(e*a.k-e)/2,r=(t*a.k-t)/2;return[e/2-(i+a.x)/a.k,t/2-(r+a.y)/a.k]}function hPe(e){return fetch(e).then(function(t){if(!t.ok)throw Error(t.statusText);return t.json()}).catch(function(t){console.log("There was a problem when fetching the data: ",t)})}function kq(e,t){var a=e.type==="Topology";if(!a)return t?t(e.features||e):e.features||e;var i=W8e(e,e.objects[Object.keys(e.objects)[0]]).features;return t?t(i):i}function jq(e){var t=e.type==="Topology";if(!t)return null;var a=lq(e,e.objects[Object.keys(e.objects)[0]],function(r,o){return r===o}),i=lq(e,e.objects[Object.keys(e.objects)[0]],function(r,o){return r!==o});return{outline:a,borders:i}}function pPe(e,t,a){return e&&t?{outline:kh(kh({},e),{},{rsmKey:"outline",svgPath:a(e)}),borders:kh(kh({},t),{},{rsmKey:"borders",svgPath:a(t)})}:{}}function mPe(e,t){return e?e.map(function(a,i){return kh(kh({},a),{},{rsmKey:"geo-".concat(i),svgPath:t(a)})}):[]}function fPe(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:30,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:30,a=arguments.length>2&&arguments[2]!==void 0?arguments[2]:.5,i=Array.isArray(a)?a:[a,a],r=e/2*i[0],o=t/2*i[1];return"M".concat(0,",",0," Q",-e/2-r,",").concat(-t/2+o," ").concat(-e,",").concat(-t)}function gPe(e){return typeof e=="string"}function yPe(e){var t=e.geography,a=e.parseGeographies,i=M.useContext(Bo),r=i.path,o=M.useState({}),l=Fn(o,2),d=l[0],u=l[1];M.useEffect(function(){(typeof window>"u"?"undefined":X_(window))!=="undefined"&&t&&(gPe(t)?hPe(t).then(function(b){b&&u({geographies:kq(b,a),mesh:jq(b)})}):u({geographies:kq(t,a),mesh:jq(t)}))},[t,a]);var h=M.useMemo(function(){var b=d.mesh||{},x=pPe(b.outline,b.borders,r);return{geographies:mPe(d.geographies,r),outline:x.outline,borders:x.borders}},[d,r]),m=h.geographies,f=h.outline,y=h.borders;return{geographies:m,outline:f,borders:y}}var bPe=["geography","children","parseGeographies","className"],ZE=M.forwardRef(function(e,t){var a=e.geography,i=e.children,r=e.parseGeographies,o=e.className,l=o===void 0?"":o,d=sr(e,bPe),u=M.useContext(Bo),h=u.path,m=u.projection,f=yPe({geography:a,parseGeographies:r}),y=f.geographies,b=f.outline,x=f.borders;return q.createElement("g",Va({ref:t,className:"rsm-geographies ".concat(l)},d),y&&y.length>0&&i({geographies:y,outline:b,borders:x,path:h,projection:m}))});ZE.displayName="Geographies";ZE.propTypes={geography:ye.oneOfType([ye.string,ye.object,ye.array]),children:ye.func,parseGeographies:ye.func,className:ye.string};var vPe=["geography","onMouseEnter","onMouseLeave","onMouseDown","onMouseUp","onFocus","onBlur","style","className"],JE=M.forwardRef(function(e,t){var a=e.geography,i=e.onMouseEnter,r=e.onMouseLeave,o=e.onMouseDown,l=e.onMouseUp,d=e.onFocus,u=e.onBlur,h=e.style,m=h===void 0?{}
7806:h,f=e.className,y=f===void 0?"":f,b=sr(e,vPe),x=M.useState(!1),k=Fn(x,2),v=k[0],j=k[1],T=M.useState(!1),A=Fn(T,2),C=A[0],_=A[1];function E(U){_(!0),i&&i(U)}function R(U){_(!1),v&&j(!1),r&&r(U)}function W(U){_(!0),d&&d(U)}function z(U){_(!1),v&&j(!1),u&&u(U)}function H(U){j(!0),o&&o(U)}function $(U){j(!1),l&&l(U)}return q.createElement("path",Va({ref:t,tabIndex:"0",className:"rsm-geography ".concat(y),d:a.svgPath,onMouseEnter:E,onMouseLeave:R,onFocus:W,onBlur:z,onMouseDown:H,onMouseUp:$,style:m[v||C?v?"pressed":"hover":"default"]},b))});JE.displayName="Geography";JE.propTypes={geography:ye.object,onMouseEnter:ye.func,onMouseLeave:ye.func,onMouseDown:ye.func,onMouseUp:ye.func,onFocus:ye.func,onBlur:ye.func,style:ye.object,className:ye.string};var xPe=M.memo(JE),wPe=["fill","stroke","step","className"],e6=M.forwardRef(function(e,t){var a=e.fill,i=a===void 0?"transparent":a,r=e.stroke,o=r===void 0?"currentcolor":r,l=e.step,d=l===void 0?[10,10]:l,u=e.className,h=u===void 0?"":u,m=sr(e,wPe),f=M.useContext(Bo),y=f.path;return q.createElement("path",Va({ref:t,d:y(ME().step(d)()),fill:i,stroke:o,className:"rsm-graticule ".concat(h)},m))});e6.displayName="Graticule";e6.propTypes={fill:ye.string,stroke:ye.string,step:ye.array,className:ye.string};M.memo(e6);var kPe=["value"],jPe=M.createContext(),SPe={x:0,y:0,k:1,transformString:"translate(0 0) scale(1)"},OQ=function(t){var a=t.value,i=a===void 0?SPe:a,r=sr(t,kPe);return q.createElement(jPe.Provider,Va({value:i},r))};OQ.propTypes={x:ye.number,y:ye.number,k:ye.number,transformString:ye.string};function CPe(e){var t=e.center,a=e.filterZoomEvent,i=e.onMoveStart,r=e.onMoveEnd,o=e.onMove,l=e.translateExtent,d=l===void 0?[[-1/0,-1/0],[1/0,1/0]]:l,u=e.scaleExtent,h=u===void 0?[1,8]:u,m=e.zoom,f=m===void 0?1:m,y=M.useContext(Bo),b=y.width,x=y.height,k=y.projection,v=Fn(t,2),j=v[0],T=v[1],A=M.useState({x:0,y:0,k:1}),C=Fn(A,2),_=C[0],E=C[1],R=M.useRef({x:0,y:0,k:1}),W=M.useRef(),z=M.useRef(),H=M.useRef(!1),$=Fn(d,2),U=$[0],X=$[1],D=Fn(U,2),P=D[0],O=D[1],B=Fn(X,2),Y=B[0],V=B[1],G=Fn(h,2),I=G[0],F=G[1];return M.useEffect(function(){var K=bs(W.current);function ne(ee){!i||H.current||i({coordinates:k.invert(wq(b,x,ee.transform)),zoom:ee.transform.k},ee)}function ae(ee){if(!H.current){var ve=ee.transform,Se=ee.sourceEvent;E({x:ve.x,y:ve.y,k:ve.k,dragging:Se}),o&&o({x:ve.x,y:ve.y,zoom:ve.k,dragging:Se},ee)}}function ge(ee){if(H.current){H.current=!1;return}var ve=k.invert(wq(b,x,ee.transform)),Se=Fn(ve,2),pe=Se[0],Ye=Se[1];R.current={x:pe,y:Ye,k:ee.transform.k},r&&r({coordinates:[pe,Ye],zoom:ee.transform.k},ee)}function be(ee){return a?a(ee):ee?!ee.ctrlKey&&!ee.button:!1}var le=ePe().filter(be).scaleExtent([I,F]).translateExtent([[P,O],[Y,V]]).on("start",ne).on("zoom",ae).on("end",ge);z.current=le,K.call(le)},[b,x,P,O,Y,V,I,F,k,i,o,r,a]),M.useEffect(function(){if(!(j===R.current.x&&T===R.current.y&&f===R.current.k)){var K=k([j,T]),ne=K[0]*f,ae=K[1]*f,ge=bs(W.current);H.current=!0,ge.call(z.current.transform,XE.translate(b/2-ne,x/2-ae).scale(f)),E({x:b/2-ne,y:x/2-ae,k:f}),R.current={x:j,y:T,k:f}}},[j,T,f,b,x,k]),{mapRef:W,position:_,transformString:"translate(".concat(_.x," ").concat(_.y,") scale(").concat(_.k,")")}}var APe=["center","zoom","minZoom","maxZoom","translateExtent","filterZoomEvent","onMoveStart","onMove","onMoveEnd","className"],PQ=M.forwardRef(function(e,t){var a=e.center,i=a===void 0?[0,0]:a,r=e.zoom,o=r===void 0?1:r,l=e.minZoom,d=l===void 0?1:l,u=e.maxZoom,h=u===void 0?8:u,m=e.translateExtent,f=e.filterZoomEvent,y=e.onMoveStart,b=e.onMove,x=e.onMoveEnd,k=e.className,v=sr(e,APe),j=M.useContext(Bo),T=j.width,A=j.height,C=CPe({center:i,filterZoomEvent:f,onMoveStart:y,onMove:b,onMoveEnd:x,scaleExtent:[d,h],translateExtent:m,zoom:o}),_=C.mapRef,E=C.transformString,R=C.position;return q.createElement(OQ,{value:{x:R.x,y:R.y,k:R.k,transformString:E}},q.createElement("g",{ref:_},q.createElement("rect",{width:T,height:A,fill:"transparent"}),q.createElement("g",Va({ref:t,transform:E,className:"rsm-zoomable-group ".concat(k)},v))))});PQ.displayName="ZoomableGroup";PQ.propTypes={center:ye.array,zoom:ye.number,minZoom:ye.number,maxZoom:ye.number,translateExtent:ye.arrayOf(ye.array),onMoveStart:ye.func,onMove:ye.func,onMoveEnd:ye.func,className:ye.string};var TPe=["id","fill","stroke","strokeWidth","className"],t6=M.forwardRef(function(e,t){var a=e.id,i=a===void 0?"rsm-sphere":a,r=e.fill,o=r===void 0?"transparent":r,l=e.stroke,d=l===void 0?"currentcolor":l,u=e.strokeWidth,h=u===void 0?.5:u,m=e.className,f=m===void 0?"":m,y=sr(e,TPe),b=M.useContext(Bo),x=b.path,k=M.useMemo(function(){return x({type:"Sphere"})},[x]);return q.createElement(M.Fragment,null,q.createElement("defs",null,q.createElement("clipPath",{id:i},q.createElement("path",{d:k}))),q.createElement("path",Va({ref:t,d:k,fill:o,stroke:d,strokeWidth:h,style:{pointerEvents:"none"},className:"rsm-sphere ".concat(f)},y)))});t6.displayName="Sphere";t6.propTypes={id:ye.string,fill:ye.string,stroke:ye.string,strokeWidth:ye.number,className:ye.string};M.memo(t6);var _Pe=["coordinates","children","onMouseEnter","onMouseLeave","onMouseDown","onMouseUp","onFocus","onBlur","style","className"],n6=M.forwardRef(function(e,t){var a=e.coordinates,i=e.children,r=e.onMouseEnter,o=e.onMouseLeave,l=e.onMouseDown,d=e.onMouseUp,u=e.onFocus,h=e.onBlur,m=e.style,f=m===void 0?{}:m,y=e.className,b=y===void 0?"":y,x=sr(e,_Pe),k=M.useContext(Bo),v=k.projection,j=M.useState(!1),T=Fn(j,2),A=T[0],C=T[1],_=M.useState(!1),E=Fn(_,2),R=E[0],W=E[1],z=v(a),H=Fn(z,2),$=H[0],U=H[1];function X(V){W(!0),r&&r(V)}function D(V){W(!1),A&&C(!1),o&&o(V)}function P(V){W(!0),u&&u(V)}function O(V){W(!1),A&&C(!1),h&&h(V)}function B(V){C(!0),l&&l(V)}function Y(V){C(!1),d&&d(V)}return q.createElement("g",Va({ref:t,transform:"translate(".concat($,", ").concat(U,")"),className:"rsm-marker ".concat(b),onMouseEnter:X,onMouseLeave:D,onFocus:P,onBlur:O,onMouseDown:B,onMouseUp:Y,style:f[A||R?A?"pressed":"hover":"default"]},x),i)});n6.displayName="Marker";n6.propTypes={coordinates:ye.array,children:ye.oneOfType([ye.node,ye.arrayOf(ye.node)
7806]),onMouseEnter:ye.func,onMouseLeave:ye.func,onMouseDown:ye.func,onMouseUp:ye.func,onFocus:ye.func,onBlur:ye.func,style:ye.object,className:ye.string};var MPe=["from","to","coordinates","stroke","strokeWidth","fill","className"],IQ=M.forwardRef(function(e,t){var a=e.from,i=a===void 0?[0,0]:a,r=e.to,o=r===void 0?[0,0]:r,l=e.coordinates,d=e.stroke,u=d===void 0?"currentcolor":d,h=e.strokeWidth,m=h===void 0?3:h,f=e.fill,y=f===void 0?"transparent":f,b=e.className,x=b===void 0?"":b,k=sr(e,MPe),v=M.useContext(Bo),j=v.path,T={type:"LineString",coordinates:l||[i,o]};return q.createElement("path",Va({ref:t,d:j(T),className:"rsm-line ".concat(x),stroke:u,strokeWidth:m,fill:y},k))});IQ.displayName="Line";IQ.propTypes={from:ye.array,to:ye.array,coordinates:ye.array,stroke:ye.string,strokeWidth:ye.number,fill:ye.string,className:ye.string};var EPe=["subject","children","connectorProps","dx","dy","curve","className"],DQ=M.forwardRef(function(e,t){var a=e.subject,i=e.children,r=e.connectorProps,o=e.dx,l=o===void 0?30:o,d=e.dy,u=d===void 0?30:d,h=e.curve,m=h===void 0?0:h,f=e.className,y=f===void 0?"":f,b=sr(e,EPe),x=M.useContext(Bo),k=x.projection,v=k(a),j=Fn(v,2),T=j[0],A=j[1],C=fPe(l,u,m);return q.createElement("g",Va({ref:t,transform:"translate(".concat(T+l,", ").concat(A+u,")"),className:"rsm-annotation ".concat(y)},b),q.createElement("path",Va({d:C,fill:"transparent",stroke:"#000"},r)),i)});DQ.displayName="Annotation";DQ.propTypes={subject:ye.array,children:ye.oneOfType([ye.node,ye.arrayOf(ye.node)]),dx:ye.number,dy:ye.number,curve:ye.number,connectorProps:ye.object,className:ye.string};const RPe=[{name:"San Francisco",region:"CA, US",coords:[37.7749,-122.4194],match:/(san\s*francisco|^sf$|^sf[\s,(])/},{name:"Palo Alto",region:"CA, US",coords:[37.4419,-122.143],match:"palo alto"}
7806,{name:"Mountain View",region:"CA, US",coords:[37.3861,-122.0839],match:"mountain view"},{name:"Menlo Park",region:"CA, US",coords:[37.453,-122.1817],match:"menlo park"},{name:"Redwood City",region:"CA, US",coords:[37.4852,-122.2364],match:"redwood city"},{name:"San Mateo",region:"CA, US",coords:[37.563,-122.3255],match:"san mateo"},{name:"Santa Clara",region:"CA, US",coords:[37.3541,-121.9552],match:"santa clara"},{name:"Sunnyvale",region:"CA, US",coords:[37.3688,-122.0363],match:"sunnyvale"},{name:"Oakland",region:"CA, US",coords:[37.8044,-122.2712],match:"oakland"},{name:"Berkeley",region:"CA, US",coords:[37.8716,-122.2727],match:"berkeley"},{name:"New York",region:"NY, US",coords:[40.7128,-74.006],match:/(new\s*york|^nyc$|^nyc[\s,(]|brooklyn|manhattan)/},{name:"Boston",region:"MA, US",coords:[42.3601,-71.0589],match:"boston"},{name:"Seattle",region:"WA, US",coords:[47.6062,-122.3321],match:"seattle"},{name:"Los Angeles",region:"CA, US",coords:[34.0522,-118.2437],match:/los\s*angeles|^la$|^la[\s,(]/},{name:"Austin",region:"TX, US",coords:[30.2672,-97.7431],match:"austin"},{name:"Chicago",region:"IL, US",coords:[41.8781,-87.6298],match:"chicago"},{name:"Denver",region:"CO, US",coords:[39.7392,-104.9903],match:"denver"},{name:"Atlanta",region:"GA, US",coords:[33.749,-84.388],match:"atlanta"},{name:"Miami",region:"FL, US",coords:[25.7617,-80.1918],match:"miami"},{name:"Portland",region:"OR, US",coords:[45.5152,-122.6784],match:"portland"},{name:"Nashville",region:"TN, US",coords:[36.1627,-86.7816],match:"nashville"},{name:"Salt Lake City",region:"UT, US",coords:[40.7608,-111.891],match:/salt\s*lake/},{name:"Washington",region:"DC, US",coords:[38.9072,-77.0369],match:/washington|^dc$|d\.c\./},{name:"Detroit",region:"MI, US",coords:[42.3314,-83.0458],match:"detroit"},{name:"Minneapolis",region:"MN, US",coords:[44.9778,-93.265],match:"minneapolis"},{name:"Houston",region:"TX, US",coords:[29.7604,-95.3698],match:"houston"},{name:"San Diego",region:"CA, US",coords:[32.7157,-117.1611],match:"san diego"},{name:"Phoenix",region:"AZ, US",coords:[33.4484,-112.074],match:"phoenix"},{name:"Raleigh",region:"NC, US",coords:[35.7796,-78.6382],match:"raleigh"},{name:"Toronto",region:"ON, Canada",coords:[43.6532,-79.3832],match:"toronto"},{name:"Vancouver",region:"BC, Canada",coords:[49.2827,-123.1207],match:"vancouver"},{name:"London",region:"UK",coords:[51.5074,-.1278],match:/london/},{name:"Dublin",region:"Ireland",coords:[53.3498,-6.2603],match:"dublin"},{name:"Berlin",region:"Germany",coords:[52.52,13.405],match:"berlin"},{name:"Munich",region:"Germany",coords:[48.1351,11.582],match:"munich"},{name:"Paris",region:"France",coords:[48.8566,2.3522],match:"paris"},{name:"Amsterdam",region:"Netherlands",coords:[52.3676,4.9041],match:"amsterdam"},{name:"Stockholm",region:"Sweden",coords:[59.3293,18.0686],match:"stockholm"},{name:"Copenhagen",region:"Denmark",coords:[55.6761,12.5683],match:"copenhagen"},{name:"Lisbon",region:"Portugal",coords:[38.7223,-9.1393],match:"lisbon"},{name:"Madrid",region:"Spain",coords:[40.4168,-3.7038],match:"madrid"},{name:"Barcelona",region:"Spain",coords:[41.3851,2.1734],match:"barcelona"},{name:"Zurich",region:"Switzerland",coords:[47.3769,8.5417],match:"zurich"},{name:"Tel Aviv",region:"Israel",coords:[32.0853,34.7818],match:/tel\s*aviv|israel/},{name:"Singapore",region:"Singapore",coords:[1.3521,103.8198],match:"singapore"},{name:"Tokyo",region:"Japan",coords:[35.6762,139.6503],match:"tokyo"},{name:"Sydney",region:"Australia",coords:[-33.8688,151.2093],match:"sydney"},{name:"Melbourne",region:"Australia",coords:[-37.8136,144.9631],match:"melbourne"},{name:"Bengaluru",region:"India",coords:[12.9716,77.5946],match:/bengaluru|bangalore/},{name:"Mumbai",region:"India",coords:[19.076,72.8777],match:"mumbai"},{name:"Hong Kong",region:"China",coords:[22.3193,114.1694],match:"hong kong"},{name:"Seoul",region:"South Korea",coords:[37.5665,126.978],match:"seoul"}],lh={global:{key:"remote-global",label:"Global remote",color:"#509A79",order:1},us:{key:"remote-us",label:"US remote",color:"#3D7BC4",order:2},europe:{key:"remote-europe",label:"Europe remote",color:"#C99435",order:3}
7806,apac:{key:"remote-apac",label:"APAC remote",color:"#A88EE0",order:4},other:{key:"remote-other",label:"Remote (unspecified)",color:"#869DA2",order:5}},Of={usa:{key:"country-usa",label:"USA · no city",color:"#1b3a5c",order:11},uk:{key:"country-uk",label:"UK · no city",color:"#2d4a8a",order:12},canada:{key:"country-canada",label:"Canada · no city",color:"#a83232",order:13},europe:{key:"country-europe",label:"Europe · no city",color:"#c99435",order:14},other:{key:"country-other",label:"Other (no city)",color:"#5f6770",order:15}},NPe=[{re:/^(usa|united\s*states|^us$|america)$/i,bucket:Of.usa},{re:/^(uk|united\s*kingdom|england|britain)$/i,bucket:Of.uk},{re:/^canada$/i,bucket:Of.canada},{re:/^(germany|france|netherlands|spain|portugal|sweden|denmark|norway|switzerland|ireland|italy|poland|finland|austria|belgium|romania|estonia|europe|emea|eu)$/i,bucket:Of.europe},{re:/^(israel|singapore|japan|australia|india|china|brazil|mexico|south\s*africa|new\s*zealand|hong\s*kong|south\s*korea)$/i,bucket:Of.other}];function OPe(e){return/remote|distributed|anywhere|work\s*from\s*home/i.test(e)?/global|worldwide|anywhere/i.test(e)?lh.global:/(united\s*states|^us\b|usa|america|us\s*remote|remote\s*us|north\s*america)/i.test(e)?lh.us:/(europe|^eu\b|emea|^uk\b|united\s*kingdom)/i.test(e)?lh.europe:/(apac|asia|india|singapore|australia)/i.test(e)?lh.apac:lh.other:/^(global|worldwide)$/i.test(e.trim())?lh.global:null}function PPe(e){const t=e.trim();for(const{re:a,bucket:i}of NPe)if(a.test(t))return i;return null}function IPe(e){const t=e.trim().toLowerCase();if(!t)return[];const a=[];for(const i of RPe)(typeof i.match=="string"?t.includes(i.match):i.match.test(t))&&!a.includes(i)&&a.push(i);return a}function DPe(e){const t=(e||"").trim();if(!t||/^[—\-?]$/.test(t))return{cities:[],remoteBuckets:[],countryBucket:null};const a=t.split(/\s*(?:\/| or | & |\+|;)\s*/i).filter(Boolean),i=[],r=[];for(const l of a){const d=IPe(l);for(const h of d)i.includes(h)||i.push(h);const u=OPe(l);u&&!r.includes(u)&&r.push(u)}let o=null;return i.length===0&&r.length===0&&(o=PPe(t)),{cities:i,remoteBuckets:r,countryBucket:o}}const WPe="/static/world-110m.json",zPe={rotate:[-10,0,0],scale:165};function LPe(e){return(e.status||"Likely Open").trim()==="Likely Open"}function UPe({roles:e}){const{cities:t,sideBuckets:a,totalPlaced:i,totalSide:r,totalUnplaced:o,totalAll:l}=M.useMemo(()=>{const f=new Map,y=new Map;let b=0,x=0,k=0;for(const T of e){const A=DPe(T.location),C=LPe(T);let _=!1;for(const E of A.cities){const R=E.name+E.region,W=f.get(R)??{city:E,total:0,open:0};W.total+=1,C&&(W.open+=1),f.set(R,W),_=!0}A.cities.length>0&&(x+=1);for(const E of A.remoteBuckets){const R=y.get(E.key)??{bucket:E,total:0,open:0};R.total+=1,C&&(R.open+=1),y.set(E.key,R),_=!0}if(A.countryBucket){const E=y.get(A.countryBucket.key)??{bucket:A.countryBucket,total:0,open:0};E.total+=1,C&&(E.open+=1),y.set(A.countryBucket.key,E),_=!0}A.cities.length===0&&(A.remoteBuckets.length>0||A.countryBucket)&&(k+=1),_||(b+=1)}const v=[...f.values()].sort((T,A)=>A.total-T.total),j=[...y.values()].sort((T,A)=>T.bucket.order-A.bucket.order);return{cities:v,sideBuckets:j,totalPlaced:x,totalSide:k,totalUnplaced:b,totalAll:e.length}},[e]),d=Math.max(1,...t.map(f=>f.total)),u=f=>4+Math.sqrt(f/d)*16,h=Math.max(1,...a.map(f=>f.total)),m=f=>18+Math.sqrt(f/h)*22;return n.jsxs("div",{className:"gtmr-edit__map",children:[n.jsxs("div",{className:"gtmr-edit__map-stats",children:[n.jsxs("span",{children:[n.jsx("b",{children:i.toLocaleString()})," roles in ",n.jsx("b",{children:t.length})," cities"]}),n.jsx("span",{className:"gtmr-edit__map-divider","aria-hidden":!0}),n.jsxs("span",{children:[n.jsx("b",{children:r.toLocaleString()})," remote / no-city"]}),o>0&&n.jsxs(n.Fragment,{children:[n.jsx("span",{className:"gtmr-edit__map-divider","aria-hidden":!0}),n.jsxs("span",{className:"gtmr-edit__map-meta",children:[o.toLocaleString()," unplaced"]})]}),n.jsx("span",{className:"gtmr-edit__map-divider","aria-hidden":!0}),n.jsxs("span",{className:"gtmr-edit__map-meta",children:[l.toLocaleString()," total in dataset"]})]}),n.jsx("div",{className:"gtmr-edit__map-canvas",children:n.jsxs(QE,{projection:"geoEqualEarth",projectionConfig:zPe,width:980,height:640,style:{width:"100%",height:"auto",display:"block"},children:[n.jsx(ZE,{geography:WPe,children:({geographies:f})=>f.map(y=>n.jsx(xPe,{geography:y,fill:"#f4f6f3",stroke:"#d8e0e2",strokeWidth:.5,style:{default:{outline:"none"},hover:{outline:"none",fill:"#eef5f1"},pressed:{outline:"none"}}},y.rsmKey))}),t.map(f=>{const y=u(f.total);return n.jsxs(n6,{coordinates:[f.city.coords[1],f.city.coords[0]],children:[n.jsx("circle",{r:y,fill:"#509A79",fillOpacity:.4,stroke:"#316851",strokeWidth:1}),n.jsx("circle",{r:Math.max(2,y*.35),fill:"#316851"}),n.jsxs("title",{children:[f.city.name,", ",f.city.region," · ",f.total," role",f.total===1?"":"s"," · ",f.open," open"]})]},f.city.name+f.city.region)}),a.length>0&&(()=>{const k=916/a.length,v=j=>{const T=j.split(/\s+/);if(T.length<=1)return[j];if(T.length===2)return T;const A=Math.ceil(T.length/2);return[T.slice(0,A).join(" "),T.slice(A).join(" ")]};return n.jsxs("g",{children:[n.jsx("line",{x1:32,x2:948,y1:448,y2:448,stroke:"#d8e0e2",strokeWidth:1}),n.jsx("text",{x:32,y:478,fontFamily:"Geist, sans-serif",fontSize:10.5,fontWeight:700,letterSpacing:"0.12em",fill:"#5f6770",children:"ROLES WITHOUT A CITY"}),a.map((j,T)=>{const A=m(j.total),C=32+k*T+k/2,_=v(j.bucket.label);return n.jsxs("g",{children:[n.jsx("circle",{cx:C,cy:530,r:A,fill:"#509A79",fillOpacity:.4,stroke:"#316851",strokeWidth:1,children:n.jsxs("title",{children:[j.bucket.label," · ",j.total," role",j.total===1?"":"s"," · ",j.open," open"]})}),n.jsx("text",{x:C,y:536,textAnchor:"middle",fill:"#1f4a37",stroke:"none",fontFamily:"Geist, sans-serif",fontSize:Math.min(20,Math.max(13,A*.7)),fontWeight:700,letterSpacing:"-0.012em",style:{pointerEvents:"none"},children:j.total}),_.map((E,R)=>n.jsx("text",{x:C,y:530+A+18+R*14,textAnchor:"middle",fontFamily:"Geist, sans-serif",fontSize:12,fontWeight:600,fill:"#1b1f1c",stroke:"none",style:{pointerEvents:"none"},children:E},R)),n.jsxs("text",{x:C,y:530+A+18+_.length*14+2,textAnchor:"middle",fontFamily:"Geist, sans-serif",fontSize:10.5,fill:"#5f6770",stroke:"none",style:{pointerEvents:"none"},children:[j.open," open"]})]},j.bucket.key)})]})})()]})})]})}function my(e){if(!e)return"";try{const t=new URL(e);return t.protocol==="http:"||t.protocol==="https:"?e:""}catch{return""}}const BPe="/data/gtme-roles.csv",qPe="/data/gtme-practitioners.csv",$Pe="/data/gtme-summary.json",FPe="/data/gtme-trends.json",GPe="/data/gtme-featured.json";function WQ(e){const t=[];let a="",i=[],r=!1;for(let o=0;o<e.length;o+=1){const l=e[o],d=e[o+1];if(r){if(l==='"'&&d==='"'){a+='"',o+=1;continue}if(l==='"'){r=!1;continue}a+=l;continue}if(l==='"'){r=!0;continue}if(l===","){i.push(a),a="";continue}if(l===`
7807`){i.push(a),t.push(i),i=[],a="";continue}l!=="\r"&&(a+=l)}return(a.length||i.length)&&(i.push(a),t.push(i)),t}const HPe={Company:"company",Title:"title",Flavor:"flavor",FlavorNorm:"flavorNorm","Team / Reports Into":"team",Location:"location",Comp:"comp","JD URL":"jdUrl",Source:"source",Notes:"notes","Skills / Keywords":"skills",Status:"status","Posted Date":"postedDate",Added:"addedDate"},YPe={"AI Proficiency":"aiRating","GTM Knowledge":"gtmRating","Data Proficiency":"dataRating",Experimentation:"expRating","Technical / Coding":"techRating"};function VPe(e){const t=(e??"").trim();if(!t)return null;const a=Number(t);return Number.isFinite(a)?a:null}function KPe(e){const t=WQ(e);if(t.length<2)return[];const a=t[0].map(i=>i.trim());return t.slice(1).map(i=>{const r={company:"",title:"",flavor:"",flavorNorm:"",team:"",location:"",comp:"",jdUrl:"",source:"",notes:"",skills:"",status:"",postedDate:"",addedDate:"",aiRating:null,gtmRating:null,dataRating:null,expRating:null,techRating:null};return a.forEach((o,l)=>{const d=(i[l]??"").trim(),u=HPe[o];if(u){u==="status"?r.status=d||"":r[u]=d;return}const h=YPe[o];h&&(r[h]=VPe(d))}),r}).filter(i=>i.company||i.title)}const XPe={Name:"name",Title:"title",Company:"company","Flavor / Category":"flavor",FlavorNorm:"flavorNorm",Location:"location","Backgroun
7807d / From":"background","Role Description (in their words)":"description","Role Description":"description","Profile URL":"profileUrl","Notes / Why They Matter":"notes",Notes:"notes","Photo URL":"photoUrl","Work Example 1":"workExample1","Work Example 2":"workExample2","Work Example 3":"workExample3"};function QPe(e){const t=WQ(e);if(t.length<2)return[];const a=t[0].map(i=>i.trim());return t.slice(1).map(i=>{const r={name:"",title:"",company:"",flavor:"",flavorNorm:"",location:"",background:"",description:"",profileUrl:"",notes:"",photoUrl:"",workExample1:"",workExample2:"",workExample3:""};return a.forEach((o,l)=>{const d=XPe[o];d&&(r[d]=(i[l]??"").trim())}),r}).filter(i=>i.name)}const ZPe="gtme-summary-bootstrap";function JPe(e){if(!e||typeof e!="object")return!1;const t=e;return typeof t.lastUpdated=="string"&&typeof t.totalRoles=="number"&&typeof t.totalPractitioners=="number"&&typeof t.totalCompanies=="number"&&Array.isArray(t.rolesByProfile)&&Array.isArray(t.profiles)}let e9e=null,a4;function t9e(){var a;const e=document.getElementById(ZPe),t=(a=e==null?void 0:e.textContent)==null?void 0:a.trim();if(!t)return null;try{const i=JSON.parse(t);return JPe(i)?i:null}catch{return null}}function n9e(){return typeof document>"u"?e9e:(a4===void 0&&(a4=t9e()),a4)}function zQ(e){return fetch(e).then(async t=>{if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.text()})}function a6(e){return fetch(e).then(async t=>{if(!t.ok)throw new Error(`HTTP ${t.status}`);return t.json()})}function LQ(){const[e,t]=M.useState({data:null,status:"loading",error:""});return M.useEffect(()=>{let a=!1;return zQ(BPe).then(i=>{if(a)return;const r=KPe(i);t({data:r,status:r.length?"ready":"error",error:r.length?"":"Empty dataset."})}).catch(i=>{a||t({data:null,status:"error",error:i instanceof Error?i.message:"Unknown error"})}),()=>{a=!0}},[]),e}function UQ(){const[e,t]=M.useState({data:null,status:"loading",error:""});return M.useEffect(()=>{let a=!1;return zQ(qPe).then(i=>{if(a)return;const r=QPe(i);t({data:r,status:r.length?"ready":"error",error:r.length?"":"Empty dataset."})}).catch(i=>{a||t({data:null,status:"error",error:i instanceof Error?i.message:"Unknown error"})}),()=>{a=!0}},[]),e}function a9e(){const[e,t]=M.useState({data:null,status:"loading",error:""});return M.useEffect(()=>{let a=!1;return a6(FPe).then(i=>{if(a)return;const r=Array.isArray(i)?i:[];t({data:r,status:r.length?"ready":"error",error:r.length?"":"No trend snapshots yet."})}).catch(i=>{a||t({data:null,status:"error",error:i instanceof Error?i.message:"Unknown error"})}),()=>{a=!0}},[]),e}function i9e(){const[e,t]=M.useState({data:null,status:"loading",error:""});return M.useEffect(()=>{let a=!1;return a6(GPe).then(i=>{if(a)return;const r=Array.isArray(i)?i:[];t({data:r,status:"ready",error:""})}).catch(i=>{a||t({data:null,status:"error",error:i instanceof Error?i.message:"Unknown error"})}),()=>{a=!0}},[]),e}function tk(){const[e,t]=M.useState(()=>{const a=n9e();return a?{data:a,status:"ready",error:""}:{data:null,status:"loading",error:""}});return M.useEffect(()=>{let a=!1;return a6($Pe).then(i=>{a||t({data:i,status:"ready",error:""})}).catch(i=>{a||t(r=>r.data?r:{data:null,status:"error",error:i instanceof Error?i.message:"Unknown error"})}),()=>{a=!0}},[]),e}function r9e(e,t){const a=`Site rebuilt from Notion on ${e}.`;if(!t)return a;const i=t.slice(0,10),r=t.slice(11,16),o=r?`${i} at ${r} UTC`:i;return`${a} Notion last edited ${o}.`}function nk({prefix:e="Updated"}){const{data:t,status:a}=tk();if(a!=="ready"||!(t!=null&&t.lastUpdated))return null;const i=r9e(t.lastUpdated,t.notionLastEdited);return n.jsxs("span",{className:"gtmr-edit__updated-badge",title:i,children:[n.jsx("span",{className:"gtmr-edit__updated-dot","aria-hidden":!0}),e," ",t.lastUpdated]})}function o9e({series:e,primaryLabel:t,secondaryLabel:a,formatValue:i}){const r=Math.max(...e.map(l=>Math.max(l.value,l.secondary??0)),1),o=i??(l=>l.toLocaleString());return n.jsxs("div",{role:"img","aria-label":t,children:[a&&n.jsxs("div",{className:"gtmr-card__meta","aria-hidden":!0,style:{marginBottom:12},children:[n.jsx("span",{className:"gtmr-pill gtmr-pill--accent",children:t}),n.jsx("span",{className:"gtmr-pill gtmr-pill--neutral",children:a})]}),e.map(l=>{const d=l.value/r*100,u=(l.secondary??0)/r*100;return n.jsxs("div",{className:"gtmr-bar",children:[n.jsx("span",{className:"gtmr-bar__label",title:l.label,children:l.label}),n.jsxs("span",{className:"gtmr-bar__track",children:[n.jsx("span",{className:"gtmr-bar__fill",style:{width:`${d}%`},"aria-label":`${t}: ${o(l.value)}`}),l.secondary!=null&&n.jsx("span",{className:"gtmr-bar__fill gtmr-bar__fill--secondary",style:{width:`${Math.max(u-d,0)}%`,opacity:.6,marginLeft:2},"aria-label":`${a}: ${o(l.secondary)}`})]}),n.jsxs("span",{className:"gtmr-bar__value",children:[o(l.value),l.secondary!=null&&a?n.jsxs("span",{style:{opacity:.6},children:[" · ",o(l.secondary)]}):null]})]},l.label)})]})}function s9e(e){return e===0?"transparent":`rgba(80, 154, 121, ${Math.min(.85,.1+e/60).toFixed(2)})`}function l9e(e){return e>=30?"#fff":"#1a1a1a"}function c9e(e,t){const a=e.topTools.find(i=>i.tool.toLowerCase()===t.toLowerCase());return a?a.pct:0}function d9e({profiles:e,tools:t}){return n.jsx("div",{className:"gtmr-heatmap",children:n.jsxs("table",{children:[n.jsx("thead",{children:n.jsxs("tr",{children:[n.jsx("th",{children:"Profile"}),n.jsx("th",{children:"JDs"}),t.map(a=>n.jsx("th",{children:a},a))]})}),n.jsx("tbody",{children:e.map(a=>n.jsxs("tr",{children:[n.jsx("td",{children:n.jsx("strong",{children:a.shortName})}
7807),n.jsx("td",{children:a.openRoles.toLocaleString()}),t.map(i=>{const r=c9e(a,i);return n.jsx("td",{style:{background:s9e(r),color:l9e(r),fontVariantNumeric:"tabular-nums"},children:r?`${r.toFixed(0)}%`:"—"},i)})]},a.slug))})]})})}const Sq={carlgunlefinger:"/images/mentions/case/carl-gunlefinger.png","matt-grebow":"/images/mentions/case/matt-grebow.png"};function u9e(e){try{const a=new URL(e).pathname.split("/").filter(Boolean),i=a.indexOf("in");if(i>=0&&a[i+1])return a[i+1].toLowerCase()}catch{}return""}function h9e(e){const t=(e.photoUrl||"").trim();if(t.startsWith("/images/gtme-practitioners/")||t.startsWith("blob:"))return t;const a=my(t);if(a)return a;const i=u9e(e.profileUrl);return i&&Sq[i]?Sq[i]:""}function p9e(e){const t=e.trim().split(/\s+/).filter(Boolean);return t.length?t.length===1?t[0].slice(0,2).toUpperCase():`${t[0][0]??""}${t[t.length-1][0]??""}`.toUpperCase():"?"}function BQ(e){return[e.workExample1,e.workExample2,e.workExample3].map(t=>my(t)).filter(Boolean)}function Q_(e){return BQ(e).length>0}function qQ(e){if(!e)return null;const t=a=>a&&/^[\w-]{11}$/.test(a)?a:null;try{const a=new URL(e),i=a.hostname.replace(/^www\./,"");if(i==="youtu.be"){const r=a.pathname.replace(/^\//,"").split("/")[0];return t(r||null)}if(i==="youtube.com"||i==="m.youtube.com"||i==="music.youtube.com"){if(a.pathname==="/watch")return t(a.searchParams.get("v"));const r=a.pathname.match(/^\/embed\/([\w-]{11})/);if(r)return r[1];const o=a.pathname.match(/^\/shorts\/([\w-]{11})/);if(o)return o[1]}}catch{return null}return null}function m9e(e,t="hq"){return`https://i.ytimg.com/vi/${e}/${t==="hq"?"hqdefault.jpg":"mqdefault.jpg"}`}function i6(e){return qQ(e)!==null}function f9e({url:e,index:t}){const a=qQ(e),i=a?`Watch demo ${t+1}`:`Work example ${t+1}`;return n.jsx("a",{href:e,target:"_blank",rel:"noopener noreferrer nofollow",className:"gtmr-prac-work","aria-label":i,title:i,onClick:r=>r.stopPropagation(),children:a?n.jsxs(n.Fragment,{children:[n.jsx("img",{src:m9e(a),alt:"",className:"gtmr-prac-work__thumb",loading:"lazy",decoding:"async"}),n.jsx("span",{className:"gtmr-prac-work__play","aria-hidden":!0,children:"▶"})]}):n.jsx("span",{className:"gtmr-prac-work__link",children:i6(e)?"Video":"Example"})})}function r6({practitioner:e,showNotes:t=!0}){var h;const a=my(e.profileUrl),i=h9e(e),r=BQ(e),o=Q_(e),l=t&&((h=e.notes)!=null&&h.trim().toLowerCase().startsWith("demo:"))?e.notes.trim():"",d=n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"gtmr-prac-card__head",children:[n.jsx("div",{className:"gtmr-prac-avatar","aria-hidden":!i,children:i?n.jsx("img",{src:i,alt:"",className:"gtmr-prac-avatar__img",loading:"lazy",decoding:"async"}):n.jsx("span",{className:"gtmr-prac-avatar__initials",children:p9e(e.name)})}),n.jsxs("div",{className:"gtmr-prac-card__identity",children:[n.jsx("h3",{className:"gtmr-card__title",children:e.name}),n.jsx("p",{className:"gtmr-card__body",style:{fontSize:14},children:e.title||"—"})]})]}),n.jsxs("div",{className:"gtmr-card__meta",children:[e.flavorNorm&&n.jsx("span",{className:"gtmr-pill gtmr-pill--neutral",children:po(e.flavorNorm)}),e.company&&n.jsxs("span",{style:{fontSize:13},children:["@ ",e.company]}),e.location&&n.jsx("span",{style:{fontSize:13},children:e.location})]}),l&&n.jsx("p",{className:"gtmr-prac-card__note",children:l}),r.length>0&&n.jsxs("div",{className:"gtmr-prac-card__work",children:[n.jsx("span",{className:"gtmr-prac-card__work-label",children:"Work examples"}),n.jsx("div",{className:"gtmr-prac-card__work-row",children:r.map((m,f)=>n.jsx(f9e,{url:m,index:f},`${m}-${f}`))})]})]}),u=o?"gtmr-card gtmr-prac-card gtmr-prac-card--enriched":"gtmr-card gtmr-prac-card";return a?n.jsx("a",{href:a,target:"_blank",rel:"noopener noreferrer nofollow",className:u,children:d}):n.jsx("div",{className:u,children:d})}const g9e=new Set(["careers","career","jobs","job","apply","talent","recruit","recruiting","hiring","joinus","join","werkenbij"]),y9e={"boards.greenhouse.io":!0,"job-boards.greenhouse.io":!0,"jobs.lever.co":!0,"apply.workable.com":!0,"jobs.ashbyhq.com":!0,"jobs.smartrecruiters.com":!0,"joinrise.co":!0},b9e={"careers.base10.vc":!0,"jobs.eu.lever.co":!0}
7807,Cq=["careers","jobs","hiring","talent","hq","labs","lab","inc","corp"],Aq={cbre:"CBRE",ibm:"IBM",sap:"SAP",ey:"EY",kpmg:"KPMG",pwc:"PwC",atandt:"AT&T"},v9e=new Set(["builtin.com","indeed.com","linkedin.com","glassdoor.com","ziprecruiter.com","monster.com","wellfound.com","angel.co","ycombinator.com","remoterocketship.com","remote.com","weworkremotely.com","otta.com","app.otta.com","moaijobs.com","jobright.ai","teeming.ai","techsalesjobs.jobboardly.com","jobboardly.com","efinancialcareers.com","novaedge.page.gd","community.clay.com","syncgtm.com","the-signal.io"]);function x9e(e){return e&&e.split(/[\s-]+/).filter(Boolean).map(t=>t.charAt(0).toUpperCase()+t.slice(1)).join(" ")}function u0(e){let t=e.toLowerCase().replace(/[_]/g,"-").replace(/[^a-z0-9-]/g,"");if(!t)return null;for(const a of Cq)t.length>a.length+2&&t.endsWith(`-${a}`)&&(t=t.slice(0,-(a.length+1)));for(const a of Cq)a.length>=4&&t.length>a.length+2&&t.endsWith(a)&&(t=t.slice(0,-a.length));return Aq[t]?Aq[t]:x9e(t)}function Iw(e){if(!e)return null;let t;try{t=new URL(e)}catch{return null}const a=t.hostname.toLowerCase().replace(/^www\./,""),i=t.pathname.split("/").filter(Boolean);if(v9e.has(a))return null;if(b9e[a]){const o=i.indexOf("companies");if(o>=0&&i[o+1])return u0(i[o+1])}if(y9e[a]&&i[0])return u0(i[0]);const r=a.split(".");return r.length>=3&&g9e.has(r[0])?u0(r[1]):r.length===2&&(i.includes("jobs")||i.includes("careers")||i.includes("job"))?u0(r[0]):null}function w9e({profile:e,roles:t,practitioners:a,isOpen:i,bodyId:r}){var d;const o=M.useMemo(()=>t.filter(u=>u.flavorNorm===e.name).filter(u=>{var h;return((h=u.company)==null?void 0:h.trim())||Iw(u.jdUrl)}).slice(0,12),[t,e.name]),l=M.useMemo(()=>a.filter(u=>u.flavorNorm===e.name).slice(0,12),[a,e.name]);return n.jsxs("div",{id:r??`${e.slug}-body`,className:"gtmr-archetype__body",hidden:!i,children:[n.jsxs("div",{className:"gtmr-stats",children:[n.jsxs("div",{className:"gtmr-stat",children:[n.jsx("span",{className:"gtmr-stat__label",children:"Open roles"}),n.jsx("span",{className:"gtmr-stat__value",children:e.openRoles.toLocaleString()})]}),n.jsxs("div",{className:"gtmr-stat",children:[n.jsx("span",{className:"gtmr-stat__label",children:"Practitioners"}),n.jsx("span",{className:"gtmr-stat__value",children:e.practitioners.toLocaleString()})]}),n.jsxs("div",{className:"gtmr-stat",children:[n.jsx("span",{className:"gtmr-stat__label",children:"Base salary"}),n.jsx("span",{className:"gtmr-stat__value",style:{fontSize:22},children:e.baseRange||"—"})]}),n.jsxs("div",{className:"gtmr-stat",children:[n.jsx("span",{className:"gtmr-stat__label",children:"Reports into"}),n.jsx("span",{className:"gtmr-stat__value",style:{fontSize:18},children:e.primaryTeam||"—"})]})]}),n.jsxs("div",{className:"gtmr-profile-detail",style:{marginTop:24},children:[n.jsxs("div",{children:[n.jsx("h3",{className:"gtmr-h3",children:"Canonical KPI"}),n.jsx("p",{className:"gtmr-body",children:e.canonicalKPI}),n.jsx("h3",{className:"gtmr-h3",children:"JD-mined KPIs (% of JDs that mention)"}),n.jsx("p",{className:"gtmr-body",children:e.jdMinedKPIs}),n.jsx("h3",{className:"gtmr-h3",children:"Pay context"}),n.jsxs("p",{className:"gtmr-body",children:[n.jsx("strong",{children:"Top payers:"})," ",e.topPayers||"—"]}),e.notes&&n.jsx("p",{className:"gtmr-body",style:{fontStyle:"italic"},children:e.notes})]}),n.jsxs("aside",{children:[n.jsx("h3",{className:"gtmr-h3",children:"Top tools"}),n.jsx("div",{className:"gtmr-skill-pills",children:e.topTools.map(u=>n.jsxs("span",{className:"gtmr-skill-pill",children:[u.tool," ",n.jsxs("span",{className:"gtmr-skill-pill__pct",children:[u.pct.toFixed(0),"%"]})]},u.tool))}),(d=e.topSkills)!=null&&d.length?n.jsxs(n.Fragment,{children:[n.jsx("h3",{className:"gtmr-h3",style:{marginTop:24},children:"Real skills (mined from JD prose)"}),n.jsx("div",{className:"gtmr-skill-pills",children:e.topSkills.map(u=>n.jsxs("span",{className:"gtmr-skill-pill",children:[u.skill," ",n.jsxs("span",{className:"gtmr-skill-pill__pct",children:[u.pct,"%"]})]},u.skill))})]}):null,e.canonicalCompanies&&n.jsxs(n.Fragment,{children:[n.jsx("h3",{className:"gtmr-h3",style:{marginTop:24},children:"Canonical companies"}),n.jsx("p",{className:"gtmr-body",style:{fontSize:14},children:e.canonicalCompanies})]})]})]}),o.length>0&&n.jsxs(n.Fragment,{children:[n.jsx("h3",{className:"gtmr-h3",style:{marginTop:32},children:"Recent open roles"}),n.jsx("div",{className:"gtmr-table-wrap",children:n.jsxs("table",{className:"gtmr-table",children:[n.jsx("thead",{children:n.jsxs("tr",{children:[n.jsx("th",{children:"Company"}),n.jsx("th",{children:"Title"}),n.jsx("th",{children:"Location"}),n.jsx("th",{children:"Comp"}),n.jsx("th",{children:"JD"})]})}),n.jsx("tbody",{children:o.map((u,h)=>{var f;const m=(f=u.company)!=null&&f.trim()?u.company:Iw(u.jdUrl);return n.jsxs("tr",{children:[n.jsx("td",{className:"gtmr-table__cell-strong",children:m||"—"}),n.jsx("td",{children:u.title||"—"}),n.jsx("td",{children:u.location||"—"}),n.jsx("td",{children:u.comp||"—"}),n.jsx("td",{children:u.jdUrl?n.jsx("a",{href:u.jdUrl,target:"_blank",rel:"noopener noreferrer nofollow",className:"gtmr-table__link",children:"Open →"}):"—"})]},`${u.jdUrl||u.title}-${h}`)})})]})}),n.jsx("p",{style:{marginTop:8},children:n.jsx(J,{to:"/gtme/jobs",className:"gtmr-table__link",children:"See all open roles in the job board →"})})]}),l.length>0&&n.jsxs(n.Fragment,{children:[n.jsx("h3",{className:"gtmr-h3",style:{marginTop:32},children:"Notable practitioners"}),n.jsx("div",{className:"gtmr-cards gtmr-cards--practitioners",children:l.map(u=>n.jsx(r6,{practitioner:u},u.profileUrl||u.name))}),n.jsx("p",{style:{marginTop:8},children:n.jsx(J,{to:"/gtme/practitioners",className:"gtmr-table__link",children:"See the full practitioner directory →"})})]})]})}const k9e="https://www.youtube.com/playlist?list=PLeYDdrvuNjEsstf7c75DT5uwAvDb-3dTw",$Q=[{slug:"show-tell-cognition-samsara-jun-9-2026",title:"Show & Tell: AI for GTM with Cognition and Samsara",subtitle:"In-person SF edition — with Cognition, Samsara, Upside",series:"Show & Tell",startsAt:"2026-06-09T18:00:00-07:00",endsAt:"2026-06-09T21:00:00-07:00",timezoneLabel:"Pacific Time",city:"San Francisco, CA",format:"In-person",registrationUrl:"https://luma.com/b8ie1m1s",blurb:"In-person Show & Tell with Cognition, Samsara, and Upside — operators walk through the AI workflows they actually run in their go-to-market motion. No slides, no pitches.",description:`We've all been to the AI events. The panels. The hot takes. The "we're exploring AI" platitudes. Everyone's talking — almost nobody is showing.
7808
7809This is the opposite of that.
7810
7811Show & Tell: AI for GTM is a demo-only event for go-to-market teams actually building with AI. No slides. No pitches. No thought leadership. Just practitioners opening up their laptops and walking you through the workflows they've built — the ones they use at work, every day.
7812
7813We're bringing together 5–6 GTM operators and engineers who will each demo a real AI-powered workflow live: how they set it up, why they built it, what it actually does, and what they'd do differently. Expect to see real tools, real data flows, and real results — not a product pitch dressed up as a case study.
7814
7815Want to demo? Apply via the registration form. We're looking for GTM engineers, RevOps builders, SDR/AE operators, and marketing technologists who have built something real with AI and are willing to show their work. Every speaker goes through a 15-minute prep session with our team before the event to tighten the narrative and make sure the audience walks away with something they can replicate.`,partners:["Cognition","Samsara","Upside"]},{slug:"show-tell-may-2026",title:"Show & Tell: AI for GTM",subtitle:"with Cursor, Vanta, Zapier, Exa, Upside",series:"Show & Tell",startsAt:"2026-05-12T18:00:00-07:00",endsAt:"2026-05-12T21:00:00-07:00",timezoneLabel:"Pacific Time",city:"San Francisco, CA",format:"In-person + Livestream",registrationUrl:"https://luma.com/04bg11l5",recordingUrl:"https://www.youtube.com/watch?v=BtuHUtXK5b8",blurb:"Demo-only event for go-to-market teams actually building with AI. No slides. No pitches. Just practitioners walking you through workflows they use every day.",description:`We've all been to the AI events. The panels. The hot takes. The 'we're exploring AI' platitudes. Everyone's talking — almost nobody is showing.
7816
7817This is the opposite of that.
7818
7819Show & Tell: AI for GTM is a demo-only event for go-to-market teams actually building with AI. No slides. No pitches. No thought leadership. Just practitioners opening up their laptops and walking you through the workflows they've built — the ones they use at work, every day.
7820
7821We're bringing together operators and engineers who will each demo a real AI-powered workflow live: how they set it up, why they built it, what it actually does, and what they'd do differently.
7822
7823The rules are simple: if you're demoing, you're showing something you actually use in your go-to-market motion — not something you're selling. If your own product happens to be part of the stack, that's fine, but the demo is about the workflow, not the pitch. After the demos the speakers will go to different rooms so you can pick a demo to deep dive into, ask questions, and learn more.`,speakers:[{name:"Angela Ferrante",company:"Zapier",topic:"Agents that identify lead leakage — find leads that don't convert, document their CX, and prioritize tests to increase pipeline.",linkedin:"https://www.linkedin.com/in/angela-ferrante/"},{name:"George Hou",company:"Cursor",topic:"An internal agent acting as an AE companion.",linkedin:"https://www.linkedin.com/in/ghou/"},{name:"Shashank Khanna",company:"Vanta",topic:"A state-machine / brain for GTM inside Vanta that feeds different workflows.",linkedin:"https://www.linkedin.com/in/skhanna3/"},{name:"Dan Ahmadi",company:"Upside",topic:"An internal tool that optimizes paid ads on autopilot.",linkedin:"https://www.linkedin.com/in/dahmadi/"},{name:"Scott Langille",company:"Exa",topic:"Enhanced enrichment built into their GTM workflows.",linkedin:"https://www.linkedin.com/in/scottlangille/"},{name:"Chris Bennett",company:"Wonderschool",topic:"40+ OpenClaw agents automating all outreach and internal processes.",linkedin:"https://www.linkedin.com/in/chrisebennett/"}],agenda:[{time:"6:00 PM",label:"Welcome & networking"},{time:"6:30 PM",label:"Demos (each speaker walks through one workflow)"},{time:"7:20 PM",label:"Individual deep-dives — pick a demo, dig in"},{time:"8:00 PM",label:"Social hour"}],partners:["Cursor","Vanta","Zapier","Exa","Upside","Wonderschool"]}];function FQ(e=new Date){const t=[],a=[];for(const i of $Q){const r=new Date(i.endsAt||i.startsAt).getTime();Number.isFinite(r)&&r<e.getTime()?a.push(i):t.push(i)}return t.sort((i,r)=>+new Date(i.startsAt)-+new Date(r.startsAt)),a.sort((i,r)=>+new Date(r.startsAt)-+new Date(i.startsAt)),{upcoming:t,past:a}}function j9e(e=new Date){return FQ(e).upcoming[0]}function GQ(e){const t=new Date(e);return Number.isNaN(t.getTime())?e:t.toLocaleDateString("en-US",{month:"short",day:"numeric",year:"numeric"})}function S9e(e){const t=new Date(e.startsAt);if(Number.isNaN(t.getTime()))return"";const a=r=>r.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",timeZone:"America/Los_Angeles"});if(!e.endsAt)return`${a(t)} ${e.timezoneLabel??""}`.trim();const i=new Date(e.endsAt);return Number.isNaN(i.getTime())?a(t):`${a(t)} – ${a(i)} ${e.timezoneLabel??""}`.trim()}const C9e=["Clay","Salesforce","HubSpot","Marketo","Python","SQL","TypeScript","React","Claude"];function A9e(e){return e>=5?"#c0392b":e>=2.5?"#d68429":e>=1.2?"var(--_semantic-colors---text--accent)":"var(--_semantic-colors---text--secondary)"}const T9e="https://aigtm.engineer/p/sequencing-the-gtm-engineer-dna";function _9e(e,t){const a=Hd.reduce((i,r)=>{const o=e==null?void 0:e.find(l=>l.profile===r.name);return i+(o?o.open:r.fallbackOpen)},0);return Hd.map(i=>{const r=e==null?void 0:e.find(d=>d.profile===i.name),o=t==null?void 0:t.find(d=>d.name===i.name),l=(r==null?void 0:r.open)??i.fallbackOpen;return{...i,open:l,people:(r==null?void 0:r.practitioners)??i.fallbackPeople,share:a?l/a:0,topTools:((o==null?void 0:o.topTools)??[]).slice(0,6)}})}function M9e({a:e,idx:t,profile:a,roles:i,practitioners:r,isOpen:o,onToggle:l}){const d=e.metrics.split(" · "),[u,...h]=d,m=`${e.slug}-body`;return n.jsxs("article",{id:e.slug,className:`gtmr-edit-card${o?" gtmr-edit-card--open":""}`,children:[n.jsxs("button",{type:"button",className:"gtmr-edit-card__head",onClick:l,"aria-expanded":o,"aria-controls":m,"aria-label":`${e.displayName??e.name} — ${o?"collapse":"expand"} details`,children:[n.jsxs("div",{className:"gtmr-edit-card__text",children:[n.jsxs("div",{className:"gtmr-edit-card__top",children:[n.jsx("span",{className:"gtmr-edit-card__idx",children:String(t+1).padStart(2,"0")}),n.jsx("span",{className:"gtmr-edit-card__dot",style:{background:e.color}}
7823),n.jsx("span",{"aria-hidden":!0,className:"gtmr-edit-card__chevron",children:o?"▾":"▸"})]}),n.jsx("h3",{className:"gtmr-edit-card__name",children:e.displayName??e.name}),n.jsx("p",{className:"gtmr-edit-card__desc",children:e.description}),e.topTools.length>0&&n.jsx("ul",{className:"gtmr-edit-card__tools","aria-label":"Top tools",children:e.topTools.map(f=>n.jsx("li",{className:"gtmr-edit-card__tool",children:f.tool},f.tool))}),n.jsx("div",{className:"gtmr-edit-card__divider"}),n.jsxs("p",{className:"gtmr-edit-card__measured",children:[n.jsx("span",{className:"gtmr-edit-card__measured-prefix",children:"Measured on"}),n.jsx("span",{className:"gtmr-edit-card__measured-sep",children:"·"}),n.jsx("b",{children:u}),h.map(f=>n.jsxs("span",{children:[n.jsx("span",{className:"gtmr-edit-card__measured-sep",children:"·"}),f]},f))]}),n.jsxs("p",{className:"gtmr-edit-card__count",children:[n.jsx("b",{children:e.open.toLocaleString()})," open"," · ",n.jsx("b",{children:e.people.toLocaleString()})," practitioners",e.share?n.jsxs("span",{style:{opacity:.7},children:[" · ",(e.share*100).toFixed(1),"% of hiring"]}):null]})]}),n.jsx("div",{className:"gtmr-edit-card__radar",children:n.jsx(b0e,{profile:e.profile,color:e.color,size:220})})]}),a&&n.jsx(w9e,{profile:a,roles:i,practitioners:r,isOpen:o,bodyId:m})]})}function Tq(){const{data:e,status:t,error:a}=tk(),{data:i}=LQ(),{data:r}=UQ(),o=_9e(e==null?void 0:e.rolesByProfile,e==null?void 0:e.profiles),l=j9e(),d=Kn(),u=(e==null?void 0:e.totalRoles)??o.reduce((j,T)=>j+T.open,0),h=(e==null?void 0:e.totalPractitioners)??o.reduce((j,T)=>j+T.people,0),m=(e==null?void 0:e.totalCompanies)??0,f=(e==null?void 0:e.totalOpen)??o.reduce((j,T)=>j+T.open,0),y=(e==null?void 0:e.totalProfiles)??Hd.length,[b,x]=M.useState(()=>new Set);M.useEffect(()=>{const j=d.hash.replace(/^#/,"");if(!j)return;x(A=>{if(A.has(j))return A;const C=new Set(A);return C.add(j),C});const T=window.setTimeout(()=>{const A=document.getElementById(j);A&&A.scrollIntoView({behavior:"smooth",block:"start"})},60);return()=>window.clearTimeout(T)},[d.hash]);const k=M.useCallback(j=>{x(T=>{const A=new Set(T);return A.has(j)?(A.delete(j),d.hash===`#${j}`&&window.history.replaceState(null,"",`${d.pathname}${d.search}`)):(A.add(j),window.history.replaceState(null,"",`${d.pathname}${d.search}#${j}`)),A})},[d.hash,d.pathname,d.search]),v=M.useMemo(()=>e?[...e.rolesByProfile].map(j=>({profile:j.profile,open:j.open,pract:j.practitioners,ratio:+(j.open/Math.max(j.practitioners,1)).toFixed(2)})).sort((j,T)=>T.ratio-j.ratio):[],[e]);
7823return n.jsxs(Qe,{hideNavbar:!0,children:[n.jsx(Je,{title:"What Is a GTM Engineer in 2026? — 8 archetypes, one role family",description:t==="ready"?`Live database of ${u.toLocaleString()} GTM Engineering roles, ${h.toLocaleString()} practitioners, and ${m.toLocaleString()} hiring companies, sorted into ${y} archetypes. ${f.toLocaleString()} open roles right now.`:"Live database of GTM Engineering roles, practitioners, and hiring companies, sorted into eight archetypes.",ogImage:"/og/gtme-hub.png",canonicalUrl:"https://upside.tech/gtme"}),n.jsx(Qs,{}),n.jsxs("section",{className:"gtmr-edit__intro",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Subtypes & shapes · May 2026"}),n.jsx("h1",{className:"gtmr-edit__title",children:"What is a GTM Engineer?"}),n.jsxs("h2",{className:"gtmr-edit__intro-title",children:["Eight flavors, ",n.jsx("em",{children:"one role family."})]}),n.jsxs("p",{className:"gtmr-edit__page-lede",style:{marginTop:8},children:["Live database of ",n.jsxs("b",{children:[u.toLocaleString()," job listings"]})," ","(",n.jsx("b",{children:f.toLocaleString()})," open),"," ",n.jsx("b",{children:h.toLocaleString()})," named practitioners, and"," ",n.jsx("b",{children:m.toLocaleString()})," hiring companies — sorted into eight archetypes that show how the role is taking shape across the market."]}),n.jsx(nk,{})]}),n.jsxs("article",{className:"gtmr-edit",children:[l&&n.jsxs(J,{to:"/gtme/events",className:"gtmr-edit__next-event",children:[n.jsxs("span",{className:"gtmr-edit__next-event-e
7823yebrow",children:["Next event · ",GQ(l.startsAt)]}),n.jsxs("span",{className:"gtmr-edit__next-event-title",children:[l.title,l.subtitle&&n.jsxs("span",{className:"gtmr-edit__next-event-sub",children:[" — ",l.subtitle]})]}),n.jsx("span",{className:"gtmr-edit__next-event-cta",children:"Details + register →"})]}),n.jsx("section",{className:"gtmr-edit__legend",children:J4.map(j=>n.jsxs("span",{className:"gtmr-edit__legend-item",children:[n.jsx("span",{className:"gtmr-edit__legend-chip",style:{background:`${j.color}1a`,color:j.color},children:j.short}),n.jsx("span",{className:"gtmr-edit__legend-label",children:j.label})]},j.id))}),n.jsx("section",{className:"gtmr-edit__grid",children:o.map((j,T)=>{const A=e==null?void 0:e.profiles.find(C=>C.slug===j.slug);return n.jsx(M9e,{a:j,idx:T,profile:A,roles:i??[],practitioners:r??[],isOpen:b.has(j.slug),onToggle:()=>k(j.slug)},j.slug)})}),n.jsxs("section",{children:[n.jsxs("header",{className:"gtmr-edit__section-head",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Distribution"}),n.jsx("h2",{children:"Where the open roles actually sit"}),n.jsx("p",{children:`Total roles per archetype, segmented by current status. The Notion daily refresh reclassifies any "Likely Open" posting that closed overnight; this is yesterday's snapshot.`})]}),i&&i.length>0?n.jsx(x0e,{roles:i}):n.jsx("p",{className:"gtmr-status",children:"Loading distribution…"})]}),n.jsxs("section",{children:[n.jsxs("header",{className:"gtmr-edit__section-head",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Geography"}),n.jsx("h2",{children:"Where the roles are"}),n.jsx("p",{children:"Every role with a parsable city, plotted at scale by open-role count. Remote / global roles get a separate counter — they aren't anchored to a place."})]}),i&&i.length>0?n.jsx(UPe,{roles:i}):n.jsx("p",{className:"gtmr-status",children:"Loading map…"})]}),n.jsxs("section",{children:[n.jsxs("header",{className:"gtmr-edit__section-head",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Hiring map"}),n.jsx("h2",{children:"Who's hiring GTM Engineers right now"}),n.jsxs("p",{children:["Top companies with at least one open GTME role. Each tile's area is the open-role count; toggle the color to see archetype mix, AI fluency, coding intensity, or open-vs-closed share. Inspired by"," ",n.jsx("a",{href:"https://karpathy.ai/jobs/",target:"_blank",rel:"noreferrer nofollow",style:{color:"inherit",textDecoration:"underline"},children:"Karpathy's US Job Market Visualizer"}),". Click any tile to open that company's roles in the job board."]})]}),i&&i.length>0?n.jsx(v6e,{roles:i}):n.jsx("p",{className:"gtmr-status",children:"Loading hiring map…"})]}),n.jsxs("section",{className:"gtmr-edit__takeaway",children:[n.jsxs("p",{className:"gtmr-edit__takeaway-quote",children:["The titles vary, the shapes vary, but the substrate is the same."," ",n.jsx("b",{children:"Eight flavors of one role family"})," — all rebuilding revenue motion as code."]}),n.jsx("a",{className:"gtmr-edit__takeaway-cta",href:T9e,target:"_blank",rel:"noreferrer nofollow",children:"Read the full essay →"})]}),t==="ready"&&e&&n.jsxs(n.Fragment,{children:[n.jsxs("section",{children:[n.jsxs("header",{className:"gtmr-edit__section-head",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Market data"}),n.jsx("h2",{children:"Demand vs. supply by profile"}),n.jsx("p",{children:"Blue = open roles (demand). Gray = named practitioners (supply). Where blue is much wider than gray, the market is tight. Fractional / Consulting and Executive / CoE Lead are the only buckets where supply already outpaces visible demand."})]}),n.jsx(o9e,{series:e.rolesByProfile.map(j=>({label:j.profile,value:j.open,secondary:j.practitioners})),primaryLabel:"Open roles",secondaryLabel:"Practitioners",formatValue:j=>j.toLocaleString()})]}),n.jsxs("section",{children:[n.jsxs("header",{className:"gtmr-edit__section-head",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Hiring tightness"}),n.jsx("h2",{children:"How hard each archetype is to hire for"}),n.jsx("p",{children:"Open roles per known practitioner. Higher = harder to fill from the existing visible talent pool. Anything above ~2.0 means the discipline is faster than the supply can catch up."})]}),n.jsx("div",{className:"gtmr-table-wrap",children:n.jsxs("table",{className:"gtmr-table",children:[n.jsx("thead",{children:n.jsxs("tr",{children:[n.jsx("th",{children:"Profile"}),n.jsx("th",{className:"gtmr-table__num",children:"Open roles"}),n.jsx("th",{className:"gtmr-table__num",children:"Practitioners"}),n.jsx("th",{className:"gtmr-table__num",children:"Tightness"}),n.jsx("th",{children:"Read"})]})}),n.jsx("tbody",{children:v.map(j=>n.jsxs("tr",{children:[n.jsx("td",{className:"gtmr-table__cell-strong",children:j.profile}),n.jsx("td",{className:"gtmr-table__num",children:j.open.toLocaleStr
7823ing()}),n.jsx("td",{className:"gtmr-table__num",children:j.pract.toLocaleString()}),n.jsxs("td",{className:"gtmr-table__num",style:{color:A9e(j.ratio),fontWeight:600},children:[j.ratio,"x"]}),n.jsx("td",{children:j.ratio>=5?"Critical shortage":j.ratio>=2.5?"Tight — pay premium or grow internally":j.ratio>=1.2?"Demand outpacing supply":j.ratio>=.7?"In balance":"Talent exists; titling lagging"})]},j.profile))})]})})]}),n.jsxs("section",{children:[n.jsxs("header",{className:"gtmr-edit__section-head",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Tool fluency"}),n.jsx("h2",{children:"Which tools each archetype hires for"}),n.jsx("p",{children:"Each cell is the share of open JDs in that profile that explicitly mention the tool. RevOps Systems is 50% Salesforce. Outbound is 43% Clay. Marketo is the signature of the new AI Accelerator profile. React + TypeScript prove Growth Engineer is genuinely an engineering role."})]}),n.jsx(d9e,{profiles:e.profiles,tools:C9e})]})]}),n.jsxs("section",{className:"gtmr-edit__external",children:[n.jsxs("header",{className:"gtmr-edit__section-head",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Adjacent variants"}),n.jsx("h2",{children:"Customer-facing flavors we track separately"}),n.jsxs("p",{children:["The eight archetypes above are ",n.jsx("b",{children:"internal, on-the-business"})," roles. We also track two adjacent customer-facing flavors that share the same substrate."]})]}),n.jsx("div",{className:"gtmr-edit__external-list",children:y0e.map(j=>n.jsxs(J,{to:`/gtme#${j.slug}`,className:"gtmr-edit__external-card",children:[n.jsx("h4",{className:"gtmr-edit__external-name",children:j.name}),n.jsx("p",{className:"gtmr-edit__external-desc",children:j.description}),n.jsx("span",{className:"gtmr-edit__external-link",children:"Open profile →"})]},j.slug))})]}),n.jsxs("section",{className:"gtmr-edit__nav",children:[n.jsxs("header",{className:"gtmr-edit__section-head",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"The dataset"}),n.jsx("h2",{children:"By the numbers, and where to dig in"})]}),n.jsxs("div",{className:"gtmr-edit__nav-stats",children:[n.jsxs("div",{className:"gtmr-edit__nav-stat",children:[n.jsx("span",{className:"gtmr-edit__nav-stat-n",children:f.toLocaleString()}),n.jsx("span",{className:"gtmr-edit__nav-stat-label",children:"Open roles right now"})]}),n.jsxs("div",{className:"gtmr-edit__nav-stat",children:[n.jsx("span",{className:"gtmr-edit__nav-stat-n",children:u.toLocaleString()}),n.jsx("span",{className:"gtmr-edit__nav-stat-label",children:"Total job listings tracked"})]}),n.jsxs("div",{className:"gtmr-edit__nav-stat",children:[n.jsx("span",{className:"gtmr-edit__nav-stat-n",children:h.toLocaleString()}),n.jsx("span",{className:"gtmr-edit__nav-stat-label",children:"Named practitioners"})]}),n.jsxs("div",{className:"gtmr-edit__nav-stat",children:[n.jsx("span",{className:"gtmr-edit__nav-stat-n",children:m.toLocaleString()}),n.jsx("span",{className:"gtmr-edit__nav-stat-label",children:"Hiring companies"})]}),n.jsxs("div",{className:"gtmr-edit__nav-stat",children:[n.jsx("span",{className:"gtmr-edit__nav-stat-n",children:y}),n.jsx("span",{className:"gtmr-edit__nav-stat-label",children:"Archetypes"})]}),n.jsxs("div",{className:"gtmr-edit__nav-stat",children:[n.jsx("span",{className:"gtmr-edit__nav-stat-n",children:t==="ready"?e.lastUpdated:"—"}),n.jsx("span",{className:"gtmr-edit__nav-stat-label",children:"Last refresh"})]})]}),n.jsxs("div",{className:"gtmr-edit__nav-cards",children:[n.jsxs(J,{to:"/gtme/jobs",className:"gtmr-edit__nav-card",children:[n.jsx("h3",{children:"Job board →"}),n.jsx("p",{children:"Search and filter every open role across the 10 profiles. Jump straight to the JD."})]}),n.jsxs(J,{to:"/gtme/practitioners",className:"gtmr-edit__nav-card",children:[n.jsx("h3",{children:"Practitioners →"}),n.jsxs("p",{children:[h.toLocaleString(),"+ named people already doing the work. Search by company, archetype, or location."]})]}),n.jsxs(J,{to:"/gtme/submit",className:"gtmr-edit__nav-card",children:[n.jsx("h3",{children:"Submit a role / profile →"}),n.jsx("p",{children:"Spotted a GTME role we missed, or want your profile listed? Submit it here."})]}),n.jsxs(J,{to:"/gtme/about",className:"gtmr-edit__nav-card",children:[n.jsx("h3",{children:"How this is built →"}),n.jsx("p",{children:"The data pipeline behind /gtme — Notion as source of truth, sources, and caveats."})]})]})]}),n.jsxs("section",{className:"gtmr-edit__methodology",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",style:{alignSelf:"flex-start"},children:"About this dataset"}),n.jsxs("p",{className:"gtmr-edit__methodology-body",children:["Based on a Notion-backed dataset of"," ",n.jsxs("b",{children:[u.toLocaleStr
7823ing()," job listings"]})," ","(",n.jsx("b",{children:f.toLocaleString()})," open today) and"," ",n.jsxs("b",{children:[h.toLocaleString()," practitioners"]})," across"," ",n.jsx("b",{children:m.toLocaleString()})," hiring companies, eight archetypes describe how the GTM Engineer is showing up in the market. Each tilts differently across"," ",n.jsx("b",{children:"AI fluency, GTM knowledge, data analytics, experimentation, and coding"}),"."]}),n.jsx("p",{className:"gtmr-edit__methodology-body",children:"Roles come from job-board crawls (LinkedIn, Wellfound, YC, Built In, Teamtailor, Remote Rocketship) plus content sources (The Signal, GTMonly, State of GTM Engineering 2026, GTME Pulse, SyncGTM, Skaled). Each is classified into one of the eight archetypes via a deterministic flavor matcher and rated 1–10 across the five axes using keyword-mined heuristics. Practitioners come from public LinkedIn profiles already in role."}),n.jsxs("p",{className:"gtmr-edit__methodology-body",style:{marginTop:6},children:[n.jsx(J,{to:"/gtme/about",style:{color:"var(--gtme-edit-accent)",fontWeight:600},children:"How this is built →"}),"  ·  ",n.jsx("a",{href:"https://www.notion.so/0ac758ea76474561b7880564132b0455",target:"_blank",rel:"noreferrer nofollow",style:{color:"var(--gtme-edit-accent)",fontWeight:600},children:"View Roles DB on Notion →"})]})]}),n.jsxs("footer",{className:"gtmr-edit__footer",children:[n.jsxs("span",{children:["Source: live snapshot of the Notion-backed GTME database, refreshed daily.",t==="ready"&&n.jsxs(n.Fragment,{children:[" ","Last refresh ",n.jsx("b",{children:e.lastUpdated}),"."]}),t==="error"&&n.jsxs(n.Fragment,{children:[" Data status: ",a,"."]})]}),n.jsx("span",{className:"gtmr-edit__footer-credit",children:"Upside · GTM Engineer"})]})]})]})}const E9e={"Sales Engineer Hybrid":"#7AB69A","AI Accelerator / Internal FDE":"#A88EE0","Forward Deployed (customer-facing)":"#5C9BD8",Other:"#B5C4C7"},R9e=new Map(Hd.map(e=>[e.name,e.color])),_q=e=>R9e.get(e)??E9e[e]??"#B5C4C7",N9e=[{cat:"Data & enrichment",tools:["Clay","Apollo","6sense","Segment"]},{cat:"AI & agents",tools:["OpenAI","GPT","Claude","n8n","Zapier","LangChain","Make"]},{cat:"CRM & RevOps",tools:["Salesforce","HubSpot","Outreach","Gong","Marketo"]},{cat:"Data & analytics",tools:["SQL","dbt","Snowflake","Python"]}];function O9e(e){const t=new Date(e+"T00:00:00Z");return Number.isNaN(t.getTime())?e:t.toLocaleDateString("en-US",{month:"long",year:"numeric",timeZone:"UTC"})}function Mq(e){const t=e>.05?"+":e<-.05?"−":"±";return e>=.5?{label:"Rising",cls:"gtmr-trk__trend--up",sign:t}:e<=-.5?{label:"Falling",cls:"gtmr-trk__trend--down",sign:t}:{label:"Steady",cls:"gtmr-trk__trend--flat",sign:t}}function P9e(){const{data:e,status:t,error:a}=a9e(),i=M.useMemo(()=>e??[],[e]),r=i.length?i[i.length-1]:null,o=i.length>1?i[i.length-2]:null,l=i.length?i[0]:null,d=M.useMemo(()=>{if(!r)return[];const x=r.totalOpen||1;return Object.entries(r.bySubcat).map(([k,v])=>{const j=v/x*100,T=(o==null?void 0:o.totalOpen)||0,A=o&&T?(o.bySubcat[k]??0)/T*100:j;return{name:k,n:v,share:j,pp:j-A,color:_q(k)}}).sort((k,v)=>v.n-k.n)},[r,o]),u=M.useMemo(()=>i.map(x=>({date:x.date,open:x.totalOpen})),[i]),h=M.useMemo(()=>i.filter(x=>typeof x.newRoles=="number").map(x=>({date:x.date,newRoles:x.newRoles??0,closedRoles:x.closedRoles??0})),[i]),m=M.useMemo(()=>r!=null&&r.compByArchetype?Object.entries(r.compByArchetype).map(([x,k])=>({name:x,med:k,color:_q(x)})).sort((x,k)=>k.med-x.med):[],[r]),f=m.length?Math.max(...m.map(x=>x.med)):1,y=M.useMemo(()=>r?Object.entries(r.skills).map(([x,k])=>({name:x,v:k,pp:k-((o==null?void 0:o.skills[x])??k)})).sort((x,k)=>k.v-x.v):[],[r,o]),b=r?O9e(r.date):"";
7823return n.jsxs(Qe,{hideNavbar:!0,children:[n.jsx(Je,{title:"GTM Engineer Trends — what the market is hiring for | Upside",description:"A living read on the GTM Engineer role: open-role volume, the eight archetype shapes, the working tool stack, the skills employers ask for, and pay — tracked over time from the live Notion dataset behind upside.tech/gtme.",ogImage:"/og/gtme.png",canonicalUrl:"https://upside.tech/gtme/trends"}),n.jsx(Qs,{}),n.jsx("section",{className:"gtmr-trk",children:n.jsxs("div",{className:"gtmr-container",children:[n.jsxs("div",{className:"gtmr-trk__eyebrows",children:[n.jsxs("span",{className:"gtmr-trk__eyebrow",children:[n.jsx("i",{className:"gtmr-trk__eb-dot"}),"The GTM Engineer · Trends"]}),b&&n.jsxs("span",{className:"gtmr-trk__eyebrow",children:[n.jsx("i",{className:"gtmr-trk__eb-dot"}),"Live tracker · Updated ",b]})]}),n.jsxs("h1",{className:"gtmr-trk__title",children:["What the market is ",n.jsx("em",{children:"actually hiring"})," for."]}),n.jsxs("p",{className:"gtmr-trk__lede",children:["A living read on the GTM Engineer role — drawn from"," ",n.jsxs("b",{children:[((r==null?void 0:r.totalOpen)??0).toLocaleString()," open internal “on-the-business” roles"]})," ","in our ",b||"latest"," dataset. Track how volume, role shapes, the working stack, skills, and pay are moving over time."]}),t==="loading"&&n.jsx("p",{className:"gtmr-status",children:"Loading trends…"}),t==="error"&&n.jsxs("p",{className:"gtmr-status gtmr-status--error",children:["Couldn't load trends (",a,")."]}),t==="ready"&&r&&n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"gtmr-trk__kpis",children:[n.jsx(h0,{value:r.totalOpen.toLocaleString(),tag:"DATASET",label:"Open roles tracked",sub:`internal "on-the-business" · ${b}`}),n.jsx(h0,{value:o?`${r.totalOpen-o.totalOpen>=0?"+":""}${r.totalOpen-o.totalOpen}`:"—",tag:"LIVE",label:"Δ open roles",sub:o?`${o.date} → ${r.date}`:"first snapshot"}),n.jsx(h0,{value:String(d.length),tag:"DATASET",label:"Distinct archetypes",sub:"role-shape clusters"}),n.jsx(h0,{value:r.medianCompK?`$${r.medianCompK}K`:"—",tag:"DATASET",label:"Median base, US",sub:`across archetypes · n=${r.compSampleSize??0}`})]}),n.jsx(p0,{index:"01",title:"Volume & flow",meta:o?`${o.date} → ${r.date}`:""}),n.jsxs("h2",{className:"gtmr-trk__h2",children:["The role is ",n.jsx("em",{children:"compounding"}),"."]}),n.jsxs("p",{className:"gtmr-trk__sub",children:["Open roles tracked across snapshots",l&&r?` (${l.totalOpen.toLocaleString()} → ${r.totalOpen.toLocaleString()})`:"",". New roles show the market ",n.jsx("b",{children:"expanding"}),"; closed roles show how fast they're ",n.jsx("b",{children:"filled"}),"."]}),h.length>0&&n.jsxs("div",{className:"gtmr-trk__flowstats",children:[n.jsxs("div",{className:"gtmr-trk__flowstat gtmr-trk__flowstat--new",children:[n.jsxs("span",{className:"gtmr-trk__flow-n",children:["+",r.newRoles??0]}),n.jsx("span",{className:"gtmr-trk__flow-l",children:"New roles found"}),n.jsx("span",{className:"gtmr-trk__flow-s",children:"market expansion"})]}),n.jsxs("div",{className:"gtmr-trk__flowstat gtmr-trk__flowstat--closed",children:[n.jsxs("span",{className:"gtmr-trk__flow-n",children:["−",r.closedRoles??0]}),n.jsx("span",{className:"gtmr-trk__flow-l",children:"Roles closed / filled"}),n.jsx("span",{className:"gtmr-trk__flow-s",children:"fill rate"})]}),n.jsxs("div",{className:"gtmr-trk__flowstat gtmr-trk__flowstat--net",children:[n.jsxs("span",{className:"gtmr-trk__flow-n",children:[(r.netRoles??0)>=0?"+":"−",Math.abs(r.netRoles??0)]}),n.jsx("span",{className:"gtmr-trk__flow-l",children:"Net change"}),n.jsx("span",{className:"gtmr-trk__flow-s",children:"new minus closed"})]})]}),n.jsxs("div",{className:"gtmr-trk__chartgrid",children:[n.jsxs("div",{className:"gtmr-trk__card",children:[n.jsx("h4",{className:"gtmr-trk__panel-title",children:"Open roles tracked"}),n.jsx(b3,{width:"100%",height:210,children:n.jsxs(e6e,{data:u,margin:{top:8,right:16,bottom:0,left:-10},children:[n.jsx("defs",{children:n.jsxs("linearGradient",{id:"gtArea",x1:"0",y1:"0",x2:"0",y2:"1",children:[n.jsx("stop",{offset:"0%",stopColor:"#509A79",stopOpacity:.26}),n.jsx("stop",{offset:"100%",stopColor:"#509A79",stopOpacity:.02})]})}),n.jsx(s_,{stroke:"rgba(12,30,32,0.07)",vertical:!1}),n.jsx(Op,{dataKey:"date",tick:{fontSize:11,fill:"#5A777D"}
7823,tickLine:!1,axisLine:{stroke:"rgba(12,30,32,0.18)"}}),n.jsx(Ip,{tick:{fontSize:11,fill:"#5A777D"},tickLine:!1,axisLine:!1,width:40}),n.jsx(za,{}),n.jsx(jc,{type:"monotone",dataKey:"open",name:"Open roles",stroke:"#3F8265",strokeWidth:2.5,fill:"url(#gtArea)",dot:{r:2.5,fill:"#3F8265"},activeDot:{r:4}})]})})]}),h.length>0&&n.jsxs("div",{className:"gtmr-trk__card",children:[n.jsx("h4",{className:"gtmr-trk__panel-title",children:"New vs filled per snapshot"}),n.jsx(b3,{width:"100%",height:210,children:n.jsxs(oEe,{data:h,margin:{top:8,right:16,bottom:0,left:-10},barGap:4,children:[n.jsx(s_,{stroke:"rgba(12,30,32,0.07)",vertical:!1}),n.jsx(Op,{dataKey:"date",tick:{fontSize:11,fill:"#5A777D"},tickLine:!1,axisLine:{stroke:"rgba(12,30,32,0.18)"}}),n.jsx(Ip,{tick:{fontSize:11,fill:"#5A777D"},tickLine:!1,axisLine:!1,width:40}),n.jsx(za,{}),n.jsx(Ad,{wrapperStyle:{fontSize:11},iconSize:9}),n.jsx(fc,{dataKey:"newRoles",name:"New",fill:"#3F8265",radius:[3,3,0,0]}),n.jsx(fc,{dataKey:"closedRoles",name:"Closed",fill:"#C0534B",radius:[3,3,0,0]})]})})]})]}),n.jsx(p0,{index:"02",title:"Role shapes",meta:`${r.totalOpen.toLocaleString()} roles · ${d.length} clusters`}),n.jsxs("h2",{className:"gtmr-trk__h2",children:["The mix is ",n.jsx("em",{children:"shifting weight"}),"."]}),n.jsxs("p",{className:"gtmr-trk__sub",children:["Every open role clusters into one of these shapes."," ",d[0]?`${po(d[0].name)} still leads`:""," — and the QoQ column shows where share is moving."]}),n.jsx("div",{className:"gtmr-trk__stack",children:d.map(x=>n.jsx("span",{className:"gtmr-trk__stack-seg",style:{width:`${x.share}%`,background:x.color},title:`${po(x.name)} · ${x.share.toFixed(1)}%`},x.name))}),n.jsx("div",{className:"gtmr-trk__legend",children:d.map(x=>n.jsxs("span",{className:"gtmr-trk__legend-item",children:[n.jsx("i",{style:{background:x.color}}),po(x.name)]},x.name))}),n.jsx("div",{className:"gtmr-trk__card gtmr-trk__card--flush",children:n.jsxs("table",{className:"gtmr-trk__table",children:[n.jsx("thead",{children:n.jsxs("tr",{children:[n.jsx("th",{children:"Archetype"}),n.jsx("th",{className:"gtmr-trk__col-bar",children:"Share of open roles"}),n.jsx("th",{className:"gtmr-trk__num",children:"Roles"}),n.jsx("th",{className:"gtmr-trk__num",children:"Share"}),n.jsx("th",{className:"gtmr-trk__num",children:"QoQ trend"})]})}),n.jsx("tbody",{children:d.map(x=>{const k=Mq(x.pp);return n.jsxs("tr",{children:[n.jsxs("td",{children:[n.jsx("span",{className:"gtmr-trk__sw",style:{background:x.color}}),po(x.name)]}),n.jsx("td",{className:"gtmr-trk__col-bar",children:n.jsx("span",{className:"gtmr-trk__bar",children:n.jsx("span",{style:{width:`${x.share}%`,background:x.color}})})}),n.jsx("td",{className:"gtmr-trk__num gtmr-trk__strong",children:x.n}),n.jsxs("td",{className:"gtmr-trk__num",children:[x.share.toFixed(1),"%"]}),n.jsxs("td",{className:"gtmr-trk__num",children:[n.jsxs("span",{className:`gtmr-trk__trend ${k.cls}`,children:[k.sign,Math.abs(x.pp).toFixed(1),"pp"]}),n.jsx("span",{className:"gtmr-trk__trend-label",children:k.label})]})]},x.name)})})]})}),n.jsx(p0,{index:"03",title:"The working stack",meta:"% of roles mentioning"}),n.jsxs("h2",{className:"gtmr-trk__h2",children:["What they're ",n.jsx("em",{children:"expected to run"}),"."]}),n.jsx("p",{className:"gtmr-trk__sub",children:"Share of open roles whose JD names each tool."}),n.jsx("div",{className:"gtmr-trk__card",children:n.jsx("div",{className:"gtmr-trk__stackgrid",children:N9e.map(x=>{const k=x.tools.map(v=>({name:v,v:r.tools[v]??0})).filter(v=>v.v>0).sort((v,j)=>j.v-v.v);return k.length?n.jsxs("div",{className:"gtmr-trk__toolcol",children:[n.jsx("h4",{className:"gtmr-trk__toolcat",children:x.cat}),k.map(v=>n.jsxs("div",{className:"gtmr-trk__toolrow",children:[n.jsx("span",{className:"gtmr-trk__toolname",children:v.name}),n.jsx("span",{className:"gtmr-trk__bar",children:n.jsx("span",{style:{width:`${Math.min(100,v.v)}%`}})}),n.jsxs("span",{className:"gtmr-trk__toolpct",children:[v.v.toFixed(0),"%"]})]},v.name))]},x.cat):null})})}),n.jsx(p0,{index:"04",title:"Skills & pay",meta:"% of roles · median base, US"}),n.jsxs("h2",{className:"gtmr-trk__h2",children:["The ",n.jsx("em",{children:"skills"})," — and what they ",n.jsx("em",{children:"pay"}),"."]}),n.jsx("p",{className:"gtmr-trk__sub",children:"Capability clusters mined from JD text (with QoQ change), and median base by archetype where postings are sufficient."}),n.jsxs("div",{className:"gtmr-trk__chartgrid",children:[n.jsxs("div",{className:"gtmr-trk__card",children:[n.jsx("h4",{className:"gtmr-trk__panel-title",children:"Skills employers ask for"}),y.map(x=>{const k=Mq(x.pp);return n.jsxs("div",{className:"gtmr-trk__toolrow",children:[n.jsx("span",{className:"gtmr-trk__toolname gtmr-trk__toolname--wide",children:x.name}),n.jsx("span",{className:"gtmr-trk__bar",children:n.jsx("span",{style:{width:`${Math.min(100,x.v)}%`}})}),n.jsxs("span",{className:"gtmr-trk__toolpct",children:[x.v.toFixed(0),"%"]}),n.jsxs("span",{className:`gtmr-trk__trend ${k.cls}`,children:[k.sign,Math.abs(x.pp).toFixed(1)]})]},x.name)})]}),m.length>0&&n.jsxs("div",{className:"gtmr-trk__card",children:[n.jsx("h4",{className:"gtmr-trk__panel-title",children:"Median base by archetype"}),m.map(x=>n.jsxs("div",{className:"gtmr-trk__comprow",children:[n.jsx("span",{className:"gtmr-trk__compname",children:po(x.name)}),n.jsx("span",{className:"gtmr-trk__bar gtmr-trk__bar--tall",children:n.jsx("span",{style:{width:`${x.med/f*100}%`,background:x.color}})}),n.jsxs("span",{className:"gtmr-trk__comppct",children:["$",x.med,"K"]}
7823)]},x.name))]})]}),n.jsx("p",{className:"gtmr-trk__provenance",children:"Counts, shares, and pay are computed from the live open-roles dataset on every refresh; each refresh appends a dated snapshot so volume, role shapes, the working stack, skills, and comp can be graphed over time. Tool/skill figures are the share of open roles whose JD text mentions the term."})]})]})})]})}function h0({value:e,tag:t,label:a,sub:i}){return n.jsxs("div",{className:"gtmr-trk__kpi",children:[n.jsx("span",{className:"gtmr-trk__kpi-tag",children:t}),n.jsx("span",{className:"gtmr-trk__kpi-value",children:e}),n.jsx("span",{className:"gtmr-trk__kpi-label",children:a}),n.jsx("span",{className:"gtmr-trk__kpi-sub",children:i})]})}function p0({index:e,title:t,meta:a}){return n.jsxs("div",{className:"gtmr-trk__section-label",children:[n.jsxs("span",{children:[e," — ",t]}),a&&n.jsx("span",{className:"gtmr-trk__section-meta",children:a})]})}const Xf={eyebrow:"The GTM AI adoption ladder",title:"From spreadsheets to self-improving orchestrators.",titleEmphasis:"self-improving orchestrators.",kicker:"Sequencing the GTM Engineer DNA",essayUrl:"https://aigtm.engineer/p/sequencing-the-gtm-engineer-dna",axisLabel:"More AI autonomy + trust →"},i4=[{stage:"01",name:"Manual Era",range:"L0 – L1",tagline:"Humans do everything.",color:"#2F6E55",soft:"#E7F0EB",levels:[{code:"L0",title:"Spreadsheets & gut feel",description:"Hand-built lists, CSV exports, the CRM as a chore."},{code:"L1",title:"Copy-paste AI",description:"Paste into ChatGPT. AI proposes, human disposes."}]},{stage:"02",name:"AI-Augmented",range:"L2 – L3",tagline:"AI assists, humans drive.",color:"#5E7D2A",soft:"#EEF2E1",levels:[{code:"L2",title:"AI drafts your content",description:"Blogs, captions, sequences, images — you review first."},{code:"L3",title:"AI inside your tools",description:"Call summaries, lead scoring, next-best-actions."}]},{stage:"03",name:"Agent Era",range:"L4 – L5",tagline:"Tasks run end-to-end.",color:"#C8772F",soft:"#F8ECE0",levels:[{code:"L4",title:"AI SDRs & auto-enrichment",description:"Agents enrich leads, follow up, and book demos."},{code:"L5",title:"Agents on autopilot",description:"Review off — agents fire sequences on their own."}]},{stage:"04",name:"AI-First",range:"L6 – L7",tagline:"AI leads, humans steer.",color:"#C0453F",soft:"#F7E5E4",levels:[{code:"L6",title:"Multi-agent team, human captain",description:"Specialized agents in parallel; you stay in command."},{code:"L7",title:"AI drives, you navigate",description:"Work starts in AI — full context, drafted for you."}]},{stage:"05",name:"Orchestration",range:"L8 – L9",tagline:"Agents coordinate agents.",color:"#7C4DD1",soft:"#EFE8FA",levels:[{code:"L8",title:"Agents orchestrate agents",description:"A signal fires; the right agent acts, no routing."},{code:"L9",title:"Unified GTM brain",description:"One layer decides across pipeline, content, attribution."}]},{stage:"06",name:"Next Frontier",range:"L10",tagline:"The system improves itself.",color:"#4F46E5",soft:"#E6E7FB",levels:[{code:"L10",title:"Ralph mode for your GTM orchestrator",description:"Win/loss data feeds back automatically. The orchestrator evolves its own playbook — no manual tuning."}]}];function I9e(){const{title:e,titleEmphasis:t}=Xf,a=e.lastIndexOf(t);return a<0?e:n.jsxs(n.Fragment,{children:[e.slice(0,a),n.jsx("em",{className:"gtmr-ladder__title-em",children:t})]})}function D9e({era:e}){return n.jsxs("article",{className:"gtmr-ladder__card",style:{"--era":e.color},children:[n.jsxs("header",{className:"gtmr-ladder__card-head",children:[n.jsxs("span",{className:"gtmr-ladder__stage",children:[n.jsx("span",{className:"gtmr-ladder__dot","aria-hidden":!0}),"Stage ",e.stage]}),n.jsx("span",{className:"gtmr-ladder__range",children:e.range})]}),n.jsx("h2",{className:"gtmr-ladder__era",children:e.name}),n.jsx("p",{className:"gtmr-ladder__tagline",children:e.tagline}),n.jsx("hr",{className:"gtmr-ladder__rule"}),n.jsx("ul",{className:"gtmr-ladder__levels",children:e.levels.map(t=>n.jsxs("li",{className:"gtmr-ladder__level",children:[n.jsx("span",{className:"gtmr-ladder__badge",children:t.code}),n.jsxs("div",{className:"gtmr-ladder__level-body",children:[n.jsx("h3",{className:"gtmr-ladder__level-title",children:t.title}),n.jsx("p",{className:"gtmr-ladder__level-desc",children:t.description})]})]},t.code))})]})}
7823function W9e(){return n.jsxs(Qe,{hideNavbar:!0,children:[n.jsx(Je,{title:"The GTM AI Adoption Ladder — 6 eras, 11 levels | Upside",description:"The maturity model for AI in go-to-market: from spreadsheets and copy-paste prompts to autonomous, self-improving GTM orchestrators. Six eras, eleven levels (L0–L10).",ogImage:"/og/gtme.png",canonicalUrl:"https://upside.tech/gtme/adoption-ladder"}),n.jsx(Qs,{}),n.jsx("section",{className:"gtmr-ladder",children:n.jsxs("div",{className:"gtmr-container",children:[n.jsxs("div",{className:"gtmr-ladder__hero",children:[n.jsxs("div",{className:"gtmr-ladder__hero-text",children:[n.jsxs("span",{className:"gtmr-edit__eyebrow",children:["— ",Xf.eyebrow]}),n.jsx("h1",{className:"gtmr-ladder__title",children:I9e()}),n.jsxs("p",{className:"gtmr-edit__page-lede",children:["The maturity model for AI in go-to-market — six eras, eleven levels, from manual spreadsheets to a system that improves itself. Adapted from"," ",n.jsx("a",{href:Xf.essayUrl,target:"_blank",rel:"noopener noreferrer nofollow",style:{color:"var(--gtme-edit-accent, #316851)",fontWeight:600},children:Xf.kicker}),"."]})]}),n.jsxs("div",{className:"gtmr-ladder__axis","aria-hidden":!0,children:[n.jsx("div",{className:"gtmr-ladder__axis-bars",children:i4.map(e=>n.jsx("span",{style:{background:e.color}},e.stage))}),n.jsx("span",{className:"gtmr-ladder__axis-label",children:Xf.axisLabel})]})]}),n.jsx("div",{className:"gtmr-ladder__grid",children:i4.map(e=>n.jsx(D9e,{era:e},e.stage))}),n.jsxs("div",{className:"gtmr-ladder__footer",children:[n.jsx("span",{children:"Manual Era"}),n.jsx("span",{className:"gtmr-ladder__footer-track","aria-hidden":!0,children:i4.map(e=>n.jsx("span",{style:{background:e.color}},e.stage))}),n.jsx("span",{children:"Next Frontier"})]})]})})]})}const Eq={"Likely Open":{bg:"#e8f4ed",fg:"#2d6a4f",label:"Open"},Closed:{bg:"#f4ddda",fg:"#9a3a32",label:"Closed"},Unreachable:{bg:"#f4e7d6",fg:"#8a5a18",label:"Unreachable"},Timeout:{bg:"#f4e7d6",fg:"#8a5a18",label:"Timeout"},"No URL":{bg:"#ececec",fg:"#5f6563",label:"No URL"},Unknown:{bg:"#ececec",fg:"#5f6563",label:"Unknown"}};function z9e({status:e}){const t=e!=null&&e.trim()?e:"Likely Open",a=Eq[t]??Eq.Unknown;return n.jsx("span",{style:{display:"inline-block",padding:"2px 9px",borderRadius:6,fontSize:11.5,fontWeight:600,background:a.bg,color:a.fg,whiteSpace:"nowrap",letterSpacing:.02},children:a.label})}const m0=25,L9e="https://www.notion.so/0ac758ea76474561b7880564132b0455",Rq={key:"added",dir:"desc"},Nq=[{key:"company",label:"Company"},{key:"title",label:"Title"},{key:"flavor",label:"Profile"},{key:"status",label:"Status"},{key:"added",label:"Added"},{key:"location",label:"Location"},{key:"comp",label:"Comp"},{key:"skills",label:"Skills"}];function Oq(e,t){const a=new Set;for(const i of e){const r=i[t];typeof r=="string"&&r.trim()&&a.add(r.trim())}return[...a].sort((i,r)=>i.localeCompare(r))}function Pq(e){var a,i,r,o,l,d,u,h;let t=0;return(a=e.company)!=null&&a.trim()&&(t+=1),(i=e.title)!=null&&i.trim()&&(t+=1),(r=e.flavorNorm)!=null&&r.trim()&&(t+=1),(o=e.status)!=null&&o.trim()&&(t+=1),(l=e.location)!=null&&l.trim()&&(t+=1),(d=e.comp)!=null&&d.trim()&&(t+=1),(u=e.skills)!=null&&u.trim()&&(t+=1),(h=e.postedDate)!=null&&h.trim()&&(t+=1),t}function U9e(){const{data:e,status:t,error:a}=LQ(),{data:i}=i9e(),r=M.useMemo(()=>e??[],[e]),[o]=JF(),l=(o.get("company")||"").trim(),[d,u]=M.useState(l),[h,m]=M.useState(""),[f,y]=M.useState(""),[b,x]=M.useState("Likely Open"),[k,v]=M.useState(Rq),[j,T]=M.useState(1),A=M.useMemo(()=>Oq(r,"flavorNorm"),[r]),C=M.useMemo(()=>Oq(r,"location"),[r]),_=M.useMemo(()=>{var O;const P=new Set;for(const B of r){const Y=((O=B.status)==null?void 0:O.trim())||"Likely Open";P.add(Y)}return[...P].sort()},[r]),E=M.useMemo(()=>r.filter(P=>{var O;return!!((O=P.company)!=null&&O.trim()||Iw(P.jdUrl))}),[r]),R=r.length-E.length,W=M.useMemo(()=>{const P=d.trim().toLowerCase();let O=E.filter(B=>h&&B.flavorNorm!==h||f&&B.location!==f||b&&(B.status||"Likely Open").trim()!==b?!1:P?[B.company,B.title,B.flavor,B.team,B.location,B.comp,B.notes,B.skills].join(" ").toLowerCase().includes(P):!0);if(k.key==="best")O=[...O].sort((B,Y)=>{const V=Pq(B),G=Pq(Y);if(V!==G)return G-V;const I=B.postedDate||"",F=Y.postedDate||"";return I!==F?F.localeCompare(I):(B.company||"").localeCompare(Y.company||"")});else{const B=k.dir==="asc"?1:-1,Y=k.key==="added"?"addedDate":k.key;O=[...O].sort((V,G)=>{const I=V[Y],F=G[Y],K=I==null?"":String(I),ne=F==null?"":String(F);return!K&&!ne?0:K?ne?K.localeCompare(ne,void 0,{numeric:!0})*B:-1:1})}return O},[E,d,h,f,b,k]);M.useEffect(()=>{T(1)},[d,h,f,b,k]);const z=Math.max(1,Math.ceil(W.length/m0)),H=Math.min(j,z),$=(H-1)
7823*m0,U=W.slice($,$+m0);function X(P){v(O=>O.key===P?{key:P,dir:O.dir==="asc"?"desc":"asc"}:{key:P,dir:"asc"})}function D(){u(""),m(""),y(""),x("Likely Open"),v(Rq),T(1)}return n.jsxs(Qe,{hideNavbar:!0,children:[n.jsx(Je,{title:"GTM Engineer Job Board | 1,400+ open roles",description:"Search and filter every open GTM Engineering, RevOps, Marketing Engineer, and AI Accelerator role. Updated regularly.",ogImage:"/og/gtme.png",canonicalUrl:"https://upside.tech/gtme/jobs"}),n.jsx(Qs,{}),n.jsxs("section",{className:"gtmr-edit__page-intro",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Job board"}),n.jsx("h1",{className:"gtmr-edit__page-title",children:"Open GTM Engineering roles"}),n.jsxs("p",{className:"gtmr-edit__page-lede",children:["Each role's archetype, fit ratings, and skills below are"," ",n.jsx("b",{children:"auto-generated from the job description"})," and may not be accurate. Comp is quoted verbatim from the JD when present, blank when not. Spot a wrong classification or a missing role?"," ",n.jsx("a",{href:"/gtme/submit",style:{color:"var(--gtme-edit-accent, #0a8a4a)",fontWeight:600},children:"Tell us →"})]}),n.jsx(nk,{})]}),i&&i.length>0&&n.jsx("section",{className:"gtmr-section gtmr-section--tight",children:n.jsx("div",{className:"gtmr-container",children:n.jsxs("div",{className:"gtmr-featured",children:[n.jsxs("div",{className:"gtmr-featured__head",children:[n.jsx("span",{className:"gtmr-featured__eyebrow",children:"★ Featured roles"}),n.jsx("p",{className:"gtmr-featured__sub",children:"A hand-picked set of standout GTM-engineering openings at companies in the Upside network."})]}),n.jsx("div",{className:"gtmr-featured__grid",children:i.map(P=>{const O=my(P.url),B=n.jsxs(n.Fragment,{children:[n.jsxs("div",{className:"gtmr-featured__card-top",children:[n.jsx("span",{className:"gtmr-featured__company",children:P.company}),P.flavor&&n.jsx("span",{className:"gtmr-pill gtmr-pill--neutral",children:po(P.flavor)})]}),n.jsx("h3",{className:"gtmr-featured__title",children:P.title}),P.blurb&&n.jsx("p",{className:"gtmr-featured__blurb",children:P.blurb}),n.jsxs("div",{className:"gtmr-featured__meta",children:[P.location&&n.jsx("span",{children:P.location}),n.jsx("span",{className:"gtmr-featured__cta",children:"View role →"})]})]});return O?n.jsx("a",{href:O,target:"_blank",rel:"noopener noreferrer nofollow",className:"gtmr-featured__card",children:B},P.url):n.jsx("div",{className:"gtmr-featured__card",children:B},P.url)})})]})})}),n.jsx("section",{className:"gtmr-section gtmr-section--tight",children:n.jsxs("div",{className:"gtmr-container",children:[n.jsxs("div",{className:"gtmr-controls",children:[n.jsx("input",{type:"search",value:d,onChange:P=>u(P.target.value),placeholder:"Search company, title, skills, notes…",className:"gtmr-input","aria-label":"Search roles"}),n.jsxs("select",{value:h,onChange:P=>m(P.target.value),className:"gtmr-select","aria-label":"Filter by profile",children:[n.jsx("option",{value:"",children:"All profiles"}),A.map(P=>n.jsx("option",{value:P,children:po(P)},P))]}),n.jsxs("select",{value:f,onChange:P=>y(P.target.value),className:"gtmr-select","aria-label":"Filter by location",children:[n.jsx("option",{value:"",children:"All locations"}),C.slice(0,200).map(P=>n.jsx("option",{value:P,children:P},P))]}),n.jsxs("select",{value:b,onChange:P=>x(P.target.value),className:"gtmr-select","aria-label":"Filter by status",children:[n.jsx("option",{value:"",children:"All statuses"}),_.map(P=>n.jsx("option",{value:P,children:P},P))]}),n.jsx("button",{type:"button",onClick:D,className:"gtmr-button",children:"Reset"})]}),t==="loading"&&n.jsx("p",{className:"gtmr-status",children:"Loading roles…"}),t==="error"&&n.jsxs("p",{className:"gtmr-status gtmr-status--error",children:["Couldn't load the dataset (",a,")."]}),t==="ready"&&n.jsxs(n.Fragment,{children:[k.key==="best"&&n.jsxs("p",{className:"gtmr-sort-note",children:["Sorted by ",n.jsx("b",{children:"best matches"})," — most-complete rows with the latest posted date first. Click any column header to sort by that column."]}),k.key==="added"&&n.jsxs("p",{className:"gtmr-sort-note",children:["Sorted by ",n.jsx("b",{children:"most recently added"})," first. Click any column header to sort by that column."]}),n.jsx("div",{className:"gtmr-table-wrap gtmr-table-wrap--dense",role:"region","aria-label":"GTM Engineering roles table",children:n.jsxs("table",{className:"gtmr-table gtmr-table--dense",style:{tableLayout:"fixed",minWidth:1320},children:[n.jsxs("colgroup",{children:[n.jsx("col",{style:{width:130}}),n.jsx("col",{}),n.jsx("col",{style:{width:160}}),n.jsx("col",{style:{width:120}}),n.jsx("col",{style:{width:100}}),n.jsx("col",{style:{width:110}}),n.jsx("col",{style:{width:160}}),n.jsx("col",{style:{width:260}})]}),n.jsx("thead",{children:n.jsx("tr",{children:Nq.map(P=>n.jsx("th",{scope:"col",children:n.jsxs("button",{type:"button",className:"gtmr-table__sort",onClick:()=>X(P.key),children:[P.label,k.key===P.key?k.dir==="asc"?" ▲":" ▼":""]})},P.key))})}),n.jsxs("tbody",{children:[U.map((P,O)=>{var V,G;const B=(V=P.company)!=null&&V.trim()?P.company:Iw(P.jdUrl),Y=!((G=P.company)!=null&&G.trim())&&!!B;return n.jsxs("tr",{children:[n.jsx("td",{className:"gtmr-table__cell-strong",children:B?n.jsxs(n.Fragment,{children:[B,Y&&n.jsx("span",{title:"Inferred from the JD URL",style:{marginLeft:6,color:"var(--_semantic-colors---text--secondary)",fontSize:11,fontWeight:400},children:"?"})]}):"—"}),n.jsxs("td",{children:[(()=>{const I=my(P.jdUrl);return I&&P.title?n.jsx("a",{href:I,target:"_blank",rel:"noopener noreferrer nofollow",className:"gtmr-table__link",style:{fontWeight:500},title:"Open the job description in a new tab",children:P.title}):n.jsx("span",{children:P.title||"—"})})(),P.team&&n.jsx("span",{className:"gtmr-table__cell-meta",children:P.team})]}),n.jsx("td",{children:P.flavorNorm&&n.jsx("span",{className:"gtmr-pill gtmr-pill--neutral gtmr-pill--wrap",children:po(P.flavorNorm)})}),n.jsx("td",{children:n.jsx(z9e,{status:P.status})}),n.jsx("td",{style:{fontSize:12.5,whiteSpace:"nowrap",fontVariantNumeric:"tabular-nums"},children:P.addedDate||"—"}),n.jsx("td",{children:P.location||"—"}),n.jsx("td",{style:{fontSize:12.5,lineHeight:1.4,whiteSpace:"normal",wordBreak:"break-word",fontVariantNumeric:"tabular-nums"},children:P.comp||"—"}),n.jsx("td",{style:{fontSize:12.5,color:"#3c4147",lineHeight:1.45,whiteSpace:"normal",wordBreak:"break-word"},children:P.skills||"—"})]},`${P.jdUrl||P.company}-${O}`)}),!U.length&&n.jsx("tr",{children:n.jsx("td",{colSpan:Nq.length,style:{textAlign:"center",padding:"32px 16px"},children:"No roles match your filters."})})]})]})}),n.jsxs("div",{className:"gtmr-pager",children:[n.jsxs("span",{children:[W.length===0?"0 results":`Showing ${($+1).toLocaleStr
7823ing()}–${Math.min($+m0,W.length).toLocaleString()} of ${W.length.toLocaleString()}`,R>0&&n.jsxs("span",{style:{marginLeft:12,fontSize:12,opacity:.7},children:["(",R.toLocaleString()," hidden — missing company)"]})]}),n.jsxs("span",{className:"gtmr-pager__btn",children:[n.jsx("button",{type:"button",onClick:()=>T(P=>Math.max(1,P-1)),disabled:H<=1,className:"gtmr-button",children:"Previous"}),n.jsx("button",{type:"button",onClick:()=>T(P=>Math.min(z,P+1)),disabled:H>=z,className:"gtmr-button",children:"Next"})]})]}),n.jsxs("aside",{className:"gtmr-jobs__notion-cta","aria-label":"View source on Notion",children:[n.jsx("h3",{children:"Looking for more, or want to slice it differently?"}),n.jsx("p",{children:"The full Roles database lives in Notion. The job board is rebuilt daily from this exact data — open it to filter on every field, sort any column, or export your own view."}),n.jsx("a",{href:L9e,target:"_blank",rel:"noopener noreferrer nofollow",children:"Open the GTME Roles database on Notion →"})]})]})]})})]})}const f0=24,B9e="https://www.notion.so/0ca7893fdd5040ce9e94c21830b3a94e";function q9e(e,t){const a=new Set;for(const i of e){const r=i[t];typeof r=="string"&&r.trim()&&a.add(r.trim())}return[...a].sort((i,r)=>i.localeCompare(r))}function $9e(){const{data:e,status:t,error:a}=UQ(),i=M.useMemo(()=>e??[],[e]),[r,o]=M.useState(""),[l,d]=M.useState(""),[u,h]=M.useState(1),m=M.useMemo(()=>q9e(i,"flavorNorm"),[i]),f=M.useMemo(()=>{const v=r.trim().toLowerCase();return i.filter(T=>l&&T.flavorNorm!==l?!1:v?[T.name,T.title,T.company,T.flavor,T.flavorNorm,T.location,T.background,T.description,T.notes,T.workExample1,T.workExample2,T.workExample3].join(" ").toLowerCase().includes(v):!0).sort((T,A)=>{const C=Number(Q_(A))-Number(Q_(T));return C!==0?C:T.name.localeCompare(A.name)}
7823)},[i,r,l]);M.useEffect(()=>{h(1)},[r,l]);const y=Math.max(1,Math.ceil(f.length/f0)),b=Math.min(u,y),x=(b-1)*f0,k=f.slice(x,x+f0);return n.jsxs(Qe,{hideNavbar:!0,children:[n.jsx(Je,{title:"GTM Engineer Practitioners | 1,100+ named people",description:"Search the directory of GTM Engineers, RevOps engineers, marketing engineers, and AI Accelerator practitioners. Filter by profile.",ogImage:"/og/gtme.png",canonicalUrl:"https://upside.tech/gtme/practitioners"}),n.jsx(Qs,{}),n.jsxs("section",{className:"gtmr-edit__page-intro",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Practitioners"}),n.jsx("h1",{className:"gtmr-edit__page-title",children:"People already in the role"}),n.jsxs("p",{className:"gtmr-edit__page-lede",children:["Each practitioner's archetype below was ",n.jsx("b",{children:"auto-generated from public information"})," ","about their role — title, company, public LinkedIn bio — and may not reflect how they'd describe themselves. Spot an inaccurate label or a missing person?"," ",n.jsx("a",{href:"/gtme/submit",style:{color:"var(--gtme-edit-accent, #0a8a4a)",fontWeight:600},children:"Tell us →"})," ","Or browse the full dataset in the"," ",n.jsx("a",{href:B9e,target:"_blank",rel:"noreferrer nofollow",style:{color:"var(--gtme-edit-accent, #0a8a4a)",fontWeight:600},children:"GTME Practitioners database in Notion →"})]}),n.jsx(nk,{})]}),n.jsx("section",{className:"gtmr-section gtmr-section--tight",children:n.jsxs("div",{className:"gtmr-container",children:[n.jsxs("div",{className:"gtmr-controls",children:[n.jsx("input",{type:"search",value:r,onChange:v=>o(v.target.value),placeholder:"Search name, company, headline, location…",className:"gtmr-input"}),n.jsxs("select",{value:l,onChange:v=>d(v.target.value),className:"gtmr-select",children:[n.jsx("option",{value:"",children:"All profiles"}),m.map(v=>n.jsx("option",{value:v,children:po(v)},v))]}),n.jsx("button",{type:"button",className:"gtmr-button",onClick:()=>{o(""),d("")},children:"Reset"})]}),t==="loading"&&n.jsx("p",{className:"gtmr-status",children:"Loading practitioners…"}),t==="error"&&n.jsxs("p",{className:"gtmr-status gtmr-status--error",children:["Couldn't load directory (",a,")."]}),t==="ready"&&n.jsxs(n.Fragment,{children:[n.jsxs("p",{className:"gtmr-body",children:["Showing ",f.length.toLocaleString()," of ",i.length.toLocaleString()," practitioners."]}),n.jsx("div",{className:"gtmr-cards gtmr-cards--practitioners",children:k.map(v=>n.jsx(r6,{practitioner:v},v.profileUrl||v.name))}),n.jsxs("div",{className:"gtmr-pager",children:[n.jsx("span",{children:f.length===0?"0 results":`Showing ${(x+1).toLocaleString()}–${Math.min(x+f0,f.length).toLocaleString()} of ${f.length.toLocaleString()}`}),n.jsxs("span",{className:"gtmr-pager__btn",children:[n.jsx("button",{type:"button",onClick:()=>h(v=>Math.max(1,v-1)),disabled:b<=1,className:"gtmr-button",children:"Previous"}),n.jsx("button",{type:"button",onClick:()=>h(v=>Math.min(y,v+1)),disabled:b>=y,className:"gtmr-button",children:"Next"})]})]})]})]})})]})}const F9e=[{key:"role",eyebrow:"Job req",title:"Submit a role",body:"Spotted a GTME job description we missed? Drop the URL and we'll classify it on the next refresh.",inputLabel:"Job description URL",placeholder:"https://job-board.com/the-role-you-found",cta:"Submit role",bg:"#e8f4ed",accent:"#2d6a4f",doneBg:"linear-gradient(160deg, #e0f0e7 0%, #eef7f1 60%, #f4faf6 100%)",doneSub:"Your role is in the queue for the next daily refresh. Nothing to follow up on.",lastStep:"Roles DB"},{key:"practitioner",eyebrow:"Practitioner",title:"Submit a LinkedIn profile",body:"Know a great GTM Engineer (or are one)? Drop the LinkedIn URL and we'll add them to the directory.",inputLabel:"LinkedIn profile URL",placeholder:"https://linkedin.com/in/...",cta:"Submit profile",bg:"#f0eef9",accent:"#5942b0",doneBg:"linear-gradient(160deg, #eae5f7 0%, #f2eff9 60%, #f7f5fb 100%)",doneSub:"This profile is in the queue for the next daily refresh. Nothing to follow up on.",lastStep:"People DB"},{key:"source",eyebrow:"New source",title:"Submit a job board to crawl",body:"Found a job board, newsletter, or community where GTME roles are posted? Send it our way and we'll add it to the daily Exa sweep.",inputLabel:"Job board / 
7823source URL",placeholder:"https://example.com/jobs",cta:"Submit source",bg:"#fdf6ee",accent:"#b35d2f",doneBg:"linear-gradient(160deg, #fbeadb 0%, #fdf3e9 60%, #fef8f2 100%)",doneSub:"This source is in the queue for the daily Exa sweep. Nothing to follow up on.",lastStep:"Daily sweep"}],g0={url:"",submitted:!1,error:"",busy:!1};function G9e(){const[e,t]=M.useState({role:g0,practitioner:g0,source:g0});function a(r,o){t(l=>({...l,[r]:{...l[r],...o}}))}async function i(r,o){r.preventDefault();const d=e[o].url.trim();if(!d||!/^https?:\/\//i.test(d)){a(o,{error:"Please paste a full URL starting with https://"});return}a(o,{busy:!0,error:""});try{const u=await fetch("/api/gtme-submission",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({kind:o,url:d})}),h=await u.json().catch(()=>({}));if(!u.ok||!h.ok){const m=h.error||`Submission failed (HTTP ${u.status}).`;a(o,{busy:!1,error:m});return}a(o,{busy:!1,submitted:!0,error:""})}catch(u){const h=u instanceof Error?u.message:"Network error.";a(o,{busy:!1,error:`Couldn't reach the submission endpoint (${h}).`})}}
7823return n.jsxs(Qe,{hideNavbar:!0,children:[n.jsx(Je,{title:"Submit a GTM Engineering role, profile, or source | Upside",description:"Drop a job description, LinkedIn profile, or job board so we can add it to the GTM Engineer database on the next refresh.",ogImage:"/og/gtme.png",canonicalUrl:"https://upside.tech/gtme/submit"}),n.jsx(Qs,{}),n.jsxs("section",{className:"gtmr-edit__page-intro",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Submit"}),n.jsx("h1",{className:"gtmr-edit__page-title",children:"Improve the dataset"}),n.jsx("p",{className:"gtmr-edit__page-lede",children:"This dataset isn't original research — we aggregate roles, practitioners, and sources from public job boards, newsletters, ATS feeds, and LinkedIn. Spotted a gap? Drop in a job req, a practitioner, or a source we should be crawling, and our daily refresh algorithm picks it up on the next run. (Nothing here is human-reviewed.)"})]}),n.jsx("section",{className:"gtmr-section gtmr-section--tight",children:n.jsxs("div",{className:"gtmr-container",children:[n.jsx("div",{className:"gtmr-edit__submit-grid",children:F9e.map(r=>{const o=e[r.key];return n.jsx("div",{className:"gtmr-edit__submit-card"+(o.submitted?" gtmr-edit__submit-card--done":""),style:{background:o.submitted?r.doneBg:r.bg,"--accent":r.accent},children:o.submitted?n.jsxs("div",{className:"gtmr-edit__submit-done",role:"status",children:[n.jsx("span",{className:"gtmr-edit__submit-check","aria-hidden":"true",children:n.jsx("svg",{viewBox:"0 0 24 24",children:n.jsx("path",{className:"gtmr-edit__submit-tick",d:"M5 12.5l4.5 4.5L19 7.5"})})}),n.jsx("h3",{className:"gtmr-edit__submit-done-title",children:"Thanks, got it."}),n.jsx("p",{className:"gtmr-edit__submit-done-sub",children:r.doneSub}),n.jsxs("ol",{className:"gtmr-edit__submit-flow","aria-label":"What happens next",children:[n.jsxs("li",{className:"gtmr-edit__submit-step",children:[n.jsx("span",{className:"gtmr-edit__submit-dot","aria-hidden":"true"}),"Queued"]}),n.jsx("li",{className:"gtmr-edit__submit-flow-arrow","aria-hidden":"true",children:"→"}),n.jsxs("li",{className:"gtmr-edit__submit-step gtmr-edit__submit-step--future",children:[n.jsx("span",{className:"gtmr-edit__submit-dot","aria-hidden":"true"}),"Validation"]}),n.jsx("li",{className:"gtmr-edit__submit-flow-arrow","aria-hidden":"true",children:"→"}),n.jsxs("li",{className:"gtmr-edit__submit-step gtmr-edit__submit-step--future",children:[n.jsx("span",{className:"gtmr-edit__submit-dot","aria-hidden":"true"}),"Classification"]}),n.jsx("li",{className:"gtmr-edit__submit-flow-arrow","aria-hidden":"true",children:"→"}),n.jsxs("li",{className:"gtmr-edit__submit-step gtmr-edit__submit-step--future",children:[n.jsx("span",{className:"gtmr-edit__submit-dot","aria-hidden":"true"}),r.lastStep]})]}),n.jsx("button",{type:"button",className:"gtmr-edit__submit-again",onClick:()=>a(r.key,{...g0}),children:"Submit another"})]}):n.jsxs(n.Fragment,{children:[n.jsx("span",{className:"gtmr-edit__eyebrow",style:{color:r.accent,background:"rgba(255,255,255,0.6)",alignSelf:"flex-start"},children:r.eyebrow}),n.jsx("h3",{className:"gtmr-edit__submit-card-title",children:r.title}),n.jsx("p",{className:"gtmr-edit__submit-card-body",children:r.body}),n.jsxs("form",{className:"gtmr-edit__submit-form",onSubmit:l=>i(l,r.key),children:[n.jsxs("label",{className:"gtmr-edit__submit-label",children:[n.jsx("span",{children:r.inputLabel}),n.jsx("input",{type:"url",required:!0,inputMode:"url",value:o.url,placeholder:r.placeholder,onChange:l=>a(r.key,{url:l.target.value,error:""}),className:"gtmr-edit__submit-input"})]}),o.error&&n.jsx("span",{className:"gtmr-edit__submit-error",children:o.error}),n.jsx("button",{type:"submit",className:"gtmr-edit__submit-button",style:{background:r.accent,opacity:o.busy?.7:1},disabled:o.busy,children:o.busy?"Submitting…":r.cta})]})]})},r.key)})}),n.jsxs("p",{className:"gtmr-edit__submit-footnote",children:["Submissions land in our ",n.jsx("b",{children:"GTME Submissions"})," Notion database as ",n.jsx("b",{children:"Pending"}),". We review submissions before the next refresh — we validate the URL, classify it, and either import it into the Roles or People DB or mark it Rejected. You don't need to follow up."]})]})})]})}const H9e=512,Y9e=.88;async function V9e(e){if(!e.type.startsWith("image/"))throw new Error("Please choose an image file.");const t=await createImageBitmap(e),a=Math.min(1,H9e/Math.max(t.width,t.height)),i=Math.max(1,Math.round(t.width*a)),r=Math.max(1,Math.round(t.height*a)),o=document.createElement("canvas");o.width=i,o.height=r;const l=o.getContext("2d");if(!l)throw t.close(),new Error("Could not process image.");l.drawImage(t,0,0,i,r),t.close();const d=await new Promise(u=>{o.toBlob(h=>u(h),"image/jpeg",Y9e)});if(!d)throw new Error("Could not process image.");return d}function K9e(e,t){const a={};e.name.trim().length<2&&(a.name="Name is required.");const r=e.flavor.trim();r?t.includes(r)||(a.flavor="Flavor must be selected from the allowed list."):a.flavor="Select a GTME flavor.";const o=e.profileUrl.trim();if(!o)a.profileUrl="Profile URL is required.";else try{const l=new URL(o);(l.hostname.replace(/^www\./,"").toLowerCase()!=="linkedin.com"||!/^\/in\//i.test(l.pathname))&&(a.profileUrl="Profile URL must be a LinkedIn /in/ profile link.")}catch{a.profileUrl="Profile URL must be a valid URL."}return[["workExample1","Work example 1"],["workExample2","Work example 2"],["workExample3","Work example 3"]].forEac
7823h(([l,d])=>{const u=e[l].trim();u&&!i6(u)&&(a[l]=`${d} must be a YouTube link.`)}),a}function X9e(e){const t=e.toLowerCase();return t.includes("profile url")||t.includes("linkedin")?{profileUrl:e}:t.includes("work example 3")?{workExample3:e}:t.includes("work example 2")?{workExample2:e}:t.includes("work example 1")||t.includes("work example")?{workExample1:e}:t.includes("flavor")?{flavor:e}:t.includes("role description")?{description:e}:t.includes("photo")?{photo:e}:t.includes("name is")||t.startsWith("name ")?{name:e}:{}}function Q9e(e){return{...e,name:e.name.trim(),title:e.title.trim(),company:e.company.trim(),location:e.location.trim(),background:e.background.trim(),description:e.description.trim(),flavor:e.flavor.trim(),profileUrl:e.profileUrl.trim(),photo:e.photo.trim(),workExample1:e.workExample1.trim(),workExample2:e.workExample2.trim(),workExample3:e.workExample3.trim()}}function Z9e(e){return{name:e.name,title:e.title,company:e.company,flavor:e.flavor,flavorNorm:e.flavor,location:e.location,background:e.background,description:e.description,profileUrl:e.profileUrl,notes:"",photoUrl:e.photo,workExample1:e.workExample1,workExample2:e.workExample2,workExample3:e.workExample3}}const J9e=["name","title","company","location","background","flavor","profileUrl","photo","workExample1","workExample2","workExample3","description"];function eIe(){const{token:e}=Ta(),t=(e||"").replace(/\/$/,""),[a,i]=M.useState("loading"),[r,o]=M.useState(""),[l,d]=M.useState(null),[u,h]=M.useState(null),[m,f]=M.use
7823State([]),[y,b]=M.useState(!1),[x,k]=M.useState(""),[v,j]=M.useState(!1),[T,A]=M.useState(""),[C,_]=M.useState({}),[E,R]=M.useState(!1),[W,z]=M.useState(""),[H,$]=M.useState(""),U=M.useRef({}),X=M.useRef(!1);M.useEffect(()=>()=>{H.startsWith("blob:")&&URL.revokeObjectURL(H)},[H]),M.useEffect(()=>{if(!X.current)return;X.current=!1;const le=J9e.find(ee=>C[ee]);le&&requestAnimationFrame(()=>{var ee;(ee=U.current[le])==null||ee.scrollIntoView({behavior:"smooth",block:"center"})})},[C]);function D(le){return le.startsWith("https://")||le.startsWith("blob:")}M.useEffect(()=>{if(!t){i("error"),o("This page needs your personalized edit link. Open the link we emailed you.");return}let le=!1;return i("loading"),o(""),fetch(`/api/gtme-edit?token=${encodeURIComponent(t)}`).then(async ee=>{const ve=await ee.json().catch(()=>({}));if(!le){if(!ee.ok||!ve.ok||!ve.profile){i("error"),o(ve.error||`Couldn't load your profile (HTTP ${ee.status}).`);return}d(ve.profile),h({...ve.profile}),f(ve.flavorOptions||[]),b(!!ve.pendingReview),k(ve.reviewerMessage||""),i("ready")}}).catch(ee=>{le||(i("error"),o(ee instanceof Error?ee.message:"Network error."))}),()=>{le=!0}},[t]);const P=M.useMemo(()=>{if(!u)return null;const le=Z9e(u),ee=H||(u.photo&&D(u.photo)?u.photo:"");return ee?{...le,photoUrl:ee}:le},[u,H]),O=M.useMemo(()=>!l||!u?!1:Object.keys(l).some(le=>(u[le]||"").trim()!==(l[le]||"").trim()),[l,u]);function B(le,ee){_(ve=>{if(!ve[le])return ve;const Se={...ve};return delete Se[le],Se}),h(ve=>ve&&{...ve,[le]:ee})}function Y(le){X.current=Object.keys(le).length>0,_(le),A("")}function V(le){return ee=>{U.current[le]=ee}}function G(le){return C[le]?"gtmr-edit__submit-label gtmr-edit__submit-label--invalid":"gtmr-edit__submit-label"}function I(le){return C[le]?"gtmr-edit__submit-input gtmr-edit__submit-input--invalid":"gtmr-edit__submit-input"}function F(le){const ee=C[le];return ee?n.jsx("p",{className:"gtmr-edit__field-error",children:ee}):null}function K(){$(le=>(le.startsWith("blob:")&&URL.revokeObjectURL(le),""))}async function ne(le){var ve;const ee=(ve=le.target.files)==null?void 0:ve[0];if(le.target.value="",!(!ee||!t)){R(!0),z("");try{const Se=await V9e(ee);H.startsWith("blob:")&&URL.revokeObjectURL(H);const pe=URL.createObjectURL(Se);$(pe);const Ye=new FormData;Ye.append("token",t),Ye.append("photo",Se,"headshot.jpg");const ze=await fetch("/api/gtme-edit-photo",{method:"POST",body:Ye}),Re=await ze.json().catch(()=>({}));if(!ze.ok||!Re.ok||!Re.photo){z(Re.error||`Upload failed (HTTP ${ze.status}).`),K();return}B("photo",Re.photo)}catch(Se){z(Se instanceof Error?Se.message:"Upload failed."),K()}finally{R(!1)}}}function ae(){K(),B("photo","")}const ge=H||(u!=null&&u.photo&&D(u.photo)?u.photo:"");async function be(le){if(le.preventDefault(),!u||!t)return;const ee=Q9e(u),ve=K9e(ee,m);if(Object.keys(ve).length>0){Y(ve),j(!1);return}j(!0),A(""),_({});try{const Se=await fetch("/api/gtme-edit",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({token:t,profile:ee})}),pe=await Se.json().catch(()=>({}));if(!Se.ok||!pe.ok){const Ye=pe.error||`Submission failed (HTTP ${Se.status}).`,ze=X9e(Ye);Object.keys(ze).length>0?Y(ze):(A(Ye),requestAnimationFrame(()=>{var Re;(Re=document.querySelector(".gtmr-edit__form-alert"))==null||Re.scrollIntoView({behavior:"smooth",block:"center"})})),j(!1);return}i("submitted"),j(!1)}catch(Se){A(Se instanceof Error?Se.message:"Network error."),j(!1)}}
7823return n.jsxs(Qe,{hideNavbar:!0,children:[n.jsx(Je,{title:"Edit your GTME directory profile",description:"Private link for practitioners to update their GTME directory listing.",ogImage:"/og/gtme.png",canonicalUrl:`https://upside.tech/gtme/practitioners/edit/${t}`,noIndex:!0}),n.jsx(Qs,{}),n.jsxs("section",{className:"gtmr-edit__page-intro",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Profile editor"}),n.jsx("h1",{className:"gtmr-edit__page-title",children:"Update your directory listing"}),n.jsxs("p",{className:"gtmr-edit__page-lede",children:["You're listed in the"," ",n.jsx("a",{href:"/gtme/practitioners",style:{color:"var(--gtme-edit-accent, #316851)",fontWeight:600},children:"GTME practitioner directory"}),". This private link lets you review and correct your profile. Changes are reviewed before they go live."]})]}),n.jsx("section",{className:"gtmr-section gtmr-section--tight",children:n.jsxs("div",{className:"gtmr-container",style:{maxWidth:720},children:[a==="loading"&&n.jsx("p",{className:"gtmr-status",children:"Loading your profile…"}),a==="error"&&n.jsx("p",{className:"gtmr-status gtmr-status--error",children:r}),a==="submitted"&&n.jsxs("div",{className:"gtmr-edit__submit-success",children:[n.jsx("strong",{children:"Thanks — we got your update."}),n.jsxs("span",{children:["A human will review your entry, and it should go live on the"," ",n.jsx("a",{href:"/gtme/practitioners",children:"practitioner page"})," within the next few days."]}),n.jsxs("span",{children:["Now that you're here — check out the"," ",n.jsx("a",{href:"/resources/miniapp-examples",children:"apps other GTM Engineers are building on Upside"}),"."]})]}),a==="ready"&&u&&P&&n.jsxs(n.Fragment,{children:[y&&n.jsxs("div",{className:"gtmr-edit__submit-success",style:{marginBottom:20},children:[n.jsx("strong",{children:"Your last edit is awaiting review."}),n.jsx("span",{children:"You can submit another update once that review is complete."})]}),x&&n.jsxs("div",{className:"gtmr-edit__submit-success",style:{marginBottom:20,borderColor:"#c9a227"},children:[n.jsx("strong",{children:"Reviewer note"}),n.jsx("span",{children:x})]}),n.jsx("h2",{className:"gtmr-h3",style:{marginTop:0},children:"Edit your profile"}),n.jsxs("form",{className:"gtmr-edit__submit-form",onSubmit:be,children:[T&&n.jsx("div",{className:"gtmr-edit__form-alert",role:"alert",children:T}),n.jsxs("label",{ref:V("name"),className:G("name"),children:[n.jsx("span",{children:"Name"}),n.jsx("input",{type:"text",value:u.name,onChange:le=>B("name",le.target.value),className:I("name"),required:!0}),F("name")]}),[["title","Title"],["company","Company"],["location","Location"],["background","Background / previously at"]].map(([le,ee])=>n.jsxs("label",{ref:V(le),className:G(le),children:[n.jsx("span",{children:ee}),n.jsx("input",{type:"text",value:u[le],onChange:ve=>B(le,ve.target.value),className:I(le)})]},le)),n.jsxs("label",{ref:V("flavor"),className:G("flavor"),children:[n.jsx("span",{children:"GTME Flavor"}),n.jsxs("select",{value:u.flavor,onChange:le=>B("flavor",le.target.value),className:I("flavor"),required:!0,children:[n.jsx("option",{value:"",disabled:!0,children:"Select a GTME flavor…"}),m.map(le=>n.jsx("option",{value:le,children:le},le))]}),n.jsxs("p",{className:"gtmr-edit__field-hint",children:["Not sure which fits?"," ",n.jsx("a",{href:"https://upside.tech/gtme",target:"_blank",rel:"noopener noreferrer",children:"Browse GTME archetypes"})," ","to find yours."]}),F("flavor")]}),n.jsxs("label",{ref:V("profileUrl"),className:G("profileUrl"),children:[n.jsx("span",{children:"LinkedIn profile URL"}),n.jsx("input",{type:"url",value:u.profileUrl,onChange:le=>B("profileUrl",le.target.value),className:I("profileUrl"),placeholder:"https://www.linkedin.com/in/your-handle",required:!0}),!C.profileUrl&&n.jsxs("p",{className:"gtmr-edit__field-hint",children:["Must be a LinkedIn ",n.jsx("code",{children:"/in/"})," link."]}),F("profileUrl")]}),n.jsxs("div",{ref:V("photo"),className:G("photo"),children:[n.jsx("span",{children:"Headshot photo"}),n.jsx("div",{className:C.photo?"gtmr-edit__photo-upload gtmr-edit__photo-upload--invalid":"gtmr-edit__photo-upload",children:n.jsxs("div",{className:"gtmr-edit__photo-row",children:[ge?n.jsx("img",{src:ge,alt:"",className:"gtmr-edit__photo-preview",onError:le=>{le.target.style.display="none"}}):n.jsx("div",{className:"gtmr-edit__photo-placeholder","aria-hidden":!0,
7823children:n.jsx("span",{className:"gtmr-edit__photo-placeholder-icon",children:"+"})}),n.jsxs("div",{className:"gtmr-edit__photo-meta",children:[n.jsxs("div",{className:"gtmr-edit__photo-actions",children:[n.jsxs("label",{className:"gtmr-edit__photo-button",children:[E?"Uploading…":u.photo?"Change photo":"Upload photo",n.jsx("input",{type:"file",accept:"image/jpeg,image/png,image/webp",onChange:ne,disabled:E||y,hidden:!0})]}),u.photo&&n.jsx("button",{type:"button",className:"gtmr-edit__photo-remove",onClick:ae,disabled:E||y,children:"Remove"})]}),n.jsx("p",{className:"gtmr-edit__field-hint",children:"JPEG, PNG, or WebP · resized to 512px max"}),W&&n.jsx("p",{className:"gtmr-edit__field-error",children:W}),F("photo")]})]})})]}),n.jsxs("div",{className:"gtmr-edit__field-group",children:[n.jsx("p",{className:"gtmr-edit__field-hint gtmr-edit__field-hint--group",children:"Work examples must be YouTube links (watch, embed, or youtu.be)."}),[["workExample1","Work example 1 (YouTube)"],["workExample2","Work example 2 (YouTube, optional)"],["workExample3","Work example 3 (YouTube, optional)"]].map(([le,ee])=>n.jsxs("label",{ref:V(le),className:G(le),children:[n.jsx("span",{children:ee}),n.jsx("input",{type:"url",value:u[le],onChange:ve=>B(le,ve.target.value),className:I(le),placeholder:"https://www.youtube.com/watch?v=…"}),u[le]&&!i6(u[le])&&!C[le]&&n.jsx("p",{className:"gtmr-edit__field-error",style:{fontWeight:400},children:"Must be a YouTube link"}),F(le)]},le))]}),n.jsxs("label",{ref:V("description"),className:G("description"),children:[n.jsx("span",{children:"Role description (in your words)"}),n.jsx("textarea",{value:u.description,onChange:le=>B("description",le.target.value),className:I("description"),rows:4}),F("description")]}),n.jsx("h2",{className:"gtmr-h3",style:{marginTop:8,marginBottom:12},children:"Preview"}),n.jsx("div",{style:{marginBottom:8},children:n.jsx(r6,{practitioner:P})}),n.jsx("button",{type:"submit",className:"gtmr-edit__submit-button",style:{background:"var(--gtme-edit-accent, #316851)",opacity:v||!O||y||E?.7:1},disabled:v||!O||y||E,children:v?"Submitting…":"Submit for review"})]})]})]})})]})}function Iq({event:e,status:t}){return n.jsxs("article",{className:`gtmr-edit__event-card gtmr-edit__event-card--${t}`,children:[n.jsxs("div",{className:"gtmr-edit__event-meta",children:[n.jsxs("span",{className:"gtmr-edit__event-date",children:[n.jsx("strong",{children:GQ(e.startsAt)}),n.jsx("span",{className:"gtmr-edit__event-time",children:S9e(e)})]}),n.jsxs("span",{className:"gtmr-edit__event-format",children:[e.format," · ",e.city]}),t==="upcoming"&&n.jsx("span",{className:"gtmr-edit__event-status",children:"Upcoming"}),t==="past"&&n.jsx("span",{className:"gtmr-edit__event-status gtmr-edit__event-status--past",children:"Past event"})]}),n.jsxs("header",{className:"gtmr-edit__event-head",children:[e.series&&n.jsx("span",{className:"gtmr-edit__eyebrow",style:{alignSelf:"flex-start"},children:e.series}),n.jsx("h2",{className:"gtmr-edit__event-title",children:e.title}),e.subtitle&&n.jsx("p",{className:"gtmr-edit__event-subtitle",children:e.subt
7823itle})]}),n.jsx("div",{className:"gtmr-edit__event-body",children:e.description.split(`
7824
7825`).map((a,i)=>n.jsx("p",{children:a},i))}),e.speakers&&e.speakers.length>0&&n.jsxs("section",{className:"gtmr-edit__event-section",children:[n.jsx("h3",{className:"gtmr-edit__event-section-h",children:"Speakers & demos"}),n.jsx("ul",{className:"gtmr-edit__event-speakers",children:e.speakers.map(a=>n.jsxs("li",{className:"gtmr-edit__event-speaker",children:[n.jsxs("div",{className:"gtmr-edit__event-speaker-head",children:[n.jsx("span",{className:"gtmr-edit__event-speaker-name",children:a.linkedin?n.jsx("a",{href:a.linkedin,target:"_blank",rel:"noreferrer nofollow",children:a.name}):a.name}),n.jsx("span",{className:"gtmr-edit__event-speaker-co",children:a.company})]}),n.jsx("p",{className:"gtmr-edit__event-speaker-topic",children:a.topic})]},a.name))})]}),e.agenda&&e.agenda.length>0&&n.jsxs("section",{className:"gtmr-edit__event-section",children:[n.jsx("h3",{className:"gtmr-edit__event-section-h",children:"Agenda"}),n.jsx("ul",{className:"gtmr-edit__event-agenda",children:e.agenda.map(a=>n.jsxs("li",{children:[n.jsx("span",{className:"gtmr-edit__event-agenda-time",children:a.time}),n.jsx("span",{className:"gtmr-edit__event-agenda-label",children:a.label})]},`${a.time}-${a.label}`))})]}),n.jsxs("footer",{className:"gtmr-edit__event-foot",children:[(()=>{const a=t==="past",i=a&&!!e.recordingUrl,r=i?e.recordingUrl:e.registrationUrl,o=a?i?"Watch on YouTube →":"View on Luma →":"Register on Luma →";return n.jsx("a",{className:"gtmr-edit__takeaway-cta",href:r,target:"_blank",rel:"noreferrer nofollow",children:o})})(),e.partners&&e.partners.length>0&&n.jsx("div",{className:"gtmr-edit__event-partners",children:e.partners.map(a=>n.jsx("span",{className:"gtmr-edit__event-partner",children:a},a))})]})]})}function tIe(){const{upcoming:e,past:t}=FQ(),a=$Q.length;
7825return n.jsxs(Qe,{hideNavbar:!0,children:[n.jsx(Je,{title:"GTM Engineer Events | Demos, meetups, and Show & Tell sessions",description:"In-person and livestream events where GTM Engineers demo the workflows they actually use — from Cursor, Vanta, Zapier, Exa, Upside, and more.",ogImage:"/og/gtme.png",canonicalUrl:"https://upside.tech/gtme/events"}),n.jsx(Qs,{}),n.jsxs("section",{className:"gtmr-edit__page-intro",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Events"}),n.jsx("h1",{className:"gtmr-edit__page-title",children:"GTM Engineers, in person."}),n.jsx("p",{className:"gtmr-edit__page-lede",children:"Demo-only sessions where operators show the AI workflows they actually use in their go-to-market motion. No slides, no pitches — just laptops open and builders walking through what they shipped."})]}),n.jsx("section",{className:"gtmr-section gtmr-section--tight",children:n.jsx("div",{className:"gtmr-container",children:a===0?n.jsx("p",{className:"gtmr-status",children:"No events scheduled yet — check back soon."}):n.jsxs(n.Fragment,{children:[e.length>0&&n.jsx("div",{className:"gtmr-edit__event-list",children:e.map(i=>n.jsx(Iq,{event:i,status:"upcoming"},i.slug))}),t.length>0&&n.jsxs(n.Fragment,{children:[n.jsxs("header",{className:"gtmr-edit__section-head",style:{marginTop:32},children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"Archive"}),n.jsx("h2",{children:"Past events"}),n.jsxs("p",{children:["Catch up on recordings from past Show & Tell sessions on"," ",n.jsx("a",{href:k9e,target:"_blank",rel:"noreferrer nofollow",children:"our YouTube playlist →"})]})]}),n.jsx("div",{className:"gtmr-edit__event-list",children:t.map(i=>n.jsx(Iq,{event:i,status:"past"},i.slug))})]})]})})})]})}const El=200,Xc=130,y0=28,Pf=80,r4=24;function nIe(){const{data:e,status:t}=tk(),a=t==="ready"&&e?`Roles · ${e.totalRoles.toLocaleString()}`:"Roles",i=t==="ready"&&e?`People · ${e.totalPractitioners.toLocaleString()}`:"People",r=[{title:"Sources",items:["Daily Exa sweep (upstream)","User submissions","Manual editorial"],accent:"#C99435",accentBg:"#fdf6ee"},{title:"Notion DBs",items:[a,i,"Submissions"],accent:"#5942b0",accentBg:"#f0eef9"},{title:"Daily rebuild",items:["Cloudflare Pages build","Daily cadence","Pulls Notion at build time"],accent:"#2d6a4f",accentBg:"#e8f4ed"},{title:"Static data",items:["/public/data","gtme-roles.csv","gtme-summary.json"],accent:"#3D7BC4",accentBg:"#e8f1f8"},{title:"Website",items:["Cloudflare Pages","/gtme/* routes","Auto-redeploys"],accent:"#509A79",accentBg:"#eef5f1"}],o=r.length*El+(r.length-1)*y0+r4*2,l=Pf+Xc+110;return n.jsx("div",{className:"gtmr-edit__diagram",children:n.jsxs("svg",{viewBox:`0 0 ${o} ${l}`,preserveAspectRatio:"xMidYMid meet",role:"img","aria-label":"System diagram: sources, Notion, daily refresh, static data, website",style:{width:"100%",height:"auto",display:"block"},children:[n.jsx("defs",{children:n.jsx("marker",{id:"gtme-arrow",viewBox:"0 0 10 10",refX:"8",refY:"5",markerWidth:"8",markerHeight:"8",orient:"auto-start-reverse",children:n.jsx("path",{d:"M0,0 L10,5 L0,10 Z",fill:"#1b1f1c"})})}),n.jsx("text",{x:o/2,y:32,textAnchor:"middle",fontFamily:"Geist, sans-serif",fontSize:"11",fontWeight:"700",letterSpacing:"0.14em",fill:"#5f6563",children:"DATA FLOW"}),n.jsx("text",{x:o/2,y:56,textAnchor:"middle",fontFamily:"Geist, sans-serif",fontSize:"20",fontWeight:"600",letterSpacing:"-0.012em",fill:"#1b1f1c",children:"From Exa & user submissions to live website data, every day"}),r.map((d,u)=>{const h=r4+u*(El+y0),m=Pf;return n.jsxs("g",{children:[u<r.length-1&&n.jsx("line",{x1:h+El+2,y1:m+Xc/2,x2:h+El+y0-2,y2:m+Xc/2,stroke:"#1b1f1c",strokeWidth:"1.5",markerEnd:"url(#gtme-arrow)"}),n.jsx("rect",{x:h,y:m,width:El,height:Xc,rx:12,fill:d.accentBg,stroke:d.accent,strokeOpacity:"0.35",strokeWidth:"1"}),n.jsx("text",{x:h+16,y:m+26,fontFamily:"Geist, sans-serif",fontSize:"11",fontWeight:"700",letterSpacing:"0.12em",fill:d.accent,children:String(u+1).padStart(2,"0")}),n.jsx("text",{x:h+16,y:m+50,fontFamily:"Geist, sans-serif",fontSize:"17",fontWeight:"600",letterSpacing:"-0.012em",fill:"#1b1f1c",children:d.title}),d.items.map((f,y)=>n.jsxs("text",{x:h+16,y:m+76+y*16,fontFamily:"Geist, sans-serif",fontSize:"11.5",fill:"#394142",children:["• ",f]},f))]},d.title)}),(()=>{const d=r4+1*(El+y0),u=d+El/2,h=Pf+Xc+40,m=d-48,f=El+96;return n.jsxs("g",{children:[n.jsx("rect",{x:m,y:h,width:f,height:62,rx:10,fill:"#ffffff",stroke:"#1b1f1c",strokeOpacity:"0.18",strokeWidth:"1",strokeDasharray:"3 3"}),n.jsx("text",{x:m+f/2,y:h+22,textAnchor:"middle",fontFamily:"Geist, sans-serif",fontSize:"11",fontWeight:"700",letterSpacing:"0.1em",fill:"#5f6563",children:"USER SUBMISSION LOOP"}),n.jsx("text",{x:m+f/2,y:h+41,textAnchor:"middle",fontFamily:"Geist, sans-serif",fontSize:"12.5",fill:"#1b1f1c",children:"/gtme/submit form"}),n.jsx("text",{x:m+f/2,y:h+56,textAnchor:"middle",fontFamily:"Geist, sans-serif",fontSize:"11.5",fill:"#394142",children:"→ Cloudflare Pages Function → Submissions DB (Pending)"}),n.jsx("path",{d:`M ${u},${h} C ${u},${h-10} ${u},${Pf+Xc+16} ${u},${Pf+Xc+2}`,fill:"none",stroke:"#1b1f1c",strokeWidth:"1.5",markerEnd:"url(#gtme-arrow)"})]})})()]})})}const aIe="https://www.notion.so/0ac758ea76474561b7880564132b0455",iIe="https://www.notion.so/0ca7893fdd5040ce9e94c21830b3a94e";function rIe(){const{data:e,status:t}=tk(),a=t==="ready"&&e?e.totalRoles:null,i=t==="ready"&&e?e.totalPractitioners:null,r=t==="ready"&&e?e.totalCompanies:null,o=t==="ready"&&e?e.totalProfiles:null,l=t==="ready"&&e?e.totalOpen??e.rolesByProfile.reduce((h,m)=>h+(m.open||0),0):null,d=t==="ready"&&e?e.lastUpdated:null,u=h=>
7825h==null?"—":h.toLocaleString();return n.jsxs(Qe,{hideNavbar:!0,children:[n.jsx(Je,{title:"How the GTM Engineer database is built | Upside",description:t==="ready"&&a!=null&&i!=null?`The data pipeline behind /gtme — ${a.toLocaleString()} job listings and ${i.toLocaleString()} practitioners in Notion, pulled into the site on a daily build cadence.`:"The data pipeline behind /gtme — Notion is the source of truth; the site is rebuilt against it on a daily cadence.",ogImage:"/og/gtme.png",canonicalUrl:"https://upside.tech/gtme/about"}),n.jsx(Qs,{}),n.jsxs("section",{className:"gtmr-edit__page-intro",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",children:"About"}),n.jsx("h1",{className:"gtmr-edit__page-title",children:"How this is built"}),n.jsx(nk,{prefix:"Last refresh"})]}),n.jsx("section",{className:"gtmr-section gtmr-section--tight",children:n.jsx("div",{className:"gtmr-container",children:n.jsx(nIe,{})})}),n.jsx("section",{className:"gtmr-section gtmr-section--tight",children:n.jsx("div",{className:"gtmr-container",children:n.jsxs("div",{className:"gtmr-edit__nav-stats",children:[n.jsxs("div",{className:"gtmr-edit__nav-stat",children:[n.jsx("span",{className:"gtmr-edit__nav-stat-n",children:u(a)}),n.jsx("span",{className:"gtmr-edit__nav-stat-label",children:"Job listings in Notion"})]}),n.jsxs("div",{className:"gtmr-edit__nav-stat",children:[n.jsx("span",{className:"gtmr-edit__nav-stat-n",children:u(l)}),n.jsx("span",{className:"gtmr-edit__nav-stat-label",children:"Open right now"})]}),n.jsxs("div",{className:"gtmr-edit__nav-stat",children:[n.jsx("span",{className:"gtmr-edit__nav-stat-n",children:u(i)}),n.jsx("span",{className:"gtmr-edit__nav-stat-label",children:"Practitioners"})]}),n.jsxs("div",{className:"gtmr-edit__nav-stat",children:[n.jsx("span",{className:"gtmr-edit__nav-stat-n",children:u(r)}),n.jsx("span",{className:"gtmr-edit__nav-stat-label",children:"Hiring companies"})]}),n.jsxs("div",{className:"gtmr-edit__nav-stat",children:[n.jsx("span",{className:"gtmr-edit__nav-stat-n",children:o??"—"}),n.jsx("span",{className:"gtmr-edit__nav-stat-label",children:"Archetypes"})]}),n.jsxs("div",{className:"gtmr-edit__nav-stat",children:[n.jsx("span",{className:"gtmr-edit__nav-stat-n",children:d??"—"}),n.jsx("span",{className:"gtmr-edit__nav-stat-label",children:"Last refresh"})]})]})})}),n.jsx("section",{className:"gtmr-section gtmr-section--tight",children:n.jsxs("div",{className:"gtmr-container gtmr-edit__about-grid",children:[n.jsxs("div",{className:"gtmr-edit__about-block",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",style:{alignSelf:"flex-start"},children:"Sources"}),n.jsx("h2",{className:"gtmr-edit__about-h2",children:"Several feeds, one Notion table"}),n.jsxs("p",{children:["Multiple feeds merge into the Notion Roles + People databases: a daily upstream Exa-driven sweep across LinkedIn, Greenhouse, Lever, Ashby, Wellfound, Built In, YC, and a hand-picked editorial source list; targeted crawls of GTM-specific boards"," ",n.jsx("a",{href:"https://gtmjobs.xyz",target:"_blank",rel:"noreferrer nofollow",children:"GTMjobs.xyz"})," and"," ",n.jsx("a",{href:"https://bloomberry.com/gtm_jobs.html",target:"_blank",rel:"noreferrer nofollow",children:"Bloomberry"})," ","(the latter crawls company career sites directly, not LinkedIn/Indeed); user submissions via ",n.jsx("a",{href:"/gtme/submit",children:"/gtme/submit"}),"; and a small slice of manually edited editorial fields (taglines, KPIs, notes). New postings are URL-deduped, live-checked, classified into one of the archetypes, and rated 1–10 on AI / GTM / data / experimentation / coding. Likely-Open URLs that close overnight flip to ",n.jsx("code",{children:"Closed"}),"."]})]}),n.jsxs("div",{className:"gtmr-edit__about-block",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",style:{alignSelf:"flex-start"},children:"Notion"}),n.jsx("h2",{className:"gtmr-edit__about-h2",children:"Notion is the source of truth"}),n.jsxs("p",{children:["Two public Notion databases hold the dataset. ",n.jsx("b",{children:"Roles"})," is the big one — every JD with company, title, profile classification, status, posted date, and the 5-axis fit rating. ",n.jsx("b",{children:"People"})," is a parallel table for practitioners. A private Submissions DB collects user-submitted rows."]}),n.jsxs("ul",{className:"gtmr-edit__about-links",children:[n.jsx("li",{children:n.jsxs("a",{href:aIe,target:"_blank",rel:"noreferrer nofollow",children:["Roles DB · ",u(a)," rows"]})}),n.jsx("li",{children:n.jsxs("a",{href:iIe,target:"_blank",rel:"noreferrer nofollow",children:["People DB · ",u(i)," rows"]})})]})]}),n.jsxs("div",{className:"gtmr-edit__about-block",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",style:{alignSelf:"flex-start"},children:"Daily rebuild"}),n.jsx("h2",{className:"gtmr-edit__about-h2",children:"The site is rebuilt against Notion daily"}),n.jsxs("p",{children:["A Cloudflare Pages build runs once a day. Its prebuild step pulls every Roles + People row, rewrites the static ",n.jsx("code",{children:"/public/data"})," CSV + JSON files the site reads from, and mirrors the headline numbers back to a private Notion summary page. The Notion token lives in Cloudflare env vars only — no GitHub Action, no bot commits. User submissions land as Pending rows immediately but get folded in on the next daily rebuild."]})]}),n.jsxs("div",{className:"gtmr-edit__about-block",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",style:{alignSelf:"flex-start"},children:"Site"}),n.jsx("h2",{className:"gtmr-edit__about-h2",children:"Static-first, edge-deployed"}
7825),n.jsxs("p",{children:["A Vite + React app that pre-renders every ",n.jsx("code",{children:"/gtme/*"})," page at build time and serves the dataset as plain CSV / JSON from ",n.jsx("code",{children:"/data"}),". No backend, no database query at request time. The submission form is the one exception — a Cloudflare Pages Function that proxies a POST into the Notion Submissions DB."]})]}),n.jsxs("div",{className:"gtmr-edit__about-block",children:[n.jsx("span",{className:"gtmr-edit__eyebrow",style:{alignSelf:"flex-start"},children:"Caveats"}),n.jsx("h2",{className:"gtmr-edit__about-h2",children:"What this isn't"}),n.jsxs("p",{children:["Not original research and not comprehensive — an aggregated slice biased toward English-language postings, US/EU/remote roles, and surfaces Exa indexes well. The 5-axis ratings are keyword-mined heuristics; comp is quoted verbatim from the JD when present, blank when not. Nothing is human-reviewed. Spot something off?"," ",n.jsx("a",{href:"/gtme/submit",children:"/gtme/submit"})," and the next sweep picks it up."]})]})]})})]})}function oIe(){const{slug:e=""}=Ta();return n.jsx(yt,{to:`/gtme#${e}`,replace:!0})}function ch(){const{slug:e=""}=Ta();return n.jsx(yt,{to:xa(e),replace:!0})}function sIe(){const{token:e=""}=Ta();return n.jsx(yt,{to:`/gtme/practitioners/edit/${e}`,replace:!0})}function lIe(){const{slug:e=""}=Ta();return n.jsx(yt,{to:`/resources/skills/${e}`,replace:!0})}function cIe(){return n.jsxs(Voe,{children:[n.jsx(we,{path:"/",element:n.jsx(bce,{})}),n.jsx(we,{path:"/request-demo",element:n.jsx(Wce,{})}),n.jsx(we,{path:"/demo",element:n.jsx(yt,{to:"/request-demo",replace:!0})}),n.jsx(we,{path:"/tshirt-order",element:n.jsx(Vce,{})}),n.jsx(we,{path:"/AIE",element:n.jsx(Mce,{})}),n.jsx(we,{path:"/aie-artwork",element:n.jsx(yt,{to:"/AIE",replace:!0})}),n.jsx(we,{path:"/AIE-artwork",element:n.jsx(yt,{to:"/AIE",replace:!0})}),n.jsx(we,{path:"/about",element:n.jsx(Cce,{})}),n.jsx(we,{path:"/privacy-policy",element:n.jsx(yt,{to:"/legal/privacy-policy",replace:!0})}),n.jsx(we,{path:"/company",element:n.jsx(yt,{to:"/about",replace:!0})}),n.jsx(we,{path:"/features",element:n.jsx(yt,{to:"/platform",replace:!0})}),n.jsx(we,{path:"/app-features",element:n.jsx(yt,{to:"/platform",replace:!0})}),n.jsx(we,{path:"/contact",element:n.jsx(yt,{to:"/request-demo",replace:!0})}),n.jsx(we,{path:"/dashboard-features",element:n.jsx(yt,{to:"/platform/dashboard",replace:!0})}),n.jsx(we,{path:"/upside-platform",element:n.jsx(yt,{to:"/platform",replace:!0})}),n.jsx(we,{path:"/gtm-data-platform",element:n.jsx(yt,{to:"/platform/data-foundation",replace:!0})}),n.jsx(we,{path:"/manifesto",element:n.jsx(yt,{to:"/blog/agentic-gtm-is-here-your-data-isnt-ready-for-it",replace:!0})}),n.jsx(we,{path:"/blog",element:n.jsx(Kce,{})}),n.jsx(we,{path:"/blog/:slug",element:n.jsx(mde,{})}),n.jsx(we,{path:"/customers",element:n.jsx(Vde,{})}),n.jsx(we,{path:"/case-studies",element:n.jsx(yt,{to:"/customers",replace:!0})}),n.jsx(we,{path:"/case-studies/:slug",element:n.jsx(vde,{})}),n.jsx(we,{path:"/glossary",element:n.jsx(nue,{})}),n.jsx(we,{path:"/glossary/:slug",element:n.jsx(rue,{})}),n.jsx(we,{path:"/webinars",element:n.jsx(yue,{})}),n.jsx(we,{path:"/webinars/:slug",element:n.jsx(Aue,{})}),n.jsx(we,{path:"/events",element:n.jsx(wue,{})}),n.jsx(we,{path:"/events/:slug",element:n.jsx(Cue,{})}),n.jsx(we,{path:"/security",element:n.jsx(Mue,{})}),n.jsx(we,{path:"/legal/:slug",element:n.jsx(Oue,{})}),n.jsx(we,{path:"/interactive-demo",element:n.jsx(Pue,{})}),n.jsx(we,{path:"/pricing",element:n.jsx(Hge,{})}),n.jsx(we,{path:"/platform",element:n.jsx(Jfe,{})}),n.jsx(we,{path:"/platform/data-foundation",element:n.jsx(sge,{})}),n.jsx(we,{path:"/platform/dashboard",element:n.jsx(wge,{})}),n.jsx(we,{path:"/platform/deep-research",element:n.jsx(kge,{})}),n.jsx(we,{path:"/platform/pipedash",element:n.jsx(jge,{})}),n.jsx(we,{path:"/platform/mcp",element:n.jsx(Age,{})}),n.jsx(we,{path:"/platform/miniapps",element:n.jsx(zge,{})}),n.jsx(we,{path:"/platform/radiant",element:n.jsx(Lge,{})}),n.jsx(we,{path:"/platform/upside-agent",element:n.jsx(Uge,{})}),n.jsx(we,{path:"/platform/insight-engineering",element:n.jsx($ge,{})}),n.jsx(we,{path:"/use-cases",element:n.jsx(Vme,{})}),n.jsx(we,{path:"/use-cases/abm-optimization",element:n.jsx(yt,{to:"/use-cases/account-management",replace:!0})}),n.jsx(we,{path:"/use-cases/personalized-plays",element:n.jsx(yt,{to:"/use-cases/account-management",replace:!0})}),n.jsx(we,{path:"/use-cases/multi-touch-attribution",element:n.jsx(yt,{to:"/use-cases/revenue-attribution",replace:!0})}),n.jsx(we,{path:"/use-cases/internal-app-publishing",element:n.jsx(yt,{to:"/use-cases/gtm-apps",replace:!0})}),n.jsx(we,{path:"/use-cases/ai-data-querying",element:n.jsx(yt,{to:"/use-cases/ask-your-gtm-data",replace:!0})}),n.jsx(we,{path:"/use-cases/:slug",element:n.jsx(Hme,{})}),n.jsx(we,{path:"/for/:slug",element:n.jsx(afe,{})}),n.jsx(we,{path:"/resources/miniapp-examples",element:n.jsx(eye,{})}),n.jsx(we,{path:"/resources/miniapp-examples/:slug",element:n.jsx(tye,{})}),n.jsx(we,{path:"/skills",element:n.jsx(yt,{to:"/resources/skills",replace:!0})}),n.jsx(we,{path:"/skills/:slug",element:n.jsx(lIe,{})}),n.jsx(we,{path:"/resources/skills",element:n.jsx(rye,{})}),n.jsx(we,{path:"/resources/skills/:slug",element:n.jsx(Jbe,{})}),n.jsx(we,{path:"/resources/how-to-attract-a-dragon",element:n.jsx(uve,{})}),n.jsx(we,{path:"/book",element:n.jsx(yt,{to:"/resources/how-to-attract-a-dragon",replace:!0})}),n.jsx(we,{path:"/dragon",element:n.jsx(yt,{to:"/resources/how-to-attract-a-dragon",replace:!0})}),n.jsx(we,{path:"/miniapps-examples",element:n.jsx(yt,{to:"/resources/miniapp-examples",replace:!0})}),n.jsx(we,{path:"/miniapps-examples/:slug",element:n.jsx(ch,{})}),n.jsx(we,{path:"/miniapp-examples",element:n.jsx(yt,{to:"/resources/miniapp-examples",replace:!0})}),n.jsx(we,{path:"/miniapp-examples/:slug",element:n.jsx(ch,{})}),n.jsx(we,{path:"/miniapps",element:n.jsx(yt,{to:"/resources/miniapp-examples",replace:!0})}),n.jsx(we,{path:"/miniapps/:slug",element:n.jsx(ch,{})}),n.jsx(we,{path:"/resources/miniapps",element:n.jsx(yt,{to:"/resources/miniapp-examples",replace:!0})}),n.jsx(we,{path:"/resources/miniapps/:slug",element:n.jsx(ch,{})}),n.jsx(we,{path:"/resources/app-examples",element:n.jsx(yt,{to:"/resources/miniapp-examples",replace:!0})}),n.jsx(we,{path:"/resources/app-examples/:slug",element:n.jsx(ch,{})}),n.jsx(we,{path:"/app-examples",element:n.jsx(yt,{to:"/resources/miniapp-examples",replace:!0})}),n.jsx(we,{path:"/app-examples/:slug",element:n.jsx(ch,{})}),n.jsx(we,{path:"/gtme",element:n.jsx(Tq,{})}),n.jsx(we,{path:"/gtme/profiles",element:n.jsx(Tq,{})}),n.jsx(we,{path:"/gtme/profiles/:slug",element:n.jsx(oIe,{})}),n.jsx(we,{path:"/gtme/trends",element:n.jsx(P9e,{})}),n.jsx(we,{path:"/gtme/adoption-ladder",element:n.jsx(W9e,{})}),n.jsx(we,{path:"/gtme/jobs",element:n.jsx(U9e,{})}),n.jsx(we,{path:"/gtme/practitioners/edit/:token",element:n.jsx(eIe,{})}),n.jsx(we,{path:"/gtme/edit/:token",element:n.jsx(sIe,{})}),n.jsx(we,{path:"/gtme/practitioners",element:n.jsx($9e,{})}),n.jsx(we,{path:"/gtme/events",element:n.jsx(tIe,{})}),n.jsx(we,{path:"/gtme/submit",element:n.jsx(G9e,{})}),n.jsx(we,{path:"/gtme/about",element:n.jsx(rIe,{})}),n.jsx(we,{path:"/lp/b2b-marketing-attribution",element:n.jsx(zve,{})}),n.jsx(we,{path:"/lp/ai-gtm-analytics",element:n.jsx(a0e,{})}),n.jsx(we,{path:"/lp/revenue-intelligence-platform",element:n.jsx(h0e,{})}),n.jsx(we,{path:"*",element:n.jsx(VG,{})})]})}const dIe=new $re;function uIe(){const{pathname:e,hash:t}=Kn();return M.useEffect(()=>{t?setTimeout(()=>{const a=document.getElementById(t.substring(1));a&&a.scrollIntoView({behavior:"smooth"})},100):window.scrollTo(0,0)},[e,t]),null}function hIe(){return nle(),null}const pIe=()=>n.jsx(oG,{children:n.jsx(Gre,{client:dIe,children:n.jsxs(pre,{children:[n.jsx(nae,{}),n.jsx(Pae,{}),n.jsxs(xse,{children:[n.jsx(uIe,{}),n.jsx(hIe,{}),n.jsx(lle,{}),n.jsx(cIe,{})]})]})})});mee.createRoot(document.getElementById("root")).render(n.jsx(pIe,{}));

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.