PageSourceSearch

https://hunterandbard.com/assets/index-ReD1RTaB.js

js hunterandbard.com collected 2026-10-03 22:24:03 UTC 1,754,895 bytes, 4,660 lines download raw bytes

1const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/About-D4B_53Ec.js","assets/PerceptionFormula-BIeahOaX.js","assets/shira-abel-headshot-C9q9_Zma.js","assets/book-open-BVe-8jAy.js","assets/clock-BnqigOAi.js","assets/lightbulb-BcNxsDbI.js","assets/useInView-CE56BsiD.js","assets/Icon-BKomMwgD.js","assets/index-DaTIB5RR.js","assets/index-CBpH4HKC.js","assets/Cohort-TUspyj90.js","assets/ProductCrossSell-DOGk_RoU.js","assets/users-CLjIJjYw.js","assets/globe-DwgXeIs_.js","assets/calendar-DoetYpUJ.js","assets/trophy-C2i-2AgG.js","assets/dollar-sign-DsBFO7OV.js","assets/whatyouget-design-system-CifHAvQg.js","assets/target-DxwUdrK7.js","assets/FinalCTA-Cv-EqzWU.js","assets/BlurImage-BIVWQe_3.js","assets/zap-BUFPBEcd.js","assets/trending-up-D99fSeeR.js","assets/file-text-CT3YxeFh.js","assets/message-square-CCp0YNhP.js","assets/use-mobile-CMEWQL28.js","assets/building-2-DnjrPowx.js","assets/star-D0rZW1la.js","assets/message-circle-DYym62v6.js","assets/ivan-belokhvostikov-Dw0O3Vdr.js","assets/TrustBar-BFmmv5By.js","assets/forward-ukqivG3Y.js","assets/Sprint-aw5Rl7Sk.js","assets/tina-tran-DqOihzfP.js","assets/MarketingStrategy-D3288THx.js","assets/CTASection-CYYxy1gY.js","assets/ScaleStack-BYoUWx5P.js","assets/rocket-CkScJqQ4.js","assets/paulius-rakauskas-tLD_0eKr.js","assets/DesignStrategy-CEesJo6R.js","assets/palette-C7ew5Woz.js","assets/layers-kSZjdOr1.js","assets/WebsiteDesign-B-ZteI9k.js","assets/panels-top-left-TR11iK1d.js","assets/RevenueEnablement-DIHy1XEB.js","assets/Intensive-DkU6SJF-.js","assets/Resources-DCwnQSH4.js","assets/youtubeShorts-DZ8ba_cY.js","assets/play-DeimV3Br.js","assets/BlogPost-DhGXfJaZ.js","assets/Podcast-BYNAGcUY.js","assets/chevron-left-Bmp25J0v.js","assets/VlogPost-BaDcdIXf.js","assets/ScaleFramework-Dm-s1gr-.js","assets/circle-check-DBqxQaEN.js","assets/CaseStudy-C8-CgMnd.js","assets/john-pedroza-X38sO1wc.js","assets/Admin-ARlZ0lrj.js","assets/HomeArchived-SDz7dlmG.js","assets/HowWeWorkSection-rch77wKb.js","assets/dan-barak-Dq2yPwgb.js","assets/plus-J4iklc58.js","assets/HomeShira-DKDht7AI.js","assets/HomeCrumpledPaper-CokGKHOq.js","assets/Programs-ItHQU_KP.js","assets/Engagements-BlM_f6KM.js","assets/Outreach-D8gDYeS2.js","assets/table-MC0dBUSP.js","assets/parseISO-DibT3oeX.js","assets/StyleGuide-D8sQnUZd.js","assets/tabs-CLUAqzkr.js","assets/Contact-DmIYUlnC.js","assets/checkbox-jug0i9Vu.js","assets/MartiniPipeline-ChsXMBju.js","assets/hb-logo-full-gZ4YxysW.js","assets/download-DAhQ5eu8.js","assets/TalkLeads-BHKh6-A-.js","assets/Visitors-DMCOmg5v.js","assets/AboutArchived-CbMxIXVp.js","assets/CheckoutReturn-lcz5Vb0K.js","assets/Audit-94GeNefP.js","assets/ThankYou-mV1WnY0o.js","assets/Intake-jcSAU_Q5.js"])))=>i.map(i=>d[i]);
2var wS=Object.defineProperty;var lf=t=>{throw TypeError(t)};var bS=(t,e,n)=>e in t?wS(t,e,{enumerable:!0,configurable:!0,writable:!0,value:n}):t[e]=n;var no=(t,e,n)=>bS(t,typeof e!="symbol"?e+"":e,n),ku=(t,e,n)=>e.has(t)||lf("Cannot "+n);var R=(t,e,n)=>(ku(t,e,"read from private field"),n?n.call(t):e.get(t)),Te=(t,e,n)=>e.has(t)?lf("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n),ge=(t,e,n,o)=>(ku(t,e,"write to private field"),o?o.call(t,n):e.set(t,n),n),ct=(t,e,n)=>(ku(t,e,"access private method"),n);var Al=(t,e,n,o)=>({set _(r){ge(t,e,r,n)},get _(){return R(t,e,o)}});function vS(t,e){for(var n=0;n<e.length;n++){const o=e[n];if(typeof o!="string"&&!Array.isArray(o)){for(const r in o)if(r!=="default"&&!(r in t)){const a=Object.getOwnPropertyDescriptor(o,r);a&&Object.defineProperty(t,r,a.get?a:{enumerable:!0,get:()=>o[r]})}}}return Object.freeze(Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}))}(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))o(r);new MutationObserver(r=>{for(const a of r)if(a.type==="childList")for(const s of a.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&o(s)}).observe(document,{childList:!0,subtree:!0});function n(r){const a={};return r.integrity&&(a.integrity=r.integrity),r.referrerPolicy&&(a.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?a.credentials="include":r.crossOrigin==="anonymous"?a.credentials="omit":a.credentials="same-origin",a}function o(r){if(r.ep)return;r.ep=!0;const a=n(r);fetch(r.href,a)}})();function ll(t){return t&&t.__esModule&&Object.prototype.hasOwnProperty.call(t,"default")?t.default:t}var Fb={exports:{}},Eh={},Hb={exports:{}},be={};
vendor: 9,346 bytes, lines 2-26
2/**
3 * @license React
4 * react.production.min.js
5 *
6 * Copyright (c) Facebook, Inc. and its affiliates.
7 *
8 * This source code is licensed under the MIT license found in the
9 * LICENSE file in the root directory of this source tree.
10 */var cl=Symbol.for("react.element"),kS=Symbol.for("react.portal"),xS=Symbol.for("react.fragment"),SS=Symbol.for("react.strict_mode"),TS=Symbol.for("react.profiler"),AS=Symbol.for("react.provider"),_S=Symbol.for("react.context"),CS=Symbol.for("react.forward_ref"),ES=Symbol.for("react.suspense"),IS=Symbol.for("react.memo"),PS=Symbol.for("react.lazy"),cf=Symbol.iterator;function jS(t){return t===null||typeof t!="object"?null:(t=cf&&t[cf]||t["@@iterator"],typeof t=="function"?t:null)}var zb={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},$b=Object.assign,Ub={};function ks(t,e,n){this.props=t,this.context=e,this.refs=Ub,this.updater=n||zb}ks.prototype.isReactComponent={};ks.prototype.setState=function(t,e){if(typeof t!="object"&&typeof t!="function"&&t!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,t,e,"setState")};ks.prototype.forceUpdate=function(t){this.updater.enqueueForceUpdate(this,t,"forceUpdate")};function Yb(){}Yb.prototype=ks.prototype;function yg(t,e,n){this.props=t,this.context=e,this.refs=Ub,this.updater=n||zb}var wg=yg.prototype=new Yb;wg.constructor=yg;$b(wg,ks.prototype);wg.isPureReactComponent=!0;var hf=Array.isArray,Vb=Object.prototype.hasOwnProperty,bg={current:null},Gb={key:!0,ref:!0,__self:!0,__source:!0};function Kb(t,e,n){var o,r={},a=null,s=null;if(e!=null)for(o in e.ref!==void 0&&(s=e.ref),e.key!==void 0&&(a=""+e.key),e)Vb.call(e,o)&&!Gb.hasOwnProperty(o)&&(r[o]=e[o]);var i=arguments.length-2;if(i===1)r.children=n;else if(1<i){for(var l=Array(i),c=0;c<i;c++)l[c]=arguments[c+2];r.children=l}if(t&&t.defaultProps)for(o in i=t.defaultProps,i)r[o]===void 0&&(r[o]=i[o]);return{$$typeof:cl,type:t,key:a,ref:s,props:r,_owner:bg.current}}function BS(t,e){return{$$typeof:cl,type:t.type,key:e,ref:t.ref,props:t.props,_owner:t._owner}}function vg(t){return typeof t=="object"&&t!==null&&t.$$typeof===cl}function OS(t){var e={"=":"=0",":":"=2"};return"$"+t.replace(/[=:]/g,function(n){return e[n]})}var uf=/\/+/g;function xu(t,e){return typeof t=="object"&&t!==null&&t.key!=null?OS(""+t.key):e.toString(36)}function lc(t,e,n,o,r){var a=typeof t;(a==="undefined"||a==="boolean")&&(t=null);var s=!1;if(t===null)s=!0;else switch(a){case"string":case"number":s=!0;break;case"object":switch(t.$$typeof){case cl:case kS:s=!0}}if(s)return s=t,r=r(s),t=o===""?"."+xu(s,0):o,hf(r)?(n="",t!=null&&(n=t.replace(uf,"$&/")+"/"),lc(r,e,n,"",function(c){return c})):r!=null&&(vg(r)&&(r=BS(r,n+(!r.key||s&&s.key===r.key?"":(""+r.key).replace(uf,"$&/")+"/")+t)),e.push(r)),1;if(s=0,o=o===""?".":o+":",hf(t))for(var i=0;i<t.length;i++){a=t[i];var l=o+xu(a,i);s+=lc(a,e,n,l,r)}else if(l=jS(t),typeof l=="function")for(t=l.call(t),i=0;!(a=t.next()).done;)a=a.value,l=o+xu(a,i++),s+=lc(a,e,n,l,r);else if(a==="object")throw e=String(t),Error("Objects are not valid as a React child (found: "+(e==="[object Object]"?"object with keys {"+Object.keys(t).join(", ")+"}":e)+"). If you meant to render a collection of children, use an array instead.");return s}function _l(t,e,n){if(t==null)return t;var o=[],r=0;return lc(t,o,"","",function(a){return e.call(n,a,r++)}),o}function MS(t){if(t._status===-1){var e=t._result;e=e(),e.then(function(n){(t._status===0||t._status===-1)&&(t._status=1,t._result=n)},function(n){(t._status===0||t._status===-1)&&(t._status=2,t._result=n)}),t._status===-1&&(t._status=0,t._result=e)}if(t._status===1)return t._result.default;throw t._result}var xt={current:null},cc={transition:null},RS={ReactCurrentDispatcher:xt,ReactCurrentBatchConfig:cc,ReactCurrentOwner:bg};function Jb(){throw Error("act(...) is not supported in production builds of React.")}be.Children={map:_l,forEach:function(t,e,n){_l(t,function(){e.apply(this,arguments)},n)},count:function(t){var e=0;return _l(t,function(){e++}),e},toArray:function(t){return _l(t,function(e){return e})||[]},only:function(t){if(!vg(t))throw Error("React.Children.only expected to receive a single React element child.");return t}};be.Component=ks;be.Fragment=xS;be.Profiler=TS;be.PureComponent=yg;be.StrictMode=SS;be.Suspense=ES;be.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=RS;be.act=Jb;be.cloneElement=function(t,e,n){if(t==null)throw Error("React.cloneElement(...): The argument must be a React element, but you passed "+t+".");var o=$b({},t.props),r=t.key,a=t.ref,s=t._owner;if(e!=null){if(e.ref!==void 0&&(a=e.ref,s=bg.current),e.key!==void 0&&(r=""+e.key),t.type&&t.type.defaultProps)var i=t.type.defaultProps;for(l in e)Vb.call(e,l)&&!Gb.hasOwnProperty(l)&&(o[l]=e[l]===void 0&&i!==void 0?i[l]:e[l])}var l=arguments.length-2;if(l===1)o.children=n;else if(1<l){i=Array(l);for(var c=0;c<l;c++)i[c]=arguments[c+2];o.children=i}return{$$typeof:cl,type:t.type,key:r,ref:a,props:o,_owner:s}};be.createContext=function(t){return t={$$typeof:_S,_currentValue:t,_currentValue2:t,_threadCount:0,Provider:null,Consumer:null,_defaultValue:null,_globalName:null},t.Provider={$$typeof:AS,_context:t},t.Consumer=t};be.createElement=Kb;be.createFactory=function(t){var e=Kb.bind(null,t);return e.type=t,e};be.createRef=function(){return{current:null}};be.forwardRef=function(t){return{$$typeof:CS,render:t}};be.isValidElement=vg;be.lazy=function(t){return{$$typeof:PS,_payload:{_status:-1,_result:t},_init:MS}};be.memo=function(t,e){return{$$typeof:IS,type:t,compare:e===void 0?null:e}};be.startTransition=function(t){var e=cc.transition;cc.transition={};try{t()}finally{cc.transition=e}};be.unstable_act=Jb;be.useCallback=function(t,e){return xt.current.useCallback(t,e)};be.useContext=function(t){return xt.current.useContext(t)};be.useDebugValue=function(){};be.useDeferredValue=function(t){return xt.current.useDeferredValue(t)};be.useEffect=function(t,e){return xt.current.useEffect(t,e)};be.useId=function(){return xt.current.useId()};be.useImperativeHandle=function(t,e,n){return xt.current.useImperativeHandle(t,e,n)};be.useInsertionEffect=function(t,e){return xt.current.useInsertionEffect(t,e)};be.useLayoutEffect=function(t,e){return xt.current.useLayoutEffect(t,e)};be.useMemo=function(t,e){return xt.current.useMemo(t,e)};be.useReducer=function(t,e,n){return xt.current.useReducer(t,e,n)};be.useRef=function(t){return xt.current.useRef(t)};be.useState=function(t){return xt.current.useState(t)};be.useSyncExternalStore=function(t,e,n){return xt.current.useSyncExternalStore(t,e,n)};be.useTransition=function(){return xt.current.useTransition()};be.version="18.3.1";Hb.exports=be;var f=Hb.exports;const M=ll(f),kg=vS({__proto__:null,default:M},[f]);/**
11 * @license React
12 * react-jsx-runtime.production.min.js
13 *
14 * Copyright (c) Facebook, Inc. and its affiliates.
15 *
16 * This source code is licensed under the MIT license found in the
17 * LICENSE file in the root directory of this source tree.
18 */var NS=f,LS=Symbol.for("react.element"),DS=Symbol.for("react.fragment"),WS=Object.prototype.hasOwnProperty,qS=NS.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,FS={key:!0,ref:!0,__self:!0,__source:!0};function Qb(t,e,n){var o,r={},a=null,s=null;n!==void 0&&(a=""+n),e.key!==void 0&&(a=""+e.key),e.ref!==void 0&&(s=e.ref);for(o in e)WS.call(e,o)&&!FS.hasOwnProperty(o)&&(r[o]=e[o]);if(t&&t.defaultProps)for(o in e=t.defaultProps,e)r[o]===void 0&&(r[o]=e[o]);return{$$typeof:LS,type:t,key:a,ref:s,props:r,_owner:qS.current}}Eh.Fragment=DS;Eh.jsx=Qb;Eh.jsxs=Qb;Fb.exports=Eh;var h=Fb.exports,Zb={exports:{}},$t={},Xb={exports:{}},ev={};/**
19 * @license React
20 * scheduler.production.min.js
21 *
22 * Copyright (c) Facebook, Inc. and its affiliates.
23 *
24 * This source code is licensed under the MIT license found in the
25 * LICENSE file in the root directory of this source tree.
26 */(function(t){function e(I,j){var H=I.length;I.push(j);e:for(;0<H;){var Z=H-1>>>1,E=I[Z];if(0<r(E,j))I[Z]=j,I[H]=E,H=Z;else break e}}function n(I){return I.length===0?null:I[0]}function o(I){if(I.length===0)return null;var j=I[0],H=I.pop();if(H!==j){I[0]=H;e:for(var Z=0,E=I.length,D=E>>>1;Z<D;){var F=2*(Z+1)-1,$=I[F],re=F+1,N=I[re];if(0>r($,H))re<E&&0>r(N,$)?(I[Z]=N,I[re]=H,Z=re):(I[Z]=$,I[F]=H,Z=F);else if(re<E&&0>r(N,H))I[Z]=N,I[re]=H,Z=re;else break e}}return j}function r(I,j){var H=I.sortIndex-j.sortIndex;return H!==0?H:I.id-j.id}if(typeof performance=="object"&&typeof performance.now=="function"){var a=performance;t.unstable_now=function(){return a.now()}}else{var s=Date,i=s.now();t.unstable_now=function(){return s.now()-i}}var l=[],c=[],u=1,d=null,g=3,p=!1,v=!1,y=!1,k=typeof setTimeout=="function"?setTimeout:null,w=typeof clearTimeout=="function"?clearTimeout:null,m=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function b(I){for(var j=n(c);j!==null;){if(j.callback===null)o(c);else if(j.startTime<=I)o(c),j.sortIndex=j.expirationTime,e(l,j);else break;j=n(c)}}function x(I){if(y=!1,b(I),!v)if(n(l)!==null)v=!0,U(S);else{var j=n(c);
vendor: 9,318 bytes, lines 26-35
26j!==null&&K(x,j.startTime-I)}}function S(I,j){v=!1,y&&(y=!1,w(_),_=-1),p=!0;var H=g;try{for(b(j),d=n(l);d!==null&&(!(d.expirationTime>j)||I&&!L());){var Z=d.callback;if(typeof Z=="function"){d.callback=null,g=d.priorityLevel;var E=Z(d.expirationTime<=j);j=t.unstable_now(),typeof E=="function"?d.callback=E:d===n(l)&&o(l),b(j)}else o(l);d=n(l)}if(d!==null)var D=!0;else{var F=n(c);F!==null&&K(x,F.startTime-j),D=!1}return D}finally{d=null,g=H,p=!1}}var T=!1,A=null,_=-1,C=5,P=-1;function L(){return!(t.unstable_now()-P<C)}function O(){if(A!==null){var I=t.unstable_now();P=I;var j=!0;try{j=A(!0,I)}finally{j?Y():(T=!1,A=null)}}else T=!1}var Y;if(typeof m=="function")Y=function(){m(O)};else if(typeof MessageChannel<"u"){var B=new MessageChannel,V=B.port2;B.port1.onmessage=O,Y=function(){V.postMessage(null)}}else Y=function(){k(O,0)};function U(I){A=I,T||(T=!0,Y())}function K(I,j){_=k(function(){I(t.unstable_now())},j)}t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(I){I.callback=null},t.unstable_continueExecution=function(){v||p||(v=!0,U(S))},t.unstable_forceFrameRate=function(I){0>I||125<I?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):C=0<I?Math.floor(1e3/I):5},t.unstable_getCurrentPriorityLevel=function(){return g},t.unstable_getFirstCallbackNode=function(){return n(l)},t.unstable_next=function(I){switch(g){case 1:case 2:case 3:var j=3;break;default:j=g}var H=g;g=j;try{return I()}finally{g=H}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=function(){},t.unstable_runWithPriority=function(I,j){switch(I){case 1:case 2:case 3:case 4:case 5:break;default:I=3}var H=g;g=I;try{return j()}finally{g=H}},t.unstable_scheduleCallback=function(I,j,H){var Z=t.unstable_now();switch(typeof H=="object"&&H!==null?(H=H.delay,H=typeof H=="number"&&0<H?Z+H:Z):H=Z,I){case 1:var E=-1;break;case 2:E=250;break;case 5:E=1073741823;break;case 4:E=1e4;break;default:E=5e3}return E=H+E,I={id:u++,callback:j,priorityLevel:I,startTime:H,expirationTime:E,sortIndex:-1},H>Z?(I.sortIndex=H,e(c,I),n(l)===null&&I===n(c)&&(y?(w(_),_=-1):y=!0,K(x,H-Z))):(I.sortIndex=E,e(l,I),v||p||(v=!0,U(S))),I},t.unstable_shouldYield=L,t.unstable_wrapCallback=function(I){var j=g;return function(){var H=g;g=j;try{return I.apply(this,arguments)}finally{g=H}}}})(ev);Xb.exports=ev;var HS=Xb.exports;/**
27 * @license React
28 * react-dom.production.min.js
29 *
30 * Copyright (c) Facebook, Inc. and its affiliates.
31 *
32 * This source code is licensed under the MIT license found in the
33 * LICENSE file in the root directory of this source tree.
34 */var zS=f,Ht=HS;function W(t){for(var e="https://reactjs.org/docs/error-decoder.html?invariant="+t,n=1;n<arguments.length;n++)e+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+t+"; visit "+e+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var tv=new Set,Si={};function na(t,e){ss(t,e),ss(t+"Capture",e)}function ss(t,e){for(Si[t]=e,t=0;t<e.length;t++)tv.add(e[t])}var fo=!(typeof window>"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),Id=Object.prototype.hasOwnProperty,$S=/^[: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]*$/,df={},pf={};function US(t){return Id.call(pf,t)?!0:Id.call(df,t)?!1:$S.test(t)?pf[t]=!0:(df[t]=!0,!1)}function YS(t,e,n,o){if(n!==null&&n.type===0)return!1;switch(typeof e){case"function":case"symbol":return!0;case"boolean":return o?!1:n!==null?!n.acceptsBooleans:(t=t.toLowerCase().slice(0,5),t!=="data-"&&t!=="aria-");default:return!1}}function VS(t,e,n,o){if(e===null||typeof e>"u"||YS(t,e,n,o))return!0;if(o)return!1;if(n!==null)switch(n.type){case 3:return!e;case 4:return e===!1;case 5:return isNaN(e);case 6:return isNaN(e)||1>e}return!1}function St(t,e,n,o,r,a,s){this.acceptsBooleans=e===2||e===3||e===4,this.attributeName=o,this.attributeNamespace=r,this.mustUseProperty=n,this.propertyName=t,this.type=e,this.sanitizeURL=a,this.removeEmptyString=s}var lt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(t){lt[t]=new St(t,0,!1,t,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(t){var e=t[0];lt[e]=new St(e,1,!1,t[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(t){lt[t]=new St(t,2,!1,t.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(t){lt[t]=new St(t,2,!1,t,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(t){lt[t]=new St(t,3,!1,t.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(t){lt[t]=new St(t,3,!0,t,null,!1,!1)});["capture","download"].forEach(function(t){lt[t]=new St(t,4,!1,t,null,!1,!1)});["cols","rows","size","span"].forEach(function(t){lt[t]=new St(t,6,!1,t,null,!1,!1)});["rowSpan","start"].forEach(function(t){lt[t]=new St(t,5,!1,t.toLowerCase(),null,!1,!1)});var xg=/[\-:]([a-z])/g;function Sg(t){return t[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(t){var e=t.replace(xg,Sg);lt[e]=new St(e,1,!1,t,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(t){var e=t.replace(xg,Sg);lt[e]=new St(e,1,!1,t,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(t){var e=t.replace(xg,Sg);lt[e]=new St(e,1,!1,t,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(t){lt[t]=new St(t,1,!1,t.toLowerCase(),null,!1,!1)});lt.xlinkHref=new St("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(t){lt[t]=new St(t,1,!1,t.toLowerCase(),null,!0,!0)});function Tg(t,e,n,o){var r=lt.hasOwnProperty(e)?lt[e]:null;(r!==null?r.type!==0:o||!(2<e.length)||e[0]!=="o"&&e[0]!=="O"||e[1]!=="n"&&e[1]!=="N")&&(VS(e,n,r,o)&&(n=null),o||r===null?US(e)&&(n===null?t.removeAttribute(e):t.setAttribute(e,""+n)):r.mustUseProperty?t[r.propertyName]=n===null?r.type===3?!1:"":n:(e=r.attributeName,o=r.attributeNamespace,n===null?t.removeAttribute(e):(r=r.type,n=r===3||r===4&&n===!0?"":""+n,o?t.setAttributeNS(o,e,n):t.setAttribute(e,n))))}var So=zS.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,Cl=Symbol.for("react.element"),_a=Symbol.for("react.portal"),Ca=Symbol.for("react.fragment"),Ag=Symbol.for("react.strict_mode"),Pd=Symbol.for("react.profiler"),nv=Symbol.for("react.provider"),ov=Symbol.for("react.context"),_g=Symbol.for("react.forward_ref"),jd=Symbol.for("react.suspense"),Bd=Symbol.for("react.suspense_list"),Cg=Symbol.for("react.memo"),No=Symbol.for("react.lazy"),rv=Symbol.for("react.offscreen"),gf=Symbol.iterator;function Ns(t){return t===null||typeof t!="object"?null:(t=gf&&t[gf]||t["@@iterator"],typeof t=="function"?t:null)}var He=Object.assign,Su;function Zs(t){if(Su===void 0)try{throw Error()}catch(n){var e=n.stack.trim().match(/\n( *(at )?)/);Su=e&&e[1]||""}return`
35`+Su+t}var Tu=!1;function Au(t,e){if(!t||Tu)return"";Tu=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(e)if(e=function(){throw Error()},Object.defineProperty(e.prototype,"props",{set:function(){throw Error()}}),typeof Reflect=="object"&&Reflect.construct){try{Reflect.construct(e,[])}catch(c){var o=c}Reflect.construct(t,[],e)}else{try{e.call()}catch(c){o=c}t.call(e.prototype)}else{try{throw Error()}catch(c){o=c}t()}}
vendor: 16,737 bytes, lines 35-38
35catch(c){if(c&&o&&typeof c.stack=="string"){for(var r=c.stack.split(`
36`),a=o.stack.split(`
37`),s=r.length-1,i=a.length-1;1<=s&&0<=i&&r[s]!==a[i];)i--;for(;1<=s&&0<=i;s--,i--)if(r[s]!==a[i]){if(s!==1||i!==1)do if(s--,i--,0>i||r[s]!==a[i]){var l=`
38`+r[s].replace(" at new "," at ");return t.displayName&&l.includes("<anonymous>")&&(l=l.replace("<anonymous>",t.displayName)),l}while(1<=s&&0<=i);break}}}finally{Tu=!1,Error.prepareStackTrace=n}return(t=t?t.displayName||t.name:"")?Zs(t):""}function GS(t){switch(t.tag){case 5:return Zs(t.type);case 16:return Zs("Lazy");case 13:return Zs("Suspense");case 19:return Zs("SuspenseList");case 0:case 2:case 15:return t=Au(t.type,!1),t;case 11:return t=Au(t.type.render,!1),t;case 1:return t=Au(t.type,!0),t;default:return""}}function Od(t){if(t==null)return null;if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t;switch(t){case Ca:return"Fragment";case _a:return"Portal";case Pd:return"Profiler";case Ag:return"StrictMode";case jd:return"Suspense";case Bd:return"SuspenseList"}if(typeof t=="object")switch(t.$$typeof){case ov:return(t.displayName||"Context")+".Consumer";case nv:return(t._context.displayName||"Context")+".Provider";case _g:var e=t.render;return t=t.displayName,t||(t=e.displayName||e.name||"",t=t!==""?"ForwardRef("+t+")":"ForwardRef"),t;case Cg:return e=t.displayName||null,e!==null?e:Od(t.type)||"Memo";case No:e=t._payload,t=t._init;try{return Od(t(e))}catch{}}return null}function KS(t){var e=t.type;switch(t.tag){case 24:return"Cache";case 9:return(e.displayName||"Context")+".Consumer";case 10:return(e._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return t=e.render,t=t.displayName||t.name||"",e.displayName||(t!==""?"ForwardRef("+t+")":"ForwardRef");case 7:return"Fragment";case 5:return e;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Od(e);case 8:return e===Ag?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e}return null}function lr(t){switch(typeof t){case"boolean":case"number":case"string":case"undefined":return t;case"object":return t;default:return""}}function av(t){var e=t.type;return(t=t.nodeName)&&t.toLowerCase()==="input"&&(e==="checkbox"||e==="radio")}function JS(t){var e=av(t)?"checked":"value",n=Object.getOwnPropertyDescriptor(t.constructor.prototype,e),o=""+t[e];if(!t.hasOwnProperty(e)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var r=n.get,a=n.set;return Object.defineProperty(t,e,{configurable:!0,get:function(){return r.call(this)},set:function(s){o=""+s,a.call(this,s)}}),Object.defineProperty(t,e,{enumerable:n.enumerable}),{getValue:function(){return o},setValue:function(s){o=""+s},stopTracking:function(){t._valueTracker=null,delete t[e]}}}}function El(t){t._valueTracker||(t._valueTracker=JS(t))}function sv(t){if(!t)return!1;var e=t._valueTracker;if(!e)return!0;var n=e.getValue(),o="";return t&&(o=av(t)?t.checked?"true":"false":t.value),t=o,t!==n?(e.setValue(t),!0):!1}function Pc(t){if(t=t||(typeof document<"u"?document:void 0),typeof t>"u")return null;try{return t.activeElement||t.body}catch{return t.body}}function Md(t,e){var n=e.checked;return He({},e,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??t._wrapperState.initialChecked})}function mf(t,e){var n=e.defaultValue==null?"":e.defaultValue,o=e.checked!=null?e.checked:e.defaultChecked;n=lr(e.value!=null?e.value:n),t._wrapperState={initialChecked:o,initialValue:n,controlled:e.type==="checkbox"||e.type==="radio"?e.checked!=null:e.value!=null}}function iv(t,e){e=e.checked,e!=null&&Tg(t,"checked",e,!1)}function Rd(t,e){iv(t,e);var n=lr(e.value),o=e.type;if(n!=null)o==="number"?(n===0&&t.value===""||t.value!=n)&&(t.value=""+n):t.value!==""+n&&(t.value=""+n);else if(o==="submit"||o==="reset"){t.removeAttribute("value");return}e.hasOwnProperty("value")?Nd(t,e.type,n):e.hasOwnProperty("defaultValue")&&Nd(t,e.type,lr(e.defaultValue)),e.checked==null&&e.defaultChecked!=null&&(t.defaultChecked=!!e.defaultChecked)}function ff(t,e,n){if(e.hasOwnProperty("value")||e.hasOwnProperty("defaultValue")){var o=e.type;if(!(o!=="submit"&&o!=="reset"||e.value!==void 0&&e.value!==null))return;e=""+t._wrapperState.initialValue,n||e===t.value||(t.value=e),t.defaultValue=e}n=t.name,n!==""&&(t.name=""),t.defaultChecked=!!t._wrapperState.initialChecked,n!==""&&(t.name=n)}function Nd(t,e,n){(e!=="number"||Pc(t.ownerDocument)!==t)&&(n==null?t.defaultValue=""+t._wrapperState.initialValue:t.defaultValue!==""+n&&(t.defaultValue=""+n))}var Xs=Array.isArray;function Wa(t,e,n,o){if(t=t.options,e){e={};for(var r=0;r<n.length;r++)e["$"+n[r]]=!0;for(n=0;n<t.length;n++)r=e.hasOwnProperty("$"+t[n].value),t[n].selected!==r&&(t[n].selected=r),r&&o&&(t[n].defaultSelected=!0)}else{for(n=""+lr(n),e=null,r=0;r<t.length;r++){if(t[r].value===n){t[r].selected=!0,o&&(t[r].defaultSelected=!0);return}e!==null||t[r].disabled||(e=t[r])}e!==null&&(e.selected=!0)}}function Ld(t,e){if(e.dangerouslySetInnerHTML!=null)throw Error(W(91));return He({},e,{value:void 0,defaultValue:void 0,children:""+t._wrapperState.initialValue})}function yf(t,e){var n=e.value;if(n==null){if(n=e.children,e=e.defaultValue,n!=null){if(e!=null)throw Error(W(92));if(Xs(n)){if(1<n.length)throw Error(W(93));n=n[0]}e=n}e==null&&(e=""),n=e}t._wrapperState={initialValue:lr(n)}}function lv(t,e){var n=lr(e.value),o=lr(e.defaultValue);n!=null&&(n=""+n,n!==t.value&&(t.value=n),e.defaultValue==null&&t.defaultValue!==n&&(t.defaultValue=n)),o!=null&&(t.defaultValue=""+o)}function wf(t){var e=t.textContent;e===t._wrapperState.initialValue&&e!==""&&e!==null&&(t.value=e)}function cv(t){switch(t){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function Dd(t,e){return t==null||t==="http://www.w3.org/1999/xhtml"?cv(e):t==="http://www.w3.org/2000/svg"&&e==="foreignObject"?"http://www.w3.org/1999/xhtml":t}var Il,hv=function(t){return typeof MSApp<"u"&&MSApp.execUnsafeLocalFunction?function(e,n,o,r){MSApp.execUnsafeLocalFunction(function(){return t(e,n,o,r)})}:t}(function(t,e){if(t.namespaceURI!=="http://www.w3.org/2000/svg"||"innerHTML"in t)t.innerHTML=e;else{for(Il=Il||document.createElement("div"),Il.innerHTML="<svg>"+e.valueOf().toString()+"</svg>",e=Il.firstChild;t.firstChild;)t.removeChild(t.firstChild);for(;e.firstChild;)t.appendChild(e.firstChild)}});function Ti(t,e){if(e){var n=t.firstChild;if(n&&n===t.lastChild&&n.nodeType===3){n.nodeValue=e;return}}t.textContent=e}var ci={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},QS=["Webkit","ms","Moz","O"];Object.keys(ci).forEach(function(t){QS.forEach(function(e){e=e+t.charAt(0).toUpperCase()+t.substring(1),ci[e]=ci[t]})});function uv(t,e,n){return e==null||typeof e=="boolean"||e===""?"":n||typeof e!="number"||e===0||ci.hasOwnProperty(t)&&ci[t]?(""+e).trim():e+"px"}function dv(t,e){t=t.style;for(var n in e)if(e.hasOwnProperty(n)){var o=n.indexOf("--")===0,r=uv(n,e[n],o);n==="float"&&(n="cssFloat"),o?t.setProperty(n,r):t[n]=r}}var ZS=He({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Wd(t,e){if(e){if(ZS[t]&&(e.children!=null||e.dangerouslySetInnerHTML!=null))throw Error(W(137,t));if(e.dangerouslySetInnerHTML!=null){if(e.children!=null)throw Error(W(60));if(typeof e.dangerouslySetInnerHTML!="object"||!("__html"in e.dangerouslySetInnerHTML))throw Error(W(61))}if(e.style!=null&&typeof e.style!="object")throw Error(W(62))}}function qd(t,e){if(t.indexOf("-")===-1)return typeof e.is=="string";switch(t){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 Fd=null;function Eg(t){return t=t.target||t.srcElement||window,t.correspondingUseElement&&(t=t.correspondingUseElement),t.nodeType===3?t.parentNode:t}var Hd=null,qa=null,Fa=null;function bf(t){if(t=dl(t)){if(typeof Hd!="function")throw Error(W(280));var e=t.stateNode;e&&(e=Oh(e),Hd(t.stateNode,t.type,e))}}function pv(t){qa?Fa?Fa.push(t):Fa=[t]:qa=t}function gv(){if(qa){var t=qa,e=Fa;if(Fa=qa=null,bf(t),e)for(t=0;t<e.length;t++)bf(e[t])}}function mv(t,e){return t(e)}function fv(){}var _u=!1;function yv(t,e,n){if(_u)return t(e,n);_u=!0;try{return mv(t,e,n)}finally{_u=!1,(qa!==null||Fa!==null)&&(fv(),gv())}}function Ai(t,e){var n=t.stateNode;if(n===null)return null;var o=Oh(n);if(o===null)return null;n=o[e];e:switch(e){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(o=!o.disabled)||(t=t.type,o=!(t==="button"||t==="input"||t==="select"||t==="textarea")),t=!o;break e;default:t=!1}if(t)return null;if(n&&typeof n!="function")throw Error(W(231,e,typeof n));return n}var zd=!1;if(fo)try{var Ls={};Object.defineProperty(Ls,"passive",{get:function(){zd=!0}}),window.addEventListener("test",Ls,Ls),window.removeEventListener("test",Ls,Ls)}catch{zd=!1}function XS(t,e,n,o,r,a,s,i,l){var c=Array.prototype.slice.call(arguments,3);try{e.apply(n,c)}catch(u){this.onError(u)}}var hi=!1,jc=null,Bc=!1,$d=null,eT={onError:function(t){hi=!0,jc=t}};function tT(t,e,n,o,r,a,s,i,l){hi=!1,jc=null,XS.apply(eT,arguments)}function nT(t,e,n,o,r,a,s,i,l){if(tT.apply(this,arguments),hi){if(hi){var c=jc;hi=!1,jc=null}else throw Error(W(198));Bc||(Bc=!0,$d=c)}}function oa(t){var e=t,n=t;if(t.alternate)for(;e.return;)e=e.return;else{t=e;do e=t,e.flags&4098&&(n=e.return),t=e.return;while(t)}return e.tag===3?n:null}function wv(t){if(t.tag===13){var e=t.memoizedState;if(e===null&&(t=t.alternate,t!==null&&(e=t.memoizedState)),e!==null)return e.dehydrated}return null}function vf(t){if(oa(t)!==t)throw Error(W(188))}function oT(t){var e=t.alternate;if(!e){if(e=oa(t),e===null)throw Error(W(188));return e!==t?null:t}for(var n=t,o=e;;){var r=n.return;if(r===null)break;var a=r.alternate;if(a===null){if(o=r.return,o!==null){n=o;continue}break}if(r.child===a.child){for(a=r.child;a;){if(a===n)return vf(r),t;if(a===o)return vf(r),e;a=a.sibling}throw Error(W(188))}if(n.return!==o.return)n=r,o=a;else{for(var s=!1,i=r.child;i;){if(i===n){s=!0,n=r,o=a;break}if(i===o){s=!0,o=r,n=a;break}i=i.sibling}if(!s){for(i=a.child;i;){if(i===n){s=!0,n=a,o=r;break}if(i===o){s=!0,o=a,n=r;break}i=i.sibling}if(!s)throw Error(W(189))}}if(n.alternate!==o)throw Error(W(190))}if(n.tag!==3)throw Error(W(188));return n.stateNode.current===n?t:e}function bv(t){return t=oT(t),t!==null?vv(t):null}function vv(t){if(t.tag===5||t.tag===6)return t;for(t=t.child;t!==null;){var e=vv(t);if(e!==null)return e;t=t.sibling}return null}var kv=Ht.unstable_scheduleCallback,kf=Ht.unstable_cancelCallback,rT=Ht.unstable_shouldYield,aT=Ht.unstable_requestPaint,Ge=Ht.unstable_now,sT=Ht.unstable_getCurrentPriorityLevel,Ig=Ht.unstable_ImmediatePriority,xv=Ht.unstable_UserBlockingPriority,Oc=Ht.unstable_NormalPriority,iT=Ht.unstable_LowPriority,Sv=Ht.unstable_IdlePriority,Ih=null,Un=null;function lT(t){if(Un&&typeof Un.onCommitFiberRoot=="function")try{Un.onCommitFiberRoot(Ih,t,void 0,(t.current.flags&128)===128)}catch{}}var An=Math.clz32?Math.clz32:uT,cT=Math.log,hT=Math.LN2;function uT(t){return t>>>=0,t===0?32:31-(cT(t)/hT|0)|0}var Pl=64,jl=4194304;function ei(t){switch(t&-t){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return t&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return t}}function Mc(t,e){var n=t.pendingLanes;if(n===0)return 0;var o=0,r=t.suspendedLanes,a=t.pingedLanes,s=n&268435455;if(s!==0){var i=s&~r;i!==0?o=ei(i):(a&=s,a!==0&&(o=ei(a)))}else s=n&~r,s!==0?o=ei(s):a!==0&&(o=ei(a));if(o===0)return 0;if(e!==0&&e!==o&&!(e&r)&&(r=o&-o,a=e&-e,r>=a||r===16&&(a&4194240)!==0))return e;if(o&4&&(o|=n&16),e=t.entangledLanes,e!==0)for(t=t.entanglements,e&=o;0<e;)n=31-An(e),r=1<<n,o|=t[n],e&=~r;return o}function dT(t,e){switch(t){case 1:case 2:case 4:return e+250;case 8:case 16:case 32:case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e+5e3;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return-1;case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function pT(t,e){for(var n=t.suspendedLanes,o=t.pingedLanes,r=t.expirationTimes,a=t.pendingLanes;0<a;){var s=31-An(a),i=1<<s,l=r[s];l===-1?(!(i&n)||i&o)&&(r[s]=dT(i,e)):l<=e&&(t.expiredLanes|=i),a&=~i}}function Ud(t){return t=t.pendingLanes&-1073741825,t!==0?t:t&1073741824?1073741824:0}function Tv(){var t=Pl;return Pl<<=1,!(Pl&4194240)&&(Pl=64),t}function Cu(t){for(var e=[],n=0;31>n;n++)e.push(t);return e}function hl(t,e,n){t.pendingLanes|=e,e!==536870912&&(t.suspendedLanes=0,t.pingedLanes=0),t=t.eventTimes,e=31-An(e),t[e]=n}function gT(t,e){var n=t.pendingLanes&~e;t.pendingLanes=e,t.suspendedLanes=0,t.pingedLanes=0,t.expiredLanes&=e,t.mutableReadLanes&=e,t.entangledLanes&=e,e=t.entanglements;var o=t.eventTimes;for(t=t.expirationTimes;0<n;){var r=31-An(n),a=1<<r;e[r]=0,o[r]=-1,t[r]=-1,n&=~a}}function Pg(t,e){var n=t.entangledLanes|=e;for(t=t.entanglements;n;){var o=31-An(n),r=1<<o;r&e|t[o]&e&&(t[o]|=e),n&=~r}}var Ce=0;function Av(t){return t&=-t,1<t?4<t?t&268435455?16:536870912:4:1}var _v,jg,Cv,Ev,Iv,Yd=!1,Bl=[],Zo=null,Xo=null,er=null,_i=new Map,Ci=new Map,Wo=[],mT="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function xf(t,e){switch(t){case"focusin":case"focusout":Zo=null;break;case"dragenter":case"dragleave":Xo=null;break;case"mouseover":case"mouseout":er=null;break;case"pointerover":case"pointerout":_i.delete(e.pointerId);break;case"gotpointercapture":case"lostpointercapture":Ci.delete(e.pointerId)}}function Ds(t,e,n,o,r,a){return t===null||t.nativeEvent!==a?(t={blockedOn:e,domEventName:n,eventSystemFlags:o,nativeEvent:a,targetContainers:[r]},e!==null&&(e=dl(e),e!==null&&jg(e)),t):(t.eventSystemFlags|=o,e=t.targetContainers,r!==null&&e.indexOf(r)===-1&&e.push(r),t)}function fT(t,e,n,o,r){switch(e){case"focusin":return Zo=Ds(Zo,t,e,n,o,r),!0;case"dragenter":return Xo=Ds(Xo,t,e,n,o,r),!0;case"mouseover":return er=Ds(er,t,e,n,o,r),!0;case"pointerover":var a=r.pointerId;return _i.set(a,Ds(_i.get(a)||null,t,e,n,o,r)),!0;case"gotpointercapture":return a=r.pointerId,Ci.set(a,Ds(Ci.get(a)||null,t,e,n,o,r)),!0}return!1}function Pv(t){var e=Ir(t.target);if(e!==null){var n=oa(e);if(n!==null){if(e=n.tag,e===13){if(e=wv(n),e!==null){t.blockedOn=e,Iv(t.priority,function(){Cv(n)});return}}else if(e===3&&n.stateNode.current.memoizedState.isDehydrated){t.blockedOn=n.tag===3?n.stateNode.containerInfo:null;return}}}t.blockedOn=null}function hc(t){if(t.blockedOn!==null)return!1;for(var e=t.targetContainers;0<e.length;){var n=Vd(t.domEventName,t.eventSystemFlags,e[0],t.nativeEvent);if(n===null){n=t.nativeEvent;var o=new n.constructor(n.type,n);Fd=o,n.target.dispatchEvent(o),Fd=null}else return e=dl(n),e!==null&&jg(e),t.blockedOn=n,!1;e.shift()}return!0}function Sf(t,e,n){hc(t)&&n.delete(e)}function yT(){Yd=!1,Zo!==null&&hc(Zo)&&(Zo=null),Xo!==null&&hc(Xo)&&(Xo=null),er!==null&&hc(er)&&(er=null),_i.forEac
vendor: 10,567 bytes, line 38
38h(Sf),Ci.forEach(Sf)}function Ws(t,e){t.blockedOn===e&&(t.blockedOn=null,Yd||(Yd=!0,Ht.unstable_scheduleCallback(Ht.unstable_NormalPriority,yT)))}function Ei(t){function e(r){return Ws(r,t)}if(0<Bl.length){Ws(Bl[0],t);for(var n=1;n<Bl.length;n++){var o=Bl[n];o.blockedOn===t&&(o.blockedOn=null)}}for(Zo!==null&&Ws(Zo,t),Xo!==null&&Ws(Xo,t),er!==null&&Ws(er,t),_i.forEach(e),Ci.forEach(e),n=0;n<Wo.length;n++)o=Wo[n],o.blockedOn===t&&(o.blockedOn=null);for(;0<Wo.length&&(n=Wo[0],n.blockedOn===null);)Pv(n),n.blockedOn===null&&Wo.shift()}var Ha=So.ReactCurrentBatchConfig,Rc=!0;function wT(t,e,n,o){var r=Ce,a=Ha.transition;Ha.transition=null;try{Ce=1,Bg(t,e,n,o)}finally{Ce=r,Ha.transition=a}}function bT(t,e,n,o){var r=Ce,a=Ha.transition;Ha.transition=null;try{Ce=4,Bg(t,e,n,o)}finally{Ce=r,Ha.transition=a}}function Bg(t,e,n,o){if(Rc){var r=Vd(t,e,n,o);if(r===null)Lu(t,e,o,Nc,n),xf(t,o);else if(fT(r,t,e,n,o))o.stopPropagation();else if(xf(t,o),e&4&&-1<mT.indexOf(t)){for(;r!==null;){var a=dl(r);if(a!==null&&_v(a),a=Vd(t,e,n,o),a===null&&Lu(t,e,o,Nc,n),a===r)break;r=a}r!==null&&o.stopPropagation()}else Lu(t,e,o,null,n)}}var Nc=null;function Vd(t,e,n,o){if(Nc=null,t=Eg(o),t=Ir(t),t!==null)if(e=oa(t),e===null)t=null;else if(n=e.tag,n===13){if(t=wv(e),t!==null)return t;t=null}else if(n===3){if(e.stateNode.current.memoizedState.isDehydrated)return e.tag===3?e.stateNode.containerInfo:null;t=null}else e!==t&&(t=null);return Nc=t,null}function jv(t){switch(t){case"cancel":case"click":case"close":case"contextmenu":case"copy":case"cut":case"auxclick":case"dblclick":case"dragend":case"dragstart":case"drop":case"focusin":case"focusout":case"input":case"invalid":case"keydown":case"keypress":case"keyup":case"mousedown":case"mouseup":case"paste":case"pause":case"play":case"pointercancel":case"pointerdown":case"pointerup":case"ratechange":case"reset":case"resize":case"seeked":case"submit":case"touchcancel":case"touchend":case"touchstart":case"volumechange":case"change":case"selectionchange":case"textInput":case"compositionstart":case"compositionend":case"compositionupdate":case"beforeblur":case"afterblur":case"beforeinput":case"blur":case"fullscreenchange":case"focus":case"hashchange":case"popstate":case"select":case"selectstart":return 1;case"drag":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"mousemove":case"mouseout":case"mouseover":case"pointermove":case"pointerout":case"pointerover":case"scroll":case"toggle":case"touchmove":case"wheel":case"mouseenter":case"mouseleave":case"pointerenter":case"pointerleave":return 4;case"message":switch(sT()){case Ig:return 1;case xv:return 4;case Oc:case iT:return 16;case Sv:return 536870912;default:return 16}default:return 16}}var Go=null,Og=null,uc=null;function Bv(){if(uc)return uc;var t,e=Og,n=e.length,o,r="value"in Go?Go.value:Go.textContent,a=r.length;for(t=0;t<n&&e[t]===r[t];t++);var s=n-t;for(o=1;o<=s&&e[n-o]===r[a-o];o++);return uc=r.slice(t,1<o?1-o:void 0)}function dc(t){var e=t.keyCode;return"charCode"in t?(t=t.charCode,t===0&&e===13&&(t=13)):t=e,t===10&&(t=13),32<=t||t===13?t:0}function Ol(){return!0}function Tf(){return!1}function Ut(t){function e(n,o,r,a,s){this._reactName=n,this._targetInst=r,this.type=o,this.nativeEvent=a,this.target=s,this.currentTarget=null;for(var i in t)t.hasOwnProperty(i)&&(n=t[i],this[i]=n?n(a):a[i]);return this.isDefaultPrevented=(a.defaultPrevented!=null?a.defaultPrevented:a.returnValue===!1)?Ol:Tf,this.isPropagationStopped=Tf,this}return He(e.prototype,{preventDefault:function(){this.defaultPrevented=!0;var n=this.nativeEvent;n&&(n.preventDefault?n.preventDefault():typeof n.returnValue!="unknown"&&(n.returnValue=!1),this.isDefaultPrevented=Ol)},stopPropagation:function(){var n=this.nativeEvent;n&&(n.stopPropagation?n.stopPropagation():typeof n.cancelBubble!="unknown"&&(n.cancelBubble=!0),this.isPropagationStopped=Ol)},persist:function(){},isPersistent:Ol}),e}var xs={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(t){return t.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},Mg=Ut(xs),ul=He({},xs,{view:0,detail:0}),vT=Ut(ul),Eu,Iu,qs,Ph=He({},ul,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:Rg,button:0,buttons:0,relatedTarget:function(t){return t.relatedTarget===void 0?t.fromElement===t.srcElement?t.toElement:t.fromElement:t.relatedTarget},movementX:function(t){return"movementX"in t?t.movementX:(t!==qs&&(qs&&t.type==="mousemove"?(Eu=t.screenX-qs.screenX,Iu=t.screenY-qs.screenY):Iu=Eu=0,qs=t),Eu)},movementY:function(t){return"movementY"in t?t.movementY:Iu}}),Af=Ut(Ph),kT=He({},Ph,{dataTransfer:0}),xT=Ut(kT),ST=He({},ul,{relatedTarget:0}),Pu=Ut(ST),TT=He({},xs,{animationName:0,elapsedTime:0,pseudoElement:0}),AT=Ut(TT),_T=He({},xs,{clipboardData:function(t){return"clipboardData"in t?t.clipboardData:window.clipboardData}}),CT=Ut(_T),ET=He({},xs,{data:0}),_f=Ut(ET),IT={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},PT={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"},jT={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function BT(t){var e=this.nativeEvent;return e.getModifierState?e.getModifierState(t):(t=jT[t])?!!e[t]:!1}function Rg(){return BT}var OT=He({},ul,{key:function(t){if(t.key){var e=IT[t.key]||t.key;if(e!=="Unidentified")return e}return t.type==="keypress"?(t=dc(t),t===13?"Enter":String.fromCharCode(t)):t.type==="keydown"||t.type==="keyup"?PT[t.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:Rg,charCode:function(t){return t.type==="keypress"?dc(t):0},keyCode:function(t){return t.type==="keydown"||t.type==="keyup"?t.keyCode:0},which:function(t){return t.type==="keypress"?dc(t):t.type==="keydown"||t.type==="keyup"?t.keyCode:0}}),MT=Ut(OT),RT=He({},Ph,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Cf=Ut(RT),NT=He({},ul,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:Rg}),LT=Ut(NT),DT=He({},xs,{propertyName:0,elapsedTime:0,pseudoElement:0}),WT=Ut(DT),qT=He({},Ph,{deltaX:function(t){return"deltaX"in t?t.deltaX:"wheelDeltaX"in t?-t.wheelDeltaX:0},deltaY:function(t){return"deltaY"in t?t.deltaY:"wheelDeltaY"in t?-t.wheelDeltaY:"wheelDelta"in t?-t.wheelDelta:0},deltaZ:0,deltaMode:0}),FT=Ut(qT),HT=[9,13,27,32],Ng=fo&&"CompositionEvent"in window,ui=null;fo&&"documentMode"in document&&(ui=document.documentMode);var zT=fo&&"TextEvent"in window&&!ui,Ov=fo&&(!Ng||ui&&8<ui&&11>=ui),Ef=" ",If=!1;function Mv(t,e){switch(t){case"keyup":return HT.indexOf(e.keyCode)!==-1;case"keydown":return e.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Rv(t){return t=t.detail,typeof t=="object"&&"data"in t?t.data:null}var Ea=!1;function $T(t,e){switch(t){case"compositionend":return Rv(e);case"keypress":return e.which!==32?null:(If=!0,Ef);case"textInput":return t=e.data,t===Ef&&If?null:t;default:return null}}function UT(t,e){if(Ea)return t==="compositionend"||!Ng&&Mv(t,e)?(t=Bv(),uc=Og=Go=null,Ea=!1,t):null;switch(t){case"paste":return null;case"keypress":if(!(e.ctrlKey||e.altKey||e.metaKey)||e.ctrlKey&&e.altKey){if(e.char&&1<e.char.length)return e.char;if(e.which)return String.fromCharCode(e.which)}return null;case"compositionend":return Ov&&e.locale!=="ko"?null:e.data;default:return null}}var YT={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 Pf(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e==="input"?!!YT[t.type]:e==="textarea"}function Nv(t,e,n,o){pv(o),e=Lc(e,"onChange"),0<e.length&&(n=new Mg("onChange","change",null,n,o),t.push({event:n,listeners:e}))}var di=null,Ii=null;function VT(t){Vv(t,0)}function jh(t){var e=ja(t);if(sv(e))return t}function GT(t,e){if(t==="change")return e}var Lv=!1;if(fo){var ju;if(fo){var Bu="oninput"in document;if(!Bu){var jf=document.createElement("div");jf.setAttribute("oninput","return;"),Bu=typeof jf.oninput=="function"}ju=Bu}else ju=!1;Lv=ju&&(!document.documentMode||9<document.documentMode)}function Bf(){di&&(di.detachEvent("onpropertychange",Dv),Ii=di=null)}function Dv(t){if(t.propertyName==="value"&&jh(Ii)){var e=[];Nv(e,Ii,t,Eg(t)),yv(VT,e)}}function KT(t,e,n){t==="focusin"?(Bf(),di=e,Ii=n,di.attachEvent("onpropertychange",Dv)):t==="focusout"&&Bf()}function JT(t){if(t==="selectionchange"||t==="keyup"||t==="keydown")return jh(Ii)}function QT(t,e){if(t==="click")return jh(e)}function ZT(t,e){if(t==="input"||t==="change")return jh(e)}function XT(t,e){return t===e&&(t!==0||1/t===1/e)||t!==t&&e!==e}var En=typeof Object.is=="function"?Object.is:XT;function Pi(t,e){if(En(t,e))return!0;if(typeof t!="object"||t===null||typeof e!="object"||e===null)return!1;var n=Object.keys(t),o=Object.keys(e);if(n.length!==o.length)return!1;for(o=0;o<n.length;o++){var r=n[o];if(!Id.call(e,r)||!En(t[r],e[r]))return!1}return!0}function Of(t){for(;t&&t.firstChild;)t=t.firstChild;return t}function Mf(t,e){var n=Of(t);t=0;for(var o;n;){if(n.nodeType===3){if(o=t+n.textContent.length,t<=e&&o>=e)return{node:n,offset:e-t};t=o}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=Of(n)}}function Wv(t,e){return t&&e?t===e?!0:t&&t.nodeType===3?!1:e&&e.nodeType===3?Wv(t,e.parentNode):"contains"in t?t.contains(e):t.compareDocumentPosition?!!(t.compareDocumentPosition(e)&16):!1:!1}function qv(){for(var t=window,e=Pc();e instanceof t.HTMLIFrameElement;){try{var n=typeof e.contentWindow.location.href=="string"}catch{n=!1}if(n)t=e.contentWindow;else break;e=Pc(t.document)}return e}function Lg(t){var e=t&&t.nodeName&&t.nodeName.toLowerCase();return e&&(e==="input"&&(t.type==="text"||t.type==="search"||t.type==="tel"||t.type==="url"||t.type==="password")||e==="textarea"||t.contentEditable==="true")}function e4(t){var e=qv(),n=t.focusedElem,o=t.selectionRange;if(e!==n&&n&&n.ownerDocument&&Wv(n.ownerDocument.documentElement,n)){if(o!==null&&Lg(n)){if
vendor: 4,930 bytes, line 38
38(e=o.start,t=o.end,t===void 0&&(t=e),"selectionStart"in n)n.selectionStart=e,n.selectionEnd=Math.min(t,n.value.length);else if(t=(e=n.ownerDocument||document)&&e.defaultView||window,t.getSelection){t=t.getSelection();var r=n.textContent.length,a=Math.min(o.start,r);o=o.end===void 0?a:Math.min(o.end,r),!t.extend&&a>o&&(r=o,o=a,a=r),r=Mf(n,a);var s=Mf(n,o);r&&s&&(t.rangeCount!==1||t.anchorNode!==r.node||t.anchorOffset!==r.offset||t.focusNode!==s.node||t.focusOffset!==s.offset)&&(e=e.createRange(),e.setStart(r.node,r.offset),t.removeAllRanges(),a>o?(t.addRange(e),t.extend(s.node,s.offset)):(e.setEnd(s.node,s.offset),t.addRange(e)))}}for(e=[],t=n;t=t.parentNode;)t.nodeType===1&&e.push({element:t,left:t.scrollLeft,top:t.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n<e.length;n++)t=e[n],t.element.scrollLeft=t.left,t.element.scrollTop=t.top}}var t4=fo&&"documentMode"in document&&11>=document.documentMode,Ia=null,Gd=null,pi=null,Kd=!1;function Rf(t,e,n){var o=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Kd||Ia==null||Ia!==Pc(o)||(o=Ia,"selectionStart"in o&&Lg(o)?o={start:o.selectionStart,end:o.selectionEnd}:(o=(o.ownerDocument&&o.ownerDocument.defaultView||window).getSelection(),o={anchorNode:o.anchorNode,anchorOffset:o.anchorOffset,focusNode:o.focusNode,focusOffset:o.focusOffset}),pi&&Pi(pi,o)||(pi=o,o=Lc(Gd,"onSelect"),0<o.length&&(e=new Mg("onSelect","select",null,e,n),t.push({event:e,listeners:o}),e.target=Ia)))}function Ml(t,e){var n={};return n[t.toLowerCase()]=e.toLowerCase(),n["Webkit"+t]="webkit"+e,n["Moz"+t]="moz"+e,n}var Pa={animationend:Ml("Animation","AnimationEnd"),animationiteration:Ml("Animation","AnimationIteration"),animationstart:Ml("Animation","AnimationStart"),transitionend:Ml("Transition","TransitionEnd")},Ou={},Fv={};fo&&(Fv=document.createElement("div").style,"AnimationEvent"in window||(delete Pa.animationend.animation,delete Pa.animationiteration.animation,delete Pa.animationstart.animation),"TransitionEvent"in window||delete Pa.transitionend.transition);function Bh(t){if(Ou[t])return Ou[t];if(!Pa[t])return t;var e=Pa[t],n;for(n in e)if(e.hasOwnProperty(n)&&n in Fv)return Ou[t]=e[n];return t}var Hv=Bh("animationend"),zv=Bh("animationiteration"),$v=Bh("animationstart"),Uv=Bh("transitionend"),Yv=new Map,Nf="abort auxClick cancel canPlay canPlayThrough click close contextMenu copy cut drag dragEnd dragEnter dragExit dragLeave dragOver dragStart drop durationChange emptied encrypted ended error gotPointerCapture input invalid keyDown keyPress keyUp load loadedData loadedMetadata loadStart lostPointerCapture mouseDown mouseMove mouseOut mouseOver mouseUp paste pause play playing pointerCancel pointerDown pointerMove pointerOut pointerOver pointerUp progress rateChange reset resize seeked seeking stalled submit suspend timeUpdate touchCancel touchEnd touchStart volumeChange scroll toggle touchMove waiting wheel".split(" ");function mr(t,e){Yv.set(t,e),na(e,[t])}for(var Mu=0;Mu<Nf.length;Mu++){var Ru=Nf[Mu],n4=Ru.toLowerCase(),o4=Ru[0].toUpperCase()+Ru.slice(1);mr(n4,"on"+o4)}mr(Hv,"onAnimationEnd");mr(zv,"onAnimationIteration");mr($v,"onAnimationStart");mr("dblclick","onDoubleClick");mr("focusin","onFocus");mr("focusout","onBlur");mr(Uv,"onTransitionEnd");ss("onMouseEnter",["mouseout","mouseover"]);ss("onMouseLeave",["mouseout","mouseover"]);ss("onPointerEnter",["pointerout","pointerover"]);ss("onPointerLeave",["pointerout","pointerover"]);na("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));na("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));na("onBeforeInput",["compositionend","keypress","textInput","paste"]);na("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));na("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));na("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var ti="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(" "),r4=new Set("cancel close invalid load scroll toggle".split(" ").concat(ti));function Lf(t,e,n){var o=t.type||"unknown-event";t.currentTarget=n,nT(o,e,void 0,t),t.currentTarget=null}function Vv(t,e){e=(e&4)!==0;for(var n=0;n<t.length;n++){var o=t[n],r=o.event;o=o.listeners;e:{var a=void 0;if(e)for(var s=o.length-1;0<=s;s--){var i=o[s],l=i.instance,c=i.currentTarget;if(i=i.listener,l!==a&&r.isPropagationStopped())break e;Lf(r,i,c),a=l}else for(s=0;s<o.length;s++){if(i=o[s],l=i.instance,c=i.currentTarget,i=i.listener,l!==a&&r.isPropagationStopped())break e;Lf(r,i,c),a=l}}}if(Bc)throw t=$d,Bc=!1,$d=null,t}function Oe(t,e){var n=e[ep];n===void 0&&(n=e[ep]=new Set);var o=t+"__bubble";
vendor: 4,914 bytes, line 38
38n.has(o)||(Gv(e,t,2,!1),n.add(o))}function Nu(t,e,n){var o=0;e&&(o|=4),Gv(n,t,o,e)}var Rl="_reactListening"+Math.random().toString(36).slice(2);function ji(t){if(!t[Rl]){t[Rl]=!0,tv.forEach(function(n){n!=="selectionchange"&&(r4.has(n)||Nu(n,!1,t),Nu(n,!0,t))});var e=t.nodeType===9?t:t.ownerDocument;e===null||e[Rl]||(e[Rl]=!0,Nu("selectionchange",!1,e))}}function Gv(t,e,n,o){switch(jv(e)){case 1:var r=wT;break;case 4:r=bT;break;default:r=Bg}n=r.bind(null,e,n,t),r=void 0,!zd||e!=="touchstart"&&e!=="touchmove"&&e!=="wheel"||(r=!0),o?r!==void 0?t.addEventListener(e,n,{capture:!0,passive:r}):t.addEventListener(e,n,!0):r!==void 0?t.addEventListener(e,n,{passive:r}):t.addEventListener(e,n,!1)}function Lu(t,e,n,o,r){var a=o;if(!(e&1)&&!(e&2)&&o!==null)e:for(;;){if(o===null)return;var s=o.tag;if(s===3||s===4){var i=o.stateNode.containerInfo;if(i===r||i.nodeType===8&&i.parentNode===r)break;if(s===4)for(s=o.return;s!==null;){var l=s.tag;if((l===3||l===4)&&(l=s.stateNode.containerInfo,l===r||l.nodeType===8&&l.parentNode===r))return;s=s.return}for(;i!==null;){if(s=Ir(i),s===null)return;if(l=s.tag,l===5||l===6){o=a=s;continue e}i=i.parentNode}}o=o.return}yv(function(){var c=a,u=Eg(n),d=[];e:{var g=Yv.get(t);if(g!==void 0){var p=Mg,v=t;switch(t){case"keypress":if(dc(n)===0)break e;case"keydown":case"keyup":p=MT;break;case"focusin":v="focus",p=Pu;break;case"focusout":v="blur",p=Pu;break;case"beforeblur":case"afterblur":p=Pu;break;case"click":if(n.button===2)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":p=Af;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":p=xT;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":p=LT;break;case Hv:case zv:case $v:p=AT;break;case Uv:p=WT;break;case"scroll":p=vT;break;case"wheel":p=FT;break;case"copy":case"cut":case"paste":p=CT;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":p=Cf}var y=(e&4)!==0,k=!y&&t==="scroll",w=y?g!==null?g+"Capture":null:g;y=[];for(var m=c,b;m!==null;){b=m;var x=b.stateNode;if(b.tag===5&&x!==null&&(b=x,w!==null&&(x=Ai(m,w),x!=null&&y.push(Bi(m,x,b)))),k)break;m=m.return}0<y.length&&(g=new p(g,v,null,n,u),d.push({event:g,listeners:y}))}}if(!(e&7)){e:{if(g=t==="mouseover"||t==="pointerover",p=t==="mouseout"||t==="pointerout",g&&n!==Fd&&(v=n.relatedTarget||n.fromElement)&&(Ir(v)||v[yo]))break e;if((p||g)&&(g=u.window===u?u:(g=u.ownerDocument)?g.defaultView||g.parentWindow:window,p?(v=n.relatedTarget||n.toElement,p=c,v=v?Ir(v):null,v!==null&&(k=oa(v),v!==k||v.tag!==5&&v.tag!==6)&&(v=null)):(p=null,v=c),p!==v)){if(y=Af,x="onMouseLeave",w="onMouseEnter",m="mouse",(t==="pointerout"||t==="pointerover")&&(y=Cf,x="onPointerLeave",w="onPointerEnter",m="pointer"),k=p==null?g:ja(p),b=v==null?g:ja(v),g=new y(x,m+"leave",p,n,u),g.target=k,g.relatedTarget=b,x=null,Ir(u)===c&&(y=new y(w,m+"enter",v,n,u),y.target=b,y.relatedTarget=k,x=y),k=x,p&&v)t:{for(y=p,w=v,m=0,b=y;b;b=ca(b))m++;for(b=0,x=w;x;x=ca(x))b++;for(;0<m-b;)y=ca(y),m--;for(;0<b-m;)w=ca(w),b--;for(;m--;){if(y===w||w!==null&&y===w.alternate)break t;y=ca(y),w=ca(w)}y=null}else y=null;p!==null&&Df(d,g,p,y,!1),v!==null&&k!==null&&Df(d,k,v,y,!0)}}e:{if(g=c?ja(c):window,p=g.nodeName&&g.nodeName.toLowerCase(),p==="select"||p==="input"&&g.type==="file")var S=GT;else if(Pf(g))if(Lv)S=ZT;else{S=JT;var T=KT}else(p=g.nodeName)&&p.toLowerCase()==="input"&&(g.type==="checkbox"||g.type==="radio")&&(S=QT);if(S&&(S=S(t,c))){Nv(d,S,n,u);break e}T&&T(t,g,c),t==="focusout"&&(T=g._wrapperState)&&T.controlled&&g.type==="number"&&Nd(g,"number",g.value)}switch(T=c?ja(c):window,t){case"focusin":(Pf(T)||T.contentEditable==="true")&&(Ia=T,Gd=c,pi=null);break;case"focusout":pi=Gd=Ia=null;break;case"mousedown":Kd=!0;break;case"contextmenu":case"mouseup":case"dragend":Kd=!1,Rf(d,n,u);break;case"selectionchange":if(t4)break;case"keydown":case"keyup":Rf(d,n,u)}var A;if(Ng)e:{switch(t){case"compositionstart":var _="onCompositionStart";break e;case"compositionend":_="onCompositionEnd";break e;case"compositionupdate":_="onCompositionUpdate";break e}_=void 0}else Ea?Mv(t,n)&&(_="onCompositionEnd"):t==="keydown"&&n.keyCode===229&&(_="onCompositionStart");_&&(Ov&&n.locale!=="ko"&&(Ea||_!=="onCompositionStart"?_==="onCompositionEnd"&&Ea&&(A=Bv()):(Go=u,Og="value"in Go?Go.value:Go.textContent,Ea=!0)),T=Lc(c,_),0<T.length&&(_=new _f(_,t,null,n,u),d.push({event:_,listeners:T}),A?_.data=A:(A=Rv(n),A!==null&&(_.data=A)))),(A=zT?$T(t,n):UT(t,n))&&(c=Lc(c,"onBeforeInput"),0<c.length&&(u=new _f("onBeforeInput","beforeinput",null,n,u),d.push({event:u,listeners:c}),u.data=A))}Vv(d,e)})}function Bi(t,e,n){return{instance:t,listener:e,currentTarget:n}}function Lc(t,e){for(var n=e+"Capture",o=[];t!==null;
vendor: 6,071 bytes, lines 38-39
38){var r=t,a=r.stateNode;r.tag===5&&a!==null&&(r=a,a=Ai(t,n),a!=null&&o.unshift(Bi(t,a,r)),a=Ai(t,e),a!=null&&o.push(Bi(t,a,r))),t=t.return}return o}function ca(t){if(t===null)return null;do t=t.return;while(t&&t.tag!==5);return t||null}function Df(t,e,n,o,r){for(var a=e._reactName,s=[];n!==null&&n!==o;){var i=n,l=i.alternate,c=i.stateNode;if(l!==null&&l===o)break;i.tag===5&&c!==null&&(i=c,r?(l=Ai(n,a),l!=null&&s.unshift(Bi(n,l,i))):r||(l=Ai(n,a),l!=null&&s.push(Bi(n,l,i)))),n=n.return}s.length!==0&&t.push({event:e,listeners:s})}var a4=/\r\n?/g,s4=/\u0000|\uFFFD/g;function Wf(t){return(typeof t=="string"?t:""+t).replace(a4,`
39`).replace(s4,"")}function Nl(t,e,n){if(e=Wf(e),Wf(t)!==e&&n)throw Error(W(425))}function Dc(){}var Jd=null,Qd=null;function Zd(t,e){return t==="textarea"||t==="noscript"||typeof e.children=="string"||typeof e.children=="number"||typeof e.dangerouslySetInnerHTML=="object"&&e.dangerouslySetInnerHTML!==null&&e.dangerouslySetInnerHTML.__html!=null}var Xd=typeof setTimeout=="function"?setTimeout:void 0,i4=typeof clearTimeout=="function"?clearTimeout:void 0,qf=typeof Promise=="function"?Promise:void 0,l4=typeof queueMicrotask=="function"?queueMicrotask:typeof qf<"u"?function(t){return qf.resolve(null).then(t).catch(c4)}:Xd;function c4(t){setTimeout(function(){throw t})}function Du(t,e){var n=e,o=0;do{var r=n.nextSibling;if(t.removeChild(n),r&&r.nodeType===8)if(n=r.data,n==="/$"){if(o===0){t.removeChild(r),Ei(e);return}o--}else n!=="$"&&n!=="$?"&&n!=="$!"||o++;n=r}while(n);Ei(e)}function tr(t){for(;t!=null;t=t.nextSibling){var e=t.nodeType;if(e===1||e===3)break;if(e===8){if(e=t.data,e==="$"||e==="$!"||e==="$?")break;if(e==="/$")return null}}return t}function Ff(t){t=t.previousSibling;for(var e=0;t;){if(t.nodeType===8){var n=t.data;if(n==="$"||n==="$!"||n==="$?"){if(e===0)return t;e--}else n==="/$"&&e++}t=t.previousSibling}return null}var Ss=Math.random().toString(36).slice(2),Hn="__reactFiber$"+Ss,Oi="__reactProps$"+Ss,yo="__reactContainer$"+Ss,ep="__reactEvents$"+Ss,h4="__reactListeners$"+Ss,u4="__reactHandles$"+Ss;function Ir(t){var e=t[Hn];if(e)return e;for(var n=t.parentNode;n;){if(e=n[yo]||n[Hn]){if(n=e.alternate,e.child!==null||n!==null&&n.child!==null)for(t=Ff(t);t!==null;){if(n=t[Hn])return n;t=Ff(t)}return e}t=n,n=t.parentNode}return null}function dl(t){return t=t[Hn]||t[yo],!t||t.tag!==5&&t.tag!==6&&t.tag!==13&&t.tag!==3?null:t}function ja(t){if(t.tag===5||t.tag===6)return t.stateNode;throw Error(W(33))}function Oh(t){return t[Oi]||null}var tp=[],Ba=-1;function fr(t){return{current:t}}function Re(t){0>Ba||(t.current=tp[Ba],tp[Ba]=null,Ba--)}function je(t,e){Ba++,tp[Ba]=t.current,t.current=e}var cr={},ft=fr(cr),It=fr(!1),Hr=cr;function is(t,e){var n=t.type.contextTypes;if(!n)return cr;var o=t.stateNode;if(o&&o.__reactInternalMemoizedUnmaskedChildContext===e)return o.__reactInternalMemoizedMaskedChildContext;var r={},a;for(a in n)r[a]=e[a];return o&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=e,t.__reactInternalMemoizedMaskedChildContext=r),r}function Pt(t){return t=t.childContextTypes,t!=null}function Wc(){Re(It),Re(ft)}function Hf(t,e,n){if(ft.current!==cr)throw Error(W(168));je(ft,e),je(It,n)}function Kv(t,e,n){var o=t.stateNode;if(e=e.childContextTypes,typeof o.getChildContext!="function")return n;o=o.getChildContext();for(var r in o)if(!(r in e))throw Error(W(108,KS(t)||"Unknown",r));return He({},n,o)}function qc(t){return t=(t=t.stateNode)&&t.__reactInternalMemoizedMergedChildContext||cr,Hr=ft.current,je(ft,t),je(It,It.current),!0}function zf(t,e,n){var o=t.stateNode;if(!o)throw Error(W(169));n?(t=Kv(t,e,Hr),o.__reactInternalMemoizedMergedChildContext=t,Re(It),Re(ft),je(ft,t)):Re(It),je(It,n)}var ho=null,Mh=!1,Wu=!1;function Jv(t){ho===null?ho=[t]:ho.push(t)}function d4(t){Mh=!0,Jv(t)}function yr(){if(!Wu&&ho!==null){Wu=!0;var t=0,e=Ce;try{var n=ho;for(Ce=1;t<n.length;t++){var o=n[t];do o=o(!0);while(o!==null)}ho=null,Mh=!1}catch(r){throw ho!==null&&(ho=ho.slice(t+1)),kv(Ig,yr),r}finally{Ce=e,Wu=!1}}return null}var Oa=[],Ma=0,Fc=null,Hc=0,Jt=[],Qt=0,zr=null,po=1,go="";function _r(t,e){Oa[Ma++]=Hc,Oa[Ma++]=Fc,Fc=t,Hc=e}function Qv(t,e,n){Jt[Qt++]=po,Jt[Qt++]=go,Jt[Qt++]=zr,zr=t;var o=po;t=go;var r=32-An(o)-1;o&=~(1<<r),n+=1;var a=32-An(e)+r;if(30<a){var s=r-r%5;a=(o&(1<<s)-1).toString(32),o>>=s,r-=s,po=1<<32-An(e)+r|n<<r|o,go=a+t}else po=1<<a|n<<r|o,go=t}function Dg(t){t.return!==null&&(_r(t,1),Qv(t,1,0))}function Wg(t){for(;t===Fc;)Fc=Oa[--Ma],Oa[Ma]=null,Hc=Oa[--Ma],Oa[Ma]=null;for(;t===zr;)zr=Jt[--Qt],Jt[Qt]=null,go=Jt[--Qt],Jt[Qt]=null,po=Jt[--Qt],Jt[Qt]=null}var qt=null,Wt=null,Le=!1,xn=null;function Zv(t,e){var n=Zt(5,null,null,0);n.elementType="DELETED",n.stateNode=e,n.return=t,e=t.deletions,e===null?(t.deletions=[n],t.flags|=16):e.push(n)}function $f(t,e){switch(t.tag){case 5:var n=t.type;return e=e.nodeType!==1||n.toLowerCase()!==e.nodeName.toLowerCase()?null:e,e!==null?(t.stateNode=e,qt=t,Wt=tr(e.firstChild),!0):!1;case 6:return e=t.pendingProps===""||e.nodeType!==3?null:e,e!==null?(t.stateNode=e,qt=t,Wt=null,!0):!1;case 13:return e=e.nodeType!==8?null:e,e!==null?(n=zr!==null?{id:po,overflow:go}:null,t.memoizedState={dehydrated:e,treeContext:n,retryLane:1073741824},n=Zt(18,null,null,0),n.stateNode=e,n.return=t,t.child=n,qt=t,Wt=null,!0):!1;default:return!1}}function np(t){return(t.mode&1)!==0&&(t.flags&128)===0}function op(t){if(Le){var e=Wt;if(e){var n=e;if(!$f(t,e)){if(np(t))throw Error(W(418));e=tr(n.nextSibling);var o=qt;e&&$f(t,e)?Zv(o,n):(t.flags=t.flags&-4097|2,Le=!1,qt=t)}}else{if(np(t))throw Error(W(418));t.flags=t.flags&-4097|2,Le=!1,qt=t}}}function Uf(t){for(t=t.return;t!==null&&t.tag!==5&&t.tag!==3&&t.tag!==13;)t=t.return;qt=t}function Ll(t){if(t!==qt)return!1;if(!Le)return Uf(t),Le=!0,!1;var e;if((e=t.tag!==3)&&!(e=t.tag!==5)&&(e=t.type,e=e!=="head"&&e!=="body"&&!Zd(t.type,t.memoizedProps)),e&&(e=Wt)){if(np(t))throw Xv(),Error(W(418));for(;e;)Zv(t,e),e=tr(e.nextSibling)}if(Uf(t),t.tag===13){if(t=t.memoizedState,t=t!==null?t.dehydrated:null,!t)throw Error(W(317));e:{for(t=t.nextSibling,e=0;t;
vendor: 10,279 bytes, line 39
39){if(t.nodeType===8){var n=t.data;if(n==="/$"){if(e===0){Wt=tr(t.nextSibling);break e}e--}else n!=="$"&&n!=="$!"&&n!=="$?"||e++}t=t.nextSibling}Wt=null}}else Wt=qt?tr(t.stateNode.nextSibling):null;return!0}function Xv(){for(var t=Wt;t;)t=tr(t.nextSibling)}function ls(){Wt=qt=null,Le=!1}function qg(t){xn===null?xn=[t]:xn.push(t)}var p4=So.ReactCurrentBatchConfig;function Fs(t,e,n){if(t=n.ref,t!==null&&typeof t!="function"&&typeof t!="object"){if(n._owner){if(n=n._owner,n){if(n.tag!==1)throw Error(W(309));var o=n.stateNode}if(!o)throw Error(W(147,t));var r=o,a=""+t;return e!==null&&e.ref!==null&&typeof e.ref=="function"&&e.ref._stringRef===a?e.ref:(e=function(s){var i=r.refs;s===null?delete i[a]:i[a]=s},e._stringRef=a,e)}if(typeof t!="string")throw Error(W(284));if(!n._owner)throw Error(W(290,t))}return t}function Dl(t,e){throw t=Object.prototype.toString.call(e),Error(W(31,t==="[object Object]"?"object with keys {"+Object.keys(e).join(", ")+"}":t))}function Yf(t){var e=t._init;return e(t._payload)}function ek(t){function e(w,m){if(t){var b=w.deletions;b===null?(w.deletions=[m],w.flags|=16):b.push(m)}}function n(w,m){if(!t)return null;for(;m!==null;)e(w,m),m=m.sibling;return null}function o(w,m){for(w=new Map;m!==null;)m.key!==null?w.set(m.key,m):w.set(m.index,m),m=m.sibling;return w}function r(w,m){return w=ar(w,m),w.index=0,w.sibling=null,w}function a(w,m,b){return w.index=b,t?(b=w.alternate,b!==null?(b=b.index,b<m?(w.flags|=2,m):b):(w.flags|=2,m)):(w.flags|=1048576,m)}function s(w){return t&&w.alternate===null&&(w.flags|=2),w}function i(w,m,b,x){return m===null||m.tag!==6?(m=Yu(b,w.mode,x),m.return=w,m):(m=r(m,b),m.return=w,m)}function l(w,m,b,x){var S=b.type;return S===Ca?u(w,m,b.props.children,x,b.key):m!==null&&(m.elementType===S||typeof S=="object"&&S!==null&&S.$$typeof===No&&Yf(S)===m.type)?(x=r(m,b.props),x.ref=Fs(w,m,b),x.return=w,x):(x=bc(b.type,b.key,b.props,null,w.mode,x),x.ref=Fs(w,m,b),x.return=w,x)}function c(w,m,b,x){return m===null||m.tag!==4||m.stateNode.containerInfo!==b.containerInfo||m.stateNode.implementation!==b.implementation?(m=Vu(b,w.mode,x),m.return=w,m):(m=r(m,b.children||[]),m.return=w,m)}function u(w,m,b,x,S){return m===null||m.tag!==7?(m=Fr(b,w.mode,x,S),m.return=w,m):(m=r(m,b),m.return=w,m)}function d(w,m,b){if(typeof m=="string"&&m!==""||typeof m=="number")return m=Yu(""+m,w.mode,b),m.return=w,m;if(typeof m=="object"&&m!==null){switch(m.$$typeof){case Cl:return b=bc(m.type,m.key,m.props,null,w.mode,b),b.ref=Fs(w,null,m),b.return=w,b;case _a:return m=Vu(m,w.mode,b),m.return=w,m;case No:var x=m._init;return d(w,x(m._payload),b)}if(Xs(m)||Ns(m))return m=Fr(m,w.mode,b,null),m.return=w,m;Dl(w,m)}return null}function g(w,m,b,x){var S=m!==null?m.key:null;if(typeof b=="string"&&b!==""||typeof b=="number")return S!==null?null:i(w,m,""+b,x);if(typeof b=="object"&&b!==null){switch(b.$$typeof){case Cl:return b.key===S?l(w,m,b,x):null;case _a:return b.key===S?c(w,m,b,x):null;case No:return S=b._init,g(w,m,S(b._payload),x)}if(Xs(b)||Ns(b))return S!==null?null:u(w,m,b,x,null);Dl(w,b)}return null}function p(w,m,b,x,S){if(typeof x=="string"&&x!==""||typeof x=="number")return w=w.get(b)||null,i(m,w,""+x,S);if(typeof x=="object"&&x!==null){switch(x.$$typeof){case Cl:return w=w.get(x.key===null?b:x.key)||null,l(m,w,x,S);case _a:return w=w.get(x.key===null?b:x.key)||null,c(m,w,x,S);case No:var T=x._init;return p(w,m,b,T(x._payload),S)}if(Xs(x)||Ns(x))return w=w.get(b)||null,u(m,w,x,S,null);Dl(m,x)}return null}function v(w,m,b,x){for(var S=null,T=null,A=m,_=m=0,C=null;A!==null&&_<b.length;_++){A.index>_?(C=A,A=null):C=A.sibling;var P=g(w,A,b[_],x);if(P===null){A===null&&(A=C);break}t&&A&&P.alternate===null&&e(w,A),m=a(P,m,_),T===null?S=P:T.sibling=P,T=P,A=C}if(_===b.length)return n(w,A),Le&&_r(w,_),S;if(A===null){for(;_<b.length;_++)A=d(w,b[_],x),A!==null&&(m=a(A,m,_),T===null?S=A:T.sibling=A,T=A);return Le&&_r(w,_),S}for(A=o(w,A);_<b.length;_++)C=p(A,w,_,b[_],x),C!==null&&(t&&C.alternate!==null&&A.delete(C.key===null?_:C.key),m=a(C,m,_),T===null?S=C:T.sibling=C,T=C);return t&&A.forEach(function(L){return e(w,L)}),Le&&_r(w,_),S}function y(w,m,b,x){var S=Ns(b);if(typeof S!="function")throw Error(W(150));if(b=S.call(b),b==null)throw Error(W(151));for(var T=S=null,A=m,_=m=0,C=null,P=b.next();A!==null&&!P.done;_++,P=b.next()){A.index>_?(C=A,A=null):C=A.sibling;var L=g(w,A,P.value,x);if(L===null){A===null&&(A=C);break}t&&A&&L.alternate===null&&e(w,A),m=a(L,m,_),T===null?S=L:T.sibling=L,T=L,A=C}if(P.done)return n(w,A),Le&&_r(w,_),S;if(A===null){for(;!P.done;_++,P=b.next())P=d(w,P.value,x),P!==null&&(m=a(P,m,_),T===null?S=P:T.sibling=P,T=P);return Le&&_r(w,_),S}for(A=o(w,A);!P.done;_++,P=b.next())P=p(A,w,_,P.value,x),P!==null&&(t&&P.alternate!==null&&A.delete(P.key===null?_:P.key),m=a(P,m,_),T===null?S=P:T.sibling=P,T=P);return t&&A.forEach(function(O){return e(w,O)}),Le&&_r(w,_),S}function k(w,m,b,x){if(typeof b=="object"&&b!==null&&b.type===Ca&&b.key===null&&(b=b.props.children),typeof b=="object"&&b!==null){switch(b.$$typeof){case Cl:e:{for(var S=b.key,T=m;T!==null;){if(T.key===S){if(S=b.type,S===Ca){if(T.tag===7){n(w,T.sibling),m=r(T,b.props.children),m.return=w,w=m;break e}}else if(T.elementType===S||typeof S=="object"&&S!==null&&S.$$typeof===No&&Yf(S)===T.type){n(w,T.sibling),m=r(T,b.props),m.ref=Fs(w,T,b),m.return=w,w=m;break e}n(w,T);break}else e(w,T);T=T.sibling}b.type===Ca?(m=Fr(b.props.children,w.mode,x,b.key),m.return=w,w=m):(x=bc(b.type,b.key,b.props,null,w.mode,x),x.ref=Fs(w,m,b),x.return=w,w=x)}return s(w);case _a:e:{for(T=b.key;m!==null;){if(m.key===T)if(m.tag===4&&m.stateNode.containerInfo===b.containerInfo&&m.stateNode.implementation===b.implementation){n(w,m.sibling),m=r(m,b.children||[]),m.return=w,w=m;break e}else{n(w,m);break}else e(w,m);m=m.sibling}m=Vu(b,w.mode,x),m.return=w,w=m}return s(w);case No:return T=b._init,k(w,m,T(b._payload),x)}if(Xs(b))return v(w,m,b,x);if(Ns(b))return y(w,m,b,x);Dl(w,b)}return typeof b=="string"&&b!==""||typeof b=="number"?(b=""+b,m!==null&&m.tag===6?(n(w,m.sibling),m=r(m,b),m.return=w,w=m):(n(w,m),m=Yu(b,w.mode,x),m.return=w,w=m),s(w)):n(w,m)}return k}var cs=ek(!0),tk=ek(!1),zc=fr(null),$c=null,Ra=null,Fg=null;function Hg(){Fg=Ra=$c=null}function zg(t){var e=zc.current;Re(zc),t._currentValue=e}function rp(t,e,n){for(;t!==null;){var o=t.alternate;if((t.childLanes&e)!==e?(t.childLanes|=e,o!==null&&(o.childLanes|=e)):o!==null&&(o.childLanes&e)!==e&&(o.childLanes|=e),t===n)break;t=t.return}}function za(t,e){$c=t,Fg=Ra=null,t=t.dependencies,t!==null&&t.firstContext!==null&&(t.lanes&e&&(Et=!0),t.firstContext=null)}function en(t){var e=t._currentValue;if(Fg!==t)if(t={context:t,memoizedValue:e,next:null},Ra===null){if($c===null)throw Error(W(308));Ra=t,$c.dependencies={lanes:0,firstContext:t}}else Ra=Ra.next=t;return e}var Pr=null;function $g(t){Pr===null?Pr=[t]:Pr.push(t)}function nk(t,e,n,o){var r=e.interleaved;return r===null?(n.next=n,$g(e)):(n.next=r.next,r.next=n),e.interleaved=n,wo(t,o)}function wo(t,e){t.lanes|=e;var n=t.alternate;for(n!==null&&(n.lanes|=e),n=t,t=t.return;t!==null;)t.childLanes|=e,n=t.alternate,n!==null&&(n.childLanes|=e),n=t,t=t.return;return n.tag===3?n.stateNode:null}var Lo=!1;function Ug(t){t.updateQueue={baseState:t.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function ok(t,e){t=t.updateQueue,e.updateQueue===t&&(e.updateQueue={baseState:t.baseState,firstBaseUpdate:t.firstBaseUpdate,lastBaseUpdate:t.lastBaseUpdate,shared:t.shared,effects:t.effects})}function mo(t,e){return{eventTime:t,lane:e,tag:0,payload:null,callback:null,next:null}}function nr(t,e,n){var o=t.updateQueue;if(o===null)return null;if(o=o.shared,xe&2){var r=o.pending;return r===null?e.next=e:(e.next=r.next,r.next=e),o.pending=e,wo(t,n)}return r=o.interleaved,r===null?(e.next=e,$g(o)):(e.next=r.next,r.next=e),o.interleaved=e,wo(t,n)}function pc(t,e,n){if(e=e.updateQueue,e!==null&&(e=e.shared,(n&4194240)!==0)){var o=e.lanes;o&=t.pendingLanes,n|=o,e.lanes=n,Pg(t,n)}}function Vf(t,e){var n=t.updateQueue,o=t.alternate;if(o!==null&&(o=o.updateQueue,n===o)){var r=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var s={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};a===null?r=a=s:a=a.next=s,n=n.next}while(n!==null);a===null?r=a=e:a=a.next=e}else r=a=e;n={baseState:o.baseState,firstBaseUpdate:r,lastBaseUpdate:a,shared:o.shared,effects:o.effects},t.updateQueue=n;return}t=n.lastBaseUpdate,t===null?n.firstBaseUpdate=e:t.next=e,n.lastBaseUpdate=e}function Uc(t,e,n,o){var r=t.updateQueue;Lo=!1;var a=r.firstBaseUpdate,s=r.lastBaseUpdate,i=r.shared.pending;if(i!==null){r.shared.pending=null;var l=i,c=l.next;l.next=null,s===null?a=c:s.next=c,s=l;var u=t.alternate;u!==null&&(u=u.updateQueue,i=u.lastBaseUpdate,i!==s&&(i===null?u.firstBaseUpdate=c:i.next=c,u.lastBaseUpdate=l))}if(a!==null){var d=r.baseState;s=0,u=c=l=null,i=a;do{var g=i.lane,p=i.eventTime;if((o&g)===g){u!==null&&(u=u.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var v=t,y=i;switch(g=e,p=n,y.tag){case 1:if(v=y.payload,typeof v=="function"){d=v.call(p,d,g);break e}d=v;break e;case 3:v.flags=v.flags&-65537|128;case 0:if(v=y.payload,g=typeof v=="function"?v.call(p,d,g):v,g==null)break e;d=He({},d,g);break e;case 2:Lo=!0}}i.callback!==null&&i.lane!==0&&(t.flags|=64,g=r.effects,g===null?r.effects=[i]:g.push(i))}else p={eventTime:p,lane:g,tag:i.tag,payload:i.payload,callback:i.callback,next:null},u===null?(c=u=p,l=d):u=u.next=p,s|=g;if(i=i.next,i===null){if(i=r.shared.pending,i===null)break;g=i,i=g.next,g.next=null,r.lastBaseUpdate=g,r.shared.pending=null}}while(!0);if(u===null&&(l=d),r.baseState=l,r.firstBaseUpdate=c,r.lastBaseUpdate=u,e=r.shared.interleaved,e!==null){r=e;do s|=r.lane,r=r.next;while(r!==e)}else a===null&&(r.shared.lanes=0);Ur|=s,t.lanes=s,t.memoizedState=d}}function Gf(t,e,n){if(t=e.effects,e.effects=null,t!==null)for(e=0;e<t.length;e++){var o=t[e],r=o.callback;if(r!==null){if(o.callback=null,o=n,typeof r!="function")throw Error(W(191,r));r.call(o)}}}var pl={},Yn=fr(pl),Mi=fr(pl),Ri=fr(pl);function jr(t){if(t===pl)throw Error(W(174));return t}function Yg(t,e){switch(je(Ri,e),je(Mi,t),je(Yn,pl),t=e.nodeType,t){case 9:case 11:e=(e
vendor: 1,337 bytes, line 39
39=e.documentElement)?e.namespaceURI:Dd(null,"");break;default:t=t===8?e.parentNode:e,e=t.namespaceURI||null,t=t.tagName,e=Dd(e,t)}Re(Yn),je(Yn,e)}function hs(){Re(Yn),Re(Mi),Re(Ri)}function rk(t){jr(Ri.current);var e=jr(Yn.current),n=Dd(e,t.type);e!==n&&(je(Mi,t),je(Yn,n))}function Vg(t){Mi.current===t&&(Re(Yn),Re(Mi))}var We=fr(0);function Yc(t){for(var e=t;e!==null;){if(e.tag===13){var n=e.memoizedState;if(n!==null&&(n=n.dehydrated,n===null||n.data==="$?"||n.data==="$!"))return e}else if(e.tag===19&&e.memoizedProps.revealOrder!==void 0){if(e.flags&128)return e}else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return null;e=e.return}e.sibling.return=e.return,e=e.sibling}return null}var qu=[];function Gg(){for(var t=0;t<qu.length;t++)qu[t]._workInProgressVersionPrimary=null;qu.length=0}var gc=So.ReactCurrentDispatcher,Fu=So.ReactCurrentBatchConfig,$r=0,Fe=null,Xe=null,nt=null,Vc=!1,gi=!1,Ni=0,g4=0;function ht(){throw Error(W(321))}function Kg(t,e){if(e===null)return!1;for(var n=0;n<e.length&&n<t.length;n++)if(!En(t[n],e[n]))return!1;return!0}function Jg(t,e,n,o,r,a){if($r=a,Fe=e,e.memoizedState=null,e.updateQueue=null,e.lanes=0,gc.current=t===null||t.memoizedState===null?w4:b4,t=n(o,r),gi){a=0;do{if(gi=!1,Ni=0,25<=a)throw Error(W(301));
vendor: 6,486 bytes, line 39
39a+=1,nt=Xe=null,e.updateQueue=null,gc.current=v4,t=n(o,r)}while(gi)}if(gc.current=Gc,e=Xe!==null&&Xe.next!==null,$r=0,nt=Xe=Fe=null,Vc=!1,e)throw Error(W(300));return t}function Qg(){var t=Ni!==0;return Ni=0,t}function Nn(){var t={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return nt===null?Fe.memoizedState=nt=t:nt=nt.next=t,nt}function tn(){if(Xe===null){var t=Fe.alternate;t=t!==null?t.memoizedState:null}else t=Xe.next;var e=nt===null?Fe.memoizedState:nt.next;if(e!==null)nt=e,Xe=t;else{if(t===null)throw Error(W(310));Xe=t,t={memoizedState:Xe.memoizedState,baseState:Xe.baseState,baseQueue:Xe.baseQueue,queue:Xe.queue,next:null},nt===null?Fe.memoizedState=nt=t:nt=nt.next=t}return nt}function Li(t,e){return typeof e=="function"?e(t):e}function Hu(t){var e=tn(),n=e.queue;if(n===null)throw Error(W(311));n.lastRenderedReducer=t;var o=Xe,r=o.baseQueue,a=n.pending;if(a!==null){if(r!==null){var s=r.next;r.next=a.next,a.next=s}o.baseQueue=r=a,n.pending=null}if(r!==null){a=r.next,o=o.baseState;var i=s=null,l=null,c=a;do{var u=c.lane;if(($r&u)===u)l!==null&&(l=l.next={lane:0,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null}),o=c.hasEagerState?c.eagerState:t(o,c.action);else{var d={lane:u,action:c.action,hasEagerState:c.hasEagerState,eagerState:c.eagerState,next:null};l===null?(i=l=d,s=o):l=l.next=d,Fe.lanes|=u,Ur|=u}c=c.next}while(c!==null&&c!==a);l===null?s=o:l.next=i,En(o,e.memoizedState)||(Et=!0),e.memoizedState=o,e.baseState=s,e.baseQueue=l,n.lastRenderedState=o}if(t=n.interleaved,t!==null){r=t;do a=r.lane,Fe.lanes|=a,Ur|=a,r=r.next;while(r!==t)}else r===null&&(n.lanes=0);return[e.memoizedState,n.dispatch]}function zu(t){var e=tn(),n=e.queue;if(n===null)throw Error(W(311));n.lastRenderedReducer=t;var o=n.dispatch,r=n.pending,a=e.memoizedState;if(r!==null){n.pending=null;var s=r=r.next;do a=t(a,s.action),s=s.next;while(s!==r);En(a,e.memoizedState)||(Et=!0),e.memoizedState=a,e.baseQueue===null&&(e.baseState=a),n.lastRenderedState=a}return[a,o]}function ak(){}function sk(t,e){var n=Fe,o=tn(),r=e(),a=!En(o.memoizedState,r);if(a&&(o.memoizedState=r,Et=!0),o=o.queue,Zg(ck.bind(null,n,o,t),[t]),o.getSnapshot!==e||a||nt!==null&&nt.memoizedState.tag&1){if(n.flags|=2048,Di(9,lk.bind(null,n,o,r,e),void 0,null),ot===null)throw Error(W(349));$r&30||ik(n,e,r)}return r}function ik(t,e,n){t.flags|=16384,t={getSnapshot:e,value:n},e=Fe.updateQueue,e===null?(e={lastEffect:null,stores:null},Fe.updateQueue=e,e.stores=[t]):(n=e.stores,n===null?e.stores=[t]:n.push(t))}function lk(t,e,n,o){e.value=n,e.getSnapshot=o,hk(e)&&uk(t)}function ck(t,e,n){return n(function(){hk(e)&&uk(t)})}function hk(t){var e=t.getSnapshot;t=t.value;try{var n=e();return!En(t,n)}catch{return!0}}function uk(t){var e=wo(t,1);e!==null&&_n(e,t,1,-1)}function Kf(t){var e=Nn();return typeof t=="function"&&(t=t()),e.memoizedState=e.baseState=t,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:Li,lastRenderedState:t},e.queue=t,t=t.dispatch=y4.bind(null,Fe,t),[e.memoizedState,t]}function Di(t,e,n,o){return t={tag:t,create:e,destroy:n,deps:o,next:null},e=Fe.updateQueue,e===null?(e={lastEffect:null,stores:null},Fe.updateQueue=e,e.lastEffect=t.next=t):(n=e.lastEffect,n===null?e.lastEffect=t.next=t:(o=n.next,n.next=t,t.next=o,e.lastEffect=t)),t}function dk(){return tn().memoizedState}function mc(t,e,n,o){var r=Nn();Fe.flags|=t,r.memoizedState=Di(1|e,n,void 0,o===void 0?null:o)}function Rh(t,e,n,o){var r=tn();o=o===void 0?null:o;var a=void 0;if(Xe!==null){var s=Xe.memoizedState;if(a=s.destroy,o!==null&&Kg(o,s.deps)){r.memoizedState=Di(e,n,a,o);return}}Fe.flags|=t,r.memoizedState=Di(1|e,n,a,o)}function Jf(t,e){return mc(8390656,8,t,e)}function Zg(t,e){return Rh(2048,8,t,e)}function pk(t,e){return Rh(4,2,t,e)}function gk(t,e){return Rh(4,4,t,e)}function mk(t,e){if(typeof e=="function")return t=t(),e(t),function(){e(null)};if(e!=null)return t=t(),e.current=t,function(){e.current=null}}function fk(t,e,n){return n=n!=null?n.concat([t]):null,Rh(4,4,mk.bind(null,e,t),n)}function Xg(){}function yk(t,e){var n=tn();e=e===void 0?null:e;var o=n.memoizedState;return o!==null&&e!==null&&Kg(e,o[1])?o[0]:(n.memoizedState=[t,e],t)}function wk(t,e){var n=tn();e=e===void 0?null:e;var o=n.memoizedState;return o!==null&&e!==null&&Kg(e,o[1])?o[0]:(t=t(),n.memoizedState=[t,e],t)}function bk(t,e,n){return $r&21?(En(n,e)||(n=Tv(),Fe.lanes|=n,Ur|=n,t.baseState=!0),e):(t.baseState&&(t.baseState=!1,Et=!0),t.memoizedState=n)}function m4(t,e){var n=Ce;Ce=n!==0&&4>n?n:4,t(!0);var o=Fu.transition;Fu.transition={};try{t(!1),e()}finally{Ce=n,Fu.transition=o}}function vk(){return tn().memoizedState}function f4(t,e,n){var o=rr(t);if(n={lane:o,action:n,hasEagerState:!1,eagerState:null,next:null},kk(t))xk(e,n);else if(n=nk(t,e,n,o),n!==null){var r=kt();_n(n,t,o,r),Sk(n,e,o)}}function y4(t,e,n){var o=rr(t),r={lane:o,action:n,hasEagerState:!1,eagerState:null,next:null};if(kk(t))xk(e,r);else{var a=t.alternate;if(t.lanes===0&&(a===null||a.lanes===0)&&(a=e.lastRenderedReducer,a!==null))try{var s=e.lastRenderedState,i=a(s,n);if(r.hasEagerState=!0,r.eagerState=i,En(i,s)){var l=e.interleaved;l===null?(r.next=r,$g(e)):(r.next=l.next,l.next=r),e.interleaved=r;return}}catch{}finally{}n=nk(t,e,r,o),n!==null&&(r=kt(),_n(n,t,o,r),Sk(n,e,o))}}function kk(t){var e=t.alternate;return t===Fe||e!==null&&e===Fe}function xk(t,e){gi=Vc=!0;var n=t.pending;n===null?e.next=e:(e.next=n.next,n.next=e),t.pending=e}function Sk(t,e,n){if(n&4194240){var o=e.lanes;o&=t.pendingLanes,n|=o,e.lanes=n,Pg(t,n)}}var Gc={readContext:en,useCallback:ht,useContext:ht,useEffect:ht,useImperativeHandle:ht,useInsertionEffect:ht,useLayoutEffect:ht,useMemo:ht,useReducer:ht,useRef:ht,useState:ht,useDebugValue:ht,useDeferredValue:ht,useTransition:ht,useMutableSource:ht,useSyncExternalStore:ht,useId:ht,unstable_isNewReconciler:!1},w4={readContext:en,useCallback:function(t,e){return Nn().memoizedState=[t,e===void 0?null:e],t},useContext:en,useEffect:Jf,useImperativeHandle:function(t,e,n){return n=n!=null?n.concat([t]):null,mc(4194308,4,mk.bind(null,e,t),n)},useLayoutEffect:function(t,e){return mc(4194308,4,t,e)},useInsertionEffect:function(t,e){return mc(4,2,t,e)},useMemo:function(t,e){var n=Nn();return e=e===void 0?null:e,t=t(),n.memoizedState=[t,e],t},useReducer:function(t,e,n){var o=Nn();return e=n!==void 0?n(e):e,o.memoizedState=o.baseState=e,t={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:t,lastRenderedState:e}
vendor: 4,772 bytes, lines 39-41
39,o.queue=t,t=t.dispatch=f4.bind(null,Fe,t),[o.memoizedState,t]},useRef:function(t){var e=Nn();return t={current:t},e.memoizedState=t},useState:Kf,useDebugValue:Xg,useDeferredValue:function(t){return Nn().memoizedState=t},useTransition:function(){var t=Kf(!1),e=t[0];return t=m4.bind(null,t[1]),Nn().memoizedState=t,[e,t]},useMutableSource:function(){},useSyncExternalStore:function(t,e,n){var o=Fe,r=Nn();if(Le){if(n===void 0)throw Error(W(407));n=n()}else{if(n=e(),ot===null)throw Error(W(349));$r&30||ik(o,e,n)}r.memoizedState=n;var a={value:n,getSnapshot:e};return r.queue=a,Jf(ck.bind(null,o,a,t),[t]),o.flags|=2048,Di(9,lk.bind(null,o,a,n,e),void 0,null),n},useId:function(){var t=Nn(),e=ot.identifierPrefix;if(Le){var n=go,o=po;n=(o&~(1<<32-An(o)-1)).toString(32)+n,e=":"+e+"R"+n,n=Ni++,0<n&&(e+="H"+n.toString(32)),e+=":"}else n=g4++,e=":"+e+"r"+n.toString(32)+":";return t.memoizedState=e},unstable_isNewReconciler:!1},b4={readContext:en,useCallback:yk,useContext:en,useEffect:Zg,useImperativeHandle:fk,useInsertionEffect:pk,useLayoutEffect:gk,useMemo:wk,useReducer:Hu,useRef:dk,useState:function(){return Hu(Li)},useDebugValue:Xg,useDeferredValue:function(t){var e=tn();return bk(e,Xe.memoizedState,t)},useTransition:function(){var t=Hu(Li)[0],e=tn().memoizedState;return[t,e]},useMutableSource:ak,useSyncExternalStore:sk,useId:vk,unstable_isNewReconciler:!1},v4={readContext:en,useCallback:yk,useContext:en,useEffect:Zg,useImperativeHandle:fk,useInsertionEffect:pk,useLayoutEffect:gk,useMemo:wk,useReducer:zu,useRef:dk,useState:function(){return zu(Li)},useDebugValue:Xg,useDeferredValue:function(t){var e=tn();return Xe===null?e.memoizedState=t:bk(e,Xe.memoizedState,t)},useTransition:function(){var t=zu(Li)[0],e=tn().memoizedState;return[t,e]},useMutableSource:ak,useSyncExternalStore:sk,useId:vk,unstable_isNewReconciler:!1};function fn(t,e){if(t&&t.defaultProps){e=He({},e),t=t.defaultProps;for(var n in t)e[n]===void 0&&(e[n]=t[n]);return e}return e}function ap(t,e,n,o){e=t.memoizedState,n=n(o,e),n=n==null?e:He({},e,n),t.memoizedState=n,t.lanes===0&&(t.updateQueue.baseState=n)}var Nh={isMounted:function(t){return(t=t._reactInternals)?oa(t)===t:!1},enqueueSetState:function(t,e,n){t=t._reactInternals;var o=kt(),r=rr(t),a=mo(o,r);a.payload=e,n!=null&&(a.callback=n),e=nr(t,a,r),e!==null&&(_n(e,t,r,o),pc(e,t,r))},enqueueReplaceState:function(t,e,n){t=t._reactInternals;var o=kt(),r=rr(t),a=mo(o,r);a.tag=1,a.payload=e,n!=null&&(a.callback=n),e=nr(t,a,r),e!==null&&(_n(e,t,r,o),pc(e,t,r))},enqueueForceUpdate:function(t,e){t=t._reactInternals;var n=kt(),o=rr(t),r=mo(n,o);r.tag=2,e!=null&&(r.callback=e),e=nr(t,r,o),e!==null&&(_n(e,t,o,n),pc(e,t,o))}};function Qf(t,e,n,o,r,a,s){return t=t.stateNode,typeof t.shouldComponentUpdate=="function"?t.shouldComponentUpdate(o,a,s):e.prototype&&e.prototype.isPureReactComponent?!Pi(n,o)||!Pi(r,a):!0}function Tk(t,e,n){var o=!1,r=cr,a=e.contextType;return typeof a=="object"&&a!==null?a=en(a):(r=Pt(e)?Hr:ft.current,o=e.contextTypes,a=(o=o!=null)?is(t,r):cr),e=new e(n,a),t.memoizedState=e.state!==null&&e.state!==void 0?e.state:null,e.updater=Nh,t.stateNode=e,e._reactInternals=t,o&&(t=t.stateNode,t.__reactInternalMemoizedUnmaskedChildContext=r,t.__reactInternalMemoizedMaskedChildContext=a),e}function Zf(t,e,n,o){t=e.state,typeof e.componentWillReceiveProps=="function"&&e.componentWillReceiveProps(n,o),typeof e.UNSAFE_componentWillReceiveProps=="function"&&e.UNSAFE_componentWillReceiveProps(n,o),e.state!==t&&Nh.enqueueReplaceState(e,e.state,null)}function sp(t,e,n,o){var r=t.stateNode;r.props=n,r.state=t.memoizedState,r.refs={},Ug(t);var a=e.contextType;typeof a=="object"&&a!==null?r.context=en(a):(a=Pt(e)?Hr:ft.current,r.context=is(t,a)),r.state=t.memoizedState,a=e.getDerivedStateFromProps,typeof a=="function"&&(ap(t,e,a,n),r.state=t.memoizedState),typeof e.getDerivedStateFromProps=="function"||typeof r.getSnapshotBeforeUpdate=="function"||typeof r.UNSAFE_componentWillMount!="function"&&typeof r.componentWillMount!="function"||(e=r.state,typeof r.componentWillMount=="function"&&r.componentWillMount(),typeof r.UNSAFE_componentWillMount=="function"&&r.UNSAFE_componentWillMount(),e!==r.state&&Nh.enqueueReplaceState(r,r.state,null),Uc(t,n,r,o),r.state=t.memoizedState),typeof r.componentDidMount=="function"&&(t.flags|=4194308)}function us(t,e){try{var n="",o=e;do n+=GS(o),o=o.return;while(o);var r=n}catch(a){r=`
40Error generating stack: `+a.message+`
41`+a.stack}return{value:t,source:e,stack:r,digest:null}}function $u(t,e,n){return{value:t,source:null,stack:n??null,digest:e??null}}function ip(t,e){try{console.error(e.value)}catch(n){setTimeout(function(){throw n})}}var k4=typeof WeakMap=="function"?WeakMap:Map;function Ak(t,e,n){n=mo(-1,n),n.tag=3,n.payload={element:null};var o=e.value;
vendor: 11,233 bytes, line 41
41return n.callback=function(){Jc||(Jc=!0,yp=o),ip(t,e)},n}function _k(t,e,n){n=mo(-1,n),n.tag=3;var o=t.type.getDerivedStateFromError;if(typeof o=="function"){var r=e.value;n.payload=function(){return o(r)},n.callback=function(){ip(t,e)}}var a=t.stateNode;return a!==null&&typeof a.componentDidCatch=="function"&&(n.callback=function(){ip(t,e),typeof o!="function"&&(or===null?or=new Set([this]):or.add(this));var s=e.stack;this.componentDidCatch(e.value,{componentStack:s!==null?s:""})}),n}function Xf(t,e,n){var o=t.pingCache;if(o===null){o=t.pingCache=new k4;var r=new Set;o.set(e,r)}else r=o.get(e),r===void 0&&(r=new Set,o.set(e,r));r.has(n)||(r.add(n),t=R4.bind(null,t,e,n),e.then(t,t))}function ey(t){do{var e;if((e=t.tag===13)&&(e=t.memoizedState,e=e!==null?e.dehydrated!==null:!0),e)return t;t=t.return}while(t!==null);return null}function ty(t,e,n,o,r){return t.mode&1?(t.flags|=65536,t.lanes=r,t):(t===e?t.flags|=65536:(t.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(e=mo(-1,1),e.tag=2,nr(n,e,1))),n.lanes|=1),t)}var x4=So.ReactCurrentOwner,Et=!1;function bt(t,e,n,o){e.child=t===null?tk(e,null,n,o):cs(e,t.child,n,o)}function ny(t,e,n,o,r){n=n.render;var a=e.ref;return za(e,r),o=Jg(t,e,n,o,a,r),n=Qg(),t!==null&&!Et?(e.updateQueue=t.updateQueue,e.flags&=-2053,t.lanes&=~r,bo(t,e,r)):(Le&&n&&Dg(e),e.flags|=1,bt(t,e,o,r),e.child)}function oy(t,e,n,o,r){if(t===null){var a=n.type;return typeof a=="function"&&!im(a)&&a.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(e.tag=15,e.type=a,Ck(t,e,a,o,r)):(t=bc(n.type,null,o,e,e.mode,r),t.ref=e.ref,t.return=e,e.child=t)}if(a=t.child,!(t.lanes&r)){var s=a.memoizedProps;if(n=n.compare,n=n!==null?n:Pi,n(s,o)&&t.ref===e.ref)return bo(t,e,r)}return e.flags|=1,t=ar(a,o),t.ref=e.ref,t.return=e,e.child=t}function Ck(t,e,n,o,r){if(t!==null){var a=t.memoizedProps;if(Pi(a,o)&&t.ref===e.ref)if(Et=!1,e.pendingProps=o=a,(t.lanes&r)!==0)t.flags&131072&&(Et=!0);else return e.lanes=t.lanes,bo(t,e,r)}return lp(t,e,n,o,r)}function Ek(t,e,n){var o=e.pendingProps,r=o.children,a=t!==null?t.memoizedState:null;if(o.mode==="hidden")if(!(e.mode&1))e.memoizedState={baseLanes:0,cachePool:null,transitions:null},je(La,Nt),Nt|=n;else{if(!(n&1073741824))return t=a!==null?a.baseLanes|n:n,e.lanes=e.childLanes=1073741824,e.memoizedState={baseLanes:t,cachePool:null,transitions:null},e.updateQueue=null,je(La,Nt),Nt|=t,null;e.memoizedState={baseLanes:0,cachePool:null,transitions:null},o=a!==null?a.baseLanes:n,je(La,Nt),Nt|=o}else a!==null?(o=a.baseLanes|n,e.memoizedState=null):o=n,je(La,Nt),Nt|=o;return bt(t,e,r,n),e.child}function Ik(t,e){var n=e.ref;(t===null&&n!==null||t!==null&&t.ref!==n)&&(e.flags|=512,e.flags|=2097152)}function lp(t,e,n,o,r){var a=Pt(n)?Hr:ft.current;return a=is(e,a),za(e,r),n=Jg(t,e,n,o,a,r),o=Qg(),t!==null&&!Et?(e.updateQueue=t.updateQueue,e.flags&=-2053,t.lanes&=~r,bo(t,e,r)):(Le&&o&&Dg(e),e.flags|=1,bt(t,e,n,r),e.child)}function ry(t,e,n,o,r){if(Pt(n)){var a=!0;qc(e)}else a=!1;if(za(e,r),e.stateNode===null)fc(t,e),Tk(e,n,o),sp(e,n,o,r),o=!0;else if(t===null){var s=e.stateNode,i=e.memoizedProps;s.props=i;var l=s.context,c=n.contextType;typeof c=="object"&&c!==null?c=en(c):(c=Pt(n)?Hr:ft.current,c=is(e,c));var u=n.getDerivedStateFromProps,d=typeof u=="function"||typeof s.getSnapshotBeforeUpdate=="function";d||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(i!==o||l!==c)&&Zf(e,s,o,c),Lo=!1;var g=e.memoizedState;s.state=g,Uc(e,o,s,r),l=e.memoizedState,i!==o||g!==l||It.current||Lo?(typeof u=="function"&&(ap(e,n,u,o),l=e.memoizedState),(i=Lo||Qf(e,n,i,o,g,l,c))?(d||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"&&(e.flags|=4194308)):(typeof s.componentDidMount=="function"&&(e.flags|=4194308),e.memoizedProps=o,e.memoizedState=l),s.props=o,s.state=l,s.context=c,o=i):(typeof s.componentDidMount=="function"&&(e.flags|=4194308),o=!1)}else{s=e.stateNode,ok(t,e),i=e.memoizedProps,c=e.type===e.elementType?i:fn(e.type,i),s.props=c,d=e.pendingProps,g=s.context,l=n.contextType,typeof l=="object"&&l!==null?l=en(l):(l=Pt(n)?Hr:ft.current,l=is(e,l));var p=n.getDerivedStateFromProps;(u=typeof p=="function"||typeof s.getSnapshotBeforeUpdate=="function")||typeof s.UNSAFE_componentWillReceiveProps!="function"&&typeof s.componentWillReceiveProps!="function"||(i!==d||g!==l)&&Zf(e,s,o,l),Lo=!1,g=e.memoizedState,s.state=g,Uc(e,o,s,r);var v=e.memoizedState;i!==d||g!==v||It.current||Lo?(typeof p=="function"&&(ap(e,n,p,o),v=e.memoizedState),(c=Lo||Qf(e,n,c,o,g,v,l)||!1)?(u||typeof s.UNSAFE_componentWillUpdate!="function"&&typeof s.componentWillUpdate!="function"||(typeof s.componentWillUpdate=="function"&&s.componentWillUpdate(o,v,l),typeof s.UNSAFE_componentWillUpdate=="function"&&s.UNSAFE_componentWillUpdate(o,v,l)),typeof s.componentDidUpdate=="function"&&(e.flags|=4),typeof s.getSnapshotBeforeUpdate=="function"&&(e.flags|=1024)):(typeof s.componentDidUpdate!="function"||i===t.memoizedProps&&g===t.memoizedState||(e.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||i===t.memoizedProps&&g===t.memoizedState||(e.flags|=1024),e.memoizedProps=o,e.memoizedState=v),s.props=o,s.state=v,s.context=l,o=c):(typeof s.componentDidUpdate!="function"||i===t.memoizedProps&&g===t.memoizedState||(e.flags|=4),typeof s.getSnapshotBeforeUpdate!="function"||i===t.memoizedProps&&g===t.memoizedState||(e.flags|=1024),o=!1)}return cp(t,e,n,o,a,r)}function cp(t,e,n,o,r,a){Ik(t,e);var s=(e.flags&128)!==0;if(!o&&!s)return r&&zf(e,n,!1),bo(t,e,a);o=e.stateNode,x4.current=e;var i=s&&typeof n.getDerivedStateFromError!="function"?null:o.render();return e.flags|=1,t!==null&&s?(e.child=cs(e,t.child,null,a),e.child=cs(e,null,i,a)):bt(t,e,i,a),e.memoizedState=o.state,r&&zf(e,n,!0),e.child}function Pk(t){var e=t.stateNode;e.pendingContext?Hf(t,e.pendingContext,e.pendingContext!==e.context):e.context&&Hf(t,e.context,!1),Yg(t,e.containerInfo)}function ay(t,e,n,o,r){return ls(),qg(r),e.flags|=256,bt(t,e,n,o),e.child}var hp={dehydrated:null,treeContext:null,retryLane:0};function up(t){return{baseLanes:t,cachePool:null,transitions:null}}function jk(t,e,n){var o=e.pendingProps,r=We.current,a=!1,s=(e.flags&128)!==0,i;if((i=s)||(i=t!==null&&t.memoizedState===null?!1:(r&2)!==0),i?(a=!0,e.flags&=-129):(t===null||t.memoizedState!==null)&&(r|=1),je(We,r&1),t===null)return op(e),t=e.memoizedState,t!==null&&(t=t.dehydrated,t!==null)?(e.mode&1?t.data==="$!"?e.lanes=8:e.lanes=1073741824:e.lanes=1,null):(s=o.children,t=o.fallback,a?(o=e.mode,a=e.child,s={mode:"hidden",children:s},!(o&1)&&a!==null?(a.childLanes=0,a.pendingProps=s):a=Wh(s,o,0,null),t=Fr(t,o,n,null),a.return=e,t.return=e,a.sibling=t,e.child=a,e.child.memoizedState=up(n),e.memoizedState=hp,t):em(e,s));if(r=t.memoizedState,r!==null&&(i=r.dehydrated,i!==null))return S4(t,e,s,o,i,r,n);if(a){a=o.fallback,s=e.mode,r=t.child,i=r.sibling;var l={mode:"hidden",children:o.children};return!(s&1)&&e.child!==r?(o=e.child,o.childLanes=0,o.pendingProps=l,e.deletions=null):(o=ar(r,l),o.subtreeFlags=r.subtreeFlags&14680064),i!==null?a=ar(i,a):(a=Fr(a,s,n,null),a.flags|=2),a.return=e,o.return=e,o.sibling=a,e.child=o,o=a,a=e.child,s=t.child.memoizedState,s=s===null?up(n):{baseLanes:s.baseLanes|n,cachePool:null,transitions:s.transitions},a.memoizedState=s,a.childLanes=t.childLanes&~n,e.memoizedState=hp,o}return a=t.child,t=a.sibling,o=ar(a,{mode:"visible",children:o.children}),!(e.mode&1)&&(o.lanes=n),o.return=e,o.sibling=null,t!==null&&(n=e.deletions,n===null?(e.deletions=[t],e.flags|=16):n.push(t)),e.child=o,e.memoizedState=null,o}function em(t,e){return e=Wh({mode:"visible",children:e},t.mode,0,null),e.return=t,t.child=e}function Wl(t,e,n,o){return o!==null&&qg(o),cs(e,t.child,null,n),t=em(e,e.pendingProps.children),t.flags|=2,e.memoizedState=null,t}function S4(t,e,n,o,r,a,s){if(n)return e.flags&256?(e.flags&=-257,o=$u(Error(W(422))),Wl(t,e,s,o)):e.memoizedState!==null?(e.child=t.child,e.flags|=128,null):(a=o.fallback,r=e.mode,o=Wh({mode:"visible",children:o.children},r,0,null),a=Fr(a,r,s,null),a.flags|=2,o.return=e,a.return=e,o.sibling=a,e.child=o,e.mode&1&&cs(e,t.child,null,s),e.child.memoizedState=up(s),e.memoizedState=hp,a);if(!(e.mode&1))return Wl(t,e,s,null);if(r.data==="$!"){if(o=r.nextSibling&&r.nextSibling.dataset,o)var i=o.dgst;return o=i,a=Error(W(419)),o=$u(a,o,void 0),Wl(t,e,s,o)}if(i=(s&t.childLanes)!==0,Et||i){if(o=ot,o!==null){switch(s&-s){case 4:r=2;break;case 16:r=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:r=32;break;case 536870912:r=268435456;break;default:r=0}r=r&(o.suspendedLanes|s)?0:r,r!==0&&r!==a.retryLane&&(a.retryLane=r,wo(t,r),_n(o,t,r,-1))}return sm(),o=$u(Error(W(421))),Wl(t,e,s,o)}return r.data==="$?"?(e.flags|=128,e.child=t.child,e=N4.bind(null,t),r._reactRetry=e,null):(t=a.treeContext,Wt=tr(r.nextSibling),qt=e,Le=!0,xn=null,t!==null&&(Jt[Qt++]=po,Jt[Qt++]=go,Jt[Qt++]=zr,po=t.id,go=t.overflow,zr=e),e=em(e,o.children),e.flags|=4096,e)}function sy(t,e,n){t.lanes|=e;var o=t.alternate;o!==null&&(o.lanes|=e),rp(t.return,e,n)}function Uu(t,e,n,o,r){var a=t.memoizedState;a===null?t.memoizedState={isBackwards:e,rendering:null,renderingStartTime:0,last:o,tail:n,tailMode:r}:(a.isBackwards=e,a.rendering=null,a.renderingStartTime=0,a.last=o,a.tail=n,a.tailMode=r)}function Bk(t,e,n){var o=e.pendingProps,r=o.revealOrder,a=o.tail;if(bt(t,e,o.children,n),o=We.current,o&2)o=o&1|2,e.flags|=128;else{if(t!==null&&t.flags&128)e:for(t=e.child;t!==null;){if(t.tag===13)t.memoizedState!==null&&sy(t,n,e);else if(t.tag===19)sy(t,n,e);else if(t.child!==null){t.child.return=t,t=t.child;continue}if(t===e)break e;for(;t.sibling===null;){if(t.return===null||t.return===e)break e;t=t.return}t.sibling.return=t.return,t=t.sibling}o&=1}if(je(We,o),!(e.mode&1))e.memoizedState=null;else switch(r){case"forwards":for(n=e.child,r=null;n!==null;)t=n.alternate,t!==null&&Yc(t)===null&&(r=n),n=n.sibling;n=r,n===null?(r=e.child,e.child=null):(r=n.sibling,n.sibling=null),Uu(e,!1,r,n,a);break;case"backwards":for(n=null,r=e.child,e.child=null;r!==null;){if(t=r.alternate,t!==null&&Yc(t)===null){e.child=r;break}t=r.sibling,r.sibling=n,n=r,r=t}Uu(e,!0,n,null,a);break;case"together":Uu(e,!1,null,null,void 0);break;default:e.memoizedState=null}return e.child}function fc(t,e){!(e.mode&1)&&t!==null&&(t.alternate=null,e.alternate=null,e.flags|=2)}function bo(t,e,n){if(t!==null&&(e.dependencies=t.dependencies),Ur|=e.lanes,!(n&e.childLanes))return null;if(t!==null&&e.child!==t.child)throw Error(W(153));if(e.child!==null){for(t=e.child,n=ar(t,t.pendingProps),e.child=n,n.return=e;t.sibling!==null;)t=t.sibling,n=n.sibling=ar(t,t.pendingProps),n.return=e;n.sibling=null}return e.child}function T4(t,e,n){switch(e.tag){case 3:Pk(e),ls();break;case 5:rk(e);break;case 1:Pt(e.type)&&qc(e);break;case 4:Yg(e,e.stateNode.containerInfo);break;
vendor: 4,088 bytes, line 41
41case 10:var o=e.type._context,r=e.memoizedProps.value;je(zc,o._currentValue),o._currentValue=r;break;case 13:if(o=e.memoizedState,o!==null)return o.dehydrated!==null?(je(We,We.current&1),e.flags|=128,null):n&e.child.childLanes?jk(t,e,n):(je(We,We.current&1),t=bo(t,e,n),t!==null?t.sibling:null);je(We,We.current&1);break;case 19:if(o=(n&e.childLanes)!==0,t.flags&128){if(o)return Bk(t,e,n);e.flags|=128}if(r=e.memoizedState,r!==null&&(r.rendering=null,r.tail=null,r.lastEffect=null),je(We,We.current),o)break;return null;case 22:case 23:return e.lanes=0,Ek(t,e,n)}return bo(t,e,n)}var Ok,dp,Mk,Rk;Ok=function(t,e){for(var n=e.child;n!==null;){if(n.tag===5||n.tag===6)t.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===e)break;for(;n.sibling===null;){if(n.return===null||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};dp=function(){};Mk=function(t,e,n,o){var r=t.memoizedProps;if(r!==o){t=e.stateNode,jr(Yn.current);var a=null;switch(n){case"input":r=Md(t,r),o=Md(t,o),a=[];break;case"select":r=He({},r,{value:void 0}),o=He({},o,{value:void 0}),a=[];break;case"textarea":r=Ld(t,r),o=Ld(t,o),a=[];break;default:typeof r.onClick!="function"&&typeof o.onClick=="function"&&(t.onclick=Dc)}Wd(n,o);var s;n=null;for(c in r)if(!o.hasOwnProperty(c)&&r.hasOwnProperty(c)&&r[c]!=null)if(c==="style"){var i=r[c];for(s in i)i.hasOwnProperty(s)&&(n||(n={}),n[s]="")}else c!=="dangerouslySetInnerHTML"&&c!=="children"&&c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&c!=="autoFocus"&&(Si.hasOwnProperty(c)?a||(a=[]):(a=a||[]).push(c,null));for(c in o){var l=o[c];if(i=r!=null?r[c]:void 0,o.hasOwnProperty(c)&&l!==i&&(l!=null||i!=null))if(c==="style")if(i){for(s in i)!i.hasOwnProperty(s)||l&&l.hasOwnProperty(s)||(n||(n={}),n[s]="");for(s in l)l.hasOwnProperty(s)&&i[s]!==l[s]&&(n||(n={}),n[s]=l[s])}else n||(a||(a=[]),a.push(c,n)),n=l;else c==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,i=i?i.__html:void 0,l!=null&&i!==l&&(a=a||[]).push(c,l)):c==="children"?typeof l!="string"&&typeof l!="number"||(a=a||[]).push(c,""+l):c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&(Si.hasOwnProperty(c)?(l!=null&&c==="onScroll"&&Oe("scroll",t),a||i===l||(a=[])):(a=a||[]).push(c,l))}n&&(a=a||[]).push("style",n);var c=a;(e.updateQueue=c)&&(e.flags|=4)}};Rk=function(t,e,n,o){n!==o&&(e.flags|=4)};function Hs(t,e){if(!Le)switch(t.tailMode){case"hidden":e=t.tail;for(var n=null;e!==null;)e.alternate!==null&&(n=e),e=e.sibling;n===null?t.tail=null:n.sibling=null;break;case"collapsed":n=t.tail;for(var o=null;n!==null;)n.alternate!==null&&(o=n),n=n.sibling;o===null?e||t.tail===null?t.tail=null:t.tail.sibling=null:o.sibling=null}}function ut(t){var e=t.alternate!==null&&t.alternate.child===t.child,n=0,o=0;if(e)for(var r=t.child;r!==null;)n|=r.lanes|r.childLanes,o|=r.subtreeFlags&14680064,o|=r.flags&14680064,r.return=t,r=r.sibling;else for(r=t.child;r!==null;)n|=r.lanes|r.childLanes,o|=r.subtreeFlags,o|=r.flags,r.return=t,r=r.sibling;return t.subtreeFlags|=o,t.childLanes=n,e}function A4(t,e,n){var o=e.pendingProps;switch(Wg(e),e.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return ut(e),null;case 1:return Pt(e.type)&&Wc(),ut(e),null;case 3:return o=e.stateNode,hs(),Re(It),Re(ft),Gg(),o.pendingContext&&(o.context=o.pendingContext,o.pendingContext=null),(t===null||t.child===null)&&(Ll(e)?e.flags|=4:t===null||t.memoizedState.isDehydrated&&!(e.flags&256)||(e.flags|=1024,xn!==null&&(vp(xn),xn=null))),dp(t,e),ut(e),null;case 5:Vg(e);var r=jr(Ri.current);if(n=e.type,t!==null&&e.stateNode!=null)Mk(t,e,n,o,r),t.ref!==e.ref&&(e.flags|=512,e.flags|=2097152);else{if(!o){if(e.stateNode===null)throw Error(W(166));return ut(e),null}if(t=jr(Yn.current),Ll(e)){o=e.stateNode,n=e.type;var a=e.memoizedProps;switch(o[Hn]=e,o[Oi]=a,t=(e.mode&1)!==0,n){case"dialog":Oe("cancel",o),Oe("close",o);break;case"iframe":case"object":case"embed":Oe("load",o);break;case"video":case"audio":for(r=0;r<ti.length;r++)Oe(ti[r],o);break;case"source":Oe("error",o);break;
vendor: 32,761 bytes, line 41
41case"img":case"image":case"link":Oe("error",o),Oe("load",o);break;case"details":Oe("toggle",o);break;case"input":mf(o,a),Oe("invalid",o);break;case"select":o._wrapperState={wasMultiple:!!a.multiple},Oe("invalid",o);break;case"textarea":yf(o,a),Oe("invalid",o)}Wd(n,a),r=null;for(var s in a)if(a.hasOwnProperty(s)){var i=a[s];s==="children"?typeof i=="string"?o.textContent!==i&&(a.suppressHydrationWarning!==!0&&Nl(o.textContent,i,t),r=["children",i]):typeof i=="number"&&o.textContent!==""+i&&(a.suppressHydrationWarning!==!0&&Nl(o.textContent,i,t),r=["children",""+i]):Si.hasOwnProperty(s)&&i!=null&&s==="onScroll"&&Oe("scroll",o)}switch(n){case"input":El(o),ff(o,a,!0);break;case"textarea":El(o),wf(o);break;case"select":case"option":break;default:typeof a.onClick=="function"&&(o.onclick=Dc)}o=r,e.updateQueue=o,o!==null&&(e.flags|=4)}else{s=r.nodeType===9?r:r.ownerDocument,t==="http://www.w3.org/1999/xhtml"&&(t=cv(n)),t==="http://www.w3.org/1999/xhtml"?n==="script"?(t=s.createElement("div"),t.innerHTML="<script><\/script>",t=t.removeChild(t.firstChild)):typeof o.is=="string"?t=s.createElement(n,{is:o.is}):(t=s.createElement(n),n==="select"&&(s=t,o.multiple?s.multiple=!0:o.size&&(s.size=o.size))):t=s.createElementNS(t,n),t[Hn]=e,t[Oi]=o,Ok(t,e,!1,!1),e.stateNode=t;e:{switch(s=qd(n,o),n){case"dialog":Oe("cancel",t),Oe("close",t),r=o;break;case"iframe":case"object":case"embed":Oe("load",t),r=o;break;case"video":case"audio":for(r=0;r<ti.length;r++)Oe(ti[r],t);r=o;break;case"source":Oe("error",t),r=o;break;case"img":case"image":case"link":Oe("error",t),Oe("load",t),r=o;break;case"details":Oe("toggle",t),r=o;break;case"input":mf(t,o),r=Md(t,o),Oe("invalid",t);break;case"option":r=o;break;case"select":t._wrapperState={wasMultiple:!!o.multiple},r=He({},o,{value:void 0}),Oe("invalid",t);break;case"textarea":yf(t,o),r=Ld(t,o),Oe("invalid",t);break;default:r=o}Wd(n,r),i=r;for(a in i)if(i.hasOwnProperty(a)){var l=i[a];a==="style"?dv(t,l):a==="dangerouslySetInnerHTML"?(l=l?l.__html:void 0,l!=null&&hv(t,l)):a==="children"?typeof l=="string"?(n!=="textarea"||l!=="")&&Ti(t,l):typeof l=="number"&&Ti(t,""+l):a!=="suppressContentEditableWarning"&&a!=="suppressHydrationWarning"&&a!=="autoFocus"&&(Si.hasOwnProperty(a)?l!=null&&a==="onScroll"&&Oe("scroll",t):l!=null&&Tg(t,a,l,s))}switch(n){case"input":El(t),ff(t,o,!1);break;case"textarea":El(t),wf(t);break;case"option":o.value!=null&&t.setAttribute("value",""+lr(o.value));break;case"select":t.multiple=!!o.multiple,a=o.value,a!=null?Wa(t,!!o.multiple,a,!1):o.defaultValue!=null&&Wa(t,!!o.multiple,o.defaultValue,!0);break;default:typeof r.onClick=="function"&&(t.onclick=Dc)}switch(n){case"button":case"input":case"select":case"textarea":o=!!o.autoFocus;break e;case"img":o=!0;break e;default:o=!1}}o&&(e.flags|=4)}e.ref!==null&&(e.flags|=512,e.flags|=2097152)}return ut(e),null;case 6:if(t&&e.stateNode!=null)Rk(t,e,t.memoizedProps,o);else{if(typeof o!="string"&&e.stateNode===null)throw Error(W(166));if(n=jr(Ri.current),jr(Yn.current),Ll(e)){if(o=e.stateNode,n=e.memoizedProps,o[Hn]=e,(a=o.nodeValue!==n)&&(t=qt,t!==null))switch(t.tag){case 3:Nl(o.nodeValue,n,(t.mode&1)!==0);break;case 5:t.memoizedProps.suppressHydrationWarning!==!0&&Nl(o.nodeValue,n,(t.mode&1)!==0)}a&&(e.flags|=4)}else o=(n.nodeType===9?n:n.ownerDocument).createTextNode(o),o[Hn]=e,e.stateNode=o}return ut(e),null;case 13:if(Re(We),o=e.memoizedState,t===null||t.memoizedState!==null&&t.memoizedState.dehydrated!==null){if(Le&&Wt!==null&&e.mode&1&&!(e.flags&128))Xv(),ls(),e.flags|=98560,a=!1;else if(a=Ll(e),o!==null&&o.dehydrated!==null){if(t===null){if(!a)throw Error(W(318));if(a=e.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(W(317));a[Hn]=e}else ls(),!(e.flags&128)&&(e.memoizedState=null),e.flags|=4;ut(e),a=!1}else xn!==null&&(vp(xn),xn=null),a=!0;if(!a)return e.flags&65536?e:null}return e.flags&128?(e.lanes=n,e):(o=o!==null,o!==(t!==null&&t.memoizedState!==null)&&o&&(e.child.flags|=8192,e.mode&1&&(t===null||We.current&1?et===0&&(et=3):sm())),e.updateQueue!==null&&(e.flags|=4),ut(e),null);case 4:return hs(),dp(t,e),t===null&&ji(e.stateNode.containerInfo),ut(e),null;case 10:return zg(e.type._context),ut(e),null;case 17:return Pt(e.type)&&Wc(),ut(e),null;case 19:if(Re(We),a=e.memoizedState,a===null)return ut(e),null;if(o=(e.flags&128)!==0,s=a.rendering,s===null)if(o)Hs(a,!1);else{if(et!==0||t!==null&&t.flags&128)for(t=e.child;t!==null;){if(s=Yc(t),s!==null){for(e.flags|=128,Hs(a,!1),o=s.updateQueue,o!==null&&(e.updateQueue=o,e.flags|=4),e.subtreeFlags=0,o=n,n=e.child;n!==null;)a=n,t=o,a.flags&=14680066,s=a.alternate,s===null?(a.childLanes=0,a.lanes=t,a.child=null,a.subtreeFlags=0,a.memoizedProps=null,a.memoizedState=null,a.updateQueue=null,a.dependencies=null,a.stateNode=null):(a.childLanes=s.childLanes,a.lanes=s.lanes,a.child=s.child,a.subtreeFlags=0,a.deletions=null,a.memoizedProps=s.memoizedProps,a.memoizedState=s.memoizedState,a.updateQueue=s.updateQueue,a.type=s.type,t=s.dependencies,a.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext}),n=n.sibling;return je(We,We.current&1|2),e.child}t=t.sibling}a.tail!==null&&Ge()>ds&&(e.flags|=128,o=!0,Hs(a,!1),e.lanes=4194304)}else{if(!o)if(t=Yc(s),t!==null){if(e.flags|=128,o=!0,n=t.updateQueue,n!==null&&(e.updateQueue=n,e.flags|=4),Hs(a,!0),a.tail===null&&a.tailMode==="hidden"&&!s.alternate&&!Le)return ut(e),null}else 2*Ge()-a.renderingStartTime>ds&&n!==1073741824&&(e.flags|=128,o=!0,Hs(a,!1),e.lanes=4194304);a.isBackwards?(s.sibling=e.child,e.child=s):(n=a.last,n!==null?n.sibling=s:e.child=s,a.last=s)}return a.tail!==null?(e=a.tail,a.rendering=e,a.tail=e.sibling,a.renderingStartTime=Ge(),e.sibling=null,n=We.current,je(We,o?n&1|2:n&1),e):(ut(e),null);case 22:case 23:return am(),o=e.memoizedState!==null,t!==null&&t.memoizedState!==null!==o&&(e.flags|=8192),o&&e.mode&1?Nt&1073741824&&(ut(e),e.subtreeFlags&6&&(e.flags|=8192)):ut(e),null;case 24:return null;case 25:return null}throw Error(W(156,e.tag))}function _4(t,e){switch(Wg(e),e.tag){case 1:return Pt(e.type)&&Wc(),t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 3:return hs(),Re(It),Re(ft),Gg(),t=e.flags,t&65536&&!(t&128)?(e.flags=t&-65537|128,e):null;case 5:return Vg(e),null;case 13:if(Re(We),t=e.memoizedState,t!==null&&t.dehydrated!==null){if(e.alternate===null)throw Error(W(340));ls()}return t=e.flags,t&65536?(e.flags=t&-65537|128,e):null;case 19:return Re(We),null;case 4:return hs(),null;case 10:return zg(e.type._context),null;case 22:case 23:return am(),null;case 24:return null;default:return null}}var ql=!1,mt=!1,C4=typeof WeakSet=="function"?WeakSet:Set,Q=null;function Na(t,e){var n=t.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(o){Ye(t,e,o)}else n.current=null}function pp(t,e,n){try{n()}catch(o){Ye(t,e,o)}}var iy=!1;function E4(t,e){if(Jd=Rc,t=qv(),Lg(t)){if("selectionStart"in t)var n={start:t.selectionStart,end:t.selectionEnd};else e:{n=(n=t.ownerDocument)&&n.defaultView||window;var o=n.getSelection&&n.getSelection();if(o&&o.rangeCount!==0){n=o.anchorNode;var r=o.anchorOffset,a=o.focusNode;o=o.focusOffset;try{n.nodeType,a.nodeType}catch{n=null;break e}var s=0,i=-1,l=-1,c=0,u=0,d=t,g=null;t:for(;;){for(var p;d!==n||r!==0&&d.nodeType!==3||(i=s+r),d!==a||o!==0&&d.nodeType!==3||(l=s+o),d.nodeType===3&&(s+=d.nodeValue.length),(p=d.firstChild)!==null;)g=d,d=p;for(;;){if(d===t)break t;if(g===n&&++c===r&&(i=s),g===a&&++u===o&&(l=s),(p=d.nextSibling)!==null)break;d=g,g=d.parentNode}d=p}n=i===-1||l===-1?null:{start:i,end:l}}else n=null}n=n||{start:0,end:0}}else n=null;for(Qd={focusedElem:t,selectionRange:n},Rc=!1,Q=e;Q!==null;)if(e=Q,t=e.child,(e.subtreeFlags&1028)!==0&&t!==null)t.return=e,Q=t;else for(;Q!==null;){e=Q;try{var v=e.alternate;if(e.flags&1024)switch(e.tag){case 0:case 11:case 15:break;case 1:if(v!==null){var y=v.memoizedProps,k=v.memoizedState,w=e.stateNode,m=w.getSnapshotBeforeUpdate(e.elementType===e.type?y:fn(e.type,y),k);w.__reactInternalSnapshotBeforeUpdate=m}break;case 3:var b=e.stateNode.containerInfo;b.nodeType===1?b.textContent="":b.nodeType===9&&b.documentElement&&b.removeChild(b.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(W(163))}}catch(x){Ye(e,e.return,x)}if(t=e.sibling,t!==null){t.return=e.return,Q=t;break}Q=e.return}return v=iy,iy=!1,v}function mi(t,e,n){var o=e.updateQueue;if(o=o!==null?o.lastEffect:null,o!==null){var r=o=o.next;do{if((r.tag&t)===t){var a=r.destroy;r.destroy=void 0,a!==void 0&&pp(e,n,a)}r=r.next}while(r!==o)}}function Lh(t,e){if(e=e.updateQueue,e=e!==null?e.lastEffect:null,e!==null){var n=e=e.next;do{if((n.tag&t)===t){var o=n.create;n.destroy=o()}n=n.next}while(n!==e)}}function gp(t){var e=t.ref;if(e!==null){var n=t.stateNode;switch(t.tag){case 5:t=n;break;default:t=n}typeof e=="function"?e(t):e.current=t}}function Nk(t){var e=t.alternate;e!==null&&(t.alternate=null,Nk(e)),t.child=null,t.deletions=null,t.sibling=null,t.tag===5&&(e=t.stateNode,e!==null&&(delete e[Hn],delete e[Oi],delete e[ep],delete e[h4],delete e[u4])),t.stateNode=null,t.return=null,t.dependencies=null,t.memoizedProps=null,t.memoizedState=null,t.pendingProps=null,t.stateNode=null,t.updateQueue=null}function Lk(t){return t.tag===5||t.tag===3||t.tag===4}function ly(t){e:for(;;){for(;t.sibling===null;){if(t.return===null||Lk(t.return))return null;t=t.return}for(t.sibling.return=t.return,t=t.sibling;t.tag!==5&&t.tag!==6&&t.tag!==18;){if(t.flags&2||t.child===null||t.tag===4)continue e;t.child.return=t,t=t.child}if(!(t.flags&2))return t.stateNode}}function mp(t,e,n){var o=t.tag;if(o===5||o===6)t=t.stateNode,e?n.nodeType===8?n.parentNode.insertBefore(t,e):n.insertBefore(t,e):(n.nodeType===8?(e=n.parentNode,e.insertBefore(t,n)):(e=n,e.appendChild(t)),n=n._reactRootContainer,n!=null||e.onclick!==null||(e.onclick=Dc));else if(o!==4&&(t=t.child,t!==null))for(mp(t,e,n),t=t.sibling;t!==null;)mp(t,e,n),t=t.sibling}function fp(t,e,n){var o=t.tag;if(o===5||o===6)t=t.stateNode,e?n.insertBefore(t,e):n.appendChild(t);else if(o!==4&&(t=t.child,t!==null))for(fp(t,e,n),t=t.sibling;t!==null;)fp(t,e,n),t=t.sibling}var st=null,kn=!1;function jo(t,e,n){for(n=n.child;n!==null;)Dk(t,e,n),n=n.sibling}function Dk(t,e,n){if(Un&&typeof Un.onCommitFiberUnmount=="function")try{Un.onCommitFiberUnmount(Ih,n)}catch{}switch(n.tag){case 5:mt||Na(n,e);case 6:var o=st,r=kn;st=null,jo(t,e,n),st=o,kn=r,st!==null&&(kn?(t=st,n=n.stateNode,t.nodeType===8?t.parentNode.removeChild(n):t.removeChild(n)):st.removeChild(n.stateNode));break;case 18:st!==null&&(kn?(t=st,n=n.stateNode,t.nodeType===8?Du(t.parentNode,n):t.nodeType===1&&Du(t,n),Ei(t)):Du(st,n.stateNode));break;case 4:o=st,r=kn,st=n.stateNode.containerInfo,kn=!0,jo(t,e,n),st=o,kn=r;break;case 0:case 11:case 14:case 15:if(!mt&&(o=n.updateQueue,o!==null&&(o=o.lastEffect,o!==null))){r=o=o.next;do{var a=r,s=a.destroy;a=a.tag,s!==void 0&&(a&2||a&4)&&pp(n,e,s),r=r.next}while(r!==o)}jo(t,e,n);break;case 1:if(!mt&&(Na(n,e),o=n.stateNode,typeof o.componentWillUnmount=="function"))try{o.props=n.memoizedProps,o.state=n.memoizedState,o.componentWillUnmount()}catch(i){Ye(n,e,i)}jo(t,e,n);break;case 21:jo(t,e,n);break;case 22:n.mode&1?(mt=(o=mt)||n.memoizedState!==null,jo(t,e,n),mt=o):jo(t,e,n);break;default:jo(t,e,n)}}function cy(t){var e=t.updateQueue;if(e!==null){t.updateQueue=null;var n=t.stateNode;n===null&&(n=t.stateNode=new C4),e.forEach(function(o){var r=L4.bind(null,t,o);n.has(o)||(n.add(o),o.then(r,r))})}}function un(t,e){var n=e.deletions;if(n!==null)for(var o=0;o<n.length;o++){var r=n[o];try{var a=t,s=e,i=s;e:for(;i!==null;){switch(i.tag){case 5:st=i.stateNode,kn=!1;break e;case 3:st=i.stateNode.containerInfo,kn=!0;break e;case 4:st=i.stateNode.containerInfo,kn=!0;break e}i=i.return}if(st===null)throw Error(W(160));Dk(a,s,r),st=null,kn=!1;var l=r.alternate;l!==null&&(l.return=null),r.return=null}catch(c){Ye(r,e,c)}}if(e.subtreeFlags&12854)for(e=e.child;e!==null;)Wk(e,t),e=e.sibling}function Wk(t,e){var n=t.alternate,o=t.flags;switch(t.tag){case 0:case 11:case 14:case 15:if(un(e,t),Rn(t),o&4){try{mi(3,t,t.return),Lh(3,t)}catch(y){Ye(t,t.return,y)}try{mi(5,t,t.return)}catch(y){Ye(t,t.return,y)}}break;case 1:un(e,t),Rn(t),o&512&&n!==null&&Na(n,n.return);break;case 5:if(un(e,t),Rn(t),o&512&&n!==null&&Na(n,n.return),t.flags&32){var r=t.stateNode;try{Ti(r,"")}catch(y){Ye(t,t.return,y)}}if(o&4&&(r=t.stateNode,r!=null)){var a=t.memoizedProps,s=n!==null?n.memoizedProps:a,i=t.type,l=t.updateQueue;if(t.updateQueue=null,l!==null)try{i==="input"&&a.type==="radio"&&a.name!=null&&iv(r,a),qd(i,s);var c=qd(i,a);for(s=0;s<l.length;s+=2){var u=l[s],d=l[s+1];u==="style"?dv(r,d):u==="dangerouslySetInnerHTML"?hv(r,d):u==="children"?Ti(r,d):Tg(r,u,d,c)}switch(i){case"input":Rd(r,a);break;case"textarea":lv(r,a);break;case"select":var g=r._wrapperState.wasMultiple;r._wrapperState.wasMultiple=!!a.multiple;var p=a.value;p!=null?Wa(r,!!a.multiple,p,!1):g!==!!a.multiple&&(a.defaultValue!=null?Wa(r,!!a.multiple,a.defaultValue,!0):Wa(r,!!a.multiple,a.multiple?[]:"",!1))}r[Oi]=a}catch(y){Ye(t,t.return,y)}}break;case 6:if(un(e,t),Rn(t),o&4){if(t.stateNode===null)throw Error(W(162));r=t.stateNode,a=t.memoizedProps;try{r.nodeValue=a}catch(y){Ye(t,t.return,y)}}break;case 3:if(un(e,t),Rn(t),o&4&&n!==null&&n.memoizedState.isDehydrated)try{Ei(e.containerInfo)}catch(y){Ye(t,t.return,y)}break;case 4:un(e,t),Rn(t);break;case 13:un(e,t),Rn(t),r=t.child,r.flags&8192&&(a=r.memoizedState!==null,r.stateNode.isHidden=a,!a||r.alternate!==null&&r.alternate.memoizedState!==null||(om=Ge())),o&4&&cy(t);break;case 22:if(u=n!==null&&n.memoizedState!==null,t.mode&1?(mt=(c=mt)||u,un(e,t),mt=c):un(e,t),Rn(t),o&8192){if(c=t.memoizedState!==null,(t.stateNode.isHidden=c)&&!u&&t.mode&1)for(Q=t,u=t.child;u!==null;){for(d=Q=u;Q!==null;){switch(g=Q,p=g.child,g.tag){case 0:case 11:case 14:case 15:mi(4,g,g.return);break;case 1:Na(g,g.return);var v=g.stateNode;if(typeof v.componentWillUnmount=="function"){o=g,n=g.return;try{e=o,v.props=e.memoizedProps,v.state=e.memoizedState,v.componentWillUnmount()}catch(y){Ye(o,n,y)}}break;case 5:Na(g,g.return);break;case 22:if(g.memoizedState!==null){uy(d);continue}}p!==null?(p.return=g,Q=p):uy(d)}u=u.sibling}e:for(u=null,d=t;;){if(d.tag===5){if(u===null){u=d;try{r=d.stateNode,c?(a=r.style,typeof a.setProperty=="function"?a.setProperty("display","none","important"):a.display="none"):(i=d.stateNode,l=d.memoizedProps.style,s=l!=null&&l.hasOwnProperty("display")?l.display:null,i.style.display=uv("display",s))}catch(y){Ye(t,t.return,y)}}}else if(d.tag===6){if(u===null)try{d.stateNode.nodeValue=c?"":d.memoizedProps}catch(y){Ye(t,t.return,y)}}else if((d.tag!==22&&d.tag!==23||d.memoizedState===null||d===t)&&d.child!==null){d.child.return=d,d=d.child;continue}if(d===t)break e;for(;d.sibling===null;){if(d.return===null||d.return===t)break e;u===d&&(u=null),d=d.return}u===d&&(u=null),d.sibling.return=d.return,d=d.sibling}}break;case 19:un(e,t),Rn(t),o&4&&cy(t);break;case 21:break;default:un(e,t),Rn(t)}}function Rn(t){var e=t.flags;if(e&2){try{e:{for(var n=t.return;n!==null;){if(Lk(n)){var o=n;break e}n=n.return}throw Error(W(160))}switch(o.tag){case 5:var r=o.stateNode;o.flags&32&&(Ti(r,""),o.flags&=-33);var a=ly(t);fp(t,a,r);break;case 3:case 4:var s=o.stateNode.containerInfo,i=ly(t);mp(t,i,s);break;default:throw Error(W(161))}}catch(l){Ye(t,t.return,l)}t.flags&=-3}e&4096&&(t.flags&=-4097)}function I4(t,e,n){Q=t,qk(t)}function qk(t,e,n){for(var o=(t.mode&1)!==0;Q!==null;){var r=Q,a=r.child;if(r.tag===22&&o){var s=r.memoizedState!==null||ql;if(!s){var i=r.alternate,l=i!==null&&i.memoizedState!==null||mt;i=ql;var c=mt;if(ql=s,(mt=l)&&!c)for(Q=r;Q!==null;)s=Q,l=s.child,s.tag===22&&s.memoizedState!==null?dy(r):l!==null?(l.return=s,Q=l):dy(r);for(;a!==null;)Q=a,qk(a),a=a.sibling;Q=r,ql=i,mt=c}hy(t)}else r.subtreeFlags&8772&&a!==null?(a.return=r,Q=a):hy(t)}}function hy(t){for(;Q!==null;){var e=Q;if(e.flags&8772){var n=e.alternate;try{if(e.flags&8772)switch(e.tag){case 0:case 11:case 15:mt||Lh(5,e);break;case 1:var o=e.stateNode;if(e.flags&4&&!mt)if(n===null)o.componentDidMount();else{var r=e.elementType===e.type?n.memoizedProps:fn(e.type,n.memoizedProps);o.componentDidUpdate(r,n.memoizedState,o.__reactInternalSnapshotBeforeUpdate)}var a=e.updateQueue;a!==null&&Gf(e,a,o);break;case 3:var s=e.updateQueue;if(s!==null){if(n=null,e.child!==null)switch(e.child.tag){case 5:n=e.child.stateNode;break;case 1:n=e.child.stateNode}Gf(e,s,n)}break;case 5:var i=e.stateNode;if(n===null&&e.flags&4){n=i;var l=e.memoizedProps;switch(e.type){case"button":case"input":case"select":case"textarea":l.autoFocus&&n.focus();break;case"img":l.src&&(n.src=l.src)}}break;case 6:break;case 4:break;case 12:break;case 13:if(e.memoizedState===null){var c=e.alternate;if(c!==null){var u=c.memoizedState;if(u!==null){var d=u.dehydrated;d!==null&&Ei(d)}}}break;case 19:case 17:case 21:case 22:case 23:case 25:break;default:throw Error(W(163))}mt||e.flags&512&&gp(e)}catch(g){Ye(e,e.return,g)}}if(e===t){Q=null;break}if(n=e.sibling,n!==null){n.return=e.return,Q=n;break}Q=e.return}}function uy(t){for(;Q!==null;){var e=Q;if(e===t){Q=null;break}var n=e.sibling;if(n!==null){n.return=e.return,Q=n;break}Q=e.return}}function dy(t){for(;Q!==null;){var e=Q;try{switch(e.tag){case 0:case 11:case 15:var n=e.return;try{Lh(4,e)}catch(l){Ye(e,n,l)}break;case 1:var o=e.stateNode;if(typeof o.componentDidMount=="function"){var r=e.return;try{o.componentDidMount()}catch(l){Ye(e,r,l)}}var a=e.return;try{gp(e)}catch(l){Ye(e,a,l)}break;case 5:var s=e.return;try{gp(e)}catch(l){Ye(e,s,l)}}}catch(l){Ye(e,e.return,l)}if(e===t){Q=null;break}var i=e.sibling;if(i!==null){i.return=e.return,Q=i;break}Q=e.return}}var P4=Math.ceil,Kc=So.ReactCurrentDispatcher,tm=So.ReactCurrentOwner,Xt=So.ReactCurrentBatchConfig,xe=0,ot=null,Qe=null,it=0,Nt=0,La=fr(0),et=0,Wi=null,Ur=0,Dh=0,nm=0,fi=null,Ct=null,om=0,ds=1/0,so=null,Jc=!1,yp=null,or=null,Fl=!1,Ko=null,Qc=0,yi=0,wp=null,yc=-1,wc=0;function kt(){return xe&6?Ge():yc!==-1?yc:yc=Ge()}function rr(t){return t.mode&1?xe&2&&it!==0?it&-it:p4.transition!==null?(wc===0&&(wc=Tv()),wc):(t=Ce,t!==0||(t=window.event,t=t===void 0?16:jv(t.type)),t):1}function _n(t,e,n,o){if(50<yi)throw yi=0,wp=null,Error(W(185));hl(t,n,o),(!(xe&2)||t!==ot)&&(t===ot&&(!(xe&2)&&(Dh|=n),et===4&&qo(t,it)),jt(t,o),n===1&&xe===0&&!(e.mode&1)&&(ds=Ge()+500,Mh&&yr()))}function jt(t,e){var n=t.callbackNode;pT(t,e);var o=Mc(t,t===ot?it:0);if(o===0)n!==null&&kf(n),t.callbackNode=null,t.callbackPriority=0;else if(e=o&-o,t.callbackPriority!==e){if(n!=null&&kf(n),e===1)t.tag===0?d4(py.bind(null,t)):Jv(py.bind(null,t)),l4(function(){!(xe&6)&&yr()}),n=null;else{switch(Av(o)){case 1:n=Ig;break;case 4:n=xv;break;case 16:n=Oc;break;case 536870912:n=Sv;break;default:n=Oc}n=Gk(n,Fk.bind(null,t))}t.callbackPriority=e,t.callbackNode=n}}function Fk(t,e){if(yc=-1,wc=0,xe&6)throw Error(W(327));var n=t.callbackNode;if($a()&&t.callbackNode!==n)return null;var o=Mc(t,t===ot?it:0);if(o===0)return null;if(o&30||o&t.expiredLanes||e)e=Zc(t,o);else{e=o;var r=xe;xe|=2;var a=zk();(ot!==t||it!==e)&&(so=null,ds=Ge()+500,qr(t,e));do try{O4();break}catch(i){Hk(t,i)}while(!0);Hg(),Kc.current=a,xe=r,Qe!==null?e=0:(ot=null,it=0,e=et)}if(e!==0){if(e===2&&(r=Ud(t),r!==0&&(o=r,e=bp(t,r))),e===1)throw n=Wi,qr(t,0),qo(t,o),jt(t,Ge()),n;if(e===6)qo(t,o);else{if(r=t.current.alternate,!(o&30)&&!j4(r)&&(e=Zc(t,o),e===2&&(a=Ud(t),a!==0&&(o=a,e=bp(t,a))),e===1))throw n=Wi,qr(t,0),qo(t,o),jt(t,Ge()),n;switch(t.finishedWork=r,t.finishedLanes=o,e){case 0:case 1:throw Error(W(345));case 2:Cr(t,Ct,so);break;case 3:if(qo(t,o),(o&130023424)===o&&(e=om+500-Ge(),10<e)){if(Mc(t,0)!==0)break;if(r=t.suspendedLanes,(r&o)!==o){kt(),t.pingedLanes|=t.suspendedLanes&r;break}t.timeoutHandle=Xd(Cr.bind(null,t,Ct,so),e);break}Cr(t,Ct,so);break;case 4:if(qo(t,o),(o&4194240)===o)break;for(e=t.eventTimes,r=-1;0<o;){var s=31-An(o);a=1<<s,s=e[s],s>r&&(r=s),o&=~a}if(o=r,o=Ge()-o,o=(120>o?120:480>o?480:1080>o?1080:1920>o?1920:3e3>o?3e3:4320>o?4320:1960*P4(o/1960))-o,10<o){t.timeoutHandle=Xd(Cr.bind(null,t,Ct,so),o);break}Cr(t,Ct,so);break;case 5:Cr(t,Ct,so);break;default:throw Error(W(329))}}}return jt(t,Ge()),t.callbackNode===n?Fk.bind(null,t):null}function bp(t,e){var n=fi;return t.current.memoizedState.isDehydrated&&(qr(t,e).flags|=256),t=Zc(t,e),t!==2&&(e=Ct,Ct=n,e!==null&&vp(e)),t}function vp(t){Ct===null?Ct=t:Ct.push.apply(Ct,t)}function j4(t){for(var e=t;;){if(e.flags&16384){var n=e.updateQueue;if(n!==null&&(n=n.stores,n!==null))for(var o=0;o<n.length;o++){var r=n[o],a=r.getSnapshot;r=r.value;try{if(!En(a(),r))return!1}catch{return!1}}}if(n=e.child,e.subtreeFlags&16384&&n!==null)n.return=e,e=n;else{if(e===t)break;for(;e.sibling===null;){if(e.return===null||e.return===t)return!0;e=e.return}e.sibling.return=e.return,e=e.sibling}}return!0}function qo(t,e){for(e&=~nm,e&=~Dh,t.suspendedLanes|=e,t.pingedLanes&=~e,t=t.expirationTimes;0<e;){var n=31-An(e),o=1<<n;t[n]=-1,e&=~o}}function py(t){if(xe&6)throw Error(W(327));$a();var e=Mc(t,0);if(!(e&1))return jt(t,Ge()),null;var n=Zc(t,e);if(t.tag!==0&&n===2){var o=Ud(t);o!==0&&(e=o,n=bp(t,o))}if(n===1)throw n=Wi,qr(t,0),qo(t,e),jt(t,Ge()),n;if(n===6)throw Error(W(345));return t.finishedWork=t.current.alternate,t.finishedLanes=e,Cr(t,Ct,so),jt(t,Ge()),null}function rm(t,e){var n=xe;xe|=1;try{return t(e)}finally{xe=n,xe===0&&(ds=Ge()+500,Mh&&yr())}}function Yr(t){Ko!==null&&Ko.tag===0&&!(xe&6)&&$a();var e=xe;xe|=1;var n=Xt.transition,o=Ce;try{if(Xt.transition=null,Ce=1,t)return t()}finally{Ce=o,Xt.transition=n,xe=e,!(xe&6)&&yr()}}function am(){Nt=La.current,Re(La)}function qr(t,e){t.finishedWork=null,t.finishedLanes=0;var n=t.timeoutHandle;if(n!==-1&&(t.timeoutHandle=-1,i4(n)),Qe!==null)for(n=Qe.return;n!==null;){var o=n;switch(Wg(o),o.tag){case 1:o=o.type.childContextTypes,o!=null&&Wc();break;case 3:hs(),Re(It),Re(ft),Gg();break;case 5:Vg(o);break;case 4:hs();break;case 13:Re(We);break;case 19:Re(We);break;case 10:zg(o.type._context);break;case 22:case 23:am()}n=n.return}if(ot=t,Qe=t=ar(t.current,null),it=Nt=e,et=0,Wi=null,nm=Dh=Ur=0,Ct=fi=null,Pr!==null){for(e=0;e<Pr.length;e++)if(n=Pr[e],o=n.interleaved,o!==null){n.interleaved=null;var r=o.next,a=n.pending;if(a!==null){var s=a.next;a.next=r,o.next=s}n.pending=o}Pr=null}return t}function Hk(t,e){do{var n=Qe;try{if(Hg(),gc.current=Gc,Vc){for(var o=Fe.memoizedState;o!==null;){var r=o.queue;r!==null&&(r.pending=null),o=o.next}Vc=!1}if($r=0,nt=Xe=Fe=null,gi=!1,Ni=0,tm.current=null,n===null||n.return===null){et=1,Wi=e,Qe=null;break}e:{var a=t,s=n.return,i=n,l=e;if(e=it,i.flags|=32768,l!==null&&typeof l=="object"&&typeof l.then=="function"){var c=l,u=i,d=u.tag;if(!(u.mode&1)&&(d===0||d===11||d===15)){var g=u.alternate;g?(u.updateQueue=g.updateQueue,u.memoizedState=g.memoizedState,u.lanes=g.lanes):(u.updateQueue=null,u.memoizedState=null)}var p=ey(s);if(p!==null){p.flags&=-257,ty(p,s,i,a,e),p.mode&1&&Xf(a,c,e),e=p,l=c;var v=e.updateQueue;if(v===null){var y=new Set;y.add(l),e.updateQueue=y}else v.add(l);break e}else{if(!(e&1)){Xf(a,c,e),sm();break e}l=Error(W(426))}}else if(Le&&i.mode&1){var k=ey(s);if(k!==null){!(k.flags&65536)&&(k.flags|=256),ty(k,s,i,a,e),qg(us(l,i));break e}}a=l=us(l,i),et!==4&&(et=2),fi===null?fi=[a]:fi.push(a),a=s;do{switch(a.tag){case 3:a.flags|=65536,e&=-e,a.lanes|=e;var w=Ak(a,l,e);Vf(a,w);break e;case 1:i=l;var m=a.type,b=a.stateNode;if(!(a.flags&128)&&(typeof m.getDerivedStateFromError=="function"||b!==null&&typeof b.componentDidCatch=="function"&&(or===null||!or.has(b)))){a.flags|=65536,e&=-e,a.lanes|=e;var x=_k(a,i,e);Vf(a,x);break e}}a=a.return}while(a!==null)}Uk(n)}catch(S){e=S,Qe===n&&n!==null&&(Qe=n=n.return);continue}break}while(!0)}function zk(){var t=Kc.current;return Kc.current=Gc,t===null?Gc:t}function sm(){(et===0||et===3||et===2)&&(et=4),ot===null||!(Ur&268435455)&&!(Dh&268435455)||qo(ot,it)}function Zc(t,e){var n=xe;xe|=2;var o=zk();(ot!==t||it!==e)&&(so=null,qr(t,e));do try{B4();break}catch(r){Hk(t,r)}while(!0);if(Hg(),xe=n,Kc.current=o,Qe!==null)throw Error(W(261));return ot=null,it=0,et}function B4(){for(;Qe!==null;)$k(Qe)}function O4(){for(;Qe!==null&&!rT();)$k(Qe)}function $k(t){var e=Vk(t.alternate,t,Nt);t.memoizedProps=t.pendingProps,e===null?Uk(t):Qe=e,tm.current=null}function Uk(t){var e=t;do{var n=e.alternate;if(t=e.return,e.flags&32768){if(n=_4(n,e),n!==null){n.flags&=32767,Qe=n;return}if(t!==null)t.flags|=32768,t.subtreeFlags=0,t.deletions=null;else{et=6,Qe=null;return}}else if(n=A4(n,e,Nt),n!==null){Qe=n;return}if(e=e.sibling,e!==null){Qe=e;return}Qe=e=t}while(e!==null);et===0&&(et=5)}function Cr(t,e,n){var o=Ce,r=Xt.transition;try{Xt.transition=null,Ce=1,M4(t,e,n,o)}finally{Xt.transition=r,Ce=o}return null}function M4(t,e,n,o){do $a();while(Ko!==null);if(xe&6)throw Error(W(327));n=t.finishedWork;var r=t.finishedLanes;if(n===null)return null;if(t.finishedWork=null,t.finishedLanes=0,n===t.current)throw Error(W(177));t.callbackNode=null,t.callbackPriority=0;var a=n.lanes|n.childLanes;if(gT(t,a),t===ot&&(Qe=ot=null,it=0),!(n.subtreeFlags&2064)&&!(n.flags&2064)||Fl||(Fl=!0,Gk(Oc,function(){return $a(),null})),a=(n.flags&15990)!==0,n.subtreeFlags&15990||a){a=Xt.transition,Xt.transition=null;var s=Ce;Ce=1;var i=xe;xe|=4,tm.current=null,E4(t,n),Wk(n,t),e4(Qd),Rc=!!Jd,Qd=Jd=null,t.current=n,I4(n),aT(),xe=i,Ce=s,Xt.transition=a}else t.current=n;if(Fl&&(Fl=!1,Ko=t,Qc=r),a=t.pendingLanes,a===0&&(or=null),lT(n.stateNode),jt(t,Ge()),e!==null)for(o=t.onRecoverableError,n=0;n<e.length;n++)r=e[n],o(r.value,{componentStack:r.stack,digest:r.digest});if(Jc)throw Jc=!1,t=yp,yp=null,t;return Qc&1&&t.tag!==0&&$a(),a=t.pendingLanes,a&1?t===wp?yi++:(yi=0,wp=t):yi=0,yr(),null}function $a(){if(Ko!==null){var t=Av(Qc),e=Xt.transition,n=Ce;try{if(Xt.transition=null,Ce=16>t?16:t,Ko===null)var o=!1;else{if(t=Ko,Ko=null,Qc=0,xe&6)throw Error(W(331));var r=xe;for(xe|=4,Q=t.current;Q!==null;){var a=Q,s=a.child;if(Q.flags&16){var i=a.deletions;if(i!==null){for(var l=0;l<i.length;l++){var c=i[l];for(Q=c;Q!==null;){var u=Q;switch(u.tag){case 0:case 11:case 15:mi(8,u,a)}var d=u.child;if(d!==null)d.return=u,Q=d;else for(;Q!==null;){u=Q;var g=u.sibling,p=u.return;if(Nk(u),u===c){Q=null;break}if(g!==null){g.return=p,Q=g;break}Q=p}}}var v=a.alternate;if(v!==null){var y=v.child;if(y!==null){v.child=null;do{var k=y.sibling;y.sibling=null,y=k}while(y!==null)}}Q=a}}if(a.subtreeFlags&2064&&s!==null)s.return=a,Q=s;else e:for(;Q!==null;){if(a=Q,a.flags&2048)switch(a.tag){case 0:case 11:case 15:mi(9,a,a.return)}var w=a.sibling;if(w!==null){w.return=a.return,Q=w;break e}Q=a.return}}var m=t.current;for(Q=m;Q!==null;){s=Q;var b=s.child;if(s.subtreeFlags&2064&&b!==null)b.return=s,Q=b;else e:for(s=m;Q!==null;){if(i=Q,i.flags&2048)try{switch(i.tag){case 0:case 11:case 15:Lh(9,i)}}catch(S){Ye(i,i.return,S)}if(i===s){Q=null;break e}var x=i.sibling;if(x!==null){x.return=i.return,Q=x;break e}Q=i.return}}if(xe=r,yr(),Un&&typeof Un.onPostCommitFiberRoot=="function")try{Un.onPostCommitFiberRoot(Ih,t)}catch{}o=!0}return o}finally{Ce=n,Xt.transition=e}}return!1}function gy(t,e,n){e=us(n,e),e=Ak(t,e,1),t=nr(t,e,1),e=kt(),t!==null&&(hl(t,1,e),jt(t,e))}function Ye(t,e,n){if(t.tag===3)gy(t,t,n);else for(;e!==null;){if(e.tag===3){gy(e,t,n);break}else if(e.tag===1){var o=e.stateNode;if(typeof e.type.getDerivedStateFromError=="function"||typeof o.componentDidCatch=="function"&&(or===null||!or.has(o))){t=us(n,t),t=_k(e,t,1),e=nr(e,t,1),t=kt(),e!==null&&(hl(e,1,t),jt(e,t));break}}e=e.return}}function R4(t,e,n){var o=t.pingCache;o!==null&&o.delete(e),e=kt(),t.pingedLanes|=t.suspendedLanes&n,ot===t&&(it&n)===n&&(et===4||et===3&&(it&130023424)===it&&500>Ge()-om?qr(t,0):nm|=n),jt(t,e)}function Yk(t,e){e===0&&(t.mode&1?(e=jl,jl<<=1,!(jl&130023424)&&(jl=4194304)):e=1);var n=kt();t=wo(t,e),t!==null&&(hl(t,e,n),jt(t,n))}function N4(t){var e=t.memoizedState,n=0;e!==null&&(n=e.retryLane),Yk(t,n)}function L4(t,e){var n=0;switch(t.tag){case 13:var o=t.stateNode,r=t.memoizedState;r!==null&&(n=r.retryLane);break;case 19:o=t.stateNode;break;default:throw Error(W(314))}o!==null&&o.delete(e),Yk(t,n)}var Vk;Vk=function(t,e,n){if(t!==null)if(t.memoizedProps!==e.pendingProps||It.current)Et=!0;else{if(!(t.lanes&n)&&!(e.flags&128))return Et=!1,T4(t,e,n);Et=!!(t.flags&131072)}else Et=!1,Le&&e.flags&1048576&&Qv(e,Hc,e.index);switch(e.lanes=0,e.tag){case 2:var o=e.type;fc(t,e),t=e.pendingProps;var r=is(e,ft.current);za(e,n),r=Jg(null,e,o,t,r,n);var a=Qg();return e.flags|=1,typeof r=="object"&&r!==null&&typeof r.render=="function"&&r.$$typeof===void 0?(e.tag=1,e.memoizedState=null,e.updateQueue=null,Pt(o)?(a=!0,qc(e)):a=!1,e.memoizedState=r.state!==null&&r.state!==void 0?r.state:null,Ug(e),r.updater=Nh,e.stateNode=r,r._reactInternals=e,sp(e,o,t,n),e=cp(null,e,o,!0,a,n)):(e.tag=0,Le&&a&&Dg(e),bt(null,e,r,n),e=e.child),e;case 16:o=e.elementType;e:{switch(fc(t,e),t=e.pendingProps,r=o._init,o=r(o._payload),e.type=o,r=e.tag=W4(o),t=fn(o,t),r){case 0:e=lp(null,e,o,t,n);break e;case 1:e=ry(null,e,o,t,n);break e;case 11:e=ny(null,e,o,t,n);break e;case 14:e=oy(null,e,o,fn(o.type,t),n);break e}throw Error(W(306,o,""))}return e;case 0:return o=e.type,r=e.pendingProps,r=e.elementType===o?r:fn(o,r),lp(t,e,o,r,n);case 1:return o=e.type,r=e.pendingProps,r=e.elementType===o?r:fn(o,r),ry(t,e,o,r,n);case 3:e:{if(Pk(e),t===null)throw Error(W(387));o=e.pendingProps,a=e.memoizedState,r=a.element,ok(t,e),Uc(e,o,null,n);var s=e.memoizedState;if(o=s.element,a.isDehydrated)if(a={element:o,isDehydrated:!1,cache:s.cache,pendingSuspenseBoundaries:s.pendingSuspenseBoundaries,transitions:s.transitions},e.updateQueue.baseState=a,e.memoizedState=a,e.flags&256){r=us(Error(W(423)),e),e=ay(t,e,o,n,r);break e}else if(o!==r){r=us(Error(W(424)),e),e=ay(t,e,o,n,r);break e}else for(Wt=tr(e.stateNode.containerInfo.firstChild),qt=e,Le=!0,xn=null,n=tk(e,null,o,n),e.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(ls(),o===r){e=bo(t,e,n);break e}bt(t,e,o,n)}e=e.child}return e;case 5:return rk(e),t===null&&op(e),o=e.type,r=e.pendingProps,a=t!==null?t.memoizedProps:null,s=r.children,Zd(o,r)?s=null:a!==null&&Zd(o,a)&&(e.flags|=32),Ik(t,e),bt(t,e,s,n),e.child;case 6:return t===null&&op(e),null;case 13:return jk(t,e,n);case 4:return Yg(e,e.stateNode.containerInfo),o=e.pendingProps,t===null?e.child=cs(e,null,o,n):bt(t,e,o,n),e.child;case 11:return o=e.type,r=e.pendingProps,r=e.elementType===o?r:fn(o,r),ny(t,e,o,r,n);case 7:return bt(t,e,e.pendingProps,n),e.child;case 8:return bt(t,e,e.pendingProps.children,n),e.child;case 12:return bt(t,e,e.pendingProps.children,n),e.child;case 10:e:{if(o=e.type._context,r=e.pendingProps,a=e.memoizedProps,s=r.value,je(zc,o._currentValue),o._currentValue=s,a!==null)if(En(a.value,s)){if(a.children===r.children&&!It.current){e=bo(t,e,n);break e}}else for(a=e.child,a!==null&&(a.return=e);a!==null;){var i=a.dependencies;if(i!==null){s=a.child;for(var l=i.firstContext;l!==null;){if(l.context===o){if(a.tag===1){l=mo(-1,n&-n),l.tag=2;var c=a.updateQueue;if(c!==null){c=c.shared;var u=c.pending;u===null?l.next=l:(l.next=u.next,u.next=l),c.pending=l}}a.lanes|=n,l=a.alternate,l!==null&&(l.lanes|=n),rp(a.return,n,e),i.lanes|=n;break}l=l.next}}else if(a.tag===10)s=a.type===e.type?null:a.child;else if(a.tag===18){if(s=a.return,s===null)throw Error(W(341));s.lanes|=n,i=s.alternate,i!==null&&(i.lanes|=n),rp(s,n,e),s=a.sibling}else s=a.child;if(s!==null)s.return=a;else for(s=a;s!==null;){if(s===e){s=null;break}if(a=s.sibling,a!==null){a.return=s.return,s=a;break}s=s.return}a=s}bt(t,e,r.children,n),e=e.child}return e;case 9:return r=e.type,o=e.pendingProps.children,za(e,n),r=en(r),o=o(r),e.flags|=1,bt(t,e,o,n),e.child;case 14:return o=e.type,r=fn(o,e.pendingProps),r=fn(o.type,r),oy(t,e,o,r,n);case 15:return Ck(t,e,e.type,e.pendingProps,n);case 17:return o=e.type,r=e.pendingProps,r=e.elementType===o?r:fn(o,r),fc(t,e),e.tag=1,Pt(o)?(t=!0,qc(e)):t=!1,za(e,n),Tk(e,o,r),sp(e,o,r,n),cp(null,e,o,!0,t,n);case 19:return Bk(t,e,n);case 22:return Ek(t,e,n)}throw Error(W(156,e.tag))};function Gk(t,e){return kv(t,e)}function D4(t,e,n,o){this.tag=t,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=e,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=o,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Zt(t,e,n,o){return new D4(t,e,n,o)}function im(t){return t=t.prototype,!(!t||!t.isReactComponent)}function W4(t){if(typeof t=="function")return im(t)?1:0;if(t!=null){if(t=t.$$typeof,t===_g)return 11;if(t===Cg)return 14}return 2}function ar(t,e){var n=t.alternate;return n===null?(n=Zt(t.tag,e,t.key,t.mode),n.elementType=t.elementType,n.type=t.type,n.stateNode=t.stateNode,n.alternate=t,t.alternate=n):(n.pendingProps=e,n.type=t.type,n.flags=0,n.subtreeFlags=0,n.deleti
vendor: 5,033 bytes, line 41
41ons=null),n.flags=t.flags&14680064,n.childLanes=t.childLanes,n.lanes=t.lanes,n.child=t.child,n.memoizedProps=t.memoizedProps,n.memoizedState=t.memoizedState,n.updateQueue=t.updateQueue,e=t.dependencies,n.dependencies=e===null?null:{lanes:e.lanes,firstContext:e.firstContext},n.sibling=t.sibling,n.index=t.index,n.ref=t.ref,n}function bc(t,e,n,o,r,a){var s=2;if(o=t,typeof t=="function")im(t)&&(s=1);else if(typeof t=="string")s=5;else e:switch(t){case Ca:return Fr(n.children,r,a,e);case Ag:s=8,r|=8;break;case Pd:return t=Zt(12,n,e,r|2),t.elementType=Pd,t.lanes=a,t;case jd:return t=Zt(13,n,e,r),t.elementType=jd,t.lanes=a,t;case Bd:return t=Zt(19,n,e,r),t.elementType=Bd,t.lanes=a,t;case rv:return Wh(n,r,a,e);default:if(typeof t=="object"&&t!==null)switch(t.$$typeof){case nv:s=10;break e;case ov:s=9;break e;case _g:s=11;break e;case Cg:s=14;break e;case No:s=16,o=null;break e}throw Error(W(130,t==null?t:typeof t,""))}return e=Zt(s,n,e,r),e.elementType=t,e.type=o,e.lanes=a,e}function Fr(t,e,n,o){return t=Zt(7,t,o,e),t.lanes=n,t}function Wh(t,e,n,o){return t=Zt(22,t,o,e),t.elementType=rv,t.lanes=n,t.stateNode={isHidden:!1},t}function Yu(t,e,n){return t=Zt(6,t,null,e),t.lanes=n,t}function Vu(t,e,n){return e=Zt(4,t.children!==null?t.children:[],t.key,e),e.lanes=n,e.stateNode={containerInfo:t.containerInfo,pendingChildren:null,implementation:t.implementation},e}function q4(t,e,n,o,r){this.tag=e,this.containerInfo=t,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Cu(0),this.expirationTimes=Cu(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Cu(0),this.identifierPrefix=o,this.onRecoverableError=r,this.mutableSourceEagerHydrationData=null}function lm(t,e,n,o,r,a,s,i,l){return t=new q4(t,e,n,i,l),e===1?(e=1,a===!0&&(e|=8)):e=0,a=Zt(3,null,null,e),t.current=a,a.stateNode=t,a.memoizedState={element:o,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Ug(a),t}function F4(t,e,n){var o=3<arguments.length&&arguments[3]!==void 0?arguments[3]:null;return{$$typeof:_a,key:o==null?null:""+o,children:t,containerInfo:e,implementation:n}}function Kk(t){if(!t)return cr;t=t._reactInternals;e:{if(oa(t)!==t||t.tag!==1)throw Error(W(170));var e=t;do{switch(e.tag){case 3:e=e.stateNode.context;break e;case 1:if(Pt(e.type)){e=e.stateNode.__reactInternalMemoizedMergedChildContext;break e}}e=e.return}while(e!==null);throw Error(W(171))}if(t.tag===1){var n=t.type;if(Pt(n))return Kv(t,n,e)}return e}function Jk(t,e,n,o,r,a,s,i,l){return t=lm(n,o,!0,t,r,a,s,i,l),t.context=Kk(null),n=t.current,o=kt(),r=rr(n),a=mo(o,r),a.callback=e??null,nr(n,a,r),t.current.lanes=r,hl(t,r,o),jt(t,o),t}function qh(t,e,n,o){var r=e.current,a=kt(),s=rr(r);return n=Kk(n),e.context===null?e.context=n:e.pendingContext=n,e=mo(a,s),e.payload={element:t},o=o===void 0?null:o,o!==null&&(e.callback=o),t=nr(r,e,s),t!==null&&(_n(t,r,s,a),pc(t,r,s)),s}function Xc(t){if(t=t.current,!t.child)return null;switch(t.child.tag){case 5:return t.child.stateNode;default:return t.child.stateNode}}function my(t,e){if(t=t.memoizedState,t!==null&&t.dehydrated!==null){var n=t.retryLane;t.retryLane=n!==0&&n<e?n:e}}function cm(t,e){my(t,e),(t=t.alternate)&&my(t,e)}function H4(){return null}var Qk=typeof reportError=="function"?reportError:function(t){console.error(t)};function hm(t){this._internalRoot=t}Fh.prototype.render=hm.prototype.render=function(t){var e=this._internalRoot;if(e===null)throw Error(W(409));qh(t,e,null,null)};Fh.prototype.unmount=hm.prototype.unmount=function(){var t=this._internalRoot;if(t!==null){this._internalRoot=null;var e=t.containerInfo;Yr(function(){qh(null,t,null,null)}),e[yo]=null}};function Fh(t){this._internalRoot=t}Fh.prototype.unstable_scheduleHydration=function(t){if(t){var e=Ev();t={blockedOn:null,target:t,priority:e};for(var n=0;n<Wo.length&&e!==0&&e<Wo[n].priority;n++);Wo.splice(n,0,t),n===0&&Pv(t)}};function um(t){return!(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11)}function Hh(t){return!(!t||t.nodeType!==1&&t.nodeType!==9&&t.nodeType!==11&&(t.nodeType!==8||t.nodeValue!==" react-mount-point-unstable "))}function fy(){}function z4(t,e,n,o,r){if(r){if(typeof o=="function"){var a=o;o=function(){var c=Xc(s);a.call(c)}}var s=Jk(e,o,t,0,null,!1,!1,"",fy);return t._reactRootContainer=s,t[yo]=s.current,ji(t.nodeType===8?t.parentNode:t),Yr(),s}for(;r=t.lastChild;)t.removeChild(r);if(typeof o=="function"){var i=o;o=function(){var c=Xc(l);i.call(c)}}var l=lm(t,0,!1,null,null,!1,!1,"",fy);return t._reactRootContainer=l,t[yo]=l.current,ji(t.nodeType===8?t.parentNode:t),Yr(function(){qh(e,l,n,o)}),l}function zh(t,e,n,o,r){var a=n._reactRootContainer;if(a){var s=a;if(typeof r=="function"){var i=r;r=function(){var l=Xc(s);i.call(l)}}qh(e,s,t,r)}else s=z4(n,e,t,r,o);return Xc(s)}_v=function(t){switch(t.tag){case 3:var e=t.stateNode;
vendor: 4,372 bytes, line 41
41if(e.current.memoizedState.isDehydrated){var n=ei(e.pendingLanes);n!==0&&(Pg(e,n|1),jt(e,Ge()),!(xe&6)&&(ds=Ge()+500,yr()))}break;case 13:Yr(function(){var o=wo(t,1);if(o!==null){var r=kt();_n(o,t,1,r)}}),cm(t,1)}};jg=function(t){if(t.tag===13){var e=wo(t,134217728);if(e!==null){var n=kt();_n(e,t,134217728,n)}cm(t,134217728)}};Cv=function(t){if(t.tag===13){var e=rr(t),n=wo(t,e);if(n!==null){var o=kt();_n(n,t,e,o)}cm(t,e)}};Ev=function(){return Ce};Iv=function(t,e){var n=Ce;try{return Ce=t,e()}finally{Ce=n}};Hd=function(t,e,n){switch(e){case"input":if(Rd(t,n),e=n.name,n.type==="radio"&&e!=null){for(n=t;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+e)+'][type="radio"]'),e=0;e<n.length;e++){var o=n[e];if(o!==t&&o.form===t.form){var r=Oh(o);if(!r)throw Error(W(90));sv(o),Rd(o,r)}}}break;case"textarea":lv(t,n);break;case"select":e=n.value,e!=null&&Wa(t,!!n.multiple,e,!1)}};mv=rm;fv=Yr;var $4={usingClientEntryPoint:!1,Events:[dl,ja,Oh,pv,gv,rm]},zs={findFiberByHostInstance:Ir,bundleType:0,version:"18.3.1",rendererPackageName:"react-dom"},U4={bundleType:zs.bundleType,version:zs.version,rendererPackageName:zs.rendererPackageName,rendererConfig:zs.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setErrorHandler:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:So.ReactCurrentDispatcher,findHostInstanceByFiber:function(t){return t=bv(t),t===null?null:t.stateNode},findFiberByHostInstance:zs.findFiberByHostInstance||H4,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null,reconcilerVersion:"18.3.1-next-f1338f8080-20240426"};if(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__<"u"){var Hl=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!Hl.isDisabled&&Hl.supportsFiber)try{Ih=Hl.inject(U4),Un=Hl}catch{}}$t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=$4;$t.createPortal=function(t,e){var n=2<arguments.length&&arguments[2]!==void 0?arguments[2]:null;if(!um(e))throw Error(W(200));return F4(t,e,null,n)};$t.createRoot=function(t,e){if(!um(t))throw Error(W(299));var n=!1,o="",r=Qk;return e!=null&&(e.unstable_strictMode===!0&&(n=!0),e.identifierPrefix!==void 0&&(o=e.identifierPrefix),e.onRecoverableError!==void 0&&(r=e.onRecoverableError)),e=lm(t,1,!1,null,null,n,!1,o,r),t[yo]=e.current,ji(t.nodeType===8?t.parentNode:t),new hm(e)};$t.findDOMNode=function(t){if(t==null)return null;if(t.nodeType===1)return t;var e=t._reactInternals;if(e===void 0)throw typeof t.render=="function"?Error(W(188)):(t=Object.keys(t).join(","),Error(W(268,t)));return t=bv(e),t=t===null?null:t.stateNode,t};$t.flushSync=function(t){return Yr(t)};$t.hydrate=function(t,e,n){if(!Hh(e))throw Error(W(200));return zh(null,t,e,!0,n)};$t.hydrateRoot=function(t,e,n){if(!um(t))throw Error(W(405));var o=n!=null&&n.hydratedSources||null,r=!1,a="",s=Qk;if(n!=null&&(n.unstable_strictMode===!0&&(r=!0),n.identifierPrefix!==void 0&&(a=n.identifierPrefix),n.onRecoverableError!==void 0&&(s=n.onRecoverableError)),e=Jk(e,null,t,1,n??null,r,!1,a,s),t[yo]=e.current,ji(t),o)for(t=0;t<o.length;t++)n=o[t],r=n._getVersion,r=r(n._source),e.mutableSourceEagerHydrationData==null?e.mutableSourceEagerHydrationData=[n,r]:e.mutableSourceEagerHydrationData.push(n,r);return new Fh(e)};$t.render=function(t,e,n){if(!Hh(e))throw Error(W(200));return zh(null,t,e,!1,n)};$t.unmountComponentAtNode=function(t){if(!Hh(t))throw Error(W(40));return t._reactRootContainer?(Yr(function(){zh(null,null,t,!1,function(){t._reactRootContainer=null,t[yo]=null})}),!0):!1};$t.unstable_batchedUpdates=rm;$t.unstable_renderSubtreeIntoContainer=function(t,e,n,o){if(!Hh(n))throw Error(W(200));if(t==null||t._reactInternals===void 0)throw Error(W(38));return zh(t,e,n,!1,o)};$t.version="18.3.1-next-f1338f8080-20240426";function Zk(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Zk)}catch(t){console.error(t)}}Zk(),Zb.exports=$t;var ra=Zb.exports;const Xk=ll(ra);var e0,yy=ra;e0=yy.createRoot,yy.hydrateRoot;var Y4=typeof Element<"u",V4=typeof Map=="function",G4=typeof Set=="function",K4=typeof ArrayBuffer=="function"&&!!ArrayBuffer.isView;function vc(t,e){if(t===e)return!0;
41if(t&&e&&typeof t=="object"&&typeof e=="object"){if(t.constructor!==e.constructor)return!1;var n,o,r;if(Array.isArray(t)){if(n=t.length,n!=e.length)return!1;for(o=n;o--!==0;)if(!vc(t[o],e[o]))return!1;return!0}var a;if(V4&&t instanceof Map&&e instanceof Map){if(t.size!==e.size)return!1;for(a=t.entries();!(o=a.next()).done;)if(!e.has(o.value[0]))return!1;for(a=t.entries();!(o=a.next()).done;)if(!vc(o.value[1],e.get(o.value[0])))return!1;return!0}if(G4&&t instanceof Set&&e instanceof Set){if(t.size!==e.size)return!1;for(a=t.entries();!(o=a.next()).done;)if(!e.has(o.value[0]))return!1;return!0}if(K4&&ArrayBuffer.isView(t)&&ArrayBuffer.isView(e)){if(n=t.length,n!=e.length)return!1;for(o=n;o--!==0;)if(t[o]!==e[o])return!1;return!0}if(t.constructor===RegExp)return t.source===e.source&&t.flags===e.flags;if(t.valueOf!==Object.prototype.valueOf&&typeof t.valueOf=="function"&&typeof e.valueOf=="function")return t.valueOf()===e.valueOf();if(t.toString!==Object.prototype.toString&&typeof t.toString=="function"&&typeof e.toString=="function")return t.toString()===e.toString();if(r=Object.keys(t),n=r.length,n!==Object.keys(e).length)return!1;for(o=n;o--!==0;)if(!Object.prototype.hasOwnProperty.call(e,r[o]))return!1;if(Y4&&t instanceof Element)return!1;for(o=n;o--!==0;)if(!((r[o]==="_owner"||r[o]==="__v"||r[o]==="__o")&&t.$$typeof)&&!vc(t[r[o]],e[r[o]]))return!1;return!0}return t!==t&&e!==e}var J4=function(e,n){try{return vc(e,n)}catch(o){if((o.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw o}};const Q4=ll(J4);var Z4=function(t,e,n,o,r,a,s,i){if(!t){var l;if(e===void 0)l=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var c=[n,o,r,a,s,i],u=0;l=new Error(e.replace(/%s/g,function(){return c[u++]})),l.name="Invariant Violation"}throw l.framesToPop=1,l}},X4=Z4;const wy=ll(X4);var e3=function(e,n,o,r){var a=o?o.call(r,e,n):void 0;if(a!==void 0)return!!a;if(e===n)return!0;if(typeof e!="object"||!e||typeof n!="object"||!n)return!1;var s=Object.keys(e),i=Object.keys(n);if(s.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(n),c=0;c<s.length;c++){var u=s[c];if(!l(u))return!1;var d=e[u],g=n[u];if(a=o?o.call(r,d,g,u):void 0,a===!1||a===void 0&&d!==g)return!1}return!0};const t3=ll(e3);var t0=(t=>(t.BASE="base",t.BODY="body",t.HEAD="head",t.HTML="html",t.LINK="link",t.META="meta",t.NOSCRIPT="noscript",t.SCRIPT="script",t.STYLE="style",t.TITLE="title",t.FRAGMENT="Symbol(react.fragment)",t))(t0||{}),Gu={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"]}},by=Object.values(t0),$h={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},n0=Object.entries($h).reduce((t,[e,n])=>(t[n]=e,t),{}),Tn="data-rh",Ua={DEFAULT_TITLE:"defaultTitle",DEFER:"defer",ENCODE_SPECIAL_CHARACTERS:"encodeSpecialCharacters",ON_CHANGE_CLIENT_STATE:"onChangeClientState",TITLE_TEMPLATE:"titleTemplate",PRIORITIZE_SEO_TAGS:"prioritizeSeoTags"},Ya=(t,e)=>{for(let n=t.length-1;n>=0;n-=1){const o=t[n];if(Object.prototype.hasOwnProperty.call(o,e))return o[e]}return null},n3=t=>{let e=Ya(t,"title");const n=Ya(t,Ua.TITLE_TEMPLATE);if(Array.isArray(e)&&(e=e.join("")),n&&e)return n.replace(/%s/g,()=>e);const o=Ya(t,Ua.DEFAULT_TITLE);return e||o||void 0},o3=t=>Ya(t,Ua.ON_CHANGE_CLIENT_STATE)||(()=>{}),Ku=(t,e)=>e.filter(n=>typeof n[t]<"u").map(n=>n[t]).reduce((n,o)=>({...n,...o}),{}),r3=(t,e)=>e.filter(n=>typeof n.base<"u").map(n=>n.base).reverse().reduce((n,o)=>{if(!n.length){const r=Object.keys(o);for(let a=0;a<r.length;a+=1){const i=r[a].toLowerCase();if(t.indexOf(i)!==-1&&o[i])return n.concat(o)}}return n},[]),a3=t=>console&&typeof console.warn=="function"&&console.warn(t),$s=(t,e,n)=>{const o={};return n.filter(r=>Array.isArray(r[t])?!0:(typeof r[t]<"u"&&a3(`Helmet: ${t} should be of type "Array". Instead found type "${typeof r[t]}"`),!1)).map(r=>r[t]).reverse().reduce((r,a)=>{const s={};a.filter(l=>{let c;const u=Object.keys(l);for(let g=0;g<u.length;g+=1){const p=u[g],v=p.toLowerCase();e.indexOf(v)!==-1&&!(c==="rel"&&l[c].toLowerCase()==="canonical")&&!(v==="rel"&&l[v].toLowerCase()==="stylesheet")&&(c=v),e.indexOf(p)!==-1&&(p==="innerHTML"||p==="cssText"||p==="itemprop")&&(c=p)}if(!c||!l[c])return!1;const d=l[c].toLowerCase();return o[c]||(o[c]={}),s[c]||(s[c]={}),o[c][d]?!1:(s[c][d]=!0,!0)}
41).reverse().forEach(l=>r.push(l));const i=Object.keys(s);for(let l=0;l<i.length;l+=1){const c=i[l],u={...o[c],...s[c]};o[c]=u}return r},[]).reverse()},s3=(t,e)=>{if(Array.isArray(t)&&t.length){for(let n=0;n<t.length;n+=1)if(t[n][e])return!0}return!1},i3=t=>({baseTag:r3(["href"],t),bodyAttributes:Ku("bodyAttributes",t),defer:Ya(t,Ua.DEFER),encode:Ya(t,Ua.ENCODE_SPECIAL_CHARACTERS),htmlAttributes:Ku("htmlAttributes",t),linkTags:$s("link",["rel","href"],t),metaTags:$s("meta",["name","charset","http-equiv","property","itemprop"],t),noscriptTags:$s("noscript",["innerHTML"],t),onChangeClientState:o3(t),scriptTags:$s("script",["src","innerHTML"],t),styleTags:$s("style",["cssText"],t),title:n3(t),titleAttributes:Ku("titleAttributes",t),prioritizeSeoTags:s3(t,Ua.PRIORITIZE_SEO_TAGS)}),o0=t=>Array.isArray(t)?t.join(""):t,l3=(t,e)=>{const n=Object.keys(t);for(let o=0;o<n.length;o+=1)if(e[n[o]]&&e[n[o]].includes(t[n[o]]))return!0;return!1},Ju=(t,e)=>Array.isArray(t)?t.reduce((n,o)=>(l3(o,e)?n.priority.push(o):n.default.push(o),n),{priority:[],default:[]}):{default:t,priority:[]},vy=(t,e)=>({...t,[e]:void 0}),c3=["noscript","script","style"],kp=(t,e=!0)=>e===!1?String(t):String(t).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#x27;"),r0=t=>Object.keys(t).reduce((e,n)=>{const o=typeof t[n]<"u"?`${n}="${t[n]}"`:`${n}`;return e?`${e} ${o}`:o},""),h3=(t,e,n,o)=>{const r=r0(n),a=o0(e);return r?`<${t} ${Tn}="true" ${r}>${kp(a,o)}</${t}>`:`<${t} ${Tn}="true">${kp(a,o)}</${t}>`},u3=(t,e,n=!0)=>e.reduce((o,r)=>{const a=r,s=Object.keys(a).filter(c=>!(c==="innerHTML"||c==="cssText")).reduce((c,u)=>{const d=typeof a[u]>
41"u"?u:`${u}="${kp(a[u],n)}"`;return c?`${c} ${d}`:d},""),i=a.innerHTML||a.cssText||"",l=c3.indexOf(t)===-1;return`${o}<${t} ${Tn}="true" ${s}${l?"/>":`>${i}</${t}>`}`},""),a0=(t,e={})=>Object.keys(t).reduce((n,o)=>{const r=$h[o];return n[r||o]=t[o],n},e),d3=(t,e,n)=>{const o={key:e,[Tn]:!0},r=a0(n,o);return[M.createElement("title",r,e)]},kc=(t,e)=>e.map((n,o)=>{const r={key:o,[Tn]:!0};return Object.keys(n).forEach(a=>{const i=$h[a]||a;if(i==="innerHTML"||i==="cssText"){const l=n.innerHTML||n.cssText;r.dangerouslySetInnerHTML={__html:l}}else r[i]=n[a]}),M.createElement(t,r)}),Gt=(t,e,n=!0)=>{switch(t){case"title":return{toComponent:()=>d3(t,e.title,e.titleAttributes),toString:()=>h3(t,e.title,e.titleAttributes,n)};case"bodyAttributes":case"htmlAttributes":return{toComponent:()=>a0(e),toString:()=>r0(e)};default:return{toComponent:()=>kc(t,e),toString:()=>u3(t,e,n)}}},p3=({metaTags:t,linkTags:e,scriptTags:n,encode:o})=>{const r=Ju(t,Gu.meta),a=Ju(e,Gu.link),s=Ju(n,Gu.script);return{priorityMethods:{toComponent:()=>[...kc("meta",r.priority),...kc("link",a.priority),...kc("script",s.priority)],toString:()=>`${Gt("meta",r.priority,o)} ${Gt("link",a.priority,o)} ${Gt("script",s.priority,o)}`},metaTags:r.default,linkTags:a.default,scriptTags:s.default}},g3=t=>{const{baseTag:e,bodyAttributes:n,encode:o=!0,htmlAttributes:r,noscriptTags:a,styleTags:s,title:i="",titleAttributes:l,prioritizeSeoTags:c}=t;let{linkTags:u,metaTags:d,scriptTags:g}=t,p={toComponent:()=>[],toString:()=>""};return c&&({priorityMethods:p,linkTags:u,metaTags:d,scriptTags:g}=p3(t)),{priority:p,base:Gt("base",e,o),bodyAttributes:Gt("bodyAttributes",n,o),htmlAttributes:Gt("htmlAttributes",r,o),link:Gt("link",u,o),meta:Gt("meta",d,o),noscript:Gt("noscript",a,o),script:Gt("script",g,o),style:Gt("style",s,o),title:Gt("title",{title:i,titleAttributes:l},o)}},xp=g3,zl=[],dm=!!(typeof window<"u"&&window.document&&window.document.createElement),Sp=class{constructor(t,e){no(this,"instances",[]);no(this,"canUseDOM",dm);no(this,"context");no(this,"value",{setHelmet:t=>{this.context.helmet=t},helmetInstances:{get:()=>this.canUseDOM?zl:this.instances,add:t=>{(this.canUseDOM?zl:this.instances).push(t)},remove:t=>{const e=(this.canUseDOM?zl:this.instances).indexOf(t);(this.canUseDOM?zl:this.instances).splice(e,1)}}});this.context=t,this.canUseDOM=e||!1,e||(t.helmet=xp({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))}},m3=parseInt(M.version.split(".")[0],10),Tp=m3>=19,f3={},s0=M.createContext(f3),Or,i0=(Or=class extends f.Component{constructor(n){super(n);no(this,"helmetData");Tp?this.helmetData=null:this.helmetData=new Sp(this.props.context||{},Or.canUseDOM)}render(){return Tp?M.createElement(M.Fragment,null,this.props.children):M.createElement(s0.Provider,{value:this.helmetData.value},this.props.children)}},no(Or,"canUseDOM",dm),Or),ha=(t,e)=>{const n=document.head||document.querySelector("head"),o=n.querySelectorAll(`${t}[${Tn}]`),r=[].slice.call(o),a=[];let s;return e&&e.length&&e.forEach(i=>{const l=document.createElement(t);for(const c in i)if(Object.prototype.hasOwnProperty.call(i,c))if(c==="innerHTML")l.innerHTML=i.innerHTML;else if(c==="cssText"){const u=i.cssText;l.appendChild(document.createTextNode(u))}else{const u=c,d=typeof i[u]>"u"?"":i[u];l.setAttribute(c,d)}l.setAttribute(Tn,"true"),r.some((c,u)=>(s=u,l.isEqualNode(c)))?r.splice(s,1):a.push(l)}),r.forEach(i=>{var l;return(l=i.parentNode)==null?void 0:l.removeChild(i)}),a.forEach(i=>n.appendChild(i)),{oldTags:r,newTags:a}},Ap=(t,e)=>{const n=document.getElementsByTagName(t)[0];if(!n)return;const o=n.getAttribute(Tn),r=o?o.split(","):[],a=[...r],s=Object.keys(e);for(const i of s){const l=e[i]||"";n.getAttribute(i)!==l&&n.setAttribute(i,l),r.indexOf(i)===-1&&r.push(i);const c=a.indexOf(i);c!==-1&&a.splice(c,1)}for(let i=a.length-1;i>=0;i-=1)n.removeAttribute(a[i]);r.length===a.length?n.removeAttribute(Tn):n.getAttribute(Tn)!==s.join(",")&&n.setAttribute(Tn,s.join(","))},y3=(t,e)=>{typeof t<"u"&&document.title!==t&&(document.title=o0(t)),Ap("title",e)},ky=(t,e)=>{const{baseTag:n,bodyAttributes:o,htmlAttributes:r,linkTags:a,metaTags:s,noscriptTags:i,onChangeClientState:l,scriptTags:c,styleTags:u,title:d,titleAttributes:g}=t;Ap("body",o),Ap("html",r),y3(d,g);const p={baseTag:ha("base",n),linkTags:ha("link",a),metaTags:ha("meta",s),noscriptTags:ha("noscript",i),scriptTags:ha("script",c),styleTags:ha("style",u)},v={},y={};
41Object.keys(p).forEach(k=>{const{newTags:w,oldTags:m}=p[k];w.length&&(v[k]=w),m.length&&(y[k]=p[k].oldTags)}),e&&e(),l(t,v,y)},Us=null,w3=t=>{Us&&cancelAnimationFrame(Us),t.defer?Us=requestAnimationFrame(()=>{ky(t,()=>{Us=null})}):(ky(t),Us=null)},b3=w3,xy=class extends f.Component{constructor(){super(...arguments);no(this,"rendered",!1)}shouldComponentUpdate(e){return!t3(e,this.props)}componentDidUpdate(){this.emitChange()}componentWillUnmount(){const{helmetInstances:e}=this.props.context;e.remove(this),this.emitChange()}emitChange(){const{helmetInstances:e,setHelmet:n}=this.props.context;let o=null;const r=i3(e.get().map(a=>{const{context:s,...i}=a.props;return i}));i0.canUseDOM?b3(r):xp&&(o=xp(r)),n(o)}init(){if(this.rendered)return;this.rendered=!0;const{helmetInstances:e}=this.props.context;e.add(this),this.emitChange()}render(){return this.init(),null}},xc=[],Sy=t=>{const e={};for(const n of Object.keys(t))e[n0[n]||n]=t[n];return e},Sr=t=>{const e={};for(const n of Object.keys(t)){const o=$h[n];e[o||n]=t[n]}return e},Ty=(t,e)=>{if(!dm)return;const n=document.getElementsByTagName(t)[0];if(!n)return;const o="data-rh-managed",r=n.getAttribute(o),a=r?r.split(","):[],s=Object.keys(e);for(const i of a)s.includes(i)||n.removeAttribute(i);for(const i of s){const l=e[i];l==null||l===!1?n.removeAttribute(i):l===!0?n.setAttribute(i,""):n.setAttribute(i,String(l))}s.length>0?n.setAttribute(o,s.join(",")):n.removeAttribute(o)},Qu=()=>{const t={},e={};for(const n of xc){const{htmlAttributes:o,bodyAttributes:r}=n.props;o&&Object.assign(t,Sy(o)),r&&Object.assign(e,Sy(r))}Ty("html",t),Ty("body",e)},v3=class extends f.Component{componentDidMount(){xc.push(this),Qu()}componentDidUpdate(){Qu()}componentWillUnmount(){const t=xc.indexOf(this);t!==-1&&xc.splice(t,1),Qu()}resolveTitle(){const{title:t,titleTemplate:e,defaultTitle:n}=this.props;return t&&e?e.replace(/%s/g,()=>Array.isArray(t)?t.join(""):t):t||n||void 0}renderTitle(){const t=this.resolveTitle();if(t===void 0)return null;const e=this.props.titleAttributes||{};return M.createElement("title",Sr(e),t)}renderBase(){const{base:t}=this.props;return t?M.createElement("base",Sr(t)):null}renderMeta(){const{meta:t}=this.props;return!t||!Array.isArray(t)?null:t.map((e,n)=>M.createElement("meta",{key:n,...Sr(e)}))}renderLink(){const{link:t}=this.props;return!t||!Array.isArray(t)?null:t.map((e,n)=>M.createElement("link",{key:n,...Sr(e)}))}renderScript(){const{script:t}=this.props;return!t||!Array.isArray(t)?null:t.map((e,n)=>{const{innerHTML:o,...r}=e,a=Sr(r);return o&&(a.dangerouslySetInnerHTML={__html:o}),M.createElement("script",{key:n,...a})})}renderStyle(){const{style:t}=this.props;return!t||!Array.isArray(t)?null:t.map((e,n)=>{const{cssText:o,...r}=e,a=Sr(r);return o&&(a.dangerouslySetInnerHTML={__html:o}),M.createElement("style",{key:n,...a})})}renderNoscript(){const{noscript:t}=this.props;return!t||!Array.isArray(t)?null:t.map((e,n)=>{const{innerHTML:o,...r}=e,a=Sr(r);return o&&(a.dangerouslySetInnerHTML={__html:o}),M.createElement("noscript",{key:n,...a})})}render(){return M.createElement(M.Fragment,null,this.renderTitle(),this.renderBase(),this.renderMeta(),this.renderLink(),this.renderScript(),this.renderStyle(),this.renderNoscript())}},Ed,k3=(Ed=class extends f.Component{shouldComponentUpdate(t){return!Q4(vy(this.props,"helmetData"),vy(t,"helmetData"))}mapNestedChildrenToProps(t,e){if(!e)return null;switch(t.type){case"script":case"noscript":return{innerHTML:e};case"style":return{cssText:e};default:throw new Error(`<${t.type} /> elements are self-closing and can not contain children. Refer to our API for more information.`)}}flattenArrayTypeChildren(t,e,n,o){return{...e,[t.type]:[...e[t.type]||[],{...n,...this.mapNestedChildrenToProps(t,o)}]}}mapObjectTypeChildren(t,e,n,o){switch(t.type){case"title":return{...e,[t.type]:o,titleAttributes:{...n}};case"body":return{...e,bodyAttributes:{...n}};case"html":return{...e,htmlAttributes:{...n}};default:return{...e,[t.type]:{...n}}}}mapArrayTypeChildrenToProps(t,e){let n={...e};return Object.keys(t).forEach(o=>{n={...n,[o]:t[o]}}),n}
41warnOnInvalidChildren(t,e){return wy(by.some(n=>t.type===n),typeof t.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 ${by.join(", ")} are allowed. Helmet does not support rendering <${t.type}> elements. Refer to our API for more information.`),wy(!e||typeof e=="string"||Array.isArray(e)&&!e.some(n=>typeof n!="string"),`Helmet expects a string as a child of <${t.type}>. Did you forget to wrap your children in braces? ( <${t.type}>{\`\`}</${t.type}> ) Refer to our API for more information.`),!0}mapChildrenToProps(t,e){let n={};return M.Children.forEach(t,o=>{if(!o||!o.props)return;const{children:r,...a}=o.props,s=Object.keys(a).reduce((l,c)=>(l[n0[c]||c]=a[c],l),{});let{type:i}=o;switch(typeof i=="symbol"?i=i.toString():this.warnOnInvalidChildren(o,r),i){case"Symbol(react.fragment)":e=this.mapChildrenToProps(r,e);break;case"link":case"meta":case"noscript":case"script":case"style":n=this.flattenArrayTypeChildren(o,n,s,r);break;default:e=this.mapObjectTypeChildren(o,e,s,r);break}}),this.mapArrayTypeChildrenToProps(n,e)}render(){const{children:t,...e}=this.props;let n={...e},{helmetData:o}=e;if(t&&(n=this.mapChildrenToProps(t,n)),o&&!(o instanceof Sp)){const r=o;o=new Sp(r.context,!0),delete n.helmetData}return Tp?M.createElement(v3,{...n}):o?M.createElement(xy,{...n,context:o.value}):M.createElement(s0.Consumer,null,r=>M.createElement(xy,{...n,context:r}))}},no(Ed,"defaultProps",{defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1}),Ed);const x3="modulepreload",S3=function(t){return"/"+t},Ay={},fe=function(e,n,o){let r=Promise.resolve();if(n&&n.length>0){document.getElementsByTagName("link");const s=document.querySelector("meta[property=csp-nonce]"),i=(s==null?void 0:s.nonce)||(s==null?void 0:s.getAttribute("nonce"));r=Promise.allSettled(n.map(l=>{if(l=S3(l),l in Ay)return;Ay[l]=!0;const c=l.endsWith(".css"),u=c?'[rel="stylesheet"]':"";if(document.querySelector(`link[href="${l}"]${u}`))return;const d=document.createElement("link");if(d.rel=c?"stylesheet":x3,c||(d.as="script"),d.crossOrigin="",d.href=l,i&&d.setAttribute("nonce",i),document.head.appendChild(d),c)return new Promise((g,p)=>{d.addEventListener("load",g),d.addEventListener("error",()=>p(new Error(`Unable to preload CSS for ${l}`)))})}))}function a(s){const i=new Event("vite:preloadError",{cancelable:!0});if(i.payload=s,window.dispatchEvent(i),!i.defaultPrevented)throw s}return r.then(s=>{for(const i of s||[])i.status==="rejected"&&a(i.reason);return e().catch(a)})},T3=1,A3=1e6;let Zu=0;function _3(){return Zu=(Zu+1)%Number.MAX_SAFE_INTEGER,Zu.toString()}const Xu=new Map,_y=t=>{if(Xu.has(t))return;const e=setTimeout(()=>{Xu.delete(t),wi({type:"REMOVE_TOAST",toastId:t})},A3);Xu.set(t,e)},C3=(t,e)=>{switch(e.type){case"ADD_TOAST":return{...t,toasts:[e.toast,...t.toasts].slice(0,T3)};case"UPDATE_TOAST":return{...t,toasts:t.toasts.map(n=>n.id===e.toast.id?{...n,...e.toast}:n)};case"DISMISS_TOAST":{const{toastId:n}=e;return n?_y(n):t.toasts.forEach(o=>{_y(o.id)}),{...t,toasts:t.toasts.map(o=>o.id===n||n===void 0?{...o,open:!1}:o)}}case"REMOVE_TOAST":return e.toastId===void 0?{...t,toasts:[]}:{...t,toasts:t.toasts.filter(n=>n.id!==e.toastId)}}},Sc=[];let Tc={toasts:[]};function wi(t){Tc=C3(Tc,t),Sc.forEach(e=>{e(Tc)})}function E3({...t}){const e=_3(),n=r=>wi({type:"UPDATE_TOAST",toast:{...r,id:e}}),o=()=>wi({type:"DISMISS_TOAST",toastId:e});return wi({type:"ADD_TOAST",toast:{...t,id:e,open:!0,onOpenChange:r=>{r||o()}}}),{id:e,dismiss:o,update:n}}function I3(){const[t,e]=f.useState(Tc);return f.useEffect(()=>(Sc.push(e),()=>{const n=Sc.indexOf(e);n>-1&&Sc.splice(n,1)}),[t]),{...t,toast:E3,dismiss:n=>wi({type:"DISMISS_TOAST",toastId:n})}}function me(t,e,{checkForDefaultPrevented:n=!0}={}){return function(r){if(t==null||t(r),n===!1||!r.defaultPrevented)return e==null?void 0:e(r)}}function Cy(t,e){if(typeof t=="function")return t(e);t!=null&&(t.current=e)}function Vr(...t){return e=>{let n=!1;const o=t.map(r=>{const a=Cy(r,e);return!n&&typeof a=="function"&&(n=!0),a});if(n)return()=>{for(let r=0;r<o.length;r++){const a=o[r];typeof a=="function"?a():Cy(t[r],null)}}}}function Ee(...t){return f.useCallback(Vr(...t),t)}function P3(t,e){const n=f.createContext(e),o=a=>{const{children:s,...i}=a,l=f.useMemo(()=>i,Object.values(i));return h.jsx(n.Provider,{value:l,children:s})};o.displayName=t+"Provider";function r(a){const s=f.useContext(n);if(s)return s;if(e!==void 0)return e;throw new Error(`\`${a}\` must be used within \`${t}\``)}return[o,r]}function wr(t,e=[]){let n=[];function o(a,s){const i=f.createContext(s),l=n.length;n=[...n,s];const c=d=>{var w;const{scope:g,children:p,...v}=d,y=((w=g==null?void 0:g[t])==null?void 0:w[l])||i,k=f.useMemo(()=>v,Object.values(v));return h.jsx(y.Provider,{value:k,children:p})};c.displayName=a+"Provider";function u(d,g){var y;const p=((y=g==null?void 0:g[t])==null?void 0:y[l])||i,v=f.useContext(p);if(v)return v;if(s!==void 0)return s;throw new Error(`\`${d}\` must be used within \`${a}\``)}return[c,u]}const r=()=>{const a=n.map(s=>f.createContext(s));return function(i){const l=(i==null?void 0:i[t])||a;return f.useMemo(()=>({[`__scope${t}`]:{...i,[t]:l}}),[i,l])}};return r.scopeName=t,[o,j3(r,...e)]}function j3(...t){const e=t[0];if(t.length===1)return e;const n=()=>{const o=t.map(r=>({useScope:r(),scopeName:r.scopeName}));return function(a){const s=o.reduce((i,{useScope:l,scopeName:c}
vendor: 9,289 bytes, line 41
41)=>{const d=l(a)[`__scope${c}`];return{...i,...d}},{});return f.useMemo(()=>({[`__scope${e.scopeName}`]:s}),[s])}};return n.scopeName=e.scopeName,n}function ps(t){const e=O3(t),n=f.forwardRef((o,r)=>{const{children:a,...s}=o,i=f.Children.toArray(a),l=i.find(R3);if(l){const c=l.props.children,u=i.map(d=>d===l?f.Children.count(c)>1?f.Children.only(null):f.isValidElement(c)?c.props.children:null:d);return h.jsx(e,{...s,ref:r,children:f.isValidElement(c)?f.cloneElement(c,void 0,u):null})}return h.jsx(e,{...s,ref:r,children:a})});return n.displayName=`${t}.Slot`,n}var B3=ps("Slot");function O3(t){const e=f.forwardRef((n,o)=>{const{children:r,...a}=n;if(f.isValidElement(r)){const s=L3(r),i=N3(a,r.props);return r.type!==f.Fragment&&(i.ref=o?Vr(o,s):s),f.cloneElement(r,i)}return f.Children.count(r)>1?f.Children.only(null):null});return e.displayName=`${t}.SlotClone`,e}var l0=Symbol("radix.slottable");function M3(t){const e=({children:n})=>h.jsx(h.Fragment,{children:n});return e.displayName=`${t}.Slottable`,e.__radixId=l0,e}function R3(t){return f.isValidElement(t)&&typeof t.type=="function"&&"__radixId"in t.type&&t.type.__radixId===l0}function N3(t,e){const n={...e};for(const o in e){const r=t[o],a=e[o];/^on[A-Z]/.test(o)?r&&a?n[o]=(...i)=>{const l=a(...i);return r(...i),l}:r&&(n[o]=r):o==="style"?n[o]={...r,...a}:o==="className"&&(n[o]=[r,a].filter(Boolean).join(" "))}return{...t,...n}}function L3(t){var o,r;let e=(o=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:o.get,n=e&&"isReactWarning"in e&&e.isReactWarning;return n?t.ref:(e=(r=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:r.get,n=e&&"isReactWarning"in e&&e.isReactWarning,n?t.props.ref:t.props.ref||t.ref)}function pm(t){const e=t+"CollectionProvider",[n,o]=wr(e),[r,a]=n(e,{collectionRef:{current:null},itemMap:new Map}),s=y=>{const{scope:k,children:w}=y,m=M.useRef(null),b=M.useRef(new Map).current;return h.jsx(r,{scope:k,itemMap:b,collectionRef:m,children:w})};s.displayName=e;const i=t+"CollectionSlot",l=ps(i),c=M.forwardRef((y,k)=>{const{scope:w,children:m}=y,b=a(i,w),x=Ee(k,b.collectionRef);return h.jsx(l,{ref:x,children:m})});c.displayName=i;const u=t+"CollectionItemSlot",d="data-radix-collection-item",g=ps(u),p=M.forwardRef((y,k)=>{const{scope:w,children:m,...b}=y,x=M.useRef(null),S=Ee(k,x),T=a(u,w);return M.useEffect(()=>(T.itemMap.set(x,{ref:x,...b}),()=>void T.itemMap.delete(x))),h.jsx(g,{[d]:"",ref:S,children:m})});p.displayName=u;function v(y){const k=a(t+"CollectionConsumer",y);return M.useCallback(()=>{const m=k.collectionRef.current;if(!m)return[];const b=Array.from(m.querySelectorAll(`[${d}]`));return Array.from(k.itemMap.values()).sort((T,A)=>b.indexOf(T.ref.current)-b.indexOf(A.ref.current))},[k.collectionRef,k.itemMap])}return[{Provider:s,Slot:c,ItemSlot:p},v,o]}var D3=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],ce=D3.reduce((t,e)=>{const n=ps(`Primitive.${e}`),o=f.forwardRef((r,a)=>{const{asChild:s,...i}=r,l=s?n:e;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),h.jsx(l,{...i,ref:a})});return o.displayName=`Primitive.${e}`,{...t,[e]:o}},{});function c0(t,e){t&&ra.flushSync(()=>t.dispatchEvent(e))}function In(t){const e=f.useRef(t);return f.useEffect(()=>{e.current=t}),f.useMemo(()=>(...n)=>{var o;return(o=e.current)==null?void 0:o.call(e,...n)},[])}function W3(t,e=globalThis==null?void 0:globalThis.document){const n=In(t);f.useEffect(()=>{const o=r=>{r.key==="Escape"&&n(r)};return e.addEventListener("keydown",o,{capture:!0}),()=>e.removeEventListener("keydown",o,{capture:!0})},[n,e])}var q3="DismissableLayer",_p="dismissableLayer.update",F3="dismissableLayer.pointerDownOutside",H3="dismissableLayer.focusOutside",Ey,h0=f.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),gl=f.forwardRef((t,e)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:o,onPointerDownOutside:r,onFocusOutside:a,onInteractOutside:s,onDismiss:i,...l}=t,c=f.useContext(h0),[u,d]=f.useState(null),g=(u==null?void 0:u.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,p]=f.useState({}),v=Ee(e,A=>d(A)),y=Array.from(c.layers),[k]=[...c.layersWithOutsidePointerEventsDisabled].slice(-1),w=y.indexOf(k),m=u?y.indexOf(u):-1,b=c.layersWithOutsidePointerEventsDisabled.size>0,x=m>=w,S=$3(A=>{const _=A.target,C=[...c.branches].some(P=>P.contains(_));!x||C||(r==null||r(A),s==null||s(A),A.defaultPrevented||i==null||i())},g),T=U3(A=>{const _=A.target;[...c.branches].some(P=>P.contains(_))||(a==null||a(A),s==null||s(A),A.defaultPrevented||i==null||i())},g);return W3(A=>{m===c.layers.size-1&&(o==null||o(A),!A.defaultPrevented&&i&&(A.preventDefault(),i()))},g),f.useEffect(()=>{if(u)return n&&(c.layersWithOutsidePointerEventsDisabled.size===0&&(Ey=g.body.style.pointerEvents,g.body.style.pointerEvents="none"),c.layersWithOutsidePointerEventsDisabled.add(u)),c.layers.add(u),Iy(),()=>{n&&c.layersWithOutsidePointerEventsDisabled.size===1&&(g.body.style.pointerEvents=Ey)}},[u,g,n,c]),f.useEffect(()=>()=>{u&&(c.layers.delete(u),c.layersWithOutsidePointerEventsDisabled.delete(u),Iy())},[u,c]),f.useEffect(()=>{const A=()=>p({});return document.addEventListener(_p,A),()=>document.removeEventListener(_p,A)},[]),h.jsx(ce.div,{...l,ref:v,style:{pointerEvents:b?x?"auto":"none":void 0,...t.style},onFocusCapture:me(t.onFocusCapture,T.onFocusCapture),onBlurCapture:me(t.onBlurCapture,T.onBlurCapture),onPointerDownCapture:me(t.onPointerDownCapture,S.onPointerDownCapture)})});gl.displayName=q3;var z3="DismissableLayerBranch",u0=f.forwardRef((t,e)=>{const n=f.useContext(h0),o=f.useRef(null),r=Ee(e,o);return f.useEffect(()=>{const a=o.current;if(a)return n.branches.add(a),()=>{n.branches.delete(a)}},[n.branches]),h.jsx(ce.div,{...t,ref:r})});u0.displayName=z3;function $3(t,e=globalThis==null?void 0:globalThis.document){const n=In(t),o=f.useRef(!1),r=f.useRef(()=>{});return f.useEffect(()=>{const a=i=>{if(i.target&&!o.current){let l=function(){d0(F3,n,c,{discrete:!0})};const c={originalEvent:i};i.pointerType==="touch"?(e.removeEventListener("click",r.current),r.current=l,e.addEventListener("click",r.current,{once:!0})):l()}else e.removeEventListener("click",r.current);o.current=!1},s=window.setTimeout(()=>{e.addEventListener("pointerdown",a)},0);return()=>{window.clearTimeout(s),e.removeEventListener("pointerdown",a),e.removeEventListener("click",r.current)}},[e,n]),{onPointerDownCapture:()=>o.current=!0}}function U3(t,e=globalThis==null?void 0:globalThis.document){const n=In(t),o=f.useRef(!1);return f.useEffect(()=>{const r=a=>{a.target&&!o.current&&d0(H3,n,{originalEvent:a},{discrete:!1})};return e.addEventListener("focusin",r),()=>e.removeEventListener("focusin",r)},[e,n]),{onFocusCapture:()=>o.current=!0,onBlurCapture:()=>o.current=!1}}function Iy(){const t=new CustomEvent(_p);document.dispatchEvent(t)}function d0(t,e,n,{discrete:o}){const r=n.originalEvent.target,a=new CustomEvent(t,{bubbles:!1,cancelable:!0,detail:n});e&&r.addEventListener(t,e,{once:!0}),o?c0(r,a):r.dispatchEvent(a)}var Y3=gl,V3=u0,rt=globalThis!=null&&globalThis.document?f.useLayoutEffect:()=>{},G3="Portal",Uh=f.forwardRef((t,e)=>{var i;const{container:n,...o}=t,[r,a]=f.useState(!1);rt(()=>a(!0),[]);const s=n||r&&((i=globalThis==null?void 0:globalThis.document)==null?void 0:i.body);return s?Xk.createPortal(h.jsx(ce.div,{...o,ref:e}),s):null});Uh.displayName=G3;function K3(t,e){return f.useReducer((n,o)=>e[n][o]??n,t)}var aa=t=>{const{present:e,children:n}=t,o=J3(e),r=typeof n=="function"?n({present:o.isPresent}):f.Children.only(n),a=Ee(o.ref,Q3(r));return typeof n=="function"||o.isPresent?f.cloneElement(r,{ref:a}):null};aa.displayName="Presence";function J3(t){const[e,n]=f.useState(),o=f.useRef(null),r=f.useRef(t),a=f.useRef("none"),s=t?"mounted":"unmounted",[i,l]=K3(s,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return f.useEffect(()=>{const c=$l(o.current);a.current=i==="mounted"?c:"none"},[i]),rt(()=>{const c=o.current,u=r.current;if(u!==t){const g=a.current,p=$l(c);t?l("MOUNT"):p==="none"||(c==null?void 0:c.display)==="none"?l("UNMOUNT"):l(u&&g!==p?"ANIMATION_OUT":"UNMOUNT"),r.current=t}},[t,l]),rt(()=>{if(e){let c;const u=e.ownerDocument.defaultView??window,d=p=>{const y=$l(o.current).includes(p.animationName);if(p.target===e&&y&&(l("ANIMATION_END"),!r.current)){const k=e.style.animationFillMode;e.style.animationFillMode="forwards",c=u.setTimeout(()=>{e.style.animationFillMode==="forwards"&&(e.style.animationFillMode=k)})}},g=p=>{p.target===e&&(a.current=$l(o.current))};return e.addEventListener("animationstart",g),e.addEventListener("animationcancel",d),e.addEventListener("animationend",d),()=>{u.clearTimeout(c),e.removeEventListener("animationstart",g),e.removeEventListener("animationcancel",d),e.removeEventListener("animationend",d)}}else l("ANIMATION_END")},[e,l]),{isPresent:["mounted","unmountSuspended"].includes(i),ref:f.useCallback(c=>{o.current=c?getComputedStyle(c):null,n(c)},[])}}function $l(t){return(t==null?void 0:t.animationName)||"none"}function Q3(t){var o,r;let e=(o=Object.getOwnPropertyDescriptor(t.props,"ref"))==null?void 0:o.get,n=e&&"isReactWarning"in e&&e.
41isReactWarning;return n?t.ref:(e=(r=Object.getOwnPropertyDescriptor(t,"ref"))==null?void 0:r.get,n=e&&"isReactWarning"in e&&e.isReactWarning,n?t.props.ref:t.props.ref||t.ref)}var Z3=kg[" useInsertionEffect ".trim().toString()]||rt;function Gr({prop:t,defaultProp:e,onChange:n=()=>{},caller:o}){const[r,a,s]=X3({defaultProp:e,onChange:n}),i=t!==void 0,l=i?t:r;{const u=f.useRef(t!==void 0);f.useEffect(()=>{const d=u.current;d!==i&&console.warn(`${o} is changing from ${d?"controlled":"uncontrolled"} to ${i?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),u.current=i},[i,o])}const c=f.useCallback(u=>{var d;if(i){const g=eA(u)?u(t):u;g!==t&&((d=s.current)==null||d.call(s,g))}else a(u)},[i,t,a,s]);return[l,c]}function X3({defaultProp:t,onChange:e}){const[n,o]=f.useState(t),r=f.useRef(n),a=f.useRef(e);return Z3(()=>{a.current=e},[e]),f.useEffect(()=>{var s;r.current!==n&&((s=a.current)==null||s.call(a,n),r.current=n)},[n,r]),[n,o,a]}function eA(t){return typeof t=="function"}var p0=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"}),tA="VisuallyHidden",Yh=f.forwardRef((t,e)=>h.jsx(ce.span,{...t,ref:e,style:{...p0,...t.style}}));Yh.displayName=tA;var nA=Yh,gm="ToastProvider",[mm,oA,rA]=pm("Toast"),[g0,sN]=wr("Toast",[rA]),[aA,Vh]=g0(gm),m0=t=>{const{__scopeToast:e,label:n="Notification",duration:o=5e3,swipeDirection:r="right",swipeThreshold:a=50,children:s}=t,[i,l]=f.useState(null),[c,u]=f.useState(0),d=f.useRef(!1),g=f.useRef(!1);return n.trim()||console.error(`Invalid prop \`label\` supplied to \`${gm}\`. Expected non-empty \`string\`.`),h.jsx(mm.Provider,{scope:e,children:h.jsx(aA,{scope:e,label:n,duration:o,swipeDirection:r,swipeThreshold:a,toastCount:c,viewport:i,onViewportChange:l,onToastAdd:f.useCallback(()=>u(p=>p+1),[]),onToastRemove:f.useCallback(()=>u(p=>p-1),[]),isFocusedToastEscapeKeyDownRef:d,isClosePausedRef:g,children:s})})};m0.displayName=gm;var f0="ToastViewport",sA=["F8"],Cp="toast.viewportPause",Ep="toast.viewportResume",y0=f.forwardRef((t,e)=>{const{__scopeToast:n,hotkey:o=sA,label:r="Notifications ({hotkey})",...a}=t,s=Vh(f0,n),i=oA(n),l=f.useRef(null),c=f.useRef(null),u=f.useRef(null),d=f.useRef(null),g=Ee(e,d,s.onViewportChange),p=o.join("+").replace(/Key/g,"").replace(/Digit/g,""),v=s.toastCount>0;f.useEffect(()=>{const k=w=>{var b;o.length!==0&&o.every(x=>w[x]||w.code===x)&&((b=d.current)==null||b.focus())};return document.addEventListener("keydown",k),()=>document.removeEventListener("keydown",k)},[o]),f.useEffect(()=>{const k=l.current,w=d.current;if(v&&k&&w){const m=()=>{if(!s.isClosePausedRef.current){const T=new CustomEvent(Cp);w.dispatchEvent(T),s.isClosePausedRef.current=!0}},b=()=>{if(s.isClosePausedRef.current){const T=new CustomEvent(Ep);w.dispatchEvent(T),s.isClosePausedRef.current=!1}},x=T=>{!k.contains(T.relatedTarget)&&b()},S=()=>{k.contains(document.activeElement)||b()};return k.addEventListener("focusin",m),k.addEventListener("focusout",x),k.addEventListener("pointermove",m),k.addEventListener("pointerleave",S),window.addEventListener("blur",m),window.addEventListener("focus",b),()=>{k.removeEventListener("focusin",m),k.removeEventListener("focusout",x),k.removeEventListener("pointermove",m),k.removeEventListener("pointerleave",S),window.removeEventListener("blur",m),window.removeEventListener("focus",b)}}},[v,s.isClosePausedRef]);const y=f.useCallback(({tabbingDirection:k})=>{const m=i().map(b=>{const x=b.ref.current,S=[x,...bA(x)];return k==="forwards"?S:S.reverse()});return(k==="forwards"?m.reverse():m).flat()},[i]);return f.useEffect(()=>{const k=d.current;if(k){const w=m=>{var S,T,A;const b=m.altKey||m.ctrlKey||m.metaKey;if(m.key==="Tab"&&!b){const _=document.activeElement,C=m.shiftKey;if(m.target===k&&C){(S=c.current)==null||S.focus();return}const O=y({tabbingDirection:C?"backwards":"forwards"}),Y=O.findIndex(B=>B===_);ed(O.slice(Y+1))?m.preventDefault():C?(T=c.current)==null||T.focus():(A=u.current)==null||A.focus()}};return k.addEventListener("keydown",w),()=>k.removeEventListener("keydown",w)}},[i,y]),h.jsxs(V3,{ref:l,role:"region","aria-label":r.replace("{hotkey}",p),tabIndex:-1,style:{pointerEvents:v?void 0:"none"},children:[v&&h.jsx(Ip,{ref:c,onFocusFromOutsideViewport:()=>{const k=y({tabbingDirection:"forwards"});ed(k)}}),h.jsx(mm.Slot,{scope:n,children:h.jsx(ce.ol,{tabIndex:-1,...a,ref:g})}),v&&h.jsx(Ip,{ref:u,onFocusFromOutsideViewport:()=>{const k=y({tabbingDirection:"backwards"});ed(k)}})]})});y0.displayName=f0;var w0="ToastFocusProxy",Ip=f.forwardRef((t,e)=>{const{__scopeToast:n,onFocusFromOutsideViewport:o,...r}=t,a=Vh(w0,n);return h.jsx(Yh,{"aria-hidden":!0,tabIndex:0,...r,ref:e,style:{position:"fixed"},onFocus:s=>{var c;const i=s.relatedTarget;!((c=a.viewport)!=null&&c.contains(i))&&o()}})});Ip.displayName=w0;var ml="Toast",iA="toast.swipeStart",lA="toast.swipeMove",cA="toast.swipeCancel",hA="toast.swipeEnd",b0=f.forwardRef((t,e)=>{const{forceMount:n,open:o,defaultOpen:r,onOpenChange:a,...s}=t,[i,l]=Gr({prop:o,defaultProp:r??!0,onChange:a,caller:ml});return h.jsx(aa,{present:n||i,children:h.jsx(pA,{open:i,...s,ref:e,onClose:()=>l(!1),onPause:In(t.onPause),onResume:In(t.onResume),onSwipeStart:me(t.onSwipeStart,c=>{c.currentTarget.setAttribute("data-swipe","start")}),onSwipeMove:me(t.onSwipeMove,c=>{const{x:u,y:d}=c.detail.delta;c.currentTarget.setAttribute("data-swipe","move"),c.currentTarget.style.setProperty("--radix-toast-swipe-move-x",`${u}px`),c.currentTarget.style.setProperty("--radix-toast-swipe-move-y",`${d}px`)}),onSwipeCancel:me(t.onSwipeCancel,c=>{c.currentTarget.setAttribute("data-swipe","cancel"),c.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),c.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),c.currentTarget.style.removeProperty("--radix-toast-swipe-end-x"),c.currentTarget.style.removeProperty("--radix-toast-swipe-end-y")}),onSwipeEnd:me(t.onSwipeEnd,c=>{const{x:u,y:d}=c.detail.delta;c.currentTarget.setAttribute("data-swipe","end"),c.currentTarget.style.removeProperty("--radix-toast-swipe-move-x"),c.currentTarget.style.removeProperty("--radix-toast-swipe-move-y"),c.currentTarget.style.setProperty("--radix-toast-swipe-end-x",`${u}px`),c.currentTarget.style.setProperty("--radix-toast-swipe-end-y",`${d}px`),l(!1)})})})});b0.displayName=ml;var[uA,dA]=g0(ml,{onClose(){}}),pA=f.forwardRef((t,e)=>{const{__scopeToast:n,type:o="foreground",duration:r,open:a,onClose:s,onEscapeKeyDown:i,onPause:l,onResume:c,onSwipeStart:u,onSwipeMove:d,onSwipeCancel:g,onSwipeEnd:p,...v}=t,y=Vh(ml,n),[k,w]=f.useState(null),m=Ee(e,B=>w(B)),b=f.useRef(null),x=f.useRef(null),S=r||y.duration,T=f.useRef(0),A=f.useRef(S),_=f.useRef(0),{onToastAdd:C,onToastRemove:P}=y,L=In(()=>{var V;(k==null?void 0:k.contains(document.activeElement))&&((V=y.viewport)==null||V.focus()),s()}),O=f.useCallback(B=>
41{!B||B===1/0||(window.clearTimeout(_.current),T.current=new Date().getTime(),_.current=window.setTimeout(L,B))},[L]);f.useEffect(()=>{const B=y.viewport;if(B){const V=()=>{O(A.current),c==null||c()},U=()=>{const K=new Date().getTime()-T.current;A.current=A.current-K,window.clearTimeout(_.current),l==null||l()};return B.addEventListener(Cp,U),B.addEventListener(Ep,V),()=>{B.removeEventListener(Cp,U),B.removeEventListener(Ep,V)}}},[y.viewport,S,l,c,O]),f.useEffect(()=>{a&&!y.isClosePausedRef.current&&O(S)},[a,S,y.isClosePausedRef,O]),f.useEffect(()=>(C(),()=>P()),[C,P]);const Y=f.useMemo(()=>k?_0(k):null,[k]);return y.viewport?h.jsxs(h.Fragment,{children:[Y&&h.jsx(gA,{__scopeToast:n,role:"status","aria-live":o==="foreground"?"assertive":"polite","aria-atomic":!0,children:Y}),h.jsx(uA,{scope:n,onClose:L,children:ra.createPortal(h.jsx(mm.ItemSlot,{scope:n,children:h.jsx(Y3,{asChild:!0,onEscapeKeyDown:me(i,()=>{y.isFocusedToastEscapeKeyDownRef.current||L(),y.isFocusedToastEscapeKeyDownRef.current=!1}),children:h.jsx(ce.li,{role:"status","aria-live":"off","aria-atomic":!0,tabIndex:0,"data-state":a?"open":"closed","data-swipe-direction":y.swipeDirection,...v,ref:m,style:{userSelect:"none",touchAction:"none",...t.style},onKeyDown:me(t.onKeyDown,B=>{B.key==="Escape"&&(i==null||i(B.nativeEvent),B.nativeEvent.defaultPrevented||(y.isFocusedToastEscapeKeyDownRef.current=!0,L()))}),onPointerDown:me(t.onPointerDown,B=>{B.button===0&&(b.current={x:B.clientX,y:B.clientY})}),onPointerMove:me(t.onPointerMove,B=>{if(!b.current)return;const V=B.clientX-b.current.x,U=B.clientY-b.current.y,K=!!x.current,I=["left","right"].includes(y.swipeDirection),j=["left","up"].includes(y.swipeDirection)?Math.min:Math.max,H=I?j(0,V):0,Z=I?0:j(0,U),E=B.pointerType==="touch"?10:2,D={x:H,y:Z},F={originalEvent:B,delta:D};K?(x.current=D,Ul(lA,d,F,{discrete:!1})):Py(D,y.swipeDirection,E)?(x.current=D,Ul(iA,u,F,{discrete:!1}),B.target.setPointerCapture(B.pointerId)):(Math.abs(V)>E||Math.abs(U)>E)&&(b.current=null)}),onPointerUp:me(t.onPointerUp,B=>{const V=x.current,U=B.target;if(U.hasPointerCapture(B.pointerId)&&U.releasePointerCapture(B.pointerId),x.current=null,b.current=null,V){const K=B.currentTarget,I={originalEvent:B,delta:V};Py(V,y.swipeDirection,y.swipeThreshold)?Ul(hA,p,I,{discrete:!0}):Ul(cA,g,I,{discrete:!0}),K.addEventListener("click",j=>j.preventDefault(),{once:!0})}})})})}),y.viewport)})]}):null}),gA=t=>{const{__scopeToast:e,children:n,...o}=t,r=Vh(ml,e),[a,s]=f.useState(!1),[i,l]=f.useState(!1);return yA(()=>s(!0)),f.useEffect(()=>{const c=window.setTimeout(()=>l(!0),1e3);return()=>window.clearTimeout(c)},[]),i?null:h.jsx(Uh,{asChild:!0,children:h.jsx(Yh,{...o,children:a&&h.jsxs(h.Fragment,{children:[r.label," ",n]})})})},mA="ToastTitle",v0=f.forwardRef((t,e)=>{const{__scopeToast:n,...o}=t;return h.jsx(ce.div,{...o,ref:e})});v0.displayName=mA;var fA="ToastDescription",k0=f.forwardRef((t,e)=>{const{__scopeToast:n,...o}=t;return h.jsx(ce.div,{...o,ref:e})});k0.displayName=fA;var x0="ToastAction",S0=f.forwardRef((t,e)=>{const{altText:n,...o}=t;return n.trim()?h.jsx(A0,{altText:n,asChild:!0,children:h.jsx(fm,{...o,ref:e})}):(console.error(`Invalid prop \`altText\` supplied to \`${x0}\`. Expected non-empty \`string\`.`),null)});S0.displayName=x0;var T0="ToastClose",fm=f.forwardRef((t,e)=>{const{__scopeToast:n,...o}=t,r=dA(T0,n);return h.jsx(A0,{asChild:!0,children:h.jsx(ce.button,{type:"button",...o,ref:e,onClick:me(t.onClick,r.onClose)})})});fm.displayName=T0;var A0=f.forwardRef((t,e)=>{const{__scopeToast:n,altText:o,...r}=t;return h.jsx(ce.div,{"data-radix-toast-announce-exclude":"","data-radix-toast-announce-alt":o||void 0,...r,ref:e})});function _0(t){const e=[];return Array.from(t.childNodes).forEach(o=>{if(o.nodeType===o.TEXT_NODE&&o.textContent&&e.push(o.textContent),wA(o)){const r=o.ariaHidden||o.hidden||o.style.display==="none",a=o.dataset.radixToastAnnounceExclude==="";if(!r)if(a){const s=o.dataset.radixToastAnnounceAlt;s&&e.push(s)}else e.push(..._0(o))}}),e}function Ul(t,e,n,{discrete:o}){const r=n.originalEvent.currentTarget,a=new CustomEvent(t,{bubbles:!0,cancelable:!0,detail:n});e&&r.addEventListener(t,e,{once:!0}),o?c0(r,a):r.dispatchEvent(a)}var Py=(t,e,n=0)=>{const o=Math.abs(t.x),r=Math.abs(t.y),a=o>r;return e==="left"||e==="right"?a&&o>n:!a&&r>n};function yA(t=()=>{}){const e=In(t);rt(()=>{let n=0,o=0;return n=window.requestAnimationFrame(()=>o=window.requestAnimationFrame(e)),()=>{window.cancelAnimationFrame(n),window.cancelAnimationFrame(o)}},[e])}function wA(t){return t.nodeType===t.ELEMENT_NODE}function bA(t){const e=[],n=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const r=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||r?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)e.push(n.currentNode);return e}function ed(t){const e=document.activeElement;return t.some(n=>n===e?!0:(n.focus(),document.activeElement!==e))}var vA=m0,C0=y0,E0=b0,I0=v0,P0=k0,j0=S0,B0=fm;function O0(t){var e,n,o="";if(typeof t=="string"||typeof t=="number")o+=t;else if(typeof t=="object")if(Array.isArray(t)){var r=t.length;for(e=0;e<r;e++)t[e]&&(n=O0(t[e]))&&(o&&(o+=" "),o+=n)}else for(n in t)t[n]&&(o&&(o+=" "),o+=n);return o}function M0(){for(var t,e,n=0,o="",r=arguments.length;n<r;n++)(t=arguments[n])&&(e=O0(t))&&(o&&(o+=" "),o+=e);return o}const jy=t=>typeof t=="boolean"?`${t}`:t===0?"0":t,By=M0,ym=(t,e)=>n=>{var o;if((e==null?void 0:e.variants)==null)return By(t,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:r,defaultVariants:a}=e,s=Object.keys(r).map(c=>{const u=n==null?void 0:n[c],d=a==null?void 0:a[c];if(u===null)return null;const g=jy(u)||jy(d);return r[c][g]}),i=n&&Object.entries(n).reduce((c,u)=>{let[d,g]=u;return g===void 0||(c[d]=g),c},{}),l=e==null||(o=e.compoundVariants)===null||o===void 0?void 0:o.reduce((c,u)=>{let{class:d,className:g,...p}=u;return Object.entries(p).every(v=>{let[y,k]=v;return Array.isArray(k)?k.includes({...a,...i}[y]):{...a,...i}[y]===k})?[...c,d,g]:c},[]);return By(t,s,l,n==null?void 0:n.class,n==null?void 0:n.className)};/**
42 * @license lucide-react v0.462.0 - ISC
43 *
44 * This source code is licensed under the ISC license.
45 * See the LICENSE file in the root directory of this source tree.
46 */const kA=t=>t.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),R0=(...t)=>t.filter((e,n,o)=>!!e&&e.trim()!==""&&o.indexOf(e)===n).join(" ").trim();/**
47 * @license lucide-react v0.462.0 - ISC
48 *
49 * This source code is licensed under the ISC license.
50 * See the LICENSE file in the root directory of this source tree.
51 */var xA={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"};/**
52 * @license lucide-react v0.462.0 - ISC
53 *
54 * This source code is licensed under the ISC license.
55 * See the LICENSE file in the root directory of this source tree.
56 */const SA=f.forwardRef(({color:t="currentColor",size:e=24,strokeWidth:n=2,absoluteStrokeWidth:o,className:r="",children:a,iconNode:s,...i},l)=>f.createElement("svg",{ref:l,...xA,width:e,height:e,stroke:t,strokeWidth:o?Number(n)*24/Number(e):n,className:R0("lucide",r),...i},[...s.map(([c,u])=>f.createElement(c,u)),...Array.isArray(a)?a:[a]]));/**
57 * @license lucide-react v0.462.0 - ISC
58 *
59 * This source code is licensed under the ISC license.
60 * See the LICENSE file in the root directory of this source tree.
61 */const Zn=(t,e)=>{const n=f.forwardRef(({className:o,...r},a)=>f.createElement(SA,{ref:a,iconNode:e,className:R0(`lucide-${kA(t)}`,o),...r}));return n.displayName=`${t}`,n};/**
62 * @license lucide-react v0.462.0 - ISC
63 *
64 * This source code is licensed under the ISC license.
65 * See the LICENSE file in the root directory of this source tree.
66 */const Vn=Zn("ArrowRight",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"m12 5 7 7-7 7",key:"xquz4c"}]]);/**
67 * @license lucide-react v0.462.0 - ISC
68 *
69 * This source code is licensed under the ISC license.
70 * See the LICENSE file in the root directory of this source tree.
71 */const N0=Zn("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/**
72 * @license lucide-react v0.462.0 - ISC
73 *
74 * This source code is licensed under the ISC license.
75 * See the LICENSE file in the root directory of this source tree.
76 */const gs=Zn("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/**
77 * @license lucide-react v0.462.0 - ISC
78 *
79 * This source code is licensed under the ISC license.
80 * See the LICENSE file in the root directory of this source tree.
81 */const TA=Zn("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);/**
82 * @license lucide-react v0.462.0 - ISC
83 *
84 * This source code is licensed under the ISC license.
85 * See the LICENSE file in the root directory of this source tree.
86 */const AA=Zn("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/**
87 * @license lucide-react v0.462.0 - ISC
88 *
89 * This source code is licensed under the ISC license.
90 * See the LICENSE file in the root directory of this source tree.
91 */const Oy=Zn("Linkedin",[["path",{d:"M16 8a6 6 0 0 1 6 6v7h-4v-7a2 2 0 0 0-2-2 2 2 0 0 0-2 2v7h-4v-7a6 6 0 0 1 6-6z",key:"c2jq9f"}],["rect",{width:"4",height:"12",x:"2",y:"9",key:"mk3on5"}],["circle",{cx:"4",cy:"4",r:"2",key:"bt5ra8"}]]);/**
92 * @license lucide-react v0.462.0 - ISC
93 *
94 * This source code is licensed under the ISC license.
95 * See the LICENSE file in the root directory of this source tree.
96 */const _A=Zn("Menu",[["line",{x1:"4",x2:"20",y1:"12",y2:"12",key:"1e0a9i"}],["line",{x1:"4",x2:"20",y1:"6",y2:"6",key:"1owob3"}],["line",{x1:"4",x2:"20",y1:"18",y2:"18",key:"yk5zj1"}]]);/**
97 * @license lucide-react v0.462.0 - ISC
98 *
99 * This source code is licensed under the ISC license.
100 * See the LICENSE file in the root directory of this source tree.
101 */const wm=Zn("Search",[["circle",{cx:"11",cy:"11",r:"8",key:"4ej97u"}],["path",{d:"m21 21-4.3-4.3",key:"1qie3q"}]]);/**
102 * @license lucide-react v0.462.0 - ISC
103 *
104 * This source code is licensed under the ISC license.
105 * See the LICENSE file in the root directory of this source tree.
106 */const Gh=Zn("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}
vendor: 1,054 bytes, lines 106-111
106],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);/**
107 * @license lucide-react v0.462.0 - ISC
108 *
109 * This source code is licensed under the ISC license.
110 * See the LICENSE file in the root directory of this source tree.
111 */const My=Zn("Youtube",[["path",{d:"M2.5 17a24.12 24.12 0 0 1 0-10 2 2 0 0 1 1.4-1.4 49.56 49.56 0 0 1 16.2 0A2 2 0 0 1 21.5 7a24.12 24.12 0 0 1 0 10 2 2 0 0 1-1.4 1.4 49.55 49.55 0 0 1-16.2 0A2 2 0 0 1 2.5 17",key:"1q2vi4"}],["path",{d:"m10 15 5-3-5-3z",key:"1jp15x"}]]),bm="-",CA=t=>{const e=IA(t),{conflictingClassGroups:n,conflictingClassGroupModifiers:o}=t;return{getClassGroupId:s=>{const i=s.split(bm);return i[0]===""&&i.length!==1&&i.shift(),L0(i,e)||EA(s)},getConflictingClassGroupIds:(s,i)=>{const l=n[s]||[];return i&&o[s]?[...l,...o[s]]:l}}},L0=(t,e)=>{var s;if(t.length===0)return e.classGroupId;const n=t[0],o=e.nextPart.get(n),r=o?L0(t.slice(1),o):void 0;if(r)return r;if(e.validators.length===0)return;const a=t.join(bm);return(s=e.validators.find(({validator:i})=>i(a)))==null?void 0:s.classGroupId},Ry=/^\[(.+)\]$/,EA=t=>
vendor: 4,211 bytes, line 111
111{if(Ry.test(t)){const e=Ry.exec(t)[1],n=e==null?void 0:e.substring(0,e.indexOf(":"));if(n)return"arbitrary.."+n}},IA=t=>{const{theme:e,prefix:n}=t,o={nextPart:new Map,validators:[]};return jA(Object.entries(t.classGroups),n).forEach(([a,s])=>{Pp(s,o,a,e)}),o},Pp=(t,e,n,o)=>{t.forEach(r=>{if(typeof r=="string"){const a=r===""?e:Ny(e,r);a.classGroupId=n;return}if(typeof r=="function"){if(PA(r)){Pp(r(o),e,n,o);return}e.validators.push({validator:r,classGroupId:n});return}Object.entries(r).forEach(([a,s])=>{Pp(s,Ny(e,a),n,o)})})},Ny=(t,e)=>{let n=t;return e.split(bm).forEach(o=>{n.nextPart.has(o)||n.nextPart.set(o,{nextPart:new Map,validators:[]}),n=n.nextPart.get(o)}),n},PA=t=>t.isThemeGetter,jA=(t,e)=>e?t.map(([n,o])=>{const r=o.map(a=>typeof a=="string"?e+a:typeof a=="object"?Object.fromEntries(Object.entries(a).map(([s,i])=>[e+s,i])):a);return[n,r]}):t,BA=t=>{if(t<1)return{get:()=>{},set:()=>{}};let e=0,n=new Map,o=new Map;const r=(a,s)=>{n.set(a,s),e++,e>t&&(e=0,o=n,n=new Map)};return{get(a){let s=n.get(a);if(s!==void 0)return s;if((s=o.get(a))!==void 0)return r(a,s),s},set(a,s){n.has(a)?n.set(a,s):r(a,s)}}},D0="!",OA=t=>{const{separator:e,experimentalParseClassName:n}=t,o=e.length===1,r=e[0],a=e.length,s=i=>{const l=[];let c=0,u=0,d;for(let k=0;k<i.length;k++){let w=i[k];if(c===0){if(w===r&&(o||i.slice(k,k+a)===e)){l.push(i.slice(u,k)),u=k+a;continue}if(w==="/"){d=k;continue}}w==="["?c++:w==="]"&&c--}const g=l.length===0?i:i.substring(u),p=g.startsWith(D0),v=p?g.substring(1):g,y=d&&d>u?d-u:void 0;return{modifiers:l,hasImportantModifier:p,baseClassName:v,maybePostfixModifierPosition:y}};return n?i=>n({className:i,parseClassName:s}):s},MA=t=>{if(t.length<=1)return t;const e=[];let n=[];return t.forEach(o=>{o[0]==="["?(e.push(...n.sort(),o),n=[]):n.push(o)}),e.push(...n.sort()),e},RA=t=>({cache:BA(t.cacheSize),parseClassName:OA(t),...CA(t)}),NA=/\s+/,LA=(t,e)=>{const{parseClassName:n,getClassGroupId:o,getConflictingClassGroupIds:r}=e,a=[],s=t.trim().split(NA);let i="";for(let l=s.length-1;l>=0;l-=1){const c=s[l],{modifiers:u,hasImportantModifier:d,baseClassName:g,maybePostfixModifierPosition:p}=n(c);let v=!!p,y=o(v?g.substring(0,p):g);if(!y){if(!v){i=c+(i.length>0?" "+i:i);continue}if(y=o(g),!y){i=c+(i.length>0?" "+i:i);continue}v=!1}const k=MA(u).join(":"),w=d?k+D0:k,m=w+y;if(a.includes(m))continue;a.push(m);const b=r(y,v);for(let x=0;x<b.length;++x){const S=b[x];a.push(w+S)}i=c+(i.length>0?" "+i:i)}return i};function DA(){let t=0,e,n,o="";for(;t<arguments.length;)(e=arguments[t++])&&(n=W0(e))&&(o&&(o+=" "),o+=n);return o}const W0=t=>{if(typeof t=="string")return t;let e,n="";for(let o=0;o<t.length;o++)t[o]&&(e=W0(t[o]))&&(n&&(n+=" "),n+=e);return n};function WA(t,...e){let n,o,r,a=s;function s(l){const c=e.reduce((u,d)=>d(u),t());return n=RA(c),o=n.cache.get,r=n.cache.set,a=i,i(l)}function i(l){const c=o(l);if(c)return c;const u=LA(l,n);return r(l,u),u}return function(){return a(DA.apply(null,arguments))}}const Be=t=>{const e=n=>n[t]||[];return e.isThemeGetter=!0,e},q0=/^\[(?:([a-z-]+):)?(.+)\]$/i,qA=/^\d+\/\d+$/,FA=new Set(["px","full","screen"]),HA=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,zA=/\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$/,$A=/^(rgba?|hsla?|hwb|(ok)?(lab|lch))\(.+\)$/,UA=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,YA=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,oo=t=>Va(t)||FA.has(t)||qA.test(t),Bo=t=>Ts(t,"length",e5),Va=t=>!!t&&!Number.isNaN(Number(t)),td=t=>Ts(t,"number",Va),Ys=t=>!!t&&Number.isInteger(Number(t)),VA=t=>t.endsWith("%")&&Va(t.slice(0,-1)),ye=t=>q0.test(t),Oo=t=>HA.test(t),GA=new Set(["length","size","percentage"]),KA=t=>Ts(t,GA,F0),JA=t=>Ts(t,"position",F0),QA=new Set(["image","url"]),ZA=t=>Ts(t,QA,n5),XA=t=>Ts(t,"",t5),Vs=()=>!0,Ts=(t,e,n)=>{const o=q0.exec(t);return o?o[1]?typeof e=="string"?o[1]===e:e.has(o[1]):n(o[2]):!1},e5=t=>zA.test(t)&&!$A.test(t),F0=()=>!1,t5=t=>UA.test(t),n5=t=>YA.test(t),o5=()=>{const t=Be("colors"),e=Be("spacing"),n=Be("blur"),o=Be("brightness"),r=Be("borderColor"),a=Be("borderRadius"),s=Be("borderSpacing"),i=Be("borderWidth"),l=
vendor: 12,319 bytes, line 111
111Be("contrast"),c=Be("grayscale"),u=Be("hueRotate"),d=Be("invert"),g=Be("gap"),p=Be("gradientColorStops"),v=Be("gradientColorStopPositions"),y=Be("inset"),k=Be("margin"),w=Be("opacity"),m=Be("padding"),b=Be("saturate"),x=Be("scale"),S=Be("sepia"),T=Be("skew"),A=Be("space"),_=Be("translate"),C=()=>["auto","contain","none"],P=()=>["auto","hidden","clip","visible","scroll"],L=()=>["auto",ye,e],O=()=>[ye,e],Y=()=>["",oo,Bo],B=()=>["auto",Va,ye],V=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],U=()=>["solid","dashed","dotted","double","none"],K=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],I=()=>["start","end","center","between","around","evenly","stretch"],j=()=>["","0",ye],H=()=>["auto","avoid","all","avoid-page","page","left","right","column"],Z=()=>[Va,ye];return{cacheSize:500,separator:":",theme:{colors:[Vs],spacing:[oo,Bo],blur:["none","",Oo,ye],brightness:Z(),borderColor:[t],borderRadius:["none","","full",Oo,ye],borderSpacing:O(),borderWidth:Y(),contrast:Z(),grayscale:j(),hueRotate:Z(),invert:j(),gap:O(),gradientColorStops:[t],gradientColorStopPositions:[VA,Bo],inset:L(),margin:L(),opacity:Z(),padding:O(),saturate:Z(),scale:Z(),sepia:j(),skew:Z(),space:O(),translate:O()},classGroups:{aspect:[{aspect:["auto","square","video",ye]}],container:["container"],columns:[{columns:[Oo]}],"break-after":[{"break-after":H()}],"break-before":[{"break-before":H()}],"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:[...V(),ye]}],overflow:[{overflow:P()}],"overflow-x":[{"overflow-x":P()}],"overflow-y":[{"overflow-y":P()}],overscroll:[{overscroll:C()}],"overscroll-x":[{"overscroll-x":C()}],"overscroll-y":[{"overscroll-y":C()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[y]}],"inset-x":[{"inset-x":[y]}],"inset-y":[{"inset-y":[y]}],start:[{start:[y]}],end:[{end:[y]}],top:[{top:[y]}],right:[{right:[y]}],bottom:[{bottom:[y]}],left:[{left:[y]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Ys,ye]}],basis:[{basis:L()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",ye]}],grow:[{grow:j()}],shrink:[{shrink:j()}],order:[{order:["first","last","none",Ys,ye]}],"grid-cols":[{"grid-cols":[Vs]}],"col-start-end":[{col:["auto",{span:["full",Ys,ye]},ye]}],"col-start":[{"col-start":B()}],"col-end":[{"col-end":B()}],"grid-rows":[{"grid-rows":[Vs]}],"row-start-end":[{row:["auto",{span:[Ys,ye]},ye]}],"row-start":[{"row-start":B()}],"row-end":[{"row-end":B()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",ye]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",ye]}],gap:[{gap:[g]}],"gap-x":[{"gap-x":[g]}],"gap-y":[{"gap-y":[g]}],"justify-content":[{justify:["normal",...I()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...I(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...I(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[m]}],px:[{px:[m]}],py:[{py:[m]}],ps:[{ps:[m]}],pe:[{pe:[m]}],pt:[{pt:[m]}],pr:[{pr:[m]}],pb:[{pb:[m]}],pl:[{pl:[m]}],m:[{m:[k]}],mx:[{mx:[k]}],my:[{my:[k]}],ms:[{ms:[k]}],me:[{me:[k]}],mt:[{mt:[k]}],mr:[{mr:[k]}],mb:[{mb:[k]}],ml:[{ml:[k]}],"space-x":[{"space-x":[A]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[A]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",ye,e]}],"min-w":[{"min-w":[ye,e,"min","max","fit"]}],"max-w":[{"max-w":[ye,e,"none","full","min","max","fit","prose",{screen:[Oo]},Oo]}],h:[{h:[ye,e,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[ye,e,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[ye,e,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[ye,e,"auto","min","max","fit"]}],"font-size":[{text:["base",Oo,Bo]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",td]}],"font-family":[{font:[Vs]}],"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",ye]}],"line-clamp":[{"line-clamp":["none",Va,td]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",oo,ye]}],"list-image":[{"list-image":["none",ye]}],"list-style-type":[{list:["none","disc","decimal",ye]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[t]}],"placeholder-opacity":[{"placeholder-opacity":[w]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[t]}],"text-opacity":[{"text-opacity":[w]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...U(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",oo,Bo]}],"underline-offset":[{"underline-offset":["auto",oo,ye]}],"text-decoration-color":[{decoration:[t]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:O()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",ye]}],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",ye]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[w]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...V(),JA]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",KA]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},ZA]}],"bg-color":[{bg:[t]}],"gradient-from-pos":[{from:[v]}],"gradient-via-pos":[{via:[v]}],"gradient-to-pos":[{to:[v]}],"gradient-from":[{from:[p]}],"gradient-via":[{via:[p]}],"gradient-to":[{to:[p]}],rounded:[{rounded:[a]}],"rounded-s":[{"rounded-s":[a]}],"rounded-e":[{"rounded-e":[a]}],"rounded-t":[{"rounded-t":[a]}],"rounded-r":[{"rounded-r":[a]}],"rounded-b":[{"rounded-b":[a]}],"rounded-l":[{"rounded-l":[a]}],"rounded-ss":[{"rounded-ss":[a]}],"rounded-se":[{"rounded-se":[a]}],"rounded-ee":[{"rounded-ee":[a]}],"rounded-es":[{"rounded-es":[a]}],"rounded-tl":[{"rounded-tl":[a]}],"rounded-tr":[{"rounded-tr":[a]}],"rounded-br":[{"rounded-br":[a]}],"rounded-bl":[{"rounded-bl":[a]}],"border-w":[{border:[i]}],"border-w-x":[{"border-x":[i]}],"border-w-y":[{"border-y":[i]}],"border-w-s":[{"border-s":[i]}],"border-w-e":[{"border-e":[i]}],"border-w-t":[{"border-t":[i]}],"border-w-r":[{"border-r":[i]}],"border-w-b":[{"border-b":[i]}],"border-w-l":[{"border-l":[i]}],"border-opacity":[{"border-opacity":[w]}],"border-style":[{border:[...U(),"hidden"]}],"divide-x":[{"divide-x":[i]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[i]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[w]}],"divide-style":[{divide:U()}],"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:["",...U()]}],"outline-offset":[{"outline-offset":[oo,ye]}],"outline-w":[{outline:[oo,Bo]}],"outline-color":[{outline:[t]}],"ring-w":[{ring:Y()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[t]}],"ring-opacity":[{"ring-opacity":[w]}],"ring-offset-w":[{"ring-offset":[oo,Bo]}],"ring-offset-color":[{"ring-offset":[t]}],shadow:[{shadow:["","inner","none",Oo,XA]}],"shadow-color":[{shadow:[Vs]}],opacity:[{opacity:[w]}],"mix-blend":[{"mix-blend":[...K(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":K()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[o]}],contrast:[{contrast:[l]}],"drop-shadow":[{"drop-shadow":["","none",Oo,ye]}],grayscale:[{grayscale:[c]}],"hue-rotate":[{"hue-rotate":[u]}],invert:[{invert:[d]}],saturate:[{saturate:[b]}],sepia:[{sepia:[S]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[o]}],"backdrop-contrast":[{"backdrop-contrast":[l]}],"backdrop-grayscale":[{"backdrop-grayscale":[c]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[u]}],"backdrop-invert":[{"backdrop-invert":[d]}],"backdrop-opacity":[{"backdrop-opacity":[w]}],"backdrop-saturate":[{"backdrop-saturate":[b]}],"backdrop-sepia":[{"backdrop-sepia":[S]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[s]}],"border-spacing-x":[{"border-spacing-x":[s]}],"border-spacing-y":[{"border-spacing-y":[s]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",ye]}],duration:[{duration:Z()}],ease:[{ease:["linear","in","out","in-out",ye]}],delay:[{delay:Z()}],animate:[{animate:["none","spin","ping","pulse","bounce",ye]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[x]}],"scale-x":[{"scale-x":[x]}],"scale-y":[{"scale-y":[x]}],rotate:[{rotate:[Ys,ye]}],"translate-x":[{"translate-x":[_]}],"translate-y":[{"translate-y":[_]}],"skew-x":[{"skew-x":[T]}],"skew-y":[{"skew-y":[T]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",ye]}],accent:[{accent:["auto",t]}],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",ye]}],"caret-color":[{caret:[t]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":O()}],"scroll-mx":[{"scroll-mx":O()}],"scroll-my":[{"scroll-my":O()}],"scroll-ms":[{"scroll-ms":O()}],"scroll-me":[{"scroll-me":O()}],"scroll-mt":[{"scroll-mt":O()}],"scroll-mr":[{"scroll-mr":O()}],"scroll-mb":[{"scroll-mb":O()}],"scroll-ml":[{"scroll-ml":O()}],"scroll-p":[{"scroll-p":O()}],"scroll-px":[{"scroll-px":O()}],"scroll-py":[{"scroll-py":O()}],"scroll-ps":[{"scroll-ps":O()}],"scroll-pe":[{"scroll-pe":O()}],"scroll-pt":[{"scroll-pt":O()}
111],"scroll-pr":[{"scroll-pr":O()}],"scroll-pb":[{"scroll-pb":O()}],"scroll-pl":[{"scroll-pl":O()}],"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"]}],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",ye]}],fill:[{fill:[t,"none"]}],"stroke-w":[{stroke:[oo,Bo,td]}],stroke:[{stroke:[t,"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"]}}},r5=WA(o5);function ve(...t){return r5(M0(t))}const a5=vA,H0=f.forwardRef(({className:t,...e},n)=>h.jsx(C0,{ref:n,className:ve("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]",t),...e}));H0.displayName=C0.displayName;const s5=ym("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"}}),z0=f.forwardRef(({className:t,variant:e,...n},o)=>h.jsx(E0,{ref:o,className:ve(s5({variant:e}),t),...n}));z0.displayName=E0.displayName;const i5=f.forwardRef(({className:t,...e},n)=>h.jsx(j0,{ref:n,className:ve("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",t),...e}));i5.displayName=j0.displayName;const $0=f.forwardRef(({className:t,...e},n)=>h.jsx(B0,{ref:n,className:ve("absolute right-2 top-2 rounded-md p-1 text-foreground
111/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",t),"toast-close":"",...e,children:h.jsx(Gh,{className:"h-4 w-4"})}));$0.displayName=B0.displayName;const U0=f.forwardRef(({className:t,...e},n)=>h.jsx(I0,{ref:n,className:ve("text-sm font-semibold",t),...e}));U0.displayName=I0.displayName;const Y0=f.forwardRef(({className:t,...e},n)=>h.jsx(P0,{ref:n,className:ve("text-sm opacity-90",t),...e}));Y0.displayName=P0.displayName;function l5(){const{toasts:t}=I3();return h.jsxs(a5,{children:[t.map(function({id:e,title:n,description:o,action:r,...a}){return h.jsxs(z0,{...a,children:[h.jsxs("div",{className:"grid gap-1",children:[n&&h.jsx(U0,{children:n}),o&&h.jsx(Y0,{children:o})]}),r,h.jsx($0,{})]},e)}),h.jsx(H0,{})]})}var Ly=["light","dark"],c5="(prefers-color-scheme: dark)",h5=f.createContext(void 0),u5={setTheme:t=>{},themes:[]},d5=()=>{var t;return(t=f.useContext(h5))!=null?t:u5};f.memo(({forcedTheme:t,storageKey:e,attribute:n,enableSystem:o,enableColorScheme:r,defaultTheme:a,value:s,attrs:i,nonce:l})=>{let c=a==="system",u=n==="class"?`var d=document.documentElement,c=d.classList;${`c.remove(${i.map(v=>`'${v}'`).join(",")})`};`:`var d=document.documentElement,n='${n}',s='setAttribute';`,d=r?Ly.includes(a)&&a?`if(e==='light'||e==='dark'||!e)d.style.colorScheme=e||'${a}'`:"if(e==='light'||e==='dark')d.style.colorScheme=e":"",g=(v,y=!1,k=!0)=>{let w=s?s[v]:v,m=y?v+"|| ''":`'${w}'`,b="";return r&&k&&!y&&Ly.includes(v)&&(b+=`d.style.colorScheme = '${v}';`),n==="class"?y||w?b+=`c.add(${m})`:b+="null":w&&(b+=`d[s](n,${m})`),b},p=t?`!function(){${u}${g(t)}}()`:o?`!function(){try{${u}var e=localStorage.getItem('${e}');if('system'===e||(!e&&${c})){var t='${c5}',m=window.matchMedia(t);if(m.media!==t||m.matches){${g("dark")}}else{${g("light")}}}else if(e){${s?`var x=${JSON.stringify(s)};`:""}${g(s?"x[e]":"e",!0)}}${c?"":"else{"+g(a,!1,!1)+"}"}${d}}catch(e){}}()`:`!function(){try{${u}var e=localStorage.getItem('${e}');if(e){${s?`var x=${JSON.stringify(s)};`:""}${g(s?"x[e]":"e",!0)}}else{${g(a,!1,!1)};}${d}}catch(t){}}();`;return f.createElement("script",{nonce:l,dangerouslySetInnerHTML:{__html:p}})});var p5=t=>{switch(t){case"success":return f5;case"info":return w5;case"warning":return y5;case"error":return b5;default:return null}},g5=Array(12).fill(0),m5=({visible:t,className:e})=>M.createElement("div",{className:["sonner-loading-wrapper",e].filter(Boolean).join(" "),"data-visible":t},M.createElement("div",{className:"sonner-spinner"},g5.map((n,o)=>M.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${o}`})))),f5=M.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},M.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"})),y5=M.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},M.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"})),w5=M.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},M.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"})),b5=M.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},M.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"})),v5=M.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"},M.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),M.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),k5=()=>{let[t,e]=M.useState(document.hidden);return M.useEffect(()=>{let n=()=>{e(document.hidden)};
111return document.addEventListener("visibilitychange",n),()=>window.removeEventListener("visibilitychange",n)},[]),t},jp=1,x5=class{constructor(){this.subscribe=t=>(this.subscribers.push(t),()=>{let e=this.subscribers.indexOf(t);this.subscribers.splice(e,1)}),this.publish=t=>{this.subscribers.forEach(e=>e(t))},this.addToast=t=>{this.publish(t),this.toasts=[...this.toasts,t]},this.create=t=>{var e;let{message:n,...o}=t,r=typeof(t==null?void 0:t.id)=="number"||((e=t.id)==null?void 0:e.length)>0?t.id:jp++,a=this.toasts.find(i=>i.id===r),s=t.dismissible===void 0?!0:t.dismissible;return this.dismissedToasts.has(r)&&this.dismissedToasts.delete(r),a?this.toasts=this.toasts.map(i=>i.id===r?(this.publish({...i,...t,id:r,title:n}),{...i,...t,id:r,dismissible:s,title:n}):i):this.addToast({title:n,...o,dismissible:s,id:r}),r},this.dismiss=t=>(this.dismissedToasts.add(t),t||this.toasts.forEach(e=>{this.subscribers.forEach(n=>n({id:e.id,dismiss:!0}))}),this.subscribers.forEach(e=>e({id:t,dismiss:!0})),t),this.message=(t,e)=>this.create({...e,message:t}),this.error=(t,e)=>this.create({...e,message:t,type:"error"}),this.success=(t,e)=>this.create({...e,type:"success",message:t}),this.info=(t,e)=>this.create({...e,type:"info",message:t}),this.warning=(t,e)=>this.create({...e,type:"warning",message:t}),this.loading=(t,e)=>this.create({...e,type:"loading",message:t}),this.promise=(t,e)=>{if(!e)return;let n;e.loading!==void 0&&(n=this.create({...e,promise:t,type:"loading",message:e.loading,description:typeof e.description!="function"?e.description:void 0}));let o=t instanceof Promise?t:t(),r=n!==void 0,a,s=o.then(async l=>{if(a=["resolve",l],M.isValidElement(l))r=!1,this.create({id:n,type:"default",message:l});else if(T5(l)&&!l.ok){r=!1;let c=typeof e.error=="function"?await e.error(`HTTP error! status: ${l.status}`):e.error,u=typeof e.description=="function"?await e.description(`HTTP error! status: ${l.status}`):e.description;this.create({id:n,type:"error",message:c,description:u})}else if(e.success!==void 0){r=!1;let c=typeof e.success=="function"?await e.success(l):e.success,u=typeof e.description=="function"?await e.description(l):e.description;this.create({id:n,type:"success",message:c,description:u})}}).catch(async l=>{if(a=["reject",l],e.error!==void 0){r=!1;let c=typeof e.error=="function"?await e.error(l):e.error,u=typeof e.description=="function"?await e.description(l):e.description;this.create({id:n,type:"error",message:c,description:u})}}).finally(()=>{var l;r&&(this.dismiss(n),n=void 0),(l=e.finally)==null||l.call(e)}),i=()=>new Promise((l,c)=>s.then(()=>a[0]==="reject"?c(a[1]):l(a[1])).catch(c));return typeof n!="string"&&typeof n!="number"?{unwrap:i}:Object.assign(n,{unwrap:i})},this.custom=(t,e)=>{let n=(e==null?void 0:e.id)||jp++;return this.create({jsx:t(n),id:n,...e}),n},this.getActiveToasts=()=>this.toasts.filter(t=>!this.dismissedToasts.has(t.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}},_t=new x5,S5=(t,e)=>{let n=(e==null?void 0:e.id)||jp++;return _t.addToast({title:t,...e,id:n}),n},T5=t=>t&&typeof t=="object"&&"ok"in t&&typeof t.ok=="boolean"&&"status"in t&&typeof t.status=="number",A5=S5,_5=()=>_t.toasts,C5=()=>_t.getActiveToasts(),Yl=Object.assign(A5,{success:_t.success,info:_t.info,warning:_t.warning,error:_t.error,custom:_t.custom,message:_t.message,promise:_t.promise,dismiss:_t.dismiss,loading:_t.loading},{getHistory:_5,getToasts:C5});function E5(t,{insertAt:e}={}){if(typeof document>"u")return;let n=document.head||document.getElementsByTagName("head")[0],o=document.createElement("style");o.type="text/css",e==="top"&&n.firstChild?n.insertBefore(o,n.firstChild):n.appendChild(o),o.styleSheet?o.styleSheet.cssText=t:o.appendChild(document.createTextNode(t))}E5(`: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;
111left: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}
111: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%);
111--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%)}
112`);function Vl(t){return t.label!==void 0}var I5=3,P5="32px",j5="16px",Dy=4e3,B5=356,O5=14,M5=20,R5=200;function dn(...t){return t.filter(Boolean).join(" ")}function N5(t){let[e,n]=t.split("-"),o=[];return e&&o.push(e),n&&o.push(n),o}var L5=t=>{var e,n,o,r,a,s,i,l,c,u,d;let{invert:g,toast:p,unstyled:v,interacting:y,setHeights:k,visibleToasts:w,heights:m,index:b,toasts:x,expanded:S,removeToast:T,defaultRichColors:A,closeButton:_,style:C,cancelButtonStyle:P,actionButtonStyle:L,className:O="",descriptionClassName:Y="",duration:B,position:V,gap:U,loadingIcon:K,expandByDefault:I,classNames:j,icons:H,closeButtonAriaLabel:Z="Close toast",pauseWhenPageIsHidden:E}=t,[D,F]=M.useState(null),[$,re]=M.useState(null),[N,te]=M.useState(!1),[se,ie]=M.use
112State(!1),[ne,q]=M.useState(!1),[ue,ke]=M.useState(!1),[De,Ze]=M.useState(!1),[at,Mt]=M.useState(0),[yt,Mn]=M.useState(0),on=M.useRef(p.duration||B||Dy),sa=M.useRef(null),rn=M.useRef(null),vl=b===0,kl=b+1<=w,Tt=p.type,to=p.dismissible!==!1,yu=p.className||"",Os=p.descriptionClassName||"",an=M.useMemo(()=>m.findIndex(he=>he.toastId===p.id)||0,[m,p.id]),Ms=M.useMemo(()=>{var he;return(he=p.closeButton)!=null?he:_},[p.closeButton,_]),ia=M.useMemo(()=>p.duration||B||Dy,[p.duration,B]),_o=M.useRef(0),Co=M.useRef(0),xl=M.useRef(0),Eo=M.useRef(null),[wu,bu]=V.split("-"),Rs=M.useMemo(()=>m.reduce((he,_e,Ie)=>Ie>=an?he:he+_e.height,0),[m,an]),Sl=k5(),Tl=p.invert||g,la=Tt==="loading";Co.current=M.useMemo(()=>an*U+Rs,[an,Rs]),M.useEffect(()=>{on.current=ia},[ia]),M.useEffect(()=>{te(!0)},[]),M.useEffect(()=>{let he=rn.current;if(he){let _e=he.getBoundingClientRect().height;return Mn(_e),k(Ie=>[{toastId:p.id,height:_e,position:p.position},...Ie]),()=>k(Ie=>Ie.filter(ln=>ln.toastId!==p.id))}},[k,p.id]),M.useLayoutEffect(()=>{if(!N)return;let he=rn.current,_e=he.style.height;he.style.height="auto";let Ie=he.getBoundingClientRect().height;he.style.height=_e,Mn(Ie),k(ln=>ln.find(cn=>cn.toastId===p.id)?ln.map(cn=>cn.toastId===p.id?{...cn,height:Ie}:cn):[{toastId:p.id,height:Ie,position:p.position},...ln])},[N,p.title,p.description,k,p.id]);let sn=M.useCallback(()=>{ie(!0),Mt(Co.current),k(he=>he.filter(_e=>_e.toastId!==p.id)),setTimeout(()=>{T(p)},R5)},[p,T,k,Co]);M.useEffect(()=>{if(p.promise&&Tt==="loading"||p.duration===1/0||p.type==="loading")return;let he;return S||y||E&&Sl?(()=>{if(xl.current<_o.current){let _e=new Date().getTime()-_o.current;on.current=on.current-_e}xl.current=new Date().getTime()})():on.current!==1/0&&(_o.current=new Date().getTime(),he=setTimeout(()=>{var _e;(_e=p.onAutoClose)==null||_e.call(p,p),sn()},on.current)),()=>clearTimeout(he)},[S,y,p,Tt,E,Sl,sn]),M.useEffect(()=>{p.delete&&sn()},[sn,p.delete]);function vu(){var he,_e,Ie;return H!=null&&H.loading?M.createElement("div",{className:dn(j==null?void 0:j.loader,(he=p==null?void 0:p.classNames)==null?void 0:he.loader,"sonner-loader"),"data-visible":Tt==="loading"},H.loading):K?M.createElement("div",{className:dn(j==null?void 0:j.loader,(_e=p==null?void 0:p.classNames)==null?void 0:_e.loader,"sonner-loader"),"data-visible":Tt==="loading"},K):M.createElement(m5,{className:dn(j==null?void 0:j.loader,(Ie=p==null?void 0:p.classNames)==null?void 0:Ie.loader),visible:Tt==="loading"})}return M.createElement("li",{tabIndex:0,ref:rn,className:dn(O,yu,j==null?void 0:j.toast,(e=p==null?void 0:p.classNames)==null?void 0:e.toast,j==null?void 0:j.default,j==null?void 0:j[Tt],(n=p==null?void 0:p.classNames)==null?void 0:n[Tt]),"data-sonner-toast":"","data-rich-colors":(o=p.richColors)!=null?o:A,"data-styled":!(p.jsx||p.unstyled||v),"data-mounted":N,"data-promise":!!p.promise,"data-swiped":De,"data-removed":se,"data-visible":kl,"data-y-position":wu,"data-x-position":bu,"data-index":b,"data-front":vl,"data-swiping":ne,"data-dismissible":to,"data-type":Tt,"data-invert":Tl,"data-swipe-out":ue,"data-swipe-direction":$,"data-expanded":!!(S||I&&N),style:{"--index":b,"--toasts-before":b,"--z-index":x.length-b,"--offset":`${se?at:Co.current}px`,"--initial-height":I?"auto":`${yt}px`,...C,...p.style},onDragEnd:()=>{q(!1),F(null),Eo.current=null},onPointerDown:he=>{la||!to||(sa.current=new Date,Mt(Co.current),he.target.setPointerCapture(he.pointerId),he.target.tagName!=="BUTTON"&&(q(!0),Eo.current={x:he.clientX,y:he.clientY}))},onPointerUp:()=>{var he,_e,Ie,ln;if(ue||!to)return;Eo.current=null;let cn=Number(((he=rn.current)==null?void 0:he.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),Io=Number(((_e=rn.current)==null?void 0:_e.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),xr=new Date().getTime()-((Ie=sa.current)==null?void 0:Ie.getTime()),hn=D==="x"?cn:Io,Po=Math.abs(hn)/xr;if(Math.abs(hn)>=M5||Po>.11){Mt(Co.current),(ln=p.onDismiss)==null||ln.call(p,p),re(D==="x"?cn>0?"right":"left":Io>0?"down":"up"),sn(),ke(!0),Ze(!1);return}q(!1),F(null)},onPointerMove:he=>{var _e,Ie,ln,cn;if(!Eo.current||!to||((_e=window.getSelection())==null?void 0:_e.toString().length)>0)return;let Io=he.clientY-Eo.current.y,xr=he.clientX-Eo.current.x,hn=(Ie=t.swipeDirections)!=null?Ie:N5(V);!D&&(Math.abs(xr)>1||Math.abs(Io)>1)&&F(Math.abs(xr)>Math.abs(Io)?"x":"y");let Po={x:0,y:0};D==="y"?(hn.includes("top")||hn.includes("bottom"))&&(hn.includes("top")&&Io<0||hn.includes("bottom")&&Io>0)&&(Po.y=Io):D==="x"&&(hn.includes("left")||hn.includes("right"))&&(hn.includes("left")&&xr<0||hn.includes("right")&&xr>0)&&(Po.x=xr),(Math.abs(Po.x)>0||Math.abs(Po.y)>0)&&Ze(!0),(ln=rn.current)==null||ln.style.setProperty("--swipe-amount-x",`${Po.x}px`),(cn=rn.current)==null||cn.style.setProperty("--swipe-amount-y",`${Po.y}px`)}},Ms&&!p.jsx?M.createElement("button",{"aria-label":Z,"data-disabled":la,"data-close-button":!0,onClick:la||!to?()=>{}:()=>{var he;sn(),(he=p.onDismiss)==null||he.call(p,p)},className:dn(j==null?void 0:j.closeButton,(r=p==null?void 0:p.classNames)==null?void 0:r.closeButton)},(a=H==null?void 0:H.close)!=null?a:v5):null,p.jsx||f.isValidElement(p.title)?p.jsx?p.jsx:typeof p.title=="function"?p.title():p.title:M.createElement(M.Fragment,null,Tt||p.icon||p.promise?M.createElement("div",{"data-icon":"",className:dn(j==null?void 0:j.icon,(s=p==null?void 0:p.classNames)==null?void 0:s.icon)}
112,p.promise||p.type==="loading"&&!p.icon?p.icon||vu():null,p.type!=="loading"?p.icon||(H==null?void 0:H[Tt])||p5(Tt):null):null,M.createElement("div",{"data-content":"",className:dn(j==null?void 0:j.content,(i=p==null?void 0:p.classNames)==null?void 0:i.content)},M.createElement("div",{"data-title":"",className:dn(j==null?void 0:j.title,(l=p==null?void 0:p.classNames)==null?void 0:l.title)},typeof p.title=="function"?p.title():p.title),p.description?M.createElement("div",{"data-description":"",className:dn(Y,Os,j==null?void 0:j.description,(c=p==null?void 0:p.classNames)==null?void 0:c.description)},typeof p.description=="function"?p.description():p.description):null),f.isValidElement(p.cancel)?p.cancel:p.cancel&&Vl(p.cancel)?M.createElement("button",{"data-button":!0,"data-cancel":!0,style:p.cancelButtonStyle||P,onClick:he=>{var _e,Ie;Vl(p.cancel)&&to&&((Ie=(_e=p.cancel).onClick)==null||Ie.call(_e,he),sn())},className:dn(j==null?void 0:j.cancelButton,(u=p==null?void 0:p.classNames)==null?void 0:u.cancelButton)},p.cancel.label):null,f.isValidElement(p.action)?p.action:p.action&&Vl(p.action)?M.createElement("button",{"data-button":!0,"data-action":!0,style:p.actionButtonStyle||L,onClick:he=>{var _e,Ie;Vl(p.action)&&((Ie=(_e=p.action).onClick)==null||Ie.call(_e,he),!he.defaultPrevented&&sn())},className:dn(j==null?void 0:j.actionButton,(d=p==null?void 0:p.classNames)==null?void 0:d.actionButton)},p.action.label):null))};function Wy(){if(typeof window>"u"||typeof document>"u")return"ltr";let t=document.documentElement.getAttribute("dir");return t==="auto"||!t?window.getComputedStyle(document.documentElement).direction:t}function D5(t,e){let n={};return[t,e].forEach((o,r)=>{let a=r===1,s=a?"--mobile-offset":"--offset",i=a?j5:P5;function l(c){["top","right","bottom","left"].forEach(u=>{n[`${s}-${u}`]=typeof c=="number"?`${c}px`:c})}typeof o=="number"||typeof o=="string"?l(o):typeof o=="object"?["top","right","bottom","left"].forEach(c=>{o[c]===void 0?n[`${s}-${c}`]=i:n[`${s}-${c}`]=typeof o[c]=="number"?`${o[c]}px`:o[c]}):l(i)}),n}var W5=f.forwardRef(function(t,e){let{invert:n,position:o="bottom-right",hotkey:r=["altKey","KeyT"],expand:a,closeButton:s,className:i,offset:l,mobileOffset:c,theme:u="light",richColors:d,duration:g,style:p,visibleToasts:v=I5,toastOptions:y,dir:k=Wy(),gap:w=O5,loadingIcon:m,icons:b,containerAriaLabel:x="Notifications",pauseWhenPageIsHidden:S}=t,[T,A]=M.useState([]),_=M.useMemo(()=>Array.from(new Set([o].concat(T.filter(E=>E.position).map(E=>
112E.position)))),[T,o]),[C,P]=M.useState([]),[L,O]=M.useState(!1),[Y,B]=M.useState(!1),[V,U]=M.useState(u!=="system"?u:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),K=M.useRef(null),I=r.join("+").replace(/Key/g,"").replace(/Digit/g,""),j=M.useRef(null),H=M.useRef(!1),Z=M.useCallback(E=>{A(D=>{var F;return(F=D.find($=>$.id===E.id))!=null&&F.delete||_t.dismiss(E.id),D.filter(({id:$})=>$!==E.id)})},[]);return M.useEffect(()=>_t.subscribe(E=>{if(E.dismiss){A(D=>D.map(F=>F.id===E.id?{...F,delete:!0}:F));return}setTimeout(()=>{Xk.flushSync(()=>{A(D=>{let F=D.findIndex($=>$.id===E.id);return F!==-1?[...D.slice(0,F),{...D[F],...E},...D.slice(F+1)]:[E,...D]})})})}),[]),M.useEffect(()=>{if(u!=="system"){U(u);return}if(u==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?U("dark"):U("light")),typeof window>"u")return;let E=window.matchMedia("(prefers-color-scheme: dark)");try{E.addEventListener("change",({matches:D})=>{U(D?"dark":"light")})}catch{E.addListener(({matches:F})=>
112{try{U(F?"dark":"light")}catch($){console.error($)}})}},[u]),M.useEffect(()=>{T.length<=1&&O(!1)},[T]),M.useEffect(()=>{let E=D=>{var F,$;r.every(re=>D[re]||D.code===re)&&(O(!0),(F=K.current)==null||F.focus()),D.code==="Escape"&&(document.activeElement===K.current||($=K.current)!=null&&$.contains(document.activeElement))&&O(!1)};return document.addEventListener("keydown",E),()=>document.removeEventListener("keydown",E)},[r]),M.useEffect(()=>{if(K.current)return()=>{j.current&&(j.current.focus({preventScroll:!0}),j.current=null,H.current=!1)}},[K.current]),M.createElement("section",{ref:e,"aria-label":`${x} ${I}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},_.map((E,D)=>{var F;let[$,re]=E.split("-");return T.length?M.createElement("ol",{key:E,dir:k==="auto"?Wy():k,tabIndex:-1,ref:K,className:i,"data-sonner-toaster":!0,"data-theme":V,"data-y-position":$,"data-lifted":L&&T.length>1&&!a,"data-x-position":re,style:{"--front-toast-height":`${((F=C[0])==null?void 0:F.height)||0}px`,"--width":`${B5}px`,"--gap":`${w}px`,...p,...D5(l,c)},onBlur:N=>{H.current&&!N.currentTarget.contains(N.relatedTarget)&&(H.current=!1,j.current&&(j.current.focus({preventScroll:!0}),j.current=null))},onFocus:N=>{N.target instanceof HTMLElement&&N.target.dataset.dismissible==="false"||H.current||(H.current=!0,j.current=N.relatedTarget)},onMouseEnter:()=>O(!0),onMouseMove:()=>O(!0),onMouseLeave:()=>{Y||O(!1)},onDragEnd:()=>O(!1),onPointerDown:N=>{N.target instanceof HTMLElement&&N.target.dataset.dismissible==="false"||B(!0)},onPointerUp:()=>B(!1)},T.filter(N=>!N.position&&D===0||N.position===E).map((N,te)=>{var se,ie;return M.createElement(L5,{key:N.id,icons:b,index:te,toast:N,defaultRichColors:d,duration:(se=y==null?void 0:y.duration)!=null?se:g,className:y==null?void 0:y.className,descriptionClassName:y==null?void 0:y.descriptionClassName,invert:n,visibleToasts:v,closeButton:(ie=y==null?void 0:y.closeButton)!=null?ie:s,interacting:Y,position:E,style:y==null?void 0:y.style,unstyled:y==null?void 0:y.unstyled,classNames:y==null?void 0:y.classNames,cancelButtonStyle:y==null?void 0:y.cancelButtonStyle,actionButtonStyle:y==null?void 0:y.actionButtonStyle,removeToast:Z,toasts:T.filter(ne=>ne.position==N.position),heights:C.filter(ne=>ne.position==N.position),setHeights:P,expandByDefault:a,gap:w,loadingIcon:m,expanded:L,pauseWhenPageIsHidden:S,swipeDirections:t.swipeDirections})})):null}))});const q5=({...t})=>{const{theme:e="system"}=d5();return h.jsx(W5,{theme:e,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"}},...t})};var F5=kg[" useId ".trim().toString()]||(()=>{}),H5=0;function Bt(t){const[e,n]=f.useState(F5());return rt(()=>{n(o=>o??String(H5++))},[t]),e?`radix-${e}`:""}const z5=["top","right","bottom","left"],hr=Math.min,Lt=Math.max,eh=Math.round,Gl=Math.floor,Gn=t=>({x:t,y:t}),$5={left:"right",right:"left",bottom:"top",top:"bottom"},U5={start:"end",end:"start"};function Bp(t,e,n){return Lt(t,hr(e,n))}function vo(t,e){return typeof t=="function"?t(e):t}function ko(t){return t.split("-")[0]}function As(t){return t.split("-")[1]}function vm(t){return t==="x"?"y":"x"}function km(t){return t==="y"?"height":"width"}const Y5=new Set(["top","bottom"]);function $n(t){return Y5.has(ko(t))?"y":"x"}function xm(t){return vm($n(t))}function V5(t,e,n){n===void 0&&(n=!1);const o=As(t),r=xm(t),a=km(r);let s=r==="x"?o===(n?"end":"start")?"right":"left":o==="start"?"bottom":"top";return e.reference[a]>e.floating[a]&&(s=th(s)),[s,th(s)]}function G5(t){const e=th(t);return[Op(t),e,Op(e)]}function Op(t){return t.replace(/start|end/g,e=>U5[e])}const qy=["left","right"],Fy=["right","left"],K5=["top","bottom"],J5=["bottom","top"];function Q5(t,e,n){switch(t){case"top":case"bottom":return n?e?Fy:qy:e?qy:Fy;case"left":case"right":return e?K5:J5;default:return[]}}function Z5(t,e,n,o){const r=As(t);let a=Q5(ko(t),n==="start",o);return r&&(a=a.map(s=>s+"-"+r),e&&(a=a.concat(a.map(Op)))),a}function th(t){return t.replace(/left|right|bottom|top/g,e=>$5[e])}function X5(t){return{top:0,right:0,bottom:0,left:0,...t}}function V0(t){return typeof t!="number"?X5(t):{top:t,right:t,bottom:t,left:t}}function nh(t){const{x:e,y:n,width:o,height:r}=t;return{width:o,height:r,top:n,left:e,right:e+o,bottom:n+r,x:e,y:n}}function Hy(t,e,n){let{reference:o,floating:r}=t;const a=$n(e),s=xm(e),i=km(s),l=ko(e),c=a==="y",u=o.x+o.width/2-r.width/2,d=o.y+o.height/2-r.height/2,g=o[i]/2-r[i]/2;let p;switch(l){case"top":p={x:u,y:o.y-r.height};break;case"bottom":p={x:u,y:o.y+o.height};break;case"right":p={x:o.x+o.width,y:d};break;case"left":p={x:o.x-r.width,y:d};break;default:p={x:o.x,y:o.y}}switch(As(e)){case"start":p[s]-=g*(n&&c?-1:1);break;case"end":p[s]+=g*(n&&c?-1:1);break}return p}const e_=async(t,e,n)=>{const{placement:o="bottom",strategy:r="absolute",middleware:a=[],platform:s}
vendor: 9,931 bytes, line 112
112=n,i=a.filter(Boolean),l=await(s.isRTL==null?void 0:s.isRTL(e));let c=await s.getElementRects({reference:t,floating:e,strategy:r}),{x:u,y:d}=Hy(c,o,l),g=o,p={},v=0;for(let y=0;y<i.length;y++){const{name:k,fn:w}=i[y],{x:m,y:b,data:x,reset:S}=await w({x:u,y:d,initialPlacement:o,placement:g,strategy:r,middlewareData:p,rects:c,platform:s,elements:{reference:t,floating:e}});u=m??u,d=b??d,p={...p,[k]:{...p[k],...x}},S&&v<=50&&(v++,typeof S=="object"&&(S.placement&&(g=S.placement),S.rects&&(c=S.rects===!0?await s.getElementRects({reference:t,floating:e,strategy:r}):S.rects),{x:u,y:d}=Hy(c,g,l)),y=-1)}return{x:u,y:d,placement:g,strategy:r,middlewareData:p}};async function qi(t,e){var n;e===void 0&&(e={});const{x:o,y:r,platform:a,rects:s,elements:i,strategy:l}=t,{boundary:c="clippingAncestors",rootBoundary:u="viewport",elementContext:d="floating",altBoundary:g=!1,padding:p=0}=vo(e,t),v=V0(p),k=i[g?d==="floating"?"reference":"floating":d],w=nh(await a.getClippingRect({element:(n=await(a.isElement==null?void 0:a.isElement(k)))==null||n?k:k.contextElement||await(a.getDocumentElement==null?void 0:a.getDocumentElement(i.floating)),boundary:c,rootBoundary:u,strategy:l})),m=d==="floating"?{x:o,y:r,width:s.floating.width,height:s.floating.height}:s.reference,b=await(a.getOffsetParent==null?void 0:a.getOffsetParent(i.floating)),x=await(a.isElement==null?void 0:a.isElement(b))?await(a.getScale==null?void 0:a.getScale(b))||{x:1,y:1}:{x:1,y:1},S=nh(a.convertOffsetParentRelativeRectToViewportRelativeRect?await a.convertOffsetParentRelativeRectToViewportRelativeRect({elements:i,rect:m,offsetParent:b,strategy:l}):m);return{top:(w.top-S.top+v.top)/x.y,bottom:(S.bottom-w.bottom+v.bottom)/x.y,left:(w.left-S.left+v.left)/x.x,right:(S.right-w.right+v.right)/x.x}}const t_=t=>({name:"arrow",options:t,async fn(e){const{x:n,y:o,placement:r,rects:a,platform:s,elements:i,middlewareData:l}=e,{element:c,padding:u=0}=vo(t,e)||{};if(c==null)return{};const d=V0(u),g={x:n,y:o},p=xm(r),v=km(p),y=await s.getDimensions(c),k=p==="y",w=k?"top":"left",m=k?"bottom":"right",b=k?"clientHeight":"clientWidth",x=a.reference[v]+a.reference[p]-g[p]-a.floating[v],S=g[p]-a.reference[p],T=await(s.getOffsetParent==null?void 0:s.getOffsetParent(c));let A=T?T[b]:0;(!A||!await(s.isElement==null?void 0:s.isElement(T)))&&(A=i.floating[b]||a.floating[v]);const _=x/2-S/2,C=A/2-y[v]/2-1,P=hr(d[w],C),L=hr(d[m],C),O=P,Y=A-y[v]-L,B=A/2-y[v]/2+_,V=Bp(O,B,Y),U=!l.arrow&&As(r)!=null&&B!==V&&a.reference[v]/2-(B<O?P:L)-y[v]/2<0,K=U?B<O?B-O:B-Y:0;return{[p]:g[p]+K,data:{[p]:V,centerOffset:B-V-K,...U&&{alignmentOffset:K}},reset:U}}}),n_=function(t){return t===void 0&&(t={}),{name:"flip",options:t,async fn(e){var n,o;const{placement:r,middlewareData:a,rects:s,initialPlacement:i,platform:l,elements:c}=e,{mainAxis:u=!0,crossAxis:d=!0,fallbackPlacements:g,fallbackStrategy:p="bestFit",fallbackAxisSideDirection:v="none",flipAlignment:y=!0,...k}=vo(t,e);if((n=a.arrow)!=null&&n.alignmentOffset)return{};const w=ko(r),m=$n(i),b=ko(i)===i,x=await(l.isRTL==null?void 0:l.isRTL(c.floating)),S=g||(b||!y?[th(i)]:G5(i)),T=v!=="none";!g&&T&&S.push(...Z5(i,y,v,x));const A=[i,...S],_=await qi(e,k),C=[];let P=((o=a.flip)==null?void 0:o.overflows)||[];if(u&&C.push(_[w]),d){const B=V5(r,s,x);C.push(_[B[0]],_[B[1]])}if(P=[...P,{placement:r,overflows:C}],!C.every(B=>B<=0)){var L,O;const B=(((L=a.flip)==null?void 0:L.index)||0)+1,V=A[B];if(V&&(!(d==="alignment"?m!==$n(V):!1)||P.every(I=>I.overflows[0]>0&&$n(I.placement)===m)))return{data:{index:B,overflows:P},reset:{placement:V}};let U=(O=P.filter(K=>K.overflows[0]<=0).sort((K,I)=>K.overflows[1]-I.overflows[1])[0])==null?void 0:O.placement;if(!U)switch(p){case"bestFit":{var Y;const K=(Y=P.filter(I=>{if(T){const j=$n(I.placement);return j===m||j==="y"}return!0}).map(I=>[I.placement,I.overflows.filter(j=>j>0).reduce((j,H)=>j+H,0)]).sort((I,j)=>I[1]-j[1])[0])==null?void 0:Y[0];K&&(U=K);break}case"initialPlacement":U=i;break}if(r!==U)return{reset:{placement:U}}}return{}}}};function zy(t,e){return{top:t.top-e.height,right:t.right-e.width,bottom:t.bottom-e.height,left:t.left-e.width}}function $y(t){return z5.some(e=>t[e]>=0)}const o_=function(t){return t===void 0&&(t={}),{name:"hide",options:t,async fn(e){const{rects:n}=e,{strategy:o="referenceHidden",...r}=vo(t,e);switch(o){case"referenceHidden":{const a=await qi(e,{...r,elementContext:"reference"}),s=zy(a,n.reference);return{data:{referenceHiddenOffsets:s,referenceHidden:$y(s)}}}case"escaped":{const a=await qi(e,{...r,altBoundary:!0}),s=zy(a,n.floating);return{data:{escapedOffsets:s,escaped:$y(s)}}}default:return{}}}}},G0=new Set(["left","top"]);async function r_(t,e){const{placement:n,platform:o,elements:r}=t,a=await(o.isRTL==null?void 0:o.isRTL(r.floating)),s=ko(n),i=As(n),l=$n(n)==="y",c=G0.has(s)?-1:1,u=a&&l?-1:1,d=vo(e,t);let{mainAxis:g,crossAxis:p,alignmentAxis:v}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return i&&typeof v=="number"&&(p=i==="end"?v*-1:v),l?{x:p*u,y:g*c}:{x:g*c,y:p*u}}const a_=function(t){return t===void 0&&(t=0),{name:"offset",options:t,async fn(e){var n,o;const{x:r,y:a,placement:s,middlewareData:i}=e,l=await r_(e,t);return s===((n=i.offset)==null?void 0:n.placement)&&(o=i.arrow)!=null&&o.alignmentOffset?{}:{x:r+l.x,y:a+l.y,data:{...l,placement:s}}}}},s_=function(t){return t===void 0&&(t={}),{name:"shift",options:t,async fn(e){const{x:n,y:o,placement:r}=e,{mainAxis:a=!0,crossAxis:s=!1,limiter:i={fn:k=>{let{x:w,y:m}=k;return{x:w,y:m}}},...l}=vo(t,e),c={x:n,y:o},u=await qi(e,l),d=$n(ko(r)),g=vm(d);let p=c[g],v=c[d];if(a){const k=g==="y"?"top":"left",w=g==="y"?"bottom":"right",m=p+u[k],b=p-u[w];p=Bp(m,p,b)}if(s){const k=d==="y"?"top":"left",w=d==="y"?"bottom":"right",m=v+u[k],b=v-u[w];v=Bp(m,v,b)}const y=i.fn({...e,[g]:p,[d]:v});return{...y,data:{x:y.x-n,y:y.y-o,enabled:{[g]:a,[d]:s}}}}}},i_=function(t){return t===void 0&&(t={}),{options:t,fn(e){const{x:n,y:o,placement:r,rects:a,middlewareData:s}=e,{offset:i=0,mainAxis:l=!0,crossAxis:c=!0}=vo(t,e),u={x:n,y:o},d=$n(r),g=vm(d);let p=u[g],v=u[d];const y=vo(i,e),k=typeof y=="number"?{mainAxis:y,crossAxis:0}:{mainAxis:0,crossAxis:0,...y};if(l){const b=g==="y"?"height":"width",x=a.reference[g]-a.floating[b]+k.mainAxis,S=a.reference[g]+a.reference[b]-k.mainAxis;p<x?p=x:p>S&&(p=S)}if(c){var w,m;const b=g==="y"?"width":"height",x=G0.has(ko(r)),S=a.reference[d]-a.floating[b]+(x&&((w=s.offset)==null?void 0:w[d])||0)+(x?0:k.crossAxis),T=a.reference[d]+a.reference[b]+(x?0:((m=s.offset)==null?void 0:m[d])||0)-(x?k.crossAxis:0);v<S?v=S:v>T&&(v=T)}return{[g]:p,[d]:v}}}},l_=function(t){return t===void 0&&(t={}),{name:"size",options:t,async fn(e){var n,o;const{placement:r,rects:a,platform:s,elements:i}=e,{apply:l=()=>{},...c}=vo(t,e),u=await qi(e,c),d=ko(r),g=As(r),p=$n(r)==="y",{width:v,height:y}=a.floating;let k,w;d==="top"||d==="bottom"?(k=d,w=g===(await(s.isRTL==null?void 0:s.isRTL(i.floating))?"start":"end")?"left":"right"):(w=d,k=g==="end"?"top":"bottom");const m=y-u.top-u.bottom,b=v-u.left-u.right,x=hr(y-u[k],m),S=hr(v-u[w],b),T=!e.middlewareData.shift;let A=x,_=S;if((n=e.middlewareData.shift)!=null&&n.enabled.x&&(_=b),(o=e.middlewareData.shift)!=null&&o.enabled.y&&(A=m),T&&!g){const P=Lt(u.left,0),L=Lt(u.right,0),O=Lt(u.top,0),Y=Lt(u.bottom,0);p?_=v-2*(P!==0||L!==0?P+L:Lt(u.left,u.right)):A=y-2*(O!==0||Y!==0?O+Y:Lt(u.top,u.bottom))}await l({...e,availableWidth:_,availableHeight:A});const C=await s.getDimensions(i.floating);return v!==C.width||y!==C.height?{reset:{rects:!0}}:{}}}};function Kh(){return typeof window<"u"}function _s(t){return K0(t)?(t.nodeName||"").toLowerCase():"#document"}function Ft(t){var e;return(t==null||(e=t.ownerDocument)==null?void 0:e.defaultView)||window}function Xn(t){var e;return(e=(K0(t)?t.ownerDocument:t.document)||window.document)==null?void 0:e.documentElement}function K0(t){return Kh()?t instanceof Node||t instanceof Ft(t).Node:!1}function Pn(t){return Kh()?t instanceof Element||t instanceof Ft(t).Element:!1}function Qn(t){return Kh()?t instanceof HTMLElement||t instanceof Ft(t).HTMLElement:!1}function Uy(t){return!Kh()||typeof ShadowRoot>"u"?!1:t instanceof ShadowRoot||t instanceof Ft(t).ShadowRoot}const c_=new Set(["inline","contents"]);function fl(t){const{overflow:e,overflowX:n,overflowY:o,display:r}=jn(t);return/auto|scroll|overlay|hidden|clip/.test(e+o+n)&&!c_.has(r)}const h_=new Set(["table","td","th"]);function u_(t){return h_.has(_s(t))}const d_=[":popover-open",":modal"];function Jh(t){return d_.some(e=>{try{return t.matches(e)}catch{return!1}})}const p_=["transform","translate","scale","rotate","perspective"],g_=["transform","translate","scale","rotate","perspective","filter"],m_=["paint","layout","strict","content"];function Sm(t){const e=Tm(),n=Pn(t)?jn(t):t;return p_.some(o=>n[o]?n[o]!=="none":!1)||(n.containerType?n.containerType!=="normal":!1)||!e&&(n.backdropFilter?n.backdropFilter!=="none":!1)||!e&&(n.filter?n.filter!=="none":!1)||g_.some(o=>(n.willChange||"").includes(o))||m_.some(o=>(n.contain||"").includes(o))}function f_(t){let e=ur(t);for(;Qn(e)&&!ms(e);){if(Sm(e))return e;if(Jh(e))return null;e=ur(e)}return null}function Tm(){return typeof CSS>"u"||!CSS.supports?!1:CSS.supports("-webkit-backdrop-filter","none")}const y_=new Set(["html","body","#document"]);function ms(t){return y_.has(_s(t))}function jn(t){return Ft(t).getComputedStyle(t)}function Qh(t){return Pn(t)?{scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}:{scrollLeft:t.scrollX,scrollTop:t.scrollY}}function ur(t){if(_s(t)==="html")return t;const e=t.assignedSlot||t.parentNode||Uy(t)&&t.host||Xn(t);return Uy(e)?e.host:e}function J0(t){const e=ur(t);return ms(e)?t.ownerDocument?t.ownerDocument.body:t.body:Qn(e)&&fl(e)?e:J0(e)}function Fi(t,e,n){var o;e===void 0&&(e=[]),n===void 0&&(n=!0);const r=J0(t),a=r===((o=t.ownerDocument)==null?void 0:o.body),s=Ft(r);if(a){const i=Mp(s);
vendor: 4,545 bytes, line 112
112return e.concat(s,s.visualViewport||[],fl(r)?r:[],i&&n?Fi(i):[])}return e.concat(r,Fi(r,[],n))}function Mp(t){return t.parent&&Object.getPrototypeOf(t.parent)?t.frameElement:null}function Q0(t){const e=jn(t);let n=parseFloat(e.width)||0,o=parseFloat(e.height)||0;const r=Qn(t),a=r?t.offsetWidth:n,s=r?t.offsetHeight:o,i=eh(n)!==a||eh(o)!==s;return i&&(n=a,o=s),{width:n,height:o,$:i}}function Am(t){return Pn(t)?t:t.contextElement}function Ga(t){const e=Am(t);if(!Qn(e))return Gn(1);const n=e.getBoundingClientRect(),{width:o,height:r,$:a}=Q0(e);let s=(a?eh(n.width):n.width)/o,i=(a?eh(n.height):n.height)/r;return(!s||!Number.isFinite(s))&&(s=1),(!i||!Number.isFinite(i))&&(i=1),{x:s,y:i}}const w_=Gn(0);function Z0(t){const e=Ft(t);return!Tm()||!e.visualViewport?w_:{x:e.visualViewport.offsetLeft,y:e.visualViewport.offsetTop}}function b_(t,e,n){return e===void 0&&(e=!1),!n||e&&n!==Ft(t)?!1:e}function Kr(t,e,n,o){e===void 0&&(e=!1),n===void 0&&(n=!1);const r=t.getBoundingClientRect(),a=Am(t);let s=Gn(1);e&&(o?Pn(o)&&(s=Ga(o)):s=Ga(t));const i=b_(a,n,o)?Z0(a):Gn(0);let l=(r.left+i.x)/s.x,c=(r.top+i.y)/s.y,u=r.width/s.x,d=r.height/s.y;if(a){const g=Ft(a),p=o&&Pn(o)?Ft(o):o;let v=g,y=Mp(v);for(;y&&o&&p!==v;){const k=Ga(y),w=y.getBoundingClientRect(),m=jn(y),b=w.left+(y.clientLeft+parseFloat(m.paddingLeft))*k.x,x=w.top+(y.clientTop+parseFloat(m.paddingTop))*k.y;l*=k.x,c*=k.y,u*=k.x,d*=k.y,l+=b,c+=x,v=Ft(y),y=Mp(v)}}return nh({width:u,height:d,x:l,y:c})}function _m(t,e){const n=Qh(t).scrollLeft;return e?e.left+n:Kr(Xn(t)).left+n}function X0(t,e,n){n===void 0&&(n=!1);const o=t.getBoundingClientRect(),r=o.left+e.scrollLeft-(n?0:_m(t,o)),a=o.top+e.scrollTop;return{x:r,y:a}}function v_(t){let{elements:e,rect:n,offsetParent:o,strategy:r}=t;const a=r==="fixed",s=Xn(o),i=e?Jh(e.floating):!1;if(o===s||i&&a)return n;let l={scrollLeft:0,scrollTop:0},c=Gn(1);const u=Gn(0),d=Qn(o);if((d||!d&&!a)&&((_s(o)!=="body"||fl(s))&&(l=Qh(o)),Qn(o))){const p=Kr(o);c=Ga(o),u.x=p.x+o.clientLeft,u.y=p.y+o.clientTop}const g=s&&!d&&!a?X0(s,l,!0):Gn(0);return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-l.scrollLeft*c.x+u.x+g.x,y:n.y*c.y-l.scrollTop*c.y+u.y+g.y}}function k_(t){return Array.from(t.getClientRects())}function x_(t){const e=Xn(t),n=Qh(t),o=t.ownerDocument.body,r=Lt(e.scrollWidth,e.clientWidth,o.scrollWidth,o.clientWidth),a=Lt(e.scrollHeight,e.clientHeight,o.scrollHeight,o.clientHeight);let s=-n.scrollLeft+_m(t);const i=-n.scrollTop;return jn(o).direction==="rtl"&&(s+=Lt(e.clientWidth,o.clientWidth)-r),{width:r,height:a,x:s,y:i}}function S_(t,e){const n=Ft(t),o=Xn(t),r=n.visualViewport;let a=o.clientWidth,s=o.clientHeight,i=0,l=0;if(r){a=r.width,s=r.height;const c=Tm();(!c||c&&e==="fixed")&&(i=r.offsetLeft,l=r.offsetTop)}return{width:a,height:s,x:i,y:l}}const T_=new Set(["absolute","fixed"]);function A_(t,e){const n=Kr(t,!0,e==="fixed"),o=n.top+t.clientTop,r=n.left+t.clientLeft,a=Qn(t)?Ga(t):Gn(1),s=t.clientWidth*a.x,i=t.clientHeight*a.y,l=r*a.x,c=o*a.y;return{width:s,height:i,x:l,y:c}}function Yy(t,e,n){let o;if(e==="viewport")o=S_(t,n);else if(e==="document")o=x_(Xn(t));else if(Pn(e))o=A_(e,n);else{const r=Z0(t);o={x:e.x-r.x,y:e.y-r.y,width:e.width,height:e.height}}return nh(o)}function e1(t,e){const n=ur(t);return n===e||!Pn(n)||ms(n)?!1:jn(n).position==="fixed"||e1(n,e)}function __(t,e){const n=e.get(t);if(n)return n;let o=Fi(t,[],!1).filter(i=>Pn(i)&&_s(i)!=="body"),r=null;const a=jn(t).position==="fixed";let s=a?ur(t):t;for(;Pn(s)&&!ms(s);){const i=jn(s),l=Sm(s);!l&&i.position==="fixed"&&(r=null),(a?!l&&!r:!l&&i.position==="static"&&!!r&&T_.has(r.position)||fl(s)&&!l&&e1(t,s))?o=o.filter(u=>u!==s):r=i,s=ur(s)}return e.set(t,o),o}function C_(t){let{element:e,boundary:n,rootBoundary:o,strategy:r}=t;const s=[...n==="clippingAncestors"?Jh(e)?[]:__(e,this._c):[].concat(n),o],i=s[0],l=s.reduce((c,u)=>{const d=Yy(e,u,r);return c.top=Lt(d.top,c.top),c.right=hr(d.right,c.right),c.bottom=hr(d.bottom,c.bottom),c.left=Lt(d.left,c.left),c},Yy(e,i,r));return{width:l.right-l.left,height:l.bottom-l.top,x:l.left,y:l.top}}function E_(t){const{width:e,height:n}=Q0(t);return{width:e,height:n}}function I_(t,e,n){const o=Qn(e),r=Xn(e),a=n==="fixed",s=Kr(t,!0,a,e);let i={scrollLeft:0,scrollTop:0};const l=Gn(0);function c(){l.x=_m(r)}if(o||!o&&!a)if((_s(e)!=="body"||fl(r))&&(i=Qh(e)),o){const p=Kr(e,!0,a,e);l.x=p.x+e.clientLeft,l.y=p.y+e.clientTop}else r&&c();a&&!o&&r&&c();const u=r&&!o&&!a?X0(r,i):Gn(0),d=s.left+i.scrollLeft-l.x-u.x,g=s.top+i.scrollTop-l.y-u.y;return{x:d,y:g,width:s.width,height:s.height}}
vendor: 9,360 bytes, line 112
112function nd(t){return jn(t).position==="static"}function Vy(t,e){if(!Qn(t)||jn(t).position==="fixed")return null;if(e)return e(t);let n=t.offsetParent;return Xn(t)===n&&(n=n.ownerDocument.body),n}function t1(t,e){const n=Ft(t);if(Jh(t))return n;if(!Qn(t)){let r=ur(t);for(;r&&!ms(r);){if(Pn(r)&&!nd(r))return r;r=ur(r)}return n}let o=Vy(t,e);for(;o&&u_(o)&&nd(o);)o=Vy(o,e);return o&&ms(o)&&nd(o)&&!Sm(o)?n:o||f_(t)||n}const P_=async function(t){const e=this.getOffsetParent||t1,n=this.getDimensions,o=await n(t.floating);return{reference:I_(t.reference,await e(t.floating),t.strategy),floating:{x:0,y:0,width:o.width,height:o.height}}};function j_(t){return jn(t).direction==="rtl"}const B_={convertOffsetParentRelativeRectToViewportRelativeRect:v_,getDocumentElement:Xn,getClippingRect:C_,getOffsetParent:t1,getElementRects:P_,getClientRects:k_,getDimensions:E_,getScale:Ga,isElement:Pn,isRTL:j_};function n1(t,e){return t.x===e.x&&t.y===e.y&&t.width===e.width&&t.height===e.height}function O_(t,e){let n=null,o;const r=Xn(t);function a(){var i;clearTimeout(o),(i=n)==null||i.disconnect(),n=null}function s(i,l){i===void 0&&(i=!1),l===void 0&&(l=1),a();const c=t.getBoundingClientRect(),{left:u,top:d,width:g,height:p}=c;if(i||e(),!g||!p)return;const v=Gl(d),y=Gl(r.clientWidth-(u+g)),k=Gl(r.clientHeight-(d+p)),w=Gl(u),b={rootMargin:-v+"px "+-y+"px "+-k+"px "+-w+"px",threshold:Lt(0,hr(1,l))||1};let x=!0;function S(T){const A=T[0].intersectionRatio;if(A!==l){if(!x)return s();A?s(!1,A):o=setTimeout(()=>{s(!1,1e-7)},1e3)}A===1&&!n1(c,t.getBoundingClientRect())&&s(),x=!1}try{n=new IntersectionObserver(S,{...b,root:r.ownerDocument})}catch{n=new IntersectionObserver(S,b)}n.observe(t)}return s(!0),a}function M_(t,e,n,o){o===void 0&&(o={});const{ancestorScroll:r=!0,ancestorResize:a=!0,elementResize:s=typeof ResizeObserver=="function",layoutShift:i=typeof IntersectionObserver=="function",animationFrame:l=!1}=o,c=Am(t),u=r||a?[...c?Fi(c):[],...Fi(e)]:[];u.forEach(w=>{r&&w.addEventListener("scroll",n,{passive:!0}),a&&w.addEventListener("resize",n)});const d=c&&i?O_(c,n):null;let g=-1,p=null;s&&(p=new ResizeObserver(w=>{let[m]=w;m&&m.target===c&&p&&(p.unobserve(e),cancelAnimationFrame(g),g=requestAnimationFrame(()=>{var b;(b=p)==null||b.observe(e)})),n()}),c&&!l&&p.observe(c),p.observe(e));let v,y=l?Kr(t):null;l&&k();function k(){const w=Kr(t);y&&!n1(y,w)&&n(),y=w,v=requestAnimationFrame(k)}return n(),()=>{var w;u.forEach(m=>{r&&m.removeEventListener("scroll",n),a&&m.removeEventListener("resize",n)}),d==null||d(),(w=p)==null||w.disconnect(),p=null,l&&cancelAnimationFrame(v)}}const R_=a_,N_=s_,L_=n_,D_=l_,W_=o_,Gy=t_,q_=i_,F_=(t,e,n)=>{const o=new Map,r={platform:B_,...n},a={...r.platform,_c:o};return e_(t,e,{...r,platform:a})};var H_=typeof document<"u",z_=function(){},Ac=H_?f.useLayoutEffect:z_;function oh(t,e){if(t===e)return!0;if(typeof t!=typeof e)return!1;if(typeof t=="function"&&t.toString()===e.toString())return!0;let n,o,r;if(t&&e&&typeof t=="object"){if(Array.isArray(t)){if(n=t.length,n!==e.length)return!1;for(o=n;o--!==0;)if(!oh(t[o],e[o]))return!1;return!0}if(r=Object.keys(t),n=r.length,n!==Object.keys(e).length)return!1;for(o=n;o--!==0;)if(!{}.hasOwnProperty.call(e,r[o]))return!1;for(o=n;o--!==0;){const a=r[o];if(!(a==="_owner"&&t.$$typeof)&&!oh(t[a],e[a]))return!1}return!0}return t!==t&&e!==e}function o1(t){return typeof window>"u"?1:(t.ownerDocument.defaultView||window).devicePixelRatio||1}function Ky(t,e){const n=o1(t);return Math.round(e*n)/n}function od(t){const e=f.useRef(t);return Ac(()=>{e.current=t}),e}function $_(t){t===void 0&&(t={});const{placement:e="bottom",strategy:n="absolute",middleware:o=[],platform:r,elements:{reference:a,floating:s}={},transform:i=!0,whileElementsMounted:l,open:c}=t,[u,d]=f.useState({x:0,y:0,strategy:n,placement:e,middlewareData:{},isPositioned:!1}),[g,p]=f.useState(o);oh(g,o)||p(o);const[v,y]=f.useState(null),[k,w]=f.useState(null),m=f.useCallback(I=>{I!==T.current&&(T.current=I,y(I))},[]),b=f.useCallback(I=>{I!==A.current&&(A.current=I,w(I))},[]),x=a||v,S=s||k,T=f.useRef(null),A=f.useRef(null),_=f.useRef(u),C=l!=null,P=od(l),L=od(r),O=od(c),Y=f.useCallback(()=>{if(!T.current||!A.current)return;const I={placement:e,strategy:n,middleware:g};L.current&&(I.platform=L.current),F_(T.current,A.current,I).then(j=>{const H={...j,isPositioned:O.current!==!1};B.current&&!oh(_.current,H)&&(_.current=H,ra.flushSync(()=>{d(H)}))})},[g,e,n,L,O]);Ac(()=>{c===!1&&_.current.isPositioned&&(_.current.isPositioned=!1,d(I=>({...I,isPositioned:!1})))},[c]);const B=f.useRef(!1);Ac(()=>(B.current=!0,()=>{B.current=!1}),[]),Ac(()=>{if(x&&(T.current=x),S&&(A.current=S),x&&S){if(P.current)return P.current(x,S,Y);Y()}},[x,S,Y,P,C]);const V=f.useMemo(()=>({reference:T,floating:A,setReference:m,setFloating:b}),[m,b]),U=f.useMemo(()=>({reference:x,floating:S}),[x,S]),K=f.useMemo(()=>{const I={position:n,left:0,top:0};if(!U.floating)return I;const j=Ky(U.floating,u.x),H=Ky(U.floating,u.y);return i?{...I,transform:"translate("+j+"px, "+H+"px)",...o1(U.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:j,top:H}},[n,i,U.floating,u.x,u.y]);return f.useMemo(()=>({...u,update:Y,refs:V,elements:U,floatingStyles:K}),[u,Y,V,U,K])}const U_=t=>{function e(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:t,fn(n){const{element:o,padding:r}=typeof t=="function"?t(n):t;return o&&e(o)?o.current!=null?Gy({element:o.current,padding:r}).fn(n):{}:o?Gy({element:o,padding:r}).fn(n):{}}}},Y_=(t,e)=>({...R_(t),options:[t,e]}),V_=(t,e)=>({...N_(t),options:[t,e]}),G_=(t,e)=>({...q_(t),options:[t,e]}),K_=(t,e)=>({...L_(t),options:[t,e]}),J_=(t,e)=>({...D_(t),options:[t,e]}),Q_=(t,e)=>({...W_(t),options:[t,e]}),Z_=(t,e)=>({...U_(t),options:[t,e]});var X_="Arrow",r1=f.forwardRef((t,e)=>{const{children:n,width:o=10,height:r=5,...a}=t;return h.jsx(ce.svg,{...a,ref:e,width:o,height:r,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:t.asChild?n:h.jsx("polygon",{points:"0,0 30,0 15,10"})})});r1.displayName=X_;var e6=r1;function t6(t){const[e,n]=f.useState(void 0);return rt(()=>{if(t){n({width:t.offsetWidth,height:t.offsetHeight});const o=new ResizeObserver(r=>{if(!Array.isArray(r)||!r.length)return;const a=r[0];let s,i;if("borderBoxSize"in a){const l=a.borderBoxSize,c=Array.isArray(l)?l[0]:l;s=c.inlineSize,i=c.blockSize}else s=t.offsetWidth,i=t.offsetHeight;n({width:s,height:i})});return o.observe(t,{box:"border-box"}),()=>o.unobserve(t)}else n(void 0)},[t]),e}var Cm="Popper",[a1,Zh]=wr(Cm),[n6,s1]=a1(Cm),i1=t=>{const{__scopePopper:e,children:n}=t,[o,r]=f.useState(null);return h.jsx(n6,{scope:e,anchor:o,onAnchorChange:r,children:n})};i1.displayName=Cm;var l1="PopperAnchor",c1=f.forwardRef((t,e)=>{const{__scopePopper:n,virtualRef:o,...r}=t,a=s1(l1,n),s=f.useRef(null),i=Ee(e,s);return f.useEffect(()=>{a.onAnchorChange((o==null?void 0:o.current)||s.current)}),o?null:h.jsx(ce.div,{...r,ref:i})});c1.displayName=l1;var Em="PopperContent",[o6,r6]=a1(Em),h1=f.forwardRef((t,e)=>{var N,te,se,ie,ne,q;const{__scopePopper:n,side:o="bottom",sideOffset:r=0,align:a="center",alignOffset:s=0,arrowPadding:i=0,avoidCollisions:l=!0,collisionBoundary:c=[],collisionPadding:u=0,sticky:d="partial",hideWhenDetached:g=!1,updatePositionStrategy:p="optimized",onPlaced:v,...y}=t,k=s1(Em,n),[w,m]=f.useState(null),b=Ee(e,ue=>m(ue)),[x,S]=f.useState(null),T=t6(x),A=(T==null?void 0:T.width)??0,_=(T==null?void 0:T.height)??0,C=o+(a!=="center"?"-"+a:""),P=typeof u=="number"?u:{top:0,right:0,bottom:0,left:0,...u},L=Array.isArray(c)?c:[c],O=L.length>0,Y={padding:P,boundary:L.filter(s6),altBoundary:O},{refs:B,floatingStyles:V,placement:U,isPositioned:K,middlewareData:I}=$_({strategy:"fixed",placement:C,whileElementsMounted:(...ue)=>M_(...ue,{animationFrame:p==="always"}),elements:{reference:k.anchor},middleware:[Y_({mainAxis:r+_,alignmentAxis:s}),l&&V_({mainAxis:!0,crossAxis:!1,limiter:d==="partial"?G_():void 0,...Y}),l&&K_({...Y}),J_({...Y,apply:({elements:ue,rects:ke,availableWidth:De,availableHeight:Ze})=>{const{width:at,height:Mt}=ke.reference,yt=ue.floating.style;yt.setProperty("--radix-popper-available-width",`${De}px`),yt.setProperty("--radix-popper-available-height",`${Ze}px`),yt.setProperty("--radix-popper-anchor-width",`${at}px`),yt.setProperty("--radix-popper-anchor-height",`${Mt}px`)}}),x&&Z_({element:x,padding:i}),i6({arrowWidth:A,arrowHeight:_}),g&&Q_({strategy:"referenceHidden",...Y})]}),[j,H]=p1(U),Z=In(v);rt(()=>{K&&(Z==null||Z())},[K,Z]);const E=(N=I.arrow)==null?void 0:N.x,D=(te=I.arrow)==null?void 0:te.y,F=((se=I.arrow)==null?void 0:se.centerOffset)!==0,[$,re]=f.useState();return rt(()=>{w&&re(window.getComputedStyle(w).zIndex)},[w]),h.jsx("div",{ref:B.setFloating,"data-radix-popper-content-wrapper":"",style:{...V,transform:K?V.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:$,"--radix-popper-transform-origin":[(ie=I.transformOrigin)==null?void 0:ie.x,(ne=I.transformOrigin)==null?void 0:ne.y].join(" "),...((q=I.hide)==null?void 0:q.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:t.dir,children:h.jsx(o6,{scope:n,placedSide:j,onArrowChange:S,arrowX:E,arrowY:D,shouldHideArrow:F,children:h.jsx(ce.div,{"data-side":j,"data-align":H,...y,ref:b,style:{...y.style,animation:K?void 0:"none"}})})})});h1.displayName=Em;var u1="PopperArrow",a6={top:"bottom",right:"left",bottom:"top",left:"r
112ight"},d1=f.forwardRef(function(e,n){const{__scopePopper:o,...r}=e,a=r6(u1,o),s=a6[a.placedSide];return h.jsx("span",{ref:a.onArrowChange,style:{position:"absolute",left:a.arrowX,top:a.arrowY,[s]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[a.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[a.placedSide],visibility:a.shouldHideArrow?"hidden":void 0},children:h.jsx(e6,{...r,ref:n,style:{...r.style,display:"block"}})})});d1.displayName=u1;function s6(t){return t!==null}var i6=t=>({name:"transformOrigin",options:t,fn(e){var k,w,m;const{placement:n,rects:o,middlewareData:r}=e,s=((k=r.arrow)==null?void 0:k.centerOffset)!==0,i=s?0:t.arrowWidth,l=s?0:t.arrowHeight,[c,u]=p1(n),d={start:"0%",center:"50%",end:"100%"}[u],g=(((w=r.arrow)==null?void 0:w.x)??0)+i/2,p=(((m=r.arrow)==null?void 0:m.y)??0)+l/2;let v="",y="";return c==="bottom"?(v=s?d:`${g}px`,y=`${-l}px`):c==="top"?(v=s?d:`${g}px`,y=`${o.floating.height+l}px`):c==="right"?(v=`${-l}px`,y=s?d:`${p}px`):c==="left"&&(v=`${o.floating.width+l}px`,y=s?d:`${p}px`),{data:{x:v,y}}}});function p1(t){const[e,n="center"]=t.split("-");return[e,n]}var l6=i1,g1=c1,m1=h1,f1=d1,[Xh,iN]=wr("Tooltip",[Zh]),Im=Zh(),y1="TooltipProvider",c6=700,Jy="tooltip.open",[h6,w1]=Xh(y1),b1=t=>{const{__scopeTooltip:e,delayDuration:n=c6,skipDelayDuration:o=300,disableHoverableContent:r=!1,children:a}=t,s=f.useRef(!0),i=f.useRef(!1),l=f.useRef(0);return f.useEffect(()=>{const c=l.current;return()=>window.clearTimeout(c)},[]),h.jsx(h6,{scope:e,isOpenDelayedRef:s,delayDuration:n,onOpen:f.useCallback(()=>{window.clearTimeout(l.current),s.current=!1},[]),onClose:f.useCallback(()=>{window.clearTimeout(l.current),l.current=window.setTimeout(()=>s.current=!0,o)},[o]),isPointerInTransitRef:i,onPointerInTransitChange:f.useCallback(c=>{i.current=c},[]),disableHoverableContent:r,children:a})};b1.displayName=y1;var v1="Tooltip",[lN,eu]=Xh(v1),Rp="TooltipTrigger",u6=f.forwardRef((t,e)=>{const{__scopeTooltip:n,...o}=t,r=eu(Rp,n),a=w1(Rp,n),s=Im(n),i=f.useRef(null),l=Ee(e,i,r.onTriggerChange),c=f.useRef(!1),u=f.useRef(!1),d=f.useCallback(()=>c.current=!1,[]);return f.useEffect(()=>()=>document.removeEventListener("pointerup",d),[d]),h.jsx(g1,{asChild:!0,...s,children:h.jsx(ce.button,{"aria-describedby":r.open?r.contentId:void 0,"data-state":r.stateAttribute,...o,ref:l,onPointerMove:me(t.onPointerMove,g=>{g.pointerType!=="touch"&&!u.current&&!a.isPointerInTransitRef.current&&(r.onTriggerEnter(),u.current=!0)}),onPointerLeave:me(t.onPointerLeave,()=>{r.onTriggerLeave(),u.current=!1}),onPointerDown:me(t.onPointerDown,()=>{r.open&&r.onClose(),c.current=!0,document.addEventListener("pointerup",d,{once:!0})}),onFocus:me(t.onFocus,()=>{c.current||r.onOpen()}),onBlur:me(t.onBlur,r.onClose),onClick:me(t.onClick,r.onClose)})})});u6.displayName=Rp;var d6="TooltipPortal",[cN,p6]=Xh(d6,{forceMount:void 0}),fs="TooltipContent",k1=f.forwardRef((t,e)=>{const n=p6(fs,t.__scopeTooltip),{forceMount:o=n.forceMount,side:r="top",...a}=t,s=eu(fs,t.__scopeTooltip);return h.jsx(aa,{present:o||s.open,children:s.disableHoverableContent?h.jsx(x1,{side:r,...a,ref:e}):h.jsx(g6,{side:r,...a,ref:e})})}),g6=f.forwardRef((t,e)=>{const n=eu(fs,t.__scopeTooltip),o=w1(fs,t.__scopeTooltip),r=f.useRef(null),a=Ee(e,r),[s,i]=f.useState(null),{trigger:l,onClose:c}=n,u=r.current,{onPointerInTransitChange:d}=o,g=f.useCallback(()=>{i(null),d(!1)},[d]),p=f.useCallback((v,y)=>{const k=v.currentTarget,w={x:v.clientX,y:v.clientY},m=b6(w,k.getBoundingClientRect()),b=v6(w,m),x=k6(y.getBoundingClientRect()),S=S6([...b,...x]);i(S),d(!0)},[d]);return f.useEffect(()=>()=>g(),[g]),f.useEffect(()=>{if(l&&u){const v=k=>p(k,u),y=k=>p(k,l);return l.addEventListener("pointerleave",v),u.addEventListener("pointerleave",y),()=>{l.removeEventListener("pointerleave",v),u.removeEventListener("pointerleave",y)}}},[l,u,p,g]),f.useEffect(()=>{if(s){const v=y=>{const k=y.target,w={x:y.clientX,y:y.clientY},m=(l==null?void 0:l.contains(k))||(u==null?void 0:u.contains(k)),b=!x6(w,s);m?g():b&&(g(),c())};return document.addEventListener("pointermove",v),()=>document.removeEventListener("pointermove",v)}}
112,[l,u,s,c,g]),h.jsx(x1,{...t,ref:a})}),[m6,f6]=Xh(v1,{isInside:!1}),y6=M3("TooltipContent"),x1=f.forwardRef((t,e)=>{const{__scopeTooltip:n,children:o,"aria-label":r,onEscapeKeyDown:a,onPointerDownOutside:s,...i}=t,l=eu(fs,n),c=Im(n),{onClose:u}=l;return f.useEffect(()=>(document.addEventListener(Jy,u),()=>document.removeEventListener(Jy,u)),[u]),f.useEffect(()=>{if(l.trigger){const d=g=>{const p=g.target;p!=null&&p.contains(l.trigger)&&u()};return window.addEventListener("scroll",d,{capture:!0}),()=>window.removeEventListener("scroll",d,{capture:!0})}},[l.trigger,u]),h.jsx(gl,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:a,onPointerDownOutside:s,onFocusOutside:d=>d.preventDefault(),onDismiss:u,children:h.jsxs(m1,{"data-state":l.stateAttribute,...c,...i,ref:e,style:{...i.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:[h.jsx(y6,{children:o}),h.jsx(m6,{scope:n,isInside:!0,children:h.jsx(nA,{id:l.contentId,role:"tooltip",children:r||o})})]})})});k1.displayName=fs;var S1="TooltipArrow",w6=f.forwardRef((t,e)=>{const{__scopeTooltip:n,...o}=t,r=Im(n);return f6(S1,n).isInside?null:h.jsx(f1,{...r,...o,ref:e})});w6.displayName=S1;function b6(t,e){const n=Math.abs(e.top-t.y),o=Math.abs(e.bottom-t.y),r=Math.abs(e.right-t.x),a=Math.abs(e.left-t.x);switch(Math.min(n,o,r,a)){case a:return"left";case r:return"right";case n:return"top";case o:return"bottom";default:throw new Error("unreachable")}}function v6(t,e,n=5){const o=[];switch(e){case"top":o.push({x:t.x-n,y:t.y+n},{x:t.x+n,y:t.y+n});break;case"bottom":o.push({x:t.x-n,y:t.y-n},{x:t.x+n,y:t.y-n});break;case"left":o.push({x:t.x+n,y:t.y-n},{x:t.x+n,y:t.y+n});break;case"right":o.push({x:t.x-n,y:t.y-n},{x:t.x-n,y:t.y+n});break}return o}function k6(t){const{top:e,right:n,bottom:o,left:r}=t;return[{x:r,y:e},{x:n,y:e},{x:n,y:o},{x:r,y:o}]}function x6(t,e){const{x:n,y:o}=t;let r=!1;for(let a=0,s=e.length-1;a<e.length;s=a++){const i=e[a],l=e[s],c=i.x,u=i.y,d=l.x,g=l.y;u>o!=g>o&&n<(d-c)*(o-u)/(g-u)+c&&(r=!r)}return r}function S6(t){const e=t.slice();return e.sort((n,o)=>n.x<o.x?-1:n.x>o.x?1:n.y<o.y?-1:n.y>o.y?1:0),T6(e)}function T6(t){if(t.length<=1)return t.slice();const e=[];for(let o=0;o<t.length;o++){const r=t[o];for(;e.length>=2;){const a=e[e.length-1],s=e[e.length-2];if((a.x-s.x)*(r.y-s.y)>=(a.y-s.y)*(r.x-s.x))e.pop();else break}e.push(r)}e.pop();const n=[];for(let o=t.length-1;o>=0;o--){const r=t[o];for(;n.length>=2;){const a=n[n.length-1],s=n[n.length-2];if((a.x-s.x)*(r.y-s.y)>=(a.y-s.y)*(r.x-s.x))n.pop();else break}n.push(r)}return n.pop(),e.length===1&&n.length===1&&e[0].x===n[0].x&&e[0].y===n[0].y?e:e.concat(n)}var A6=b1,T1=k1;const _6=A6,C6=f.forwardRef(({className:t,sideOffset:e=4,...n},o)=>h.jsx(T1,{ref:o,sideOffset:e,className:ve("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",t),...n}));C6.displayName=T1.displayName;var tu=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(t){return this.listeners.add(t),this.onSubscribe(),()=>{this.listeners.delete(t),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},nu=typeof window>"u"||"Deno"in globalThis;function yn(){}function E6(t,e){return typeof t=="function"?t(e):t}function I6(t){return typeof t=="number"&&t>=0&&t!==1/0}function P6(t,e){return Math.max(t+(e||0)-Date.now(),0)}function Np(t,e){return typeof t=="function"?t(e):t}function j6(t,e){return typeof t=="function"?t(e):t}function Qy(t,e){const{type:n="all",exact:o,fetchStatus:r,predicate:a,queryKey:s,stale:i}=t;if(s){if(o){if(e.queryHash!==Pm(s,e.options))return!1}else if(!zi(e.queryKey,s))return!1}if(n!=="all"){const l=e.isActive();if(n==="active"&&!l||n==="inactive"&&l)return!1}return!(typeof i=="boolean"&&e.isStale()!==i||r&&r!==e.state.fetchStatus||a&&!a(e))}function Zy(t,e){const{exact:n,status:o,predicate:r,mutationKey:a}=t;if(a){if(!e.options.mutationKey)return!1;if(n){if(Hi(e.options.mutationKey)!==Hi(a))return!1}else if(!zi(e.options.mutationKey,a))return!1}return!(o&&e.state.status!==o||r&&!r(e))}function Pm(t,e){return((e==null?void 0:e.queryKeyHashFn)||Hi)(t)}function Hi(t){return JSON.stringify(t,(e,n)=>Lp(n)?Object.keys(n).sort().reduce((o,r)=>(o[r]=n[r],o),{}):n)}function zi(t,e){return t===e?!0:typeof t!=typeof e?!1:t&&e&&typeof t=="object"&&typeof e=="object"?Object.keys(e).every(n=>zi(t[n],e[n])):!1}function A1(t,e){if(t===e)return t;const n=Xy(t)&&Xy(e);if(n||Lp(t)&&Lp(e)){const o=n?t:Object.keys(t),r=o.length,a=n?e:Object.keys(e),s=a.length,i=n?[]:{},l=new Set(o);let c=0;for(let u=0;u<s;u++){const d=n?u:a[u];(!n&&l.has(d)||n)&&t[d]===void 0&&e[d]===void 0?(i[d]=void 0,c++):(i[d]=A1(t[d],e[d]),i[d]===t[d]&&t[d]!==void 0&&c++)}return r===s&&c===r?t:i}return e}function Xy(t){return Array.isArray(t)&&t.length===Object.keys(t).length}function Lp(t){if(!ew(t))return!1;const e=t.constructor;if(e===void 0)return!0;const n=e.prototype;return!(!ew(n)||!n.hasOwnProperty("isPrototypeOf")||Object.getPrototypeOf(t)!==Object.prototype)}function ew(t){return Object.prototype.toString.call(t)==="[object Object]"}function B6(t){return new Promise(e=>{setTimeout(e,t)})}function O6(t,e,n){return typeof n.structuralSharing=="function"?n.structuralSharing(t,e):n.structuralSharing!==!1?A1(t,e):e}function M6(t,e,n=0){const o=[...t,e];return n&&o.length>n?o.slice(1):o}function R6(t,e,n=0){const o=[e,...t];return n&&o.length>n?o.slice(0,-1):o}var jm=Symbol();function _1(t,e){return!t.queryFn&&(e!=null&&e.initialPromise)?()=>e.initialPromise:!t.queryFn||t.queryFn===jm?()=>Promise.reject(new Error(`Missing queryFn: '${t.queryHash}'`)):t.queryFn}var Mr,zo,Za,Ob,N6=(Ob=class extends tu{constructor(){super();Te(this,Mr);Te(this,zo);Te(this,Za);ge(this,Za,e=>{if(!nu&&window.addEventListener){const n=()=>e();return window.addEventListener("visibilitychange",n,!1),()=>{window.removeEventListener("visibilitychange",n)}}})}onSubscribe(){R(this,zo)||this.setEventListener(R(this,Za))}onUnsubscribe(){var e;this.hasListeners()||((e=R(this,zo))==null||e.call(this),ge(this,zo,void 0))}setEventListener(e){var n;ge(this,Za,e),(n=R(this,zo))==null||n.call(this),ge(this,zo,e(o=>{typeof o=="boolean"?this.setFocused(o):this.onFocus()}))}setFocused(e){R(this,Mr)!==e&&(ge(this,Mr,e),this.onFocus())}onFocus(){const e=this.isFocused();
vendor: 4,924 bytes, line 112
112this.listeners.forEach(n=>{n(e)})}isFocused(){var e;return typeof R(this,Mr)=="boolean"?R(this,Mr):((e=globalThis.document)==null?void 0:e.visibilityState)!=="hidden"}},Mr=new WeakMap,zo=new WeakMap,Za=new WeakMap,Ob),C1=new N6,Xa,$o,es,Mb,L6=(Mb=class extends tu{constructor(){super();Te(this,Xa,!0);Te(this,$o);Te(this,es);ge(this,es,e=>{if(!nu&&window.addEventListener){const n=()=>e(!0),o=()=>e(!1);return window.addEventListener("online",n,!1),window.addEventListener("offline",o,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",o)}}})}onSubscribe(){R(this,$o)||this.setEventListener(R(this,es))}onUnsubscribe(){var e;this.hasListeners()||((e=R(this,$o))==null||e.call(this),ge(this,$o,void 0))}setEventListener(e){var n;ge(this,es,e),(n=R(this,$o))==null||n.call(this),ge(this,$o,e(this.setOnline.bind(this)))}setOnline(e){R(this,Xa)!==e&&(ge(this,Xa,e),this.listeners.forEach(o=>{o(e)}))}isOnline(){return R(this,Xa)}},Xa=new WeakMap,$o=new WeakMap,es=new WeakMap,Mb),rh=new L6;function D6(){let t,e;const n=new Promise((r,a)=>{t=r,e=a});n.status="pending",n.catch(()=>{});function o(r){Object.assign(n,r),delete n.resolve,delete n.reject}return n.resolve=r=>{o({status:"fulfilled",value:r}),t(r)},n.reject=r=>{o({status:"rejected",reason:r}),e(r)},n}function W6(t){return Math.min(1e3*2**t,3e4)}function E1(t){return(t??"online")==="online"?rh.isOnline():!0}var I1=class extends Error{constructor(t){super("CancelledError"),this.revert=t==null?void 0:t.revert,this.silent=t==null?void 0:t.silent}};function rd(t){return t instanceof I1}function P1(t){let e=!1,n=0,o=!1,r;const a=D6(),s=y=>{var k;o||(g(new I1(y)),(k=t.abort)==null||k.call(t))},i=()=>{e=!0},l=()=>{e=!1},c=()=>C1.isFocused()&&(t.networkMode==="always"||rh.isOnline())&&t.canRun(),u=()=>E1(t.networkMode)&&t.canRun(),d=y=>{var k;o||(o=!0,(k=t.onSuccess)==null||k.call(t,y),r==null||r(),a.resolve(y))},g=y=>{var k;o||(o=!0,(k=t.onError)==null||k.call(t,y),r==null||r(),a.reject(y))},p=()=>new Promise(y=>{var k;r=w=>{(o||c())&&y(w)},(k=t.onPause)==null||k.call(t)}).then(()=>{var y;r=void 0,o||(y=t.onContinue)==null||y.call(t)}),v=()=>{if(o)return;let y;const k=n===0?t.initialPromise:void 0;try{y=k??t.fn()}catch(w){y=Promise.reject(w)}Promise.resolve(y).then(d).catch(w=>{var T;if(o)return;const m=t.retry??(nu?0:3),b=t.retryDelay??W6,x=typeof b=="function"?b(n,w):b,S=m===!0||typeof m=="number"&&n<m||typeof m=="function"&&m(n,w);if(e||!S){g(w);return}n++,(T=t.onFail)==null||T.call(t,n,w),B6(x).then(()=>c()?void 0:p()).then(()=>{e?g(w):v()})})};return{promise:a,cancel:s,continue:()=>(r==null||r(),a),cancelRetry:i,continueRetry:l,canStart:u,start:()=>(u()?v():p().then(v),a)}}var q6=t=>setTimeout(t,0);function F6(){let t=[],e=0,n=i=>{i()},o=i=>{i()},r=q6;const a=i=>{e?t.push(i):r(()=>{n(i)})},s=()=>{const i=t;t=[],i.length&&r(()=>{o(()=>{i.forEach(l=>{n(l)})})})};return{batch:i=>{let l;e++;try{l=i()}finally{e--,e||s()}return l},batchCalls:i=>(...l)=>{a(()=>{i(...l)})},schedule:a,setNotifyFunction:i=>{n=i},setBatchNotifyFunction:i=>{o=i},setScheduler:i=>{r=i}}}var vt=F6(),Rr,Rb,j1=(Rb=class{constructor(){Te(this,Rr)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),I6(this.gcTime)&&ge(this,Rr,setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(t){this.gcTime=Math.max(this.gcTime||0,t??(nu?1/0:5*60*1e3))}clearGcTimeout(){R(this,Rr)&&(clearTimeout(R(this,Rr)),ge(this,Rr,void 0))}},Rr=new WeakMap,Rb),ts,Nr,Kt,Lr,gt,sl,Dr,bn,ao,Nb,H6=(Nb=class extends j1{constructor(e){super();Te(this,bn);Te(this,ts);Te(this,Nr);Te(this,Kt);Te(this,Lr);Te(this,gt);Te(this,sl);Te(this,Dr);ge(this,Dr,!1),ge(this,sl,e.defaultOptions),this.setOptions(e.options),this.observers=[],ge(this,Lr,e.client),ge(this,Kt,R(this,Lr).getQueryCache()),this.queryKey=e.queryKey,this.queryHash=e.queryHash,ge(this,ts,$6(this.options)),this.state=e.state??R(this,ts),this.scheduleGc()}get meta(){return this.options.meta}get promise(){var e;return(e=R(this,gt))==null?void 0:e.promise}setOptions(e){this.options={...R(this,sl),...e},this.updateGcTime(this.options.gcTime)}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&R(this,Kt).remove(this)}setData(e,n){const o=O6(this.state.data,e,this.options);return ct(this,bn,ao).call(this,{data:o,type:"success",dataUpdatedAt:n==null?void 0:n.updatedAt,manual:n==null?void 0:n.manual}),o}setState(e,n){ct(this,bn,ao).call(this,{type:"setState",state:e,setStateOptions:n})}cancel(e){var o,r;const n=(o=R(this,gt))==null?void 0:o.promise;return(r=R(this,gt))==null||r.cancel(e),n?n.then(yn).catch(yn):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}reset(){this.destroy(),this.setState(R(this,ts))}isActive(){return this.observers.some(e=>j6(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===jm||this.state.dataUpdateCount+this.state.errorUpdate
112Count===0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>Np(e.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e==="static"?!1:this.state.isInvalidated?!0:!P6(this.state.dataUpdatedAt,e)}onFocus(){var n;const e=this.observers.find(o=>o.shouldFetchOnWindowFocus());e==null||e.refetch({cancelRefetch:!1}),(n=R(this,gt))==null||n.continue()}onOnline(){var n;const e=this.observers.find(o=>o.shouldFetchOnReconnect());e==null||e.refetch({cancelRefetch:!1}),(n=R(this,gt))==null||n.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),R(this,Kt).notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(n=>n!==e),this.observers.length||(R(this,gt)&&(R(this,Dr)?R(this,gt).cancel({revert:!0}):R(this,gt).cancelRetry()),this.scheduleGc()),R(this,Kt).notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||ct(this,bn,ao).call(this,{type:"invalidate"})}fetch(e,n){var c,u,d;if(this.state.fetchStatus!=="idle"){if(this.state.data!==void 0&&(n!=null&&n.cancelRefetch))this.cancel({silent:!0});else if(R(this,gt))return R(this,gt).continueRetry(),R(this,gt).promise}if(e&&this.setOptions(e),!this.options.queryFn){const g=this.observers.find(p=>p.options.queryFn);g&&this.setOptions(g.options)}const o=new AbortController,r=g=>{Object.defineProperty(g,"signal",{enumerable:!0,get:()=>(ge(this,Dr,!0),o.signal)})},a=()=>{const g=_1(this.options,n),v=(()=>{const y={client:R(this,Lr),queryKey:this.queryKey,meta:this.meta};return r(y),y})();return ge(this,Dr,!1),this.options.persister?this.options.persister(g,v,this):g(v)},i=(()=>{const g={fetchOptions:n,options:this.options,queryKey:this.queryKey,client:R(this,Lr),state:this.state,fetchFn:a};return r(g),g})();(c=this.options.behavior)==null||c.onFetch(i,this),ge(this,Nr,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((u=i.fetchOptions)==null?void 0:u.meta))&&ct(this,bn,ao).call(this,{type:"fetch",meta:(d=i.fetchOptions)==null?void 0:d.meta});const l=g=>{var p,v,y,k;rd(g)&&g.silent||ct(this,bn,ao).call(this,{type:"error",error:g}),rd(g)||((v=(p=R(this,Kt).config).onError)==null||v.call(p,g,this),(k=(y=R(this,Kt).config).onSettled)==null||k.call(y,this.state.data,g,this)),this.scheduleGc()};return ge(this,gt,P1({initialPromise:n==null?void 0:n.initialPromise,fn:i.fetchFn,abort:o.abort.bind(o),onSuccess:g=>{var p,v,y,k;if(g===void 0){l(new Error(`${this.queryHash} data is undefined`));return}try{this.setData(g)}catch(w){l(w);return}(v=(p=R(this,Kt).config).onSuccess)==null||v.call(p,g,this),(k=(y=R(this,Kt).config).onSettled)==null||k.call(y,g,this.state.error,this),this.scheduleGc()},onError:l,onFail:(g,p)=>{ct(this,bn,ao).call(this,{type:"failed",failureCount:g,error:p})},onPause:()=>{ct(this,bn,ao).call(this,{type:"pause"})},onContinue:()=>{ct(this,bn,ao).call(this,{type:"continue"})},retry:i.options.retry,retryDelay:i.options.retryDelay,networkMode:i.options.networkMode,canRun:()=>!0})),R(this,gt).start()}},ts=new WeakMap,Nr=new WeakMap,Kt=new WeakMap,Lr=new WeakMap,gt=new WeakMap,sl=new WeakMap,Dr=new WeakMap,bn=new WeakSet,ao=function(e){const n=o=>{switch(e.type){case"failed":return{...o,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...o,fetchStatus:"paused"};case"continue":return{...o,fetchStatus:"fetching"};case"fetch":return{...o,...z6(o.data,this.options),fetchMeta:e.meta??null};case"success":return ge(this,Nr,void 0),{...o,data:e.data,dataUpdateCount:o.dataUpdateCount+1,dataUpdatedAt:e.dataUpdatedAt??Date.now(),error:null,isInvalidated:!1,status:"success",...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};case"error":const r=e.error;return rd(r)&&r.revert&&R(this,Nr)?{...R(this,Nr),fetchStatus:"idle"}
vendor: 5,105 bytes, line 112
112:{...o,error:r,errorUpdateCount:o.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:o.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:"idle",status:"error"};case"invalidate":return{...o,isInvalidated:!0};case"setState":return{...o,...e.state}}};this.state=n(this.state),vt.batch(()=>{this.observers.forEach(o=>{o.onQueryUpdate()}),R(this,Kt).notify({query:this,type:"updated",action:e})})},Nb);function z6(t,e){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:E1(e.networkMode)?"fetching":"paused",...t===void 0&&{error:null,status:"pending"}}}function $6(t){const e=typeof t.initialData=="function"?t.initialData():t.initialData,n=e!==void 0,o=n?typeof t.initialDataUpdatedAt=="function"?t.initialDataUpdatedAt():t.initialDataUpdatedAt:0;return{data:e,dataUpdateCount:0,dataUpdatedAt:n?o??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}var Dn,Lb,U6=(Lb=class extends tu{constructor(e={}){super();Te(this,Dn);this.config=e,ge(this,Dn,new Map)}build(e,n,o){const r=n.queryKey,a=n.queryHash??Pm(r,n);let s=this.get(a);return s||(s=new H6({client:e,queryKey:r,queryHash:a,options:e.defaultQueryOptions(n),state:o,defaultOptions:e.getQueryDefaults(r)}),this.add(s)),s}add(e){R(this,Dn).has(e.queryHash)||(R(this,Dn).set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){const n=R(this,Dn).get(e.queryHash);n&&(e.destroy(),n===e&&R(this,Dn).delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){vt.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return R(this,Dn).get(e)}getAll(){return[...R(this,Dn).values()]}find(e){const n={exact:!0,...e};return this.getAll().find(o=>Qy(n,o))}findAll(e={}){const n=this.getAll();return Object.keys(e).length>0?n.filter(o=>Qy(e,o)):n}notify(e){vt.batch(()=>{this.listeners.forEach(n=>{n(e)})})}onFocus(){vt.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){vt.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},Dn=new WeakMap,Lb),Wn,wt,Wr,qn,Mo,Db,Y6=(Db=class extends j1{constructor(e){super();Te(this,qn);Te(this,Wn);Te(this,wt);Te(this,Wr);this.mutationId=e.mutationId,ge(this,wt,e.mutationCache),ge(this,Wn,[]),this.state=e.state||V6(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){R(this,Wn).includes(e)||(R(this,Wn).push(e),this.clearGcTimeout(),R(this,wt).notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){ge(this,Wn,R(this,Wn).filter(n=>n!==e)),this.scheduleGc(),R(this,wt).notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){R(this,Wn).length||(this.state.status==="pending"?this.scheduleGc():R(this,wt).remove(this))}continue(){var e;return((e=R(this,Wr))==null?void 0:e.continue())??this.execute(this.state.variables)}async execute(e){var a,s,i,l,c,u,d,g,p,v,y,k,w,m,b,x,S,T,A,_;const n=()=>{ct(this,qn,Mo).call(this,{type:"continue"})};ge(this,Wr,P1({fn:()=>this.options.mutationFn?this.options.mutationFn(e):Promise.reject(new Error("No mutationFn found")),onFail:(C,P)=>{ct(this,qn,Mo).call(this,{type:"failed",failureCount:C,error:P})},onPause:()=>{ct(this,qn,Mo).call(this,{type:"pause"})},onContinue:n,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>R(this,wt).canRun(this)}));const o=this.state.status==="pending",r=!R(this,Wr).canStart();try{if(o)n();else{ct(this,qn,Mo).call(this,{type:"pending",variables:e,isPaused:r}),await((s=(a=R(this,wt).config).onMutate)==null?void 0:s.call(a,e,this));const P=await((l=(i=this.options).onMutate)==null?void 0:l.call(i,e));P!==this.state.context&&ct(this,qn,Mo).call(this,{type:"pending",context:P,variables:e,isPaused:r})}const C=await R(this,Wr).start();return await((u=(c=R(this,wt).config).onSuccess)==null?void 0:u.call(c,C,e,this.state.context,this)),await((g=(d=this.options).onSuccess)==null?void 0:g.call(d,C,e,this.state.context)),await((v=(p=R(this,wt).config).onSettled)==null?void 0:v.call(p,C,null,this.state.variables,this.state.context,this)),await((k=(y=this.options).onSettled)==null?void 0:k.call(y,C,null,e,this.state.context)),ct(this,qn,Mo).call(this,{type:"success",data:C}),C}catch(C){try{throw await((m=(w=R(this,wt).config).onError)==null?void 0:m.call(w,C,e,this.state.context,this)),await((x=(b=this.options).onError)==null?void 0:x.call(b,C,e,this.state.context)),await((T=(S=R(this,wt).config).onSettled)==null?void 0:T.call(S,void 0,C,this.state.variables,this.state.context,this)),await((_=(A=this.options).onSettled)==null?void 0:_.call(A,void 0,C,e,this.state.context)),C}finally{ct(this,qn,Mo).call(this,{type:"error",error:C})}}finally{R(this,wt).runNext(this)}}},Wn=new WeakMap,wt=new WeakMap,Wr=new WeakMap,qn=new WeakSet,Mo=function(e){const n=o=>{switch(e.type){case"failed":return{...o,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...o,isPaused:!0};case"continue":return{...o,isPaused:!1};
112case"pending":return{...o,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...o,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...o,data:void 0,error:e.error,failureCount:o.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}};this.state=n(this.state),vt.batch(()=>{R(this,Wn).forEach(o=>{o.onMutationUpdate(e)}),R(this,wt).notify({mutation:this,type:"updated",action:e})})},Db);function V6(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var uo,vn,il,Wb,G6=(Wb=class extends tu{constructor(e={}){super();Te(this,uo);Te(this,vn);Te(this,il);this.config=e,ge(this,uo,new Set),ge(this,vn,new Map),ge(this,il,0)}build(e,n,o){const r=new Y6({mutationCache:this,mutationId:++Al(this,il)._,options:e.defaultMutationOptions(n),state:o});return this.add(r),r}add(e){R(this,uo).add(e);const n=Kl(e);if(typeof n=="string"){const o=R(this,vn).get(n);o?o.push(e):R(this,vn).set(n,[e])}this.notify({type:"added",mutation:e})}remove(e){if(R(this,uo).delete(e)){const n=Kl(e);if(typeof n=="string"){const o=R(this,vn).get(n);if(o)if(o.length>1){const r=o.indexOf(e);r!==-1&&o.splice(r,1)}else o[0]===e&&R(this,vn).delete(n)}}this.notify({type:"removed",mutation:e})}canRun(e){const n=Kl(e);if(typeof n=="string"){const o=R(this,vn).get(n),r=o==null?void 0:o.find(a=>a.state.status==="pending");return!r||r===e}else return!0}runNext(e){var o;const n=Kl(e);if(typeof n=="string"){const r=(o=R(this,vn).get(n))==null?void 0:o.find(a=>a!==e&&a.state.isPaused);return(r==null?void 0:r.continue())??Promise.resolve()}else return Promise.resolve()}clear(){vt.batch(()=>{R(this,uo).forEach(e=>{this.notify({type:"removed",mutation:e})}),R(this,uo).clear(),R(this,vn).clear()})}getAll(){return Array.from(R(this,uo))}find(e){const n={exact:!0,...e};return this.getAll().find(o=>Zy(n,o))}findAll(e={}){return this.getAll().filter(n=>Zy(e,n))}notify(e){vt.batch(()=>{this.listeners.forEach(n=>{n(e)})})}resumePausedMutations(){const e=this.getAll().filter(n=>n.state.isPaused);return vt.batch(()=>Promise.all(e.map(n=>n.continue().catch(yn))))}},uo=new WeakMap,vn=new WeakMap,il=new WeakMap,Wb);function Kl(t){var e;return(e=t.options.scope)==null?void 0:e.id}function tw(t){return{onFetch:(e,n)=>{var u,d,g,p,v;const o=e.options,r=(g=(d=(u=e.fetchOptions)==null?void 0:u.meta)==null?void 0:d.fetchMore)==null?void 0:g.direction,a=((p=e.state.data)==null?void 0:p.pages)||[],s=((v=e.state.data)==null?void 0:v.pageParams)||[];let i={pages:[],pageParams:[]},l=0;const c=async()=>{let y=!1;const k=b=>{Object.defineProperty(b,"signal",{enumerable:!0,get:()=>(e.signal.aborted?y=!0:e.signal.addEventListener("abort",()=>{y=!0}),e.signal)})},w=_1(e.options,e.fetchOptions),m=async(b,x,S)=>{if(y)return Promise.reject();if(x==null&&b.pages.length)return Promise.resolve(b);const A=(()=>{const L={client:e.client,queryKey:e.queryKey,pageParam:x,direction:S?"backward":"forward",meta:e.options.meta};return k(L),L})(),_=await w(A),{maxPages:C}=e.options,P=S?R6:M6;return{pages:P(b.pages,_,C),pageParams:P(b.pageParams,x,C)}};if(r&&a.length){const b=r==="backward",x=b?K6:nw,S={pages:a,pageParams:s},T=x(o,S);i=await m(S,T,b)}else{const b=t??a.length;do{const x=l===0?s[0]??o.initialPageParam:nw(o,i);if(l>0&&x==null)break;i=await m(i,x),l++}while(l<b)}return i};e.options.persister?e.fetchFn=()=>{var y,k;return(k=(y=e.options).persister)==null?void 0:k.call(y,c,{client:e.client,queryKey:e.queryKey,meta:e.options.meta,signal:e.signal},n)}:e.fetchFn=c}}}function nw(t,{pages:e,pageParams:n}){const o=e.length-1;return e.length>0?t.getNextPageParam(e[o],e,n[o],n):void 0}function K6(t,{pages:e,pageParams:n}){var o;return e.length>0?(o=t.getPreviousPageParam)==null?void 0:o.call(t,e[0],e,n[0],n):void 0}var ze,Uo,Yo,ns,os,Vo,rs,as,qb,J6=(qb=class{constructor(t={}){Te(this,ze);Te(this,Uo);Te(this,Yo);Te(this,ns);Te(this,os);Te(this,Vo);Te(this,rs);Te(this,as);ge(this,ze,t.queryCache||new U6),ge(this,Uo,t.mutationCache||new G6),ge(this,Yo,t.defaultOptions||{}),ge(this,ns,new Map),ge(this,os,new Map),ge(this,Vo,0)}mount(){Al(this,Vo)._++,R(this,Vo)===1&&(ge(this,rs,C1.subscribe(async t=>{t&&(await this.resumePausedMutations(),R(this,ze).onFocus())})),ge(this,as,rh.subscribe(async t=>{t&&(await this.resumePausedMutations(),R(this,ze).onOnline())})))}unmount(){var t,e;Al(this,Vo)._--,R(this,Vo)===0&&((t=R(this,rs))==null||t.call(this),ge(this,rs,void 0),(e=R(this,as))==null||e.call(this),ge(this,as,void 0))}isFetching(t){return R(this,ze).findAll({...t,fetchStatus:"fetching"}).length}isMutating(t){return R(this,Uo).findAll({...t,status:"pending"}).length}getQueryData(t){var n;const e=this.defaultQueryOptions({queryKey:t});return(n=R(this,ze).get(e.queryHash))==null?void 0:n.state.data}ensureQueryData(t){const e=this.defaultQueryOptions(t),n=R(this,ze).build(this,e),o=n.state.data;return o===void 0?this.fetchQuery(t):(t.revalidateIfStale&&n.isStaleByTime(Np(e.staleTime,n))&&this.prefetchQuery(e),Promise.resolve(o))}getQueriesData(t){return R(this,ze).findAll(t).map(({queryKey:e,state:n})=>{const o=n.data;return[e,o]})}setQueryData(t,e,n){const o=this.defaultQueryOptions({queryKey:t}),r=R(this,ze).get(o.queryHash),a=r==null?void 0:r.state.data,s=E6(e,a);if(s!==void 0)return R(this,ze).build(this,o).setData(s,{...n,manual:!0})}
112setQueriesData(t,e,n){return vt.batch(()=>R(this,ze).findAll(t).map(({queryKey:o})=>[o,this.setQueryData(o,e,n)]))}getQueryState(t){var n;const e=this.defaultQueryOptions({queryKey:t});return(n=R(this,ze).get(e.queryHash))==null?void 0:n.state}removeQueries(t){const e=R(this,ze);vt.batch(()=>{e.findAll(t).forEach(n=>{e.remove(n)})})}resetQueries(t,e){const n=R(this,ze);return vt.batch(()=>(n.findAll(t).forEach(o=>{o.reset()}),this.refetchQueries({type:"active",...t},e)))}cancelQueries(t,e={}){const n={revert:!0,...e},o=vt.batch(()=>R(this,ze).findAll(t).map(r=>r.cancel(n)));return Promise.all(o).then(yn).catch(yn)}invalidateQueries(t,e={}){return vt.batch(()=>(R(this,ze).findAll(t).forEach(n=>{n.invalidate()}),(t==null?void 0:t.refetchType)==="none"?Promise.resolve():this.refetchQueries({...t,type:(t==null?void 0:t.refetchType)??(t==null?void 0:t.type)??"active"},e)))}refetchQueries(t,e={}){const n={...e,cancelRefetch:e.cancelRefetch??!0},o=vt.batch(()=>R(this,ze).findAll(t).filter(r=>!r.isDisabled()&&!r.isStatic()).map(r=>{let a=r.fetch(void 0,n);return n.throwOnError||(a=a.catch(yn)),r.state.fetchStatus==="paused"?Promise.resolve():a}));return Promise.all(o).then(yn)}fetchQuery(t){const e=this.defaultQueryOptions(t);e.retry===void 0&&(e.retry=!1);const n=R(this,ze).build(this,e);return n.isStaleByTime(Np(e.staleTime,n))?n.fetch(e):Promise.resolve(n.state.data)}prefetchQuery(t){return this.fetchQuery(t).then(yn).catch(yn)}fetchInfiniteQuery(t){return t.behavior=tw(t.pages),this.fetchQuery(t)}prefetchInfiniteQuery(t){return this.fetchInfiniteQuery(t).then(yn).catch(yn)}ensureInfiniteQueryData(t){return t.behavior=tw(t.pages),this.ensureQueryData(t)}resumePausedMutations(){return rh.isOnline()?R(this,Uo).resumePausedMutations():Promise.resolve()}getQueryCache(){return R(this,ze)}getMutationCache(){return R(this,Uo)}getDefaultOptions(){return R(this,Yo)}setDefaultOptions(t){ge(this,Yo,t)}setQueryDefaults(t,e){R(this,ns).set(Hi(t),{queryKey:t,defaultOptions:e})}getQueryDefaults(t){const e=[...R(this,ns).values()],n={};return e.forEach(o=>{zi(t,o.queryKey)&&Object.assign(n,o.defaultOptions)}),n}setMutationDefaults(t,e){R(this,os).set(Hi(t),{mutationKey:t,defaultOptions:e})}getMutationDefaults(t){const e=[...R(this,os).values()],n={};return e.forEach(o=>{zi(t,o.mutationKey)&&Object.assign(n,o.defaultOptions)}),n}defaultQueryOptions(t){if(t._defaulted)return t;const e={...R(this,Yo).queries,...this.getQueryDefaults(t.queryKey),...t,_defaulted:!0};return e.queryHash||(e.queryHash=Pm(e.queryKey,e)),e.refetchOnReconnect===void 0&&(e.refetchOnReconnect=e.networkMode!=="always"),e.throwOnError===void 0&&(e.throwOnError=!!e.suspense),!e.networkMode&&e.persister&&(e.networkMode="offlineFirst"),e.queryFn===jm&&(e.enabled=!1),e}defaultMutationOptions(t){return t!=null&&t._defaulted?t:{...R(this,Yo).mutations,...(t==null?void 0:t.mutationKey)&&this.getMutationDefaults(t.mutationKey),...t,_defaulted:!0}}clear(){R(this,ze).clear(),R(this,Uo).clear()}},ze=new WeakMap,Uo=new WeakMap,Yo=new WeakMap,ns=new WeakMap,os=new WeakMap,Vo=new WeakMap,rs=new WeakMap,as=new WeakMap,qb),Q6=f.createContext(void 0),Z6=({client:t,children:e})=>(f.useEffect(()=>(t.mount(),()=>{t.unmount()}),[t]),h.jsx(Q6.Provider,{value:t,children:e}));/**
113 * @remix-run/router v1.23.3
114 *
115 * Copyright (c) Remix Software Inc.
116 *
117 * This source code is licensed under the MIT license found in the
118 * LICENSE.md file in the root directory of this source tree.
119 *
120 * @license MIT
121 */function $i(){return $i=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n)({}).hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},$i.apply(null,arguments)}var Jo;(function(t){t.Pop="POP",t.Push="PUSH",t.Replace="REPLACE"})(Jo||(Jo={}));const ow="popstate";function X6(t){t===void 0&&(t={});function e(o,r){let{pathname:a,search:s,hash:i}=o.location;return Dp("",{pathname:a,search:s,hash:i},r.state&&r.state.usr||null,r.state&&r.state.key||"default")}function n(o,r){return typeof r=="string"?r:ah(r)}return tC(e,n,null,t)}function Ke(t,e){if(t===!1||t===null||typeof t>"u")throw new Error(e)}function Bm(t,e){if(!t){typeof console<"u"&&console.warn(e);try{throw new Error(e)}catch{}}}function eC(){return Math.random().toString(36).substr(2,8)}function rw(t,e){return{usr:t.state,key:t.key,idx:e}}function Dp(t,e,n,o){return n===void 0&&(n=null),$i({pathname:typeof t=="string"?t:t.pathname,search:"",hash:""},typeof e=="string"?Cs(e):e,{state:n,key:e&&e.key||o||eC()})}function ah(t){let{pathname:e="/",search:n="",hash:o=""}=t;return n&&n!=="?"&&(e+=n.charAt(0)==="?"?n:"?"+n),o&&o!=="#"&&(e+=o.charAt(0)==="#"?o:"#"+o),e}function Cs(t){let e={};if(t){let n=t.indexOf("#");n>=0&&(e.hash=t.substr(n),t=t.substr(0,n));let o=t.indexOf("?");o>=0&&(e.search=t.substr(o),t=t.substr(0,o)),t&&(e.pathname=t)}return e}function tC(t,e,n,o){o===void 0&&(o={});let{window:r=document.defaultView,v5Compat:a=!1}=o,s=r.history,i=Jo.Pop,l=null,c=u();c==null&&(c=0,s.replaceState($i({},s.state,{idx:c}),""));function u(){return(s.state||{idx:null}).idx}function d(){i=Jo.Pop;let k=u(),w=k==null?null:k-c;c=k,l&&l({action:i,location:y.location,delta:w})}function g(k,w){i=Jo.Push;let m=Dp(y.location,k,w);c=u()+1;let b=rw(m,c),x=y.createHref(m);try{s.pushState(b,"",x)}catch(S){if(S instanceof DOMException&&S.name==="DataCloneError")throw S;r.location.assign(x)}a&&l&&l({action:i,location:y.location,delta:1})}function p(k,w){i=Jo.Replace;let m=Dp(y.location,k,w);c=u();let b=rw(m,c),x=y.createHref(m);s.replaceState(b,"",x),a&&l&&l({action:i,location:y.location,delta:0})}function v(k){let w=r.location.origin!=="null"?r.location.origin:r.location.href,m=typeof k=="string"?k:ah(k);return m=m.replace(/ $/,"%20"),Ke(w,"No window.location.(origin|href) available to create URL for href: "+m),new URL(m,w)}let y={get action(){return i},get location(){return t(r,s)},listen(k){if(l)throw new Error("A history only accepts one active listener");return r.addEventListener(ow,d),l=k,()=>{r.removeEventListener(ow,d),l=null}},createHref(k){return e(r,k)},createURL:v,encodeLocation(k){let w=v(k);return{pathname:w.pathname,search:w.search,hash:w.hash}},push:g,replace:p,go(k){return s.go(k)}};return y}var aw;(function(t){t.data="data",t.deferred="deferred",t.redirect="redirect",t.error="error"})(aw||(aw={}));function nC(t,e,n){return n===void 0&&(n="/"),oC(t,e,n,!1)}function oC(t,e,n,o){let r=typeof e=="string"?Cs(e):e,a=Om(r.pathname||"/",n);if(a==null)return null;let s=B1(t);rC(s);let i=null,l=mC(a);for(let c=0;i==null&&c<s.length;++c)i=pC(s[c],l,o);return i}function B1(t,e,n,o){e===void 0&&(e=[]),n===void 0&&(n=[]),o===void 0&&(o="");let r=(a,s,i)=>{let l={relativePath:i===void 0?a.path||"":i,caseSensitive:a.caseSensitive===!0,childrenIndex:s,route:a};l.relativePath.startsWith("/")&&(Ke(l.relativePath.startsWith(o),'Absolute route path "'+l.relativePath+'" nested under path '+('"'+o+'" is not val
121id. An absolute child route path ')+"must start with the combined path of all its parent routes."),l.relativePath=l.relativePath.slice(o.length));let c=sr([o,l.relativePath]),u=n.concat(l);a.children&&a.children.length>0&&(Ke(a.index!==!0,"Index routes must not have child routes. Please remove "+('all child routes from route path "'+c+'".')),B1(a.children,e,u,c)),!(a.path==null&&!a.index)&&e.push({path:c,score:uC(c,a.index),routesMeta:u})};return t.forEach((a,s)=>{var i;if(a.path===""||!((i=a.path)!=null&&i.includes("?")))r(a,s);else for(let l of O1(a.path))r(a,s,l)}),e}function O1(t){let e=t.split("/");if(e.length===0)return[];let[n,...o]=e,r=n.endsWith("?"),a=n.replace(/\?$/,"");if(o.length===0)return r?[a,""]:[a];let s=O1(o.join("/")),i=[];return i.push(...s.map(l=>l===""?a:[a,l].join("/"))),r&&i.push(...s),i.map(l=>t.startsWith("/")&&l===""?"/":l)}function rC(t){t.sort((e,n)=>e.score!==n.score?n.score-e.score:dC(e.routesMeta.map(o=>o.childrenIndex),n.routesMeta.map(o=>o.childrenIndex)))}const aC=/^:[\w-]+$/,sC=3,iC=2,lC=1,cC=10,hC=-2,sw=t=>t==="*";function uC(t,e){let n=t.split("/"),o=n.length;return n.some(sw)&&(o+=hC),e&&(o+=iC),n.filter(r=>!sw(r)).reduce((r,a)=>r+(aC.test(a)?sC:a===""?lC:cC),o)}function dC(t,e){return t.length===e.length&&t.slice(0,-1).every((o,r)=>o===e[r])?t[t.length-1]-e[e.length-1]:0}function pC(t,e,n){let{routesMeta:o}=t,r={},a="/",s=[];for(let i=0;i<o.length;++i){let l=o[i],c=i===o.length-1,u=a==="/"?e:e.slice(a.length)||"/",d=iw({path:l.relativePath,caseSensitive:l.caseSensitive,end:c},u),g=l.route;if(!d&&c&&n&&!o[o.length-1].route.index&&(d=iw({path:l.relativePath,caseSensitive:l.caseSensitive,end:!1},u)),!d)return null;
vendor: 7,152 bytes, lines 121-130
121Object.assign(r,d.params),s.push({params:r,pathname:sr([a,d.pathname]),pathnameBase:vC(sr([a,d.pathnameBase])),route:g}),d.pathnameBase!=="/"&&(a=sr([a,d.pathnameBase]))}return s}function iw(t,e){typeof t=="string"&&(t={path:t,caseSensitive:!1,end:!0});let[n,o]=gC(t.path,t.caseSensitive,t.end),r=e.match(n);if(!r)return null;let a=r[0],s=a.replace(/(.)\/+$/,"$1"),i=r.slice(1);return{params:o.reduce((c,u,d)=>{let{paramName:g,isOptional:p}=u;if(g==="*"){let y=i[d]||"";s=a.slice(0,a.length-y.length).replace(/(.)\/+$/,"$1")}const v=i[d];return p&&!v?c[g]=void 0:c[g]=(v||"").replace(/%2F/g,"/"),c},{}),pathname:a,pathnameBase:s,pattern:t}}function gC(t,e,n){e===void 0&&(e=!1),n===void 0&&(n=!0),Bm(t==="*"||!t.endsWith("*")||t.endsWith("/*"),'Route path "'+t+'" will be treated as if it were '+('"'+t.replace(/\*$/,"/*")+'" because the `*` character must ')+"always follow a `/` in the pattern. To get rid of this warning, "+('please change the route path to "'+t.replace(/\*$/,"/*")+'".'));let o=[],r="^"+t.replace(/\/*\*?$/,"").replace(/^\/*/,"/").replace(/[\\.*+^${}|()[\]]/g,"\\$&").replace(/\/:([\w-]+)(\?)?/g,(s,i,l)=>(o.push({paramName:i,isOptional:l!=null}),l?"/?([^\\/]+)?":"/([^\\/]+)"));return t.endsWith("*")?(o.push({paramName:"*"}),r+=t==="*"||t==="/*"?"(.*)$":"(?:\\/(.+)|\\/*)$"):n?r+="\\/*$":t!==""&&t!=="/"&&(r+="(?:(?=\\/|$))"),[new RegExp(r,e?void 0:"i"),o]}function mC(t){try{return t.split("/").map(e=>decodeURIComponent(e).replace(/\//g,"%2F")).join("/")}catch(e){return Bm(!1,'The URL path "'+t+'" could not be decoded because it is is a malformed URL segment. This is probably due to a bad percent '+("encoding ("+e+").")),t}}function Om(t,e){if(e==="/")return t;if(!t.toLowerCase().startsWith(e.toLowerCase()))return null;let n=e.endsWith("/")?e.length-1:e.length,o=t.charAt(n);return o&&o!=="/"?null:t.slice(n)||"/"}const fC=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,yC=t=>fC.test(t);function wC(t,e){e===void 0&&(e="/");let{pathname:n,search:o="",hash:r=""}=typeof t=="string"?Cs(t):t,a;if(n)if(yC(n))a=n;else{if(n.includes("//")){let s=n;n=M1(n),Bm(!1,"Pathnames cannot have embedded double slashes - normalizing "+(s+" -> "+n))}n.startsWith("/")?a=lw(n.substring(1),"/"):a=lw(n,e)}else a=e;return{pathname:a,search:kC(o),hash:xC(r)}}function lw(t,e){let n=e.replace(/\/+$/,"").split("/");return t.split("/").forEach(r=>{r===".."?n.length>1&&n.pop():r!=="."&&n.push(r)}),n.length>1?n.join("/"):"/"}function ad(t,e,n,o){return"Cannot include a '"+t+"' character in a manually specified "+("`to."+e+"` field ["+JSON.stringify(o)+"].  Please separate it out to the ")+("`to."+n+"` field. Alternatively you may provide the full path as ")+'a string in <Link to="..."> and the router will parse it for you.'}function bC(t){return t.filter((e,n)=>n===0||e.route.path&&e.route.path.length>0)}function Mm(t,e){let n=bC(t);return e?n.map((o,r)=>r===n.length-1?o.pathname:o.pathnameBase):n.map(o=>o.pathnameBase)}function Rm(t,e,n,o){o===void 0&&(o=!1);let r;typeof t=="string"?r=Cs(t):(r=$i({},t),Ke(!r.pathname||!r.pathname.includes("?"),ad("?","pathname","search",r)),Ke(!r.pathname||!r.pathname.includes("#"),ad("#","pathname","hash",r)),Ke(!r.search||!r.search.includes("#"),ad("#","search","hash",r)));let a=t===""||r.pathname==="",s=a?"/":r.pathname,i;if(s==null)i=n;else{let d=e.length-1;if(!o&&s.startsWith("..")){let g=s.split("/");for(;g[0]==="..";)g.shift(),d-=1;r.pathname=g.join("/")}i=d>=0?e[d]:"/"}let l=wC(r,i),c=s&&s!=="/"&&s.endsWith("/"),u=(a||s===".")&&n.endsWith("/");return!l.pathname.endsWith("/")&&(c||u)&&(l.pathname+="/"),l}const M1=t=>t.replace(/\/\/+/g,"/"),sr=t=>M1(t.join("/")),vC=t=>t.replace(/\/+$/,"").replace(/^\/*/,"/"),kC=t=>!t||t==="?"?"":t.startsWith("?")?t:"?"+t,xC=t=>!t||t==="#"?"":t.startsWith("#")?t:"#"+t;function SC(t){return t!=null&&typeof t.status=="number"&&typeof t.statusText=="string"&&typeof t.internal=="boolean"&&"data"in t}const R1=["post","put","patch","delete"];new Set(R1);const TC=["get",...R1];new Set(TC);/**
122 * React Router v6.30.4
123 *
124 * Copyright (c) Remix Software Inc.
125 *
126 * This source code is licensed under the MIT license found in the
127 * LICENSE.md file in the root directory of this source tree.
128 *
129 * @license MIT
130 */function Ui(){return Ui=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n)({}).hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},Ui.apply(null,arguments)}const Nm=f.createContext(null),AC=f.createContext(null),br=f.createContext(null),ou=f.createContext(null),To=f.createContext({outlet:null,matches:[],isDataRoute:!1}),N1=f.createContext(null);function _C(t,e){let{relative:n}=e===void 0?{}:e;Es()||Ke(!1);let{basename:o,navigator:r}=f.useContext(br),{hash:a,pathname:s,search:i}=D1(t,{relative:n}),l=s;return o!=="/"&&(l=s==="/"?o:sr([o,s])),r.createHref({pathname:l,search:i,hash:a})}function Es(){return f.useContext(ou)!=null}function Ao(){return Es()||Ke(!1),f.useContext(ou).location}function L1(t){f.useContext(br).static||f.useLayoutEffect(t)}function Is(){let{isDataRoute:t}=f.useContext(To);return t?WC():CC()}function CC(){Es()||Ke(!1);let t=f.useContext(Nm),{basename:e,future:n,navigator:o}=f.useContext(br),{matches:r}=f.useContext(To),{pathname:a}=Ao(),s=JSON.stringify(Mm(r,n.v7_relativeSplatPath)),i=f.useRef(!1);return L1(()=>{i.current=!0}),f.useCallback(function(c,u){if(u===void 0&&(u={}),!i.current)return;if(typeof c=="number"){o.go(c);return}let d=Rm(c,JSON.parse(s),a,u.relative==="path");t==null&&e!=="/"&&(d.pathname=d.pathname==="/"?e:sr([e,d.pathname])),(u.replace?o.replace:o.push)(d,u.state,u)},[e,o,s,a,t])}function hN(){let{matches:t}=f.useContext(To),e=t[t.length-1];return e?e.params:{}}function D1(t,e){let{relative:n}=e===void 0?{}:e,{future:o}=f.useContext(br),{matches:r}=f.useContext(To),{pathname:a}=Ao(),s=JSON.stringify(Mm(r,o.v7_relativeSplatPath));return f.useMemo(()=>Rm(t,JSON.parse(s),a,n==="path"),[t,s,a,n])}function EC(t,e){return IC(t,e)}function IC(t,e,n,o){Es()||Ke(!1);let{navigator:r}=f.useContext(br),{matches:a}=f.useContext(To),s=a[a.length-1],i=s?s.params:{};s&&s.pathname;let l=s?s.pathnameBase:"/";s&&s.route;let c=Ao(),u;if(e){var d;let k=typeof e=="string"?Cs(e):e;l==="/"||(d=k.pathname)!=null&&d.startsWith(l)||Ke(!1),u=k}else u=c;let g=u.pathname||"/",p=g;if(l!=="/"){let k=l.replace(/^\//,"").split("/");p="/"+g.replace(/^\//,"").split("/").slice(k.length).join("/")}let v=nC(t,{pathname:p}),y=MC(v&&v.map(k=>Object.assign({},k,{params:Object.assign({},i,k.params),pathname:sr([l,r.encodeLocation?r.encodeLocation(k.pathname).pathname:k.pathname]),pathnameBase:k.pathnameBase==="/"?l:sr([l,r.encodeLocation?r.encodeLocation(k.pathnameBase).pathname:k.pathnameBase])})),a,n,o);return e&&y?f.createElement(ou.Provider,{value:{location:Ui({pathname:"/",search:"",hash:"",state:null,key:"default"},u),navigationType:Jo.Pop}},y):y}function PC(){let t=DC(),e=SC(t)?t.status+" "+t.statusText:t instanceof Error?t.message:JSON.stringify(t),n=t instanceof Error?t.stack:null,r={padding:"0.5rem",backgroundColor:"rgba(200,200,200, 0.5)"};return f.createElement(f.Fragment,null,f.createElement("h2",null,"Unexpected Application 
130Error!"),f.createElement("h3",{style:{fontStyle:"italic"}},e),n?f.createElement("pre",{style:r},n):null,null)}const jC=f.createElement(PC,null);class BC extends f.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,n){return n.location!==e.location||n.revalidation!=="idle"&&e.revalidation==="idle"?{error:e.error,location:e.location,revalidation:e.revalidation}:{error:e.error!==void 0?e.error:n.error,location:n.location,revalidation:e.revalidation||n.revalidation}}componentDidCatch(e,n){console.error("React Router caught the following error during render",e,n)}render(){return this.state.error!==void 0?f.createElement(To.Provider,{value:this.props.routeContext},f.createElement(N1.Provider,{value:this.state.error,children:this.props.component})):this.props.children}}function OC(t){let{routeContext:e,match:n,children:o}=t,r=f.useContext(Nm);return r&&r.static&&r.staticContext&&(n.route.errorElement||n.route.ErrorBoundary)&&(r.staticContext._deepestRenderedBoundaryId=n.route.id),f.createElement(To.Provider,{value:e},o)}function MC(t,e,n,o){var r;if(e===void 0&&(e=[]),n===void 0&&(n=null),o===void 0&&(o=null),t==null){var a;if(!n)return null;if(n.errors)t=n.matches;else if((a=o)!=null&&a.v7_partialHydration&&e.length===0&&!n.initialized&&n.matches.length>0)t=n.matches;else return null}let s=t,i=(r=n)==null?void 0:r.errors;if(i!=null){let u=s.findIndex(d=>d.route.id&&(i==null?void 0:i[d.route.id])!==void 0);u>=0||Ke(!1),s=s.slice(0,Math.min(s.length,u+1))}let l=!1,c=-1;if(n&&o&&o.v7_partialHydration)for(let u=0;u<s.length;u++){let d=s[u];if((d.route.HydrateFallback||d.route.hydrateFallbackElement)&&(c=u),d.route.id){let{loaderData:g,errors:p}=n,v=d.route.loader&&g[d.route.id]===void 0&&(!p||p[d.route.id]===void 0);if(d.route.lazy||v){l=!0,c>=0?s=s.slice(0,c+1):s=[s[0]];break}}}return s.reduceRight((u,d,g)=>{let p,v=!1,y=null,k=null;n&&(p=i&&d.route.id?i[d.route.id]:void 0,y=d.route.errorElement||jC,l&&(c<0&&g===0?(v=!0,k=null):c===g&&(v=!0,k=d.route.hydrateFallbackElement||null)));let w=e.concat(s.slice(0,g+1)),m=()=>{let b;return p?b=y:v?b=k:d.route.Component?b=f.createElement(d.route.Component,null):d.route.element?b=d.route.element:b=u,f.createElement(OC,{match:d,routeContext:{outlet:u,matches:w,isDataRoute:n!=null},children:b})};return n&&(d.route.ErrorBoundary||d.route.errorElement||g===0)?f.createElement(BC,{location:n.location,revalidation:n.revalidation,component:y,error:p,children:m(),routeContext:{outlet:null,matches:w,isDataRoute:!0}}):m()},null)}var W1=function(t){return t.UseBlocker="useBlocker",t.UseRevalidator="useRevalidator",t.UseNavigateStable="useNavigate",t}(W1||{}),sh=function(t){return t.UseBlocker="useBlocker",t.UseLoaderData="useLoaderData",t.UseActionData="useActionData",t.UseRouteError="useRouteError",t.UseNavigation="useNavigation",t.UseRouteLoaderData="useRouteLoaderData",t.UseMatches="useMatches",t.UseRevalidator="useRevalidator",t.UseNavigateStable="useNavigate",t.UseRouteId="useRouteId",t}(sh||{});function RC(t){let e=f.useContext(Nm);return e||Ke(!1),e}function NC(t){let e=f.useContext(AC);return e||Ke(!1),e}function LC(t){let e=f.useContext(To);return e||Ke(!1),e}function q1(t){let e=LC(),n=e.matches[e.matches.length-1];return n.route.id||Ke(!1),n.route.id}function DC(){var t;let e=f.useContext(N1),n=NC(sh.UseRouteError),o=q1(sh.UseRouteError);return e!==void 0?e:(t=n.errors)==null?void 0:t[o]}function WC(){let{router:t}=RC(W1.UseNavigateStable),e=q1(sh.UseNavigateStable),n=f.useRef(!1);return L1(()=>{n.current=!0}),f.useCallback(function(r,a){a===void 0&&(a={}),n.current&&(typeof r=="number"?t.navigate(r):t.navigate(r,Ui({fromRouteId:e},a)))},[t,e])}function qC(t,e){t==null||t.v7_startTransition,t==null||t.v7_relativeSplatPath}function dt(t){let{to:e,replace:n,state:o,relative:r}=t;Es()||Ke(!1);let{future:a,static:s}=f.useContext(br),{matches:i}=f.useContext(To),{pathname:l}=Ao(),c=Is(),u=Rm(e,Mm(i,a.v7_relativeSplatPath),l,r==="path"),d=JSON.stringify(u);return f.useEffect(()=>c(JSON.parse(d),{replace:n,state:o,relative:r}),[c,d,r,n,o]),null}function ae(t){Ke(!1)}function FC(t){let{basename:e="/",children:n=null,location:o,navigationType:r=Jo.Pop,navigator:a,static:s=!1,future:i}=t;Es()&&Ke(!1);let l=e.replace(/^\/*/,"/"),c=f.useMemo(()=>({basename:l,navigator:a,static:s,future:Ui({v7_relativeSplatPath:!1},i)}),[l,i,a,s]);
130typeof o=="string"&&(o=Cs(o));let{pathname:u="/",search:d="",hash:g="",state:p=null,key:v="default"}=o,y=f.useMemo(()=>{let k=Om(u,l);return k==null?null:{location:{pathname:k,search:d,hash:g,state:p,key:v},navigationType:r}},[l,u,d,g,p,v,r]);return y==null?null:f.createElement(br.Provider,{value:c},f.createElement(ou.Provider,{children:n,value:y}))}function HC(t){let{children:e,location:n}=t;return EC(Wp(e),n)}new Promise(()=>{});function Wp(t,e){e===void 0&&(e=[]);let n=[];return f.Children.forEach(t,(o,r)=>{if(!f.isValidElement(o))return;let a=[...e,r];if(o.type===f.Fragment){n.push.apply(n,Wp(o.props.children,a));return}o.type!==ae&&Ke(!1),!o.props.index||!o.props.children||Ke(!1);let s={id:o.props.id||a.join("-"),caseSensitive:o.props.caseSensitive,element:o.props.element,Component:o.props.Component,index:o.props.index,path:o.props.path,loader:o.props.loader,action:o.props.action,errorElement:o.props.errorElement,ErrorBoundary:o.props.ErrorBoundary,hasErrorBoundary:o.props.ErrorBoundary!=null||o.props.errorElement!=null,shouldRevalidate:o.props.shouldRevalidate,handle:o.props.handle,lazy:o.props.lazy};o.props.children&&(s.children=Wp(o.props.children,a)),n.push(s)}),n}/**
131 * React Router DOM v6.30.4
132 *
133 * Copyright (c) Remix Software Inc.
134 *
135 * This source code is licensed under the MIT license found in the
136 * LICENSE.md file in the root directory of this source tree.
137 *
138 * @license MIT
139 */function qp(){return qp=Object.assign?Object.assign.bind():function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var o in n)({}).hasOwnProperty.call(n,o)&&(t[o]=n[o])}return t},qp.apply(null,arguments)}function zC(t,e){if(t==null)return{};var n={};for(var o in t)if({}.hasOwnProperty.call(t,o)){if(e.indexOf(o)!==-1)continue;n[o]=t[o]}return n}function $C(t){return!!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey)}function UC(t,e){return t.button===0&&(!e||e==="_self")&&!$C(t)}function Fp(t){return t===void 0&&(t=""),new URLSearchParams(typeof t=="string"||Array.isArray(t)||t instanceof URLSearchParams?t:Object.keys(t).reduce((e,n)=>{let o=t[n];return e.concat(Array.isArray(o)?o.map(r=>[n,r]):[[n,o]])},[]))}function YC(t,e){let n=Fp(t);return e&&e.forEach((o,r)=>{n.has(r)||e.getAll(r).forEach(a=>{n.append(r,a)})}),n}const VC=["onClick","relative","reloadDocument","replace","state","target","to","preventScrollReset","viewTransition"],GC="6";try{window.__reactRouterVersion=GC}catch{}const KC="startTransition",cw=kg[KC];function JC(t){let{basename:e,children:n,future:o,window:r}=t,a=f.useRef();a.current==null&&(a.current=X6({window:r,v5Compat:!0}));let s=a.current,[i,l]=f.useState({action:s.action,location:s.location}),{v7_startTransition:c}=o||{},u=f.useCallback(d=>{c&&cw?cw(()=>l(d)):l(d)},[l,c]);return f.useLayoutEffect(()=>s.listen(u),[s,u]),f.useEffect(()=>qC(o),[o]),f.createElement(FC,{basename:e,children:n,location:i.location,navigationType:i.action,navigator:s,future:o})}const QC=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",ZC=/^(?:[a-z][a-z0-9+.-]*:|\/\/)/i,Ne=f.forwardRef(function(e,n){let{onClick:o,relative:r,reloadDocument:a,replace:s,state:i,target:l,to:c,preventScrollReset:u,viewTransition:d}=e,g=zC(e,VC),{basename:p}=f.useContext(br),v,y=!1;if(typeof c=="string"&&ZC.test(c)&&(v=c,QC))try{let b=new URL(window.location.href),x=c.startsWith("//")?new URL(b.protocol+c):new URL(c),S=Om(x.pathname,p);x.origin===b.origin&&S!=null?c=S+x.search+x.hash:y=!0}catch{}let k=_C(c,{relative:r}),w=XC(c,{replace:s,state:i,target:l,preventScrollReset:u,relative:r,viewTransition:d});function m(b){o&&o(b),b.defaultPrevented||w(b)}return f.createElement("a",qp({},g,{href:v||k,onClick:y||a?o:m,ref:n,target:l}))});var hw;(function(t){t.UseScrollRestoration="useScrollRestoration",t.UseSubmit="useSubmit",t.UseSubmitFetcher="useSubmitFetcher",t.UseFetcher="useFetcher",t.useViewTransitionState="useViewTransitionState"})(hw||(hw={}));var uw;(function(t){t.UseFetcher="useFetcher",t.UseFetchers="useFetchers",t.UseScrollRestoration="useScrollRestoration"})(uw||(uw={}));function XC(t,e){let{target:n,replace:o,state:r,preventScrollReset:a,relative:s,viewTransition:i}=e===void 0?{}:e,l=Is(),c=Ao(),u=D1(t,{relative:s});return f.useCallback(d=>
139{if(UC(d,n)){d.preventDefault();let g=o!==void 0?o:ah(c)===ah(u);l(t,{replace:g,state:r,preventScrollReset:a,relative:s,viewTransition:i})}},[c,l,u,o,r,n,t,a,s,i])}function uN(t){let e=f.useRef(Fp(t)),n=f.useRef(!1),o=Ao(),r=f.useMemo(()=>YC(o.search,n.current?null:e.current),[o.search]),a=Is(),s=f.useCallback((i,l)=>{const c=Fp(typeof i=="function"?i(r):i);n.current=!0,a("?"+c,l)},[a,r]);return[r,s]}const eE=ym("group inline-flex items-center justify-center gap-2 whitespace-nowrap text-base font-semibold normal-case rounded-full transition-all duration-150 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0 border-2",{variants:{variant:{default:"bg-primary text-primary-foreground border-primary hover:bg-transparent hover:text-primary",destructive:"bg-destructive text-destructive-foreground border-destructive hover:bg-transparent hover:text-destructive",outline:"bg-transparent text-obsidian-900 border-obsidian/20 hover:border-obsidian/50 hover:text-obsidian-900",secondary:"bg-secondary text-secondary-foreground border-secondary hover:bg-transparent hover:text-foreground hover:border-foreground",link:"text-primary underline-offset-4 hover:underline border-transparent",wasabi:"bg-wasabi-500 text-obsidian-900 border-wasabi-500 hover:bg-wasabi-600 hover:border-wasabi-600",neutral:"bg-cloud text-obsidian-900 border-mushroom-200 hover:bg-mushroom-50 hover:border-mushroom-200",teal:"bg-teal-500 text-white border-teal-500 hover:bg-teal-600 hover:border-teal-600",subtle:"bg-transparent text-obsidian-900/70 border-transparent hover:border-obsidian-900/30 hover:text-obsidian-900","hero-light":"bg-white text-teal-700 border-white hover:bg-teal-50 hover:border-teal-50 hover:text-teal-700"},size:{default:"h-11 px-6 py-2",sm:"h-9 px-4 text-sm",lg:"h-13 px-8 text-base",xl:"h-14 px-10 text-lg",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),Kn=f.forwardRef(({className:t,variant:e,size:n,asChild:o=!1,...r},a)=>{const s=o?B3:"button";return h.jsx(s,{className:ve(eE({variant:e,size:n,className:t})),ref:a,...r})});Kn.displayName="Button";var zn=function(){return zn=Object.assign||function(e){for(var n,o=1,r=arguments.length;o<r;o++){n=arguments[o];for(var a in n)Object.prototype.hasOwnProperty.call(n,a)&&(e[a]=n[a])}return e},zn.apply(this,arguments)};function Ps(t,e){var n={};for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.indexOf(o)<0&&(n[o]=t[o]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,o=Object.getOwnPropertySymbols(t);r<o.length;r++)e.indexOf(o[r])<0&&Object.prototype.propertyIsEnumerable.call(t,o[r])&&(n[o[r]]=t[o[r]]);return n}function tE(t,e,n,o){function r(a){return a instanceof n?a:new n(function(s){s(a)})}return new(n||(n=Promise))(function(a,s){function i(u){try{c(o.next(u))}catch(d){s(d)}}function l(u){try{c(o.throw(u))}catch(d){s(d)}}function c(u){u.done?a(u.value):r(u.value).then(i,l)}c((o=o.apply(t,e||[])).next())})}function nE(t,e,n){if(n||arguments.length===2)for(var o=0,r=e.length,a;o<r;o++)(a||!(o in e))&&(a||(a=Array.prototype.slice.call(e,0,o)),a[o]=e[o]);return t.concat(a||Array.prototype.slice.call(e))}const oE=t=>t?(...e)=>t(...e):(...e)=>fetch(...e);class Lm extends Error{constructor(e,n="FunctionsError",o){super(e),this.name=n,this.context=o}toJSON(){return{name:this.name,message:this.message,context:this.context}}}class rE extends Lm{constructor(e){super("Failed to send a request to the Edge Function","FunctionsFetchError",e)}}class dw extends Lm{constructor(e){super("Relay Error invoking the Edge Function","FunctionsRelayError",e)}}class pw extends Lm{constructor(e){super("Edge Function returned a non-2xx status code","FunctionsHttpError",e)}}var Hp;(function(t){t.Any="any",t.ApNortheast1="ap-northeast-1",t.ApNortheast2="ap-northeast-2",t.ApSouth1="ap-south-1",t.ApSoutheast1="ap-southeast-1",t.ApSoutheast2="ap-southeast-2",t.CaCentral1="ca-central-1",t.EuCentral1="eu-central-1",t.EuWest1="eu-west-1",t.EuWest2="eu-west-2",t.EuWest3="eu-west-3",t.SaEast1="sa-east-1",t.UsEast1="us-east-1",t.UsWest1="us-west-1",t.UsWest2="us-west-2"})(Hp||(Hp={}));class aE{constructor(e,{headers:n={},customFetch:o,region:r=Hp.Any}={}){this.url=e,this.headers=n,this.region=r,this.fetch=oE(o)}setAuth(e){this.headers.Authorization=`Bearer ${e}`}invoke(e){return tE(this,arguments,void 0,function*(n,o={}){var r;let a,s;try{const{headers:i,method:l,body:c,signal:u,timeout:d}=o;let g={},{region:p}=o;p||(p=this.region);const v=new URL(`${this.url}/${n}`);p&&p!=="any"&&(g["x-region"]=p,v.searchParams.set("forceFunctionRegion",p));let y;const k=!!i&&Object.keys(i).some(T=>T.toLowerCase()==="content-type");c&&!k?typeof Blob<"u"&&c instanceof Blob||c instanceof ArrayBuffer?(g["Content-Type"]="application/octet-stream",y=c):typeof c=="string"?(g["Content-Type"]="text/plain",y=c):typeof FormData<"u"&&c instanceof FormData?y=c:(g["Content-Type"]="application/json",y=JSON.stringify(c)):c&&typeof c!="string"&&!(typeof Blob<"u"&&c instanceof Blob)&&!(c instanceof ArrayBuffer)&&!(typeof FormData<"u"&&c instanceof FormData)?y=JSON.stringify(c):y=c;let w=u;d&&(s=new AbortController,a=setTimeout(()=>s.abort(),d),u?(w=s.signal,u.addEventListener("abort",()=>s.abort())):w=s.signal);const m=yield this.fetch(v.toString(),{method:l||"POST",headers:Object.assign(Object.assign(Object.assign({},g),this.headers),i),body:y,signal:w}).catch(T=>{throw new rE(T)}),b=m.headers.get("x-relay-error");
139if(b&&b==="true")throw new dw(m);if(!m.ok)throw new pw(m);let x=((r=m.headers.get("Content-Type"))!==null&&r!==void 0?r:"text/plain").split(";")[0].trim(),S;return x==="application/json"?S=yield m.json():x==="application/octet-stream"||x==="application/pdf"?S=yield m.blob():x==="text/event-stream"?S=m:x==="multipart/form-data"?S=yield m.formData():S=yield m.text(),{data:S,error:null,response:m}}catch(i){return{data:null,error:i,response:i instanceof pw||i instanceof dw?i.context:void 0}}finally{a&&clearTimeout(a)}})}}const F1=3,gw=t=>Math.min(1e3*2**t,3e4),sE=[520,503],H1=["GET","HEAD","OPTIONS"];var mw=class extends Error{constructor(t){super(t.message),this.name="PostgrestError",this.details=t.details,this.hint=t.hint,this.code=t.code}toJSON(){return{name:this.name,message:this.message,details:this.details,hint:this.hint,code:this.code}}};function fw(t,e){return new Promise(n=>{if(e!=null&&e.aborted){n();return}const o=setTimeout(()=>{e==null||e.removeEventListener("abort",r),n()},t);function r(){clearTimeout(o),n()}e==null||e.addEventListener("abort",r)})}function iE(t,e,n,o){return!(!o||n>=F1||!H1.includes(t)||!sE.includes(e))}var lE=class{constructor(t){var e,n,o,r,a;this.shouldThrowOnError=!1,this.retryEnabled=!0,this.method=t.method,this.url=t.url,this.headers=new Headers(t.headers),this.schema=t.schema,this.body=t.body,this.shouldThrowOnError=(e=t.shouldThrowOnError)!==null&&e!==void 0?e:!1,this.signal=t.signal,this.isMaybeSingle=(n=t.isMaybeSingle)!==null&&n!==void 0?n:!1,this.shouldStripNulls=(o=t.shouldStripNulls)!==null&&o!==void 0?o:!1,this.urlLengthLimit=(r=t.urlLengthLimit)!==null&&r!==void 0?r:8e3,this.retryEnabled=(a=t.retry)!==null&&a!==void 0?a:!0,t.fetch?this.fetch=t.fetch:this.fetch=fetch}throwOnError(){return this.shouldThrowOnError=!0,this}stripNulls(){if(this.headers.get("Accept")==="text/csv")throw new Error("stripNulls() cannot be used with csv()");return this.shouldStripNulls=!0,this}setHeader(t,e){return this.headers=new Headers(this.headers),this.headers.set(t,e),this}retry(t){return this.retryEnabled=t,this}then(t,e){var n=this;if(this.schema===void 0||(["GET","HEAD"].includes(this.method)?this.headers.set("Accept-Profile",this.schema):this.headers.set("Content-Profile",this.schema)),this.method!=="GET"&&this.method!=="HEAD"&&this.headers.set("Content-Type","application/json"),this.shouldStripNulls){const s=this.headers.get("Accept");s==="application/vnd.pgrst.object+json"?this.headers.set("Accept","application/vnd.pgrst.object+json;nulls=stripped"):(!s||s==="application/json")&&this.headers.set("Accept","application/vnd.pgrst.array+json;nulls=stripped")}const o=this.fetch;let a=(async()=>{let s=0;for(;;){const c={};n.headers.forEach((d,g)=>{c[g]=d}),s>0&&(c["X-Retry-Count"]=String(s));let u;try{u=await o(n.url.toString(),{method:n.method,headers:c,body:JSON.stringify(n.body,(d,g)=>typeof g=="bigint"?g.toString():g),signal:n.signal})}catch(d){if((d==null?void 0:d.name)==="AbortError"||(d==null?void 0:d.code)==="ABORT_ERR"||!H1.includes(n.method))throw d;if(n.retryEnabled&&s<F1){const g=gw(s);s++,await fw(g,n.signal);continue}throw d}if(iE(n.method,u.status,s,n.retryEnabled)){var i,l;const d=(i=(l=u.headers)===null||l===void 0?void 0:l.get("Retry-After"))!==null&&i!==void 0?i:null,g=d!==null?Math.max(0,parseInt(d,10)||0)*1e3:gw(s);await u.text(),s++,await fw(g,n.signal);continue}return await n.processResponse(u)}})();return this.shouldThrowOnError||(a=a.catch(s=>{var i;let l="",c="",u="";const d=s==null?void 0:s.cause;if(d){var g,p,v,y;const m=(g=d==null?void 0:d.message)!==null&&g!==void 0?g:"",b=(p=d==null?void 0:d.code)!==null&&p!==void 0?p:"";l=`${(v=s==null?void 0:s.name)!==null&&v!==void 0?v:"FetchError"}: ${s==null?void 0:s.message}`,l+=`
140
141Caused by: ${(y=d==null?void 0:d.name)!==null&&y!==void 0?y:"Error"}: ${m}`,b&&(l+=` (${b})`),d!=null&&d.stack&&(l+=`
142${d.stack}`)}else{var k;l=(k=s==null?void 0:s.stack)!==null&&k!==void 0?k:""}const w=this.url.toString().length;return(s==null?void 0:s.name)==="AbortError"||(s==null?void 0:s.code)==="ABORT_ERR"?(u="",c="Request was aborted (timeout or manual cancellation)",w>this.urlLengthLimit&&(c+=`. Note: Your request URL is ${w} characters, which may exceed server limits. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [many IDs])), consider using an RPC function to pass values server-side.`)):((d==null?void 0:d.name)==="HeadersOverflowError"||(d==null?void 0:d.code)==="UND_ERR_HEADERS_OVERFLOW")&&(u="",c="HTTP headers exceeded server limits (typically 16KB)",w>this.urlLengthLimit&&(c+=`. Your request URL is ${w} characters. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [200+ IDs])), consider using an RPC function instead.`)),{success:!1,error:{message:`${(i=s==null?void 0:s.name)!==null&&i!==void 0?i:"FetchError"}: ${s==null?void 0:s.message}`,details:l,hint:c,code:u},data:null,count:null,status:0,statusText:""}}
142)),a.then(t,e)}async processResponse(t){var e=this;let n=null,o=null,r=null,a=t.status,s=t.statusText;if(t.ok){var i,l;if(e.method!=="HEAD"){var c;const g=await t.text();if(g!=="")if(e.headers.get("Accept")==="text/csv")o=g;else if(e.headers.get("Accept")&&(!((c=e.headers.get("Accept"))===null||c===void 0)&&c.includes("application/vnd.pgrst.plan+text")))o=g;else try{o=JSON.parse(g)}catch{if(n={message:g},o=null,e.shouldThrowOnError)throw new mw({message:g,details:"",hint:"",code:""})}}const u=(i=e.headers.get("Prefer"))===null||i===void 0?void 0:i.match(/count=(exact|planned|estimated)/),d=(l=t.headers.get("content-range"))===null||l===void 0?void 0:l.split("/");u&&d&&d.length>1&&(r=parseInt(d[1])),e.isMaybeSingle&&Array.isArray(o)&&(o.length>1?(n={code:"PGRST116",details:`Results contain ${o.length} rows, application/vnd.pgrst.object+json requires 1 row`,hint:null,message:"JSON object requested, multiple (or no) rows returned"},o=null,r=null,a=406,s="Not Acceptable"):o.length===1?o=o[0]:o=null)}else{const u=await t.text();try{n=JSON.parse(u),Array.isArray(n)&&t.status===404&&(o=[],n=null,a=200,s="OK")}catch{t.status===404&&u===""?(a=204,s="No Content"):n={message:u}}if(n&&e.shouldThrowOnError)throw new mw(n)}return{success:n===null,error:n,data:o,count:r,status:a,statusText:s}}returns(){return this}overrideTypes(){return this}},cE=class extends lE{throwOnError(){return super.throwOnError()}select(t){let e=!1;const n=(t??"*").split("").map(o=>/\s/.test(o)&&!e?"":(o==='"'&&(e=!e),o)).join("");return this.url.searchParams.set("select",n),this.headers.append("Prefer","return=representation"),this}order(t,{ascending:e=!0,nullsFirst:n,foreignTable:o,referencedTable:r=o}={}){const a=r?`${r}.order`:"order",s=this.url.searchParams.get(a);return this.url.searchParams.set(a,`${s?`${s},`:""}${t}.${e?"asc":"desc"}${n===void 0?"":n?".nullsfirst":".nullslast"}`),this}limit(t,{foreignTable:e,referencedTable:n=e}={}){const o=typeof n>"u"?"limit":`${n}.limit`;return this.url.searchParams.set(o,`${t}`),this}range(t,e,{foreignTable:n,referencedTable:o=n}={}){const r=typeof o>"u"?"offset":`${o}.offset`,a=typeof o>"u"?"limit":`${o}.limit`;return this.url.searchParams.set(r,`${t}`),this.url.searchParams.set(a,`${e-t+1}`),this}abortSignal(t){return this.signal=t,this}single(){return this.headers.set("Accept","application/vnd.pgrst.object+json"),this}maybeSingle(){return this.isMaybeSingle=!0,this}csv(){return this.headers.set("Accept","text/csv"),this}geojson(){return this.headers.set("Accept","application/geo+json"),this}explain({analyze:t=!1,verbose:e=!1,settings:n=!1,buffers:o=!1,wal:r=!1,format:a="text"}={}){var s;const i=[t?"analyze":null,e?"verbose":null,n?"settings":null,o?"buffers":null,r?"wal":null].filter(Boolean).join("|"),l=(s=this.headers.get("Accept"))!==null&&s!==void 0?s:"application/json";return this.headers.set("Accept",`application/vnd.pgrst.plan+${a}; for="${l}"; options=${i};`),a==="json"?this:this}rollback(){return this.headers.append("Prefer","tx=rollback"),this}returns(){return this}maxAffected(t){return this.headers.append("Prefer","handling=strict"),this.headers.append("Prefer",`max-affected=${t}`),this}};const yw=new RegExp("[,()]");var wa=class extends cE{throwOnError(){return super.throwOnError()}eq(t,e){return this.url.searchParams.append(t,`eq.${e}`),this}neq(t,e){return this.url.searchParams.append(t,`neq.${e}`),this}gt(t,e){return this.url.searchParams.append(t,`gt.${e}`),this}gte(t,e){return this.url.searchParams.append(t,`gte.${e}`),this}lt(t,e){return this.url.searchParams.append(t,`lt.${e}`),this}lte(t,e){return this.url.searchParams.append(t,`lte.${e}`),this}like(t,e){return this.url.searchParams.append(t,`like.${e}`),this}likeAllOf(t,e){return this.url.searchParams.append(t,`like(all).{${e.join(",")}}`),this}likeAnyOf(t,e){return this.url.searchParams.append(t,`like(any).{${e.join(",")}}`),this}ilike(t,e){return this.url.searchParams.append(t,`ilike.${e}`),this}ilikeAllOf(t,e){return this.url.searchParams.append(t,`ilike(all).{${e.join(",")}}`),this}ilikeAnyOf(t,e){return this.url.searchParams.append(t,`ilike(any).{${e.join(",")}}`),this}regexMatch(t,e){return this.url.searchParams.append(t,`match.${e}`),this}regexIMatch(t,e){return this.url.searchParams.append(t,`imatch.${e}`),this}is(t,e){return this.url.searchParams.append(t,`is.${e}`),this}isDistinct(t,e){return this.url.searchParams.append(t,`isdistinct.${e}`),this}in(t,e){const n=Array.from(new Set(e)).map(o=>
142typeof o=="string"&&yw.test(o)?`"${o}"`:`${o}`).join(",");return this.url.searchParams.append(t,`in.(${n})`),this}notIn(t,e){const n=Array.from(new Set(e)).map(o=>typeof o=="string"&&yw.test(o)?`"${o}"`:`${o}`).join(",");return this.url.searchParams.append(t,`not.in.(${n})`),this}contains(t,e){return typeof e=="string"?this.url.searchParams.append(t,`cs.${e}`):Array.isArray(e)?this.url.searchParams.append(t,`cs.{${e.join(",")}}`):this.url.searchParams.append(t,`cs.${JSON.stringify(e)}`),this}containedBy(t,e){return typeof e=="string"?this.url.searchParams.append(t,`cd.${e}`):Array.isArray(e)?this.url.searchParams.append(t,`cd.{${e.join(",")}}`):this.url.searchParams.append(t,`cd.${JSON.stringify(e)}`),this}rangeGt(t,e){return this.url.searchParams.append(t,`sr.${e}`),this}rangeGte(t,e){return this.url.searchParams.append(t,`nxl.${e}`),this}rangeLt(t,e){return this.url.searchParams.append(t,`sl.${e}`),this}rangeLte(t,e){return this.url.searchParams.append(t,`nxr.${e}`),this}rangeAdjacent(t,e){return this.url.searchParams.append(t,`adj.${e}`),this}overlaps(t,e){return typeof e=="string"?this.url.searchParams.append(t,`ov.${e}`):this.url.searchParams.append(t,`ov.{${e.join(",")}}`),this}textSearch(t,e,{config:n,type:o}={}){let r="";o==="plain"?r="pl":o==="phrase"?r="ph":o==="websearch"&&(r="w");const a=n===void 0?"":`(${n})`;return this.url.searchParams.append(t,`${r}fts${a}.${e}`),this}match(t){return Object.entries(t).filter(([e,n])=>n!==void 0).forEach(([e,n])=>{this.url.searchParams.append(e,`eq.${n}`)}),this}not(t,e,n){return this.url.searchParams.append(t,`not.${e}.${n}`),this}or(t,{foreignTable:e,referencedTable:n=e}={}){const o=n?`${n}.or`:"or";return this.url.searchParams.append(o,`(${t})`),this}filter(t,e,n){return this.url.searchParams.append(t,`${e}.${n}`),this}},hE=class{constructor(t,{headers:e={},schema:n,fetch:o,urlLengthLimit:r=8e3,retry:a}){this.url=t,this.headers=new Headers(e),this.schema=n,this.fetch=o,this.urlLengthLimit=r,this.retry=a}cloneRequestState(){return{url:new URL(this.url.toString()),headers:new Headers(this.headers)}}select(t,e){const{head:n=!1,count:o}=e??{},r=n?"HEAD":"GET";let a=!1;const s=(t??"*").split("").map(c=>/\s/.test(c)&&!a?"":(c==='"'&&(a=!a),c)).join(""),{url:i,headers:l}=this.cloneRequestState();return i.searchParams.set("select",s),o&&l.append("Prefer",`count=${o}`),new wa({method:r,url:i,headers:l,schema:this.schema,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}insert(t,{count:e,defaultToNull:n=!0}={}){var o;const r="POST",{url:a,headers:s}=this.cloneRequestState();if(e&&s.append("Prefer",`count=${e}`),n||s.append("Prefer","missing=default"),Array.isArray(t)){const i=t.reduce((l,c)=>l.concat(Object.keys(c)),[]);if(i.length>0){const l=[...new Set(i)].map(c=>`"${c}"`);a.searchParams.set("columns",l.join(","))}}return new wa({method:r,url:a,headers:s,schema:this.schema,body:t,fetch:(o=this.fetch)!==null&&o!==void 0?o:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}upsert(t,{onConflict:e,ignoreDuplicates:n=!1,count:o,defaultToNull:r=!0}={}){var a;const s="POST",{url:i,headers:l}=this.cloneRequestState();if(l.append("Prefer",`resolution=${n?"ignore":"merge"}-duplicates`),e!==void 0&&i.searchParams.set("on_conflict",e),o&&l.append("Prefer",`count=${o}`),r||l.append("Prefer","missing=default"),Array.isArray(t)){const c=t.reduce((u,d)=>u.concat(Object.keys(d)),[]);if(c.length>0){const u=[...new Set(c)].map(d=>`"${d}"`);i.searchParams.set("columns",u.join(","))}}return new wa({method:s,url:i,headers:l,schema:this.schema,body:t,fetch:(a=this.fetch)!==null&&a!==void 0?a:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}update(t,{count:e}={}){var n;const o="PATCH",{url:r,headers:a}=this.cloneRequestState();return e&&a.append("Prefer",`count=${e}`),new wa({method:o,url:r,headers:a,schema:this.schema,body:t,fetch:(n=this.fetch)!==null&&n!==void 0?n:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}delete({count:t}={}){var e;const n="DELETE",{url:o,headers:r}=this.cloneRequestState();return t&&r.append("Prefer",`count=${t}`),new wa({method:n,url:o,headers:r,schema:this.schema,fetch:(e=this.fetch)!==null&&e!==void 0?e:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};function Yi(t){"@babel/helpers - typeof";return Yi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Yi(t)}function uE(t,e){if(Yi(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var o=n.call(t,e||"default");
142if(Yi(o)!="object")return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function dE(t){var e=uE(t,"string");return Yi(e)=="symbol"?e:e+""}function pE(t,e,n){return(e=dE(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function ww(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(t,r).enumerable})),n.push.apply(n,o)}return n}function Jl(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?ww(Object(n),!0).forEach(function(o){pE(t,o,n[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):ww(Object(n)).forEach(function(o){Object.defineProperty(t,o,Object.getOwnPropertyDescriptor(n,o))})}return t}var gE=class z1{constructor(e,{headers:n={},schema:o,fetch:r,timeout:a,urlLengthLimit:s=8e3,retry:i}={}){this.url=e,this.headers=new Headers(n),this.schemaName=o,this.urlLengthLimit=s;const l=r??globalThis.fetch;a!==void 0&&a>0?this.fetch=(c,u)=>{const d=new AbortController,g=setTimeout(()=>d.abort(),a),p=u==null?void 0:u.signal;if(p){if(p.aborted)return clearTimeout(g),l(c,u);const v=()=>{clearTimeout(g),d.abort()};return p.addEventListener("abort",v,{once:!0}),l(c,Jl(Jl({},u),{},{signal:d.signal})).finally(()=>{clearTimeout(g),p.removeEventListener("abort",v)})}return l(c,Jl(Jl({},u),{},{signal:d.signal})).finally(()=>clearTimeout(g))}:this.fetch=l,this.retry=i}from(e){if(!e||typeof e!="string"||e.trim()==="")throw new Error("Invalid relation name: relation must be a non-empty string.");return new hE(new URL(`${this.url}/${e}`),{headers:new Headers(this.headers),schema:this.schemaName,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}schema(e){return new z1(this.url,{headers:this.headers,schema:e,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}rpc(e,n={},{head:o=!1,get:r=!1,count:a}={}){var s;let i;const l=new URL(`${this.url}/rpc/${e}`);let c;const u=p=>p!==null&&typeof p=="object"&&(!Array.isArray(p)||p.some(u)),d=o&&Object.values(n).some(u);d?(i="POST",c=n):o||r?(i=o?"HEAD":"GET",Object.entries(n).filter(([p,v])=>v!==void 0).map(([p,v])=>[p,Array.isArray(v)?`{${v.join(",")}}`:`${v}`]).forEach(([p,v])=>{l.searchParams.append(p,v)})):(i="POST",c=n);const g=new Headers(this.headers);return d?g.set("Prefer",a?`count=${a},return=minimal`:"return=minimal"):a&&g.set("Prefer",`count=${a}`),new wa({method:i,url:l,headers:g,schema:this.schemaName,body:c,fetch:(s=this.fetch)!==null&&s!==void 0?s:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};class mE{constructor(){}static detectEnvironment(){var e;if(typeof WebSocket<"u")return{type:"native",wsConstructor:WebSocket};const n=globalThis;if(typeof globalThis<"u"&&typeof n.WebSocket<"u")return{type:"native",wsConstructor:n.WebSocket};const o=typeof global<"u"?global:void 0;if(o&&typeof o.WebSocket<"u")return{type:"native",wsConstructor:o.WebSocket};if(typeof globalThis<"u"&&typeof n.WebSocketPair<"u"&&typeof globalThis.WebSocket>"u")return{type:"cloudflare",error:"Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.",workaround:"Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime."};if(typeof globalThis<"u"&&n.EdgeRuntime||typeof navigator<"u"&&(!((e=navigator.userAgent)===null||e===void 0)&&e.includes("Vercel-Edge")))return{type:"unsupported",error:"Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.",workaround:"Use serverless functions or a different deployment target for WebSocket functionality."};const r=globalThis.process;if(r){const a=r.versions;if(a&&a.node)return{type:"unsupported",error:"Node.js detected but native WebSocket not found.",workaround:"Ensure you are running Node.js 22+ or provide a WebSocket implementation via the transport option."}}return{type:"unsupported",error:"Unknown JavaScript runtime without WebSocket support.",workaround:"Ensure you're running in a supported environment (browser, Node.js, Deno) or provide a custom WebSocket implementation."}}static getWebSocketConstructor(){const e=this.detectEnvironment();if(e.wsConstructor)return e.wsConstructor;let n=e.error||"WebSocket not supported in this environment.";throw e.workaround&&(n+=`
143
144Suggested solution: ${e.workaround}`),new Error(n)}static isWebSocketSupported(){try{return this.detectEnvironment().type==="native"}catch{return!1}}}const fE="2.110.0",yE=`realtime-js/${fE}`,wE="1.0.0",$1="2.0.0",bE=$1,vE=1e4,kE=100,Fo={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},U1={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave",access_token:"access_token"},zp={connecting:"connecting",open:"open",closing:"closing",closed:"closed"};class xE{constructor(e){this.HEADER_LENGTH=1,this.USER_BROADCAST_PUSH_META_LENGTH=6,this.KINDS={userBroadcastPush:3,userBroadcast:4},this.BINARY_ENCODING=0,this.JSON_ENCODING=1,this.BROADCAST_EVENT="broadcast",this.allowedMetadataKeys=[],this.allowedMetadataKeys=e??[]}encode(e,n){if(e.event===this.BROADCAST_EVENT&&!(e.payload instanceof ArrayBuffer)&&typeof e.payload.event=="string")return n(this._binaryEncodeUserBroadcastPush(e));let o=[e.join_ref,e.ref,e.topic,e.event,e.payload];return n(JSON.stringify(o))}_binaryEncodeUserBroadcastPush(e){var n;return this._isArrayBuffer((n=e.payload)===null||n===void 0?void 0:n.payload)?this._encodeBinaryUserBroadcastPush(e):this._encodeJsonUserBroadcastPush(e)}_encodeBinaryUserBroadcastPush(e){var n,o;const r=(o=(n=e.payload)===null||n===void 0?void 0:n.payload)!==null&&o!==void 0?o:new ArrayBuffer(0);return this._encodeUserBroadcastPush(e,this.BINARY_ENCODING,r)}_encodeJsonUserBroadcastPush(e){var n,o;const r=(o=(n=e.payload)===null||n===void 0?void 0:n.payload)!==null&&o!==void 0?o:{},s=new TextEncoder().encode(JSON.stringify(r)).buffer;return this._encodeUserBroadcastPush(e,this.JSON_ENCODING,s)}_encodeUserBroadcastPush(e,n,o){var r,a;const s=e.topic,i=(r=e.ref)!==null&&r!==void 0?r:"",l=(a=e.join_ref)!==null&&a!==void 0?a:"",c=e.payload.event,u=this.allowedMetadataKeys?this._pick(e.payload,this.allowedMetadataKeys):{},d=Object.keys(u).length===0?"":JSON.stringify(u);if(l.length>255)throw new Error(`joinRef length ${l.length} exceeds maximum of 255`);if(i.length>255)throw new Error(`ref length ${i.length} exceeds maximum of 255`);if(s.length>255)throw new Error(`topic length ${s.length} exceeds maximum of 255`);if(c.length>255)throw new Error(`userEvent length ${c.length} exceeds maximum of 255`);if(d.length>255)throw new Error(`metadata length ${d.length} exceeds maximum of 255`);const g=this.USER_BROADCAST_PUSH_META_LENGTH+l.length+i.length+s.length+c.length+d.length,p=new ArrayBuffer(this.HEADER_LENGTH+g);let v=new DataView(p),y=0;v.setUint8(y++,this.KINDS.userBroadcastPush),v.setUint8(y++,l.length),v.setUint8(y++,i.length),v.setUint8(y++,s.length),v.setUint8(y++,c.length),v.setUint8(y++,d.length),v.setUint8(y++,n),Array.from(l,w=>
144v.setUint8(y++,w.charCodeAt(0))),Array.from(i,w=>v.setUint8(y++,w.charCodeAt(0))),Array.from(s,w=>v.setUint8(y++,w.charCodeAt(0))),Array.from(c,w=>v.setUint8(y++,w.charCodeAt(0))),Array.from(d,w=>v.setUint8(y++,w.charCodeAt(0)));var k=new Uint8Array(p.byteLength+o.byteLength);return k.set(new Uint8Array(p),0),k.set(new Uint8Array(o),p.byteLength),k.buffer}decode(e,n){if(this._isArrayBuffer(e)){let o=this._binaryDecode(e);return n(o)}if(typeof e=="string"){const o=JSON.parse(e),[r,a,s,i,l]=o;return n({join_ref:r,ref:a,topic:s,event:i,payload:l})}return n({})}_binaryDecode(e){const n=new DataView(e),o=n.getUint8(0),r=new TextDecoder;switch(o){case this.KINDS.userBroadcast:return this._decodeUserBroadcast(e,n,r)}}_decodeUserBroadcast(e,n,o){const r=n.getUint8(1),a=n.getUint8(2),s=n.getUint8(3),i=n.getUint8(4);let l=this.HEADER_LENGTH+4;const c=o.decode(e.slice(l,l+r));l=l+r;const u=o.decode(e.slice(l,l+a));l=l+a;const d=o.decode(e.slice(l,l+s));l=l+s;const g=e.slice(l,e.byteLength),p=i===this.JSON_ENCODING?JSON.parse(o.decode(g)):g,v={type:this.BROADCAST_EVENT,event:u,payload:p};return s>0&&(v.meta=JSON.parse(d)),{join_ref:null,ref:null,topic:c,event:this.BROADCAST_EVENT,payload:v}}_isArrayBuffer(e){var n;return e instanceof ArrayBuffer||((n=e==null?void 0:e.constructor)===null||n===void 0?void 0:n.name)==="ArrayBuffer"}_pick(e,n){return!e||typeof e!="object"?{}:Object.fromEntries(Object.entries(e).filter(([o])=>n.includes(o)))}}var Pe;(function(t){t.abstime="abstime",t.bool="bool",t.date="date",t.daterange="daterange",t.float4="float4",t.float8="float8",t.int2="int2",t.int4="int4",t.int4range="int4range",t.int8="int8",t.int8range="int8range",t.json="json",t.jsonb="jsonb",t.money="money",t.numeric="numeric",t.oid="oid",t.reltime="reltime",t.text="text",t.time="time",t.timestamp="timestamp",t.timestamptz="timestamptz",t.timetz="timetz",t.tsrange="tsrange",t.tstzrange="tstzrange"})(Pe||(Pe={}));const bw=(t,e,n={})=>{var o;const r=(o=n.skipTypes)!==null&&o!==void 0?o:[];return e?Object.keys(e).reduce((a,s)=>(a[s]=SE(s,t,e,r),a),{}):{}},SE=(t,e,n,o)=>{const r=e.find(i=>i.name===t),a=r==null?void 0:r.type,s=n[t];return a&&!o.includes(a)?Y1(a,s):$p(s)},Y1=(t,e)=>{if(t.charAt(0)==="_"){const n=t.slice(1,t.length);return CE(e,n)}switch(t){case Pe.bool:return TE(e);case Pe.float4:case Pe.float8:case Pe.int2:case Pe.int4:case Pe.int8:case Pe.numeric:case Pe.oid:return AE(e);case Pe.json:case Pe.jsonb:return _E(e);case Pe.timestamp:return EE(e);case Pe.abstime:case Pe.date:case Pe.daterange:case Pe.int4range:case Pe.int8range:case Pe.money:case Pe.reltime:case Pe.text:case Pe.time:case Pe.timestamptz:case Pe.timetz:case Pe.tsrange:case Pe.tstzrange:return $p(e);default:return $p(e)}},$p=t=>t,TE=t=>{switch(t){case"t":return!0;case"f":return!1;default:return t}},AE=t=>{if(typeof t=="string"){const e=parseFloat(t);if(!Number.isNaN(e))return e}return t},_E=t=>{if(typeof t=="string")try{return JSON.parse(t)}catch{return t}return t},CE=(t,e)=>{if(typeof t!="string")return t;const n=t.length-1,o=t[n];if(t[0]==="{"&&o==="}"){let a;const s=t.slice(1,n);try{a=JSON.parse("["+s+"]")}catch{a=s?s.split(","):[]}return a.map(i=>Y1(e,i))}return t},EE=t=>typeof t=="string"?t.replace(" ","T"):t,V1=t=>{const e=new URL(t);return e.protocol=e.protocol.replace(/^ws/i,"http"),e.pathname=e.pathname.replace(/\/+$/,"").replace(/\/socket\/websocket$/i,"").replace(/\/socket$/i,"").replace(/\/websocket$/i,""),e.pathname===""||e.pathname==="/"?e.pathname="/api/broadcast":e.pathname=e.pathname+"/api/broadcast",e.href};var bi=t=>typeof t=="function"?t:function(){return t},IE=typeof self<"u"?self:null,ba=typeof window<"u"?window:null,Ln=IE||ba||globalThis,PE="2.0.0",jE=1e4,BE=1e3,Fn={connecting:0,open:1,closing:2,closed:3},At={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},io={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave"},Up={longpoll:"longpoll",websocket:"websocket"},OE={complete:4},Yp="base64url.bearer.phx.",Ql=class{constructor(t,e,n,o){this.channel=t,this.event=e,this.payload=n||function(){return{}},this.receivedResp=null,this.timeout=o,this.timeoutTimer=null,this.recHo
vendor: 8,700 bytes, line 144
144oks=[],this.sent=!1,this.ref=void 0}resend(t){this.timeout=t,this.reset(),this.send()}send(){this.hasReceived("timeout")||(this.startTimeout(),this.sent=!0,this.channel.socket.push({topic:this.channel.topic,event:this.event,payload:this.payload(),ref:this.ref,join_ref:this.channel.joinRef()}))}receive(t,e){return this.hasReceived(t)&&e(this.receivedResp.response),this.recHooks.push({status:t,callback:e}),this}reset(){this.cancelRefEvent(),this.ref=null,this.refEvent=null,this.receivedResp=null,this.sent=!1}destroy(){this.cancelRefEvent(),this.cancelTimeout()}matchReceive({status:t,response:e,_ref:n}){this.recHooks.filter(o=>o.status===t).forEach(o=>o.callback(e))}cancelRefEvent(){this.refEvent&&this.channel.off(this.refEvent)}cancelTimeout(){clearTimeout(this.timeoutTimer),this.timeoutTimer=null}startTimeout(){this.timeoutTimer&&this.cancelTimeout(),this.ref=this.channel.socket.makeRef(),this.refEvent=this.channel.replyEventName(this.ref),this.channel.on(this.refEvent,t=>{this.cancelRefEvent(),this.cancelTimeout(),this.receivedResp=t,this.matchReceive(t)}),this.timeoutTimer=setTimeout(()=>{this.trigger("timeout",{})},this.timeout)}hasReceived(t){return this.receivedResp&&this.receivedResp.status===t}trigger(t,e){this.channel.trigger(this.refEvent,{status:t,response:e})}},G1=class{constructor(t,e){this.callback=t,this.timerCalc=e,this.timer=void 0,this.tries=0}reset(){this.tries=0,clearTimeout(this.timer)}scheduleTimeout(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tries=this.tries+1,this.callback()},this.timerCalc(this.tries+1))}},ME=class{constructor(t,e,n){this.state=At.closed,this.topic=t,this.params=bi(e||{}),this.socket=n,this.bindings=[],this.bindingRef=0,this.timeout=this.socket.timeout,this.joinedOnce=!1,this.joinPush=new Ql(this,io.join,this.params,this.timeout),this.pushBuffer=[],this.stateChangeRefs=[],this.rejoinTimer=new G1(()=>{this.socket.isConnected()&&this.rejoin()},this.socket.rejoinAfterMs),this.stateChangeRefs.push(this.socket.onError(()=>this.rejoinTimer.reset())),this.stateChangeRefs.push(this.socket.onOpen(()=>{this.rejoinTimer.reset(),this.isErrored()&&this.rejoin()})),this.joinPush.receive("ok",()=>{this.state=At.joined,this.rejoinTimer.reset(),this.pushBuffer.forEach(o=>o.send()),this.pushBuffer=[]}),this.joinPush.receive("error",o=>{this.state=At.errored,this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,o),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.onClose(()=>{this.rejoinTimer.reset(),this.socket.hasLogger()&&this.socket.log("channel",`close ${this.topic}`),this.state=At.closed,this.socket.remove(this)}),this.onError(o=>{this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,o),this.isJoining()&&this.joinPush.reset(),this.state=At.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.joinPush.receive("timeout",()=>{this.socket.hasLogger()&&this.socket.log("channel",`timeout ${this.topic}`,this.joinPush.timeout),new Ql(this,io.leave,bi({}),this.timeout).send(),this.state=At.errored,this.joinPush.reset(),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout()}),this.on(io.reply,(o,r)=>{this.trigger(this.replyEventName(r),o)})}join(t=this.timeout){if(this.joinedOnce)throw new Error("tried to join multiple times. 'join' can only be called a single time per channel instance");return this.timeout=t,this.joinedOnce=!0,this.rejoin(),this.joinPush}teardown(){this.pushBuffer.forEach(t=>t.destroy()),this.pushBuffer=[],this.rejoinTimer.reset(),this.joinPush.destroy(),this.state=At.closed,this.bindings=[]}onClose(t){this.on(io.close,t)}onError(t){return this.on(io.error,e=>t(e))}on(t,e){let n=this.bindingRef++;return this.bindings.push({event:t,ref:n,callback:e}),n}off(t,e){this.bindings=this.bindings.filter(n=>!(n.event===t&&(typeof e>"u"||e===n.ref)))}canPush(){return this.socket.isConnected()&&this.isJoined()}push(t,e,n=this.timeout){if(e=e||{},!this.joinedOnce)throw new Error(`tried to push '${t}' to '${this.topic}' before joining. Use channel.join() before pushing events`);let o=new Ql(this,t,function(){return e},n);return this.canPush()?o.send():(o.startTimeout(),this.pushBuffer.push(o)),o}leave(t=this.timeout){this.rejoinTimer.reset(),this.joinPush.cancelTimeout(),this.state=At.leaving;let e=()=>{this.socket.hasLogger()&&this.socket.log("channel",`leave ${this.topic}`),this.trigger(io.close,"leave")},n=new Ql(this,io.leave,bi({}),t);return n.receive("ok",()=>e()).receive("timeout",()=>e()),n.send(),this.canPush()||n.trigger("ok",{}),n}onMessage(t,e,n){return e}filterBindings(t,e,n){return!0}isMember(t,e,n,o){return this.topic!==t?!1:o&&o!==this.joinRef()?(this.socket.hasLogger()&&this.socket.log("channel","dropping outdated message",{topic:t,event:e,payload:n,joinRef:o}),!1):!0}joinRef(){return this.joinPush.ref}rejoin(t=this.timeout){this.isLeaving()||(this.socket.leaveOpenTopic(this.topic),this.state=At.joining,this.joinPush.resend(t))}trigger(t,e,n,o){let r=this.onMessage(t,e,n,o);if(e&&!r)throw new Error("channel onMessage callbacks must return the payload, modified or unmodified");let a=this.bindings.filter(s=>s.event===t&&this.filterBindings(s,e,n));for(let s=0;s<a.length;s++)a[s].callback(r,n,o||this.joinRef())}replyEventName(t){return`chan_reply_${t}`}isClosed(){return this.state===At.closed}isErrored(){return this.state===At.errored}isJoined(){return this.state===At.joined}isJoining(){return this.state===At.joining}isLeaving(){return this.state===At.leaving}},ih=class{static request(t,e,n,o,r,a,s){if(Ln.XDomainRequest){let i=new Ln.XDomainRequest;return this.xdomainRequest(i,t,e,o,r,a,s)}else if(Ln.XMLHttpRequest){let i=new Ln.XMLHttpRequest;return this.xhrRequest(i,t,e,n,o,r,a,s)}else{if(Ln.fetch&&Ln.AbortController)return this.fetchRequest(t,e,n,o,r,a,s);throw new Error("No suitable XMLHttpRequest implementation found")}}static fetchRequest(t,e,n,o,r,a,s){let i={method:t,headers:n,body:o},l=null;return r&&(l=new AbortController,setTimeout(()=>l.abort(),r),i.signal=l.signal),Ln.fetch(e,i).then(c=>c.text()).then(c=>this.parseJSON(c)).then(c=>s&&s(c)).catch(c=>{c.name==="AbortError"&&a?a():s&&s(null)}),l}static xdomainRequest(t,e,n,o,r,a,s){return t.timeout=r,t.open(e,n),t.onload=()=>{let i=this.parseJSON(t.responseText);s&&s(i)},a&&(t.ontimeout=a),t.onprogress=()=>{},t.send(o),t}static xhrRequest(t,e,n,o,r,a,s,i){t.open(e,n,!0),t.timeout=a;for(let[l,c]of Object.entries(o))t.setRequestHeader(l,c);return t.onerror=()=>i&&i(null),t.onreadystatechange=()=>{if(t.readyState===OE.complete&&i){let l=this.parseJSON(t.responseText);i(l)}},s&&(t.ontimeout=s),t.send(r),t}static parseJSON(t){if(!t||t==="")return null;try{return JSON.parse(t)}catch{return console&&console.log("failed to parse JSON response",t),null}}static serialize(t,e){let n=[];for(var o in t){if(!Object.prototype.hasOwnProperty.call(t,o))continue;let r=e?`${e}[${o}]`:o,a=t[o];typeof a=="object"?n.push(this.serialize(a,r)):n.push(encodeURIComponent(r)+"="+encodeURIComponent(a))}return n.join("&")}static appendParams(t,e){if(Object.keys(e).length===0)return t;let n=t.match(/\?/)?"&":"?";return`${t}${n}${this.serialize(e)}`}},RE=t=>{let e="",n=new Uint8Array(t),o=n.byteLength;for(let r=0;r<o;r++)e+=String.fromCharCode(n[r]);return btoa(e)},ua=class{constructor(t,e){e&&e.length===2&&e[1].startsWith(Yp)&&(this.authToken=atob(e[1].slice(Yp.length))),this.endPoint=null,this.token=null,this.skipHeartbeat=!0,this.reqs=new Set,this.awaitingBatchAck=!1,this.currentBatch=null,this.currentBatchTimer=null,this.batchBuffer=[],this.onopen=function(){},this.onerror=function(){},this.onmessage=function(){},this.onclose=function(){},this.pollEndpoint=this.normalizeEndpoint(t),this.readyState=Fn.connecting,setTimeout(()=>this.poll(),0)}normalizeEndpoint(t){return t.replace("ws://","http://").replace("wss://","https://").replace(new RegExp("(.*)/"+Up.websocket),"$1/"+Up.longpoll)}endpointURL(){return ih.appendParams(this.pollEndpoint,{token:this.token})}closeAndRetry(t,e,n){this.close(t,e,n),this.readyState=Fn.connecting}ontimeout(){this.onerror("timeout"),this.closeAndRetry(1005,"timeout",!1)}isActive(){return this.readyState===Fn.open||this.readyState===Fn.connecting}poll(){const t={Accept:"application/json"};this.authToken&&(t["X-Phoenix-AuthToken"]=this.authToken),this.ajax("GET",t,null,()=>this.ontimeout(),e=>{if(e){var{status:n,token:o,messages:r}=e;if(n===410&&this.token!==null){this.onerror(410),this.closeAndRetry(3410,"session_gone",!1);return}this.token=o}else n=0;switch(n){case 200:r.forEach(a=>{setTimeout(()=>this.onmessage({data:a}),0)}),this.poll();break;case 204:this.poll();break;case 410:this.readyState=Fn.open,this.onopen({}),this.poll();break;
144case 403:this.onerror(403),this.close(1008,"forbidden",!1);break;case 0:case 500:this.onerror(500),this.closeAndRetry(1011,"internal server error",500);break;default:throw new Error(`unhandled poll status ${n}`)}})}send(t){typeof t!="string"&&(t=RE(t)),this.currentBatch?this.currentBatch.push(t):this.awaitingBatchAck?this.batchBuffer.push(t):(this.currentBatch=[t],this.currentBatchTimer=setTimeout(()=>{this.batchSend(this.currentBatch),this.currentBatch=null},0))}batchSend(t){this.awaitingBatchAck=!0,this.ajax("POST",{"Content-Type":"application/x-ndjson"},t.join(`
145`),()=>this.onerror("timeout"),e=>{this.awaitingBatchAck=!1,!e||e.status!==200?(this.onerror(e&&e.status),this.closeAndRetry(1011,"internal server error",!1)):this.batchBuffer.length>0&&(this.batchSend(this.batchBuffer),this.batchBuffer=[])})}close(t,e,n){for(let r of this.reqs)r.abort();this.readyState=Fn.closed;let o=Object.assign({code:1e3,reason:void 0,wasClean:!0},{code:t,reason:e,wasClean:n});this.batchBuffer=[],clearTimeout(this.currentBatchTimer),this.currentBatchTimer=null,typeof CloseEvent<"u"?this.onclose(new CloseEvent("close",o)):this.onclose(o)}ajax(t,e,n,o,r){let a,s=()=>{this.reqs.delete(a),o()};a=ih.request(t,this.endpointURL(),e,n,this.timeout,s,i=>{this.reqs.delete(a),this.isActive()&&r(i)}),this.reqs.add(a)}},NE=class ni{constructor(e,n={}){let o=n.events||{state:"presence_state",diff:"presence_diff"};this.state={},this.pendingDiffs=[],this.channel=e,this.joinRef=null,this.caller={onJoin:function(){},onLeave:function(){},onSync:function(){}},this.channel.on(o.state,r=>{let{onJoin:a,onLeave:s,onSync:i}=this.caller;this.joinRef=this.channel.joinRef(),this.state=ni.syncState(this.state,r,a,s),this.pendingDiffs.forEach(l=>{this.state=ni.syncDiff(this.state,l,a,s)}),this.pendingDiffs=[],i()}),this.channel.on(o.diff,r=>{let{onJoin:a,onLeave:s,onSync:i}=this.caller;this.inPendingSyncState()?this.pendingDiffs.push(r):(this.state=ni.syncDiff(this.state,r,a,s),i())})}onJoin(e){this.caller.onJoin=e}onLeave(e){this.caller.onLeave=e}onSync(e){this.caller.onSync=e}list(e){return ni.list(this.state,e)}inPendingSyncState(){return!this.joinRef||this.joinRef!==this.channel.joinRef()}static syncState(e,n,o,r){let a=this.clone(e),s={},i={};return this.map(a,(l,c)=>{n[l]||(i[l]=c)}),this.map(n,(l,c)=>{let u=a[l];if(u){let d=c.metas.map(y=>y.phx_ref),g=u.metas.map(y=>y.phx_ref),p=c.metas.filter(y=>g.indexOf(y.phx_ref)<0),v=u.metas.filter(y=>d.indexOf(y.phx_ref)<0);p.length>0&&(s[l]=c,s[l].metas=p),v.length>0&&(i[l]=this.clone(u),i[l].metas=v)}else s[l]=c}),this.syncDiff(a,{joins:s,leaves:i},o,r)}static syncDiff(e,n,o,r){let{joins:a,leaves:s}=this.clone(n);return o||(o=function(){}),r||(r=function(){}),this.map(a,(i,l)=>{let c=e[i];if(e[i]=this.clone(l),c){let u=e[i].metas.map(g=>g.phx_ref),d=c.metas.filter(g=>u.indexOf(g.phx_ref)<0);e[i].metas.unshift(...d)}o(i,c,l)}),this.map(s,(i,l)=>{let c=e[i];if(!c)return;let u=l.metas.map(d=>d.phx_ref);c.metas=c.metas.filter(d=>u.indexOf(d.phx_ref)<0),r(i,c,l),c.metas.length===0&&delete e[i]}),e}static list(e,n){return n||(n=function(o,r){return r}),this.map(e,(o,r)=>n(o,r))}static map(e,n){return Object.getOwnPropertyNames(e).map(o=>n(o,e[o]))}static clone(e){return JSON.parse(JSON.stringify(e))}},Zl={HEADER_LENGTH:1,META_LENGTH:4,KINDS:{push:0,reply:1,broadcast:2},encode(t,e){if(t.payload.constructor===ArrayBuffer)return e(this.binaryEncode(t));{let n=[t.join_ref,t.ref,t.topic,t.event,t.payload];return e(JSON.stringify(n))}},decode(t,e){if(t.constructor===ArrayBuffer)return e(this.binaryDecode(t));{let[n,o,r,a,s]=JSON.parse(t);return e({join_ref:n,ref:o,topic:r,event:a,payload:s})}},binaryEncode(t){let{join_ref:e,ref:n,event:o,topic:r,payload:a}=t,s=this.META_LENGTH+e.length+n.length+r.length+o.length,i=new ArrayBuffer(this.HEADER_LENGTH+s),l=new DataView(i),c=0;l.setUint8(c++,this.KINDS.push),l.setUint8(c++,e.length),l.setUint8(c++,n.length),l.setUint8(c++,r.length),l.setUint8(c++,o.length),Array.from(e,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(n,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(r,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(o,d=>l.setUint8(c++,d.charCodeAt(0)));var u=new Uint8Array(i.byteLength+a.byteLength);return u.set(new Uint8Array(i),0),u.set(new Uint8Array(a),i.byteLength),u.buffer},binaryDecode(t){let e=new DataView(t),n=e.getUint8(0),o=new TextDecoder;switch(n){case this.KINDS.push:return this.decodePush(t,e,o);case this.KINDS.reply:return this.decodeReply(t,e,o);case this.KINDS.broadcast:return this.decodeBroadcast(t,e,o)}},decodePush(t,e,n){let o=e.getUint8(1),r=e.getUint8(2),a=e.getUint8(3),s=this.HEADER_LENGTH+this.META_LENGTH-1,i=n.decode(t.slice(s,s+o));s=s+o;let l=n.decode(t.slice(s,s+r));s=s+r;let c=n.decode(t.slice(s,s+a));s=s+a;let u=t.slice(s,t.byteLength);return{join_ref:i,ref:null,topic:l,event:c,payload:u}},decodeReply(t,e,n){let o=e.getUint8(1),r=e.getUint8(2),a=e.getUint8(3),s=e.getUint8(4),i=this.HEADER_LENGTH+this.META_LENGTH,l=n.decode(t.slice(i,i+o));i=i+o;let c=n.decode(t.slice(i,i+r));i=i+r;let u=n.decode(t.slice(i,i+a));i=i+a;let d=n.decode(t.slice(i,i+s));i=i+s;let g=t.slice(i,t.byteLength),p={status:d,response:g};return{join_ref:l,ref:c,topic:u,event:io.reply,payload:p}},decodeBroadcast(t,e,n){let o=e.getUint8(1),r=e.getUint8(2),a=this.HEADER_LENGTH+2,s=n.decode(t.slice(a,a+o));a=a+o;let i=n.decode(t.slice(a,a+r));a=a+r;let l=t.slice(a,t.byteLength);return{join_ref:null,ref:null,topic:s,event:i,payload:l}}},LE=class{constructor(t,e={}){this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.channels=[],this.sendBuffer=[],this.ref=0,this.fallbackRef=null,this.timeout=e.timeout||jE,this.transport=e.transport||Ln.WebSocket||ua,this.conn=void 0,this.primaryPassedHealthCheck=!1,this.longPollFallbackMs=e.longPollFallbackMs,this.fallbackTimer=null;let n=null;try{n=Ln&&Ln.sessionStorage}catch{}this.sessionStore=e.sessionStorage||n,this.establishedConnections=0,this.defaultEncoder=Zl.encode.bind(Zl),this.defaultDecoder=Zl.decode.bind(Zl),this.closeWasClean=!0,this.disconnecting=!1,this.binaryType=e.binaryType||"arraybuffer",this.connectClock=1,this.pageHidden=!1,this.encode=void 0,this.decode=void 0,this.transport!==ua?(this.encode=e.encode||this.defaultEncoder,this.decode=e.decode||this.defaultDecoder):(this.encode=this.defaultEncoder,this.decode=this.defaultDecoder);let o=null;ba&&ba.addEventListener&&(ba.addEventListener("pagehide",r=>{this.conn&&(this.disconnect(),o=this.connectClock)}),ba.addEventListener("pageshow",r=>{o===this.connectClock&&(o=null,this.connect())}),ba.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"?this.pageHidden=!0:(this.pageHidden=!1,!this.isConnected()&&!this.closeWasClean&&this.teardown(()=>this.connect()))})),this.heartbeatIntervalMs=e.heartbeatIntervalMs||3e4,this.autoSendHeartbeat=e.autoSendHeartbeat??!0,this.heartbeatCallback=e.heartbeatCallback??(()=>{}),this.rejoinAfterMs=r=>e.rejoinAfterMs?e.rejoinAfterMs(r):[1e3,2e3,5e3][r-1]||1e4,this.reconnectAfterMs=r=>e.reconnectAfterMs?e.reconnectAfterMs(r):[10,50,100,150,200,250,500,1e3,2e3][r-1]||5e3,this.logger=e.logger||null,!this.logger&&e.debug&&(this.logger=(r,a,s)=>{console.log(`${r}: ${a}`,s)}),this.longpollerTimeout=e.longpollerTimeout||2e4,this.params=bi(e.params||{}),this.endPoint=`${t}/${Up.websocket}`,this.vsn=e.vsn||PE,this.heartbeatTimeoutTimer=null,this.heartbeatTimer=null,this.heartbeatSentAt=null,this.pendingHeartbeatRef=null,this.reconnectTimer=new G1(()=>
145{if(this.pageHidden){this.log("Not reconnecting as page is hidden!"),this.teardown();return}this.teardown(async()=>{e.beforeReconnect&&await e.beforeReconnect(),this.connect()})},this.reconnectAfterMs),this.authToken=e.authToken}getLongPollTransport(){return ua}replaceTransport(t){this.connectClock++,this.closeWasClean=!0,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.conn&&(this.conn.close(),this.conn=null),this.transport=t}protocol(){return location.protocol.match(/^https/)?"wss":"ws"}endPointURL(){let t=ih.appendParams(ih.appendParams(this.endPoint,this.params()),{vsn:this.vsn});return t.charAt(0)!=="/"?t:t.charAt(1)==="/"?`${this.protocol()}:${t}`:`${this.protocol()}://${location.host}${t}`}disconnect(t,e,n){this.connectClock++,this.disconnecting=!0,this.closeWasClean=!0,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.teardown(()=>{this.disconnecting=!1,t&&t()},e,n)}connect(t){t&&(console&&console.log("passing params to connect is deprecated. Instead pass :params to the Socket constructor"),this.params=bi(t)),!(this.conn&&!this.disconnecting)&&(this.longPollFallbackMs&&this.transport!==ua?this.connectWithF
vendor: 4,379 bytes, line 145
145allback(ua,this.longPollFallbackMs):this.transportConnect())}log(t,e,n){this.logger&&this.logger(t,e,n)}hasLogger(){return this.logger!==null}onOpen(t){let e=this.makeRef();return this.stateChangeCallbacks.open.push([e,t]),e}onClose(t){let e=this.makeRef();return this.stateChangeCallbacks.close.push([e,t]),e}onError(t){let e=this.makeRef();return this.stateChangeCallbacks.error.push([e,t]),e}onMessage(t){let e=this.makeRef();return this.stateChangeCallbacks.message.push([e,t]),e}onHeartbeat(t){this.heartbeatCallback=t}ping(t){if(!this.isConnected())return!1;let e=this.makeRef(),n=Date.now();this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:e});let o=this.onMessage(r=>{r.ref===e&&(this.off([o]),t(Date.now()-n))});return!0}transportName(t){switch(t){case ua:return"LongPoll";default:return t.name}}transportConnect(){this.connectClock++,this.closeWasClean=!1;let t;this.authToken&&(t=["phoenix",`${Yp}${btoa(this.authToken).replace(/=/g,"")}`]),this.conn=new this.transport(this.endPointURL(),t),this.conn.binaryType=this.binaryType,this.conn.timeout=this.longpollerTimeout,this.conn.onopen=()=>this.onConnOpen(),this.conn.onerror=e=>this.onConnError(e),this.conn.onmessage=e=>this.onConnMessage(e),this.conn.onclose=e=>this.onConnClose(e)}getSession(t){return this.sessionStore&&this.sessionStore.getItem(t)}storeSession(t,e){this.sessionStore&&this.sessionStore.setItem(t,e)}connectWithFallback(t,e=2500){clearTimeout(this.fallbackTimer);let n=!1,o=!0,r,a,s=this.transportName(t),i=l=>{this.log("transport",`falling back to ${s}...`,l),this.off([r,a]),o=!1,this.replaceTransport(t),this.transportConnect()};if(this.getSession(`phx:fallback:${s}`))return i("memorized");this.fallbackTimer=setTimeout(i,e),a=this.onError(l=>{this.log("transport","error",l),o&&!n&&(clearTimeout(this.fallbackTimer),i(l))}),this.fallbackRef&&this.off([this.fallbackRef]),this.fallbackRef=this.onOpen(()=>{if(n=!0,!o){let l=this.transportName(t);return this.primaryPassedHealthCheck||this.storeSession(`phx:fallback:${l}`,"true"),this.log("transport",`established ${l} fallback`)}clearTimeout(this.fallbackTimer),this.fallbackTimer=setTimeout(i,e),this.ping(l=>{this.log("transport","connected to primary after",l),this.primaryPassedHealthCheck=!0,clearTimeout(this.fallbackTimer)})}),this.transportConnect()}clearHeartbeats(){clearTimeout(this.heartbeatTimer),clearTimeout(this.heartbeatTimeoutTimer)}onConnOpen(){this.hasLogger()&&this.log("transport",`connected to ${this.endPointURL()}`),this.closeWasClean=!1,this.disconnecting=!1,this.establishedConnections++,this.flushSendBuffer(),this.reconnectTimer.reset(),this.autoSendHeartbeat&&this.resetHeartbeat(),this.triggerStateCallbacks("open")}heartbeatTimeout(){if(this.pendingHeartbeatRef){this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.hasLogger()&&this.log("transport","heartbeat timeout. Attempting to re-establish connection");try{this.heartbeatCallback("timeout")}catch(t){this.log("error","error in heartbeat callback",t)}this.triggerChanError(new Error("heartbeat timeout")),this.closeWasClean=!1,this.teardown(()=>this.reconnectTimer.scheduleTimeout(),BE,"heartbeat timeout")}}resetHeartbeat(){this.conn&&this.conn.skipHeartbeat||(this.pendingHeartbeatRef=null,this.clearHeartbeats(),this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs))}teardown(t,e,n){if(!this.conn)return t&&t();const o=this.conn;this.waitForBufferDone(o,()=>{e?o.close(e,n||""):o.close(),this.waitForSocketClosed(o,()=>{this.conn===o&&(this.conn.onopen=function(){},this.conn.onerror=function(){},this.conn.onmessage=function(){},this.conn.onclose=function(){},this.conn=null),t&&t()})})}waitForBufferDone(t,e,n=1){if(n===5||!t.bufferedAmount){e();return}setTimeout(()=>{this.waitForBufferDone(t,e,n+1)},150*n)}waitForSocketClosed(t,e,n=1){if(n===5||t.readyState===Fn.closed){e();return}setTimeout(()=>{this.waitForSocketClosed(t,e,n+1)},150*n)}onConnClose(t){this.conn&&(this.conn.onclose=()=>{}),this.hasLogger()&&this.log("transport","close",t),this.triggerChanError(t),this.clearHeartbeats(),this.closeWasClean||this.reconnectTimer.scheduleTimeout(),this.triggerStateCallbacks("close",t)}onConnError(t){this.hasLogger()&&this.log("transport","error",t);let e=this.transport,n=this.establishedConnections;this.triggerStateCallbacks("error",t,e,n),(e===this.transport||n>0)&&this.triggerChanError(t)}
145triggerChanError(t){this.channels.forEach(e=>{e.isErrored()||e.isLeaving()||e.isClosed()||e.trigger(io.error,t)})}connectionState(){switch(this.conn&&this.conn.readyState){case Fn.connecting:return"connecting";case Fn.open:return"open";case Fn.closing:return"closing";default:return"closed"}}isConnected(){return this.connectionState()==="open"}remove(t){this.off(t.stateChangeRefs),this.channels=this.channels.filter(e=>e!==t)}off(t){for(let e in this.stateChangeCallbacks)this.stateChangeCallbacks[e]=this.stateChangeCallbacks[e].filter(([n])=>t.indexOf(n)===-1)}channel(t,e={}){let n=new ME(t,e,this);return this.channels.push(n),n}push(t){if(this.hasLogger()){let{topic:e,event:n,payload:o,ref:r,join_ref:a}=t;this.log("push",`${e} ${n} (${a}, ${r})`,o)}this.isConnected()?this.encode(t,e=>this.conn.send(e)):this.sendBuffer.push(()=>this.encode(t,e=>this.conn.send(e)))}makeRef(){let t=this.ref+1;return t===this.ref?this.ref=0:this.ref=t,this.ref.toString()}sendHeartbeat(){if(!this.isConnected()){try{this.heartbeatCallback("disconnected")}catch(t){this.log("error","error in heartbeat callback",t)}return}if(this.pendingHeartbeatRef){this.heartbeatTimeout();return}this.pendingHeartbeatRef=this.makeRef(),this.heartbeatSentAt=Date.now(),this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:this.pendingHeartbeatRef});try{this.heartbeatCallback("sent")}catch(t){this.log("error","error in heartbeat callback",t)}this.heartbeatTimeoutTimer=setTimeout(()=>this.heartbeatTimeout(),this.heartbeatIntervalMs)}flushSendBuffer(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(t=>t()),this.sendBuffer=[])}onConnMessage(t){this.decode(t.data,e=>{let{topic:n,event:o,payload:r,ref:a,join_ref:s}=e;if(a&&a===this.pendingHeartbeatRef){const i=this.heartbeatSentAt?Date.now()-this.heartbeatSentAt:void 0;this.clearHeartbeats();try{this.heartbeatCallback(r.status==="ok"?"ok":"error",i)}catch(l){this.log("error","error in heartbeat callback",l)}this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.autoSendHeartbeat&&(this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs))}this.hasLogger()&&this.log("receive",`${r.status||""} ${n} ${o} ${a&&"("+a+")"||""}`.trim(),r);for(let i=0;i<this.channels.length;i++){const l=this.channels[i];l.isMember(n,o,r,s)&&l.trigger(o,r,a,s)}this.triggerStateCallbacks("message",e)})}triggerStateCallbacks(t,...e){try{this.stateChangeCallbacks[t].forEach(([n,o])=>{try{o(...e)}catch(r){this.log("error",`error in ${t} callback`,r)}})}catch(n){this.log("error",`error triggering ${t} callbacks`,n)}}leaveOpenTopic(t){let e=this.channels.find(n=>n.topic===t&&(n.isJoined()||n.isJoining()));e&&(this.hasLogger()&&this.log("transport",`leaving duplicate topic "${t}"`),e.leave())}};class vi{constructor(e,n){const o=WE(n);this.presence=new NE(e.getChannel(),o),this.presence.onJoin((r,a,s)=>{const i=vi.onJoinPayload(r,a,s);e.getChannel().trigger("presence",i)}),this.presence.onLeave((r,a,s)=>{const i=vi.onLeavePayload(r,a,s);e.getChannel().trigger("presence",i)}),this.presence.onSync(()=>{e.getChannel().trigger("presence",{event:"sync"})})}get state(){return vi.transformState(this.presence.state)}static transformState(e){return e=DE(e),Object.getOwnPropertyNames(e).reduce((n,o)=>{const r=e[o];return n[o]=_c(r),n},{})}static onJoinPayload(e,n,o){const r=vw(n),a=_c(o);return{event:"join",key:e,currentPresences:r,newPresences:a}}static onLeavePayload(e,n,o){const r=vw(n),a=_c(o);return{event:"leave",key:e,currentPresences:r,leftPresences:a}}}function _c(t){return t.metas.map(e=>(e.presence_ref=e.phx_ref,delete e.phx_ref,delete e.phx_ref_prev,e))}function DE(t){return JSON.parse(JSON.stringify(t))}function WE(t){return(t==null?void 0:t.events)&&{events:t.events}}function vw(t){return t!=null&&t.metas?_c(t):[]}var kw;(function(t){t.SYNC="sync",t.JOIN="join",t.LEAVE="leave"})(kw||(kw={}));class qE{get state(){return this.presenceAdapter.state}constructor(e,n){this.channel=e,this.presenceAdapter=new vi(this.channel.channelAdapter,n)}}function FE(t){if(t instanceof Error)return t;if(typeof t=="string")return new Error(t);if(t&&typeof t=="object"){const e=t;
145if(typeof e.code=="number"){const n=typeof e.reason=="string"&&e.reason?` (${e.reason})`:"";return new Error(`socket closed: ${e.code}${n}`,{cause:t})}return new Error("channel error: transport failure",{cause:t})}return new Error("channel error: connection lost")}class HE{constructor(e,n,o){const r=zE(o);this.channel=e.getSocket().channel(n,r),this.socket=e}get state(){return this.channel.state}set state(e){this.channel.state=e}get joinedOnce(){return this.channel.joinedOnce}get joinPush(){return this.channel.joinPush}get rejoinTimer(){return this.channel.rejoinTimer}on(e,n){return this.channel.on(e,n)}off(e,n){this.channel.off(e,n)}subscribe(e){return this.channel.join(e)}unsubscribe(e){return this.channel.leave(e)}teardown(){this.channel.teardown()}onClose(e){this.channel.onClose(e)}onError(e){return this.channel.onError(e)}push(e,n,o){let r;try{r=this.channel.push(e,n,o)}catch{throw new Error(`tried to push '${e}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`)}if(this.channel.pushBuffer.length>kE){const a=this.channel.pushBuffer.shift();a.cancelTimeout(),this.socket.log("channel",`discarded push due to buffer overflow: ${a.event}`,a.payload())}return r}updateJoinPayload(e){const n=this.channel.joinPush.payload();this.channel.joinPush.payload=()=>Object.assign(Object.assign({},n),e)}canPush(){return this.socket.isConnected()&&this.state===Fo.joined}isJoined(){return this.state===Fo.joined}isJoining(){return this.state===Fo.joining}isClosed(){return this.state===Fo.closed}isLeaving(){return this.state===Fo.leaving}updateFilterBindings(e){this.channel.filterBindings=e}updatePayloadTransform(e){this.channel.onMessage=e}getChannel(){return this.channel}}function zE(t){return{config:Object.assign({broadcast:{ack:!1,self:!1},presence:{key:"",enabled:!1},private:!1},t.config)}}const $E=/[,()"\\]/,UE=t=>$E.test(t)||t!==t.trim(),YE=t=>`"${t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`,xw=t=>{const e=t===null?"null":String(t);return UE(e)?YE(e):e},VE=t=>t===null?"null":String(t),GE=(t,e)=>{if(t==="in"){const n=Array.isArray(e)?e:[e];if(n.length===0)throw new Error("Realtime `in` filter requires at least one value.");return`in.(${Array.from(new Set(n)).map(r=>xw(r)).join(",")})`}return t==="is"?`is.${VE(e)}`:`${t}.${xw(e)}`};class KE{constructor(){this.filters=[]}add(e,n,o,r=!1){const a=r?"not.":"";return this.filters.push(`${e}=${a}${GE(n,o)}`),this}eq(e,n){return this.add(e,"eq",n)}neq(e,n){return this.add(e,"neq",n)}gt(e,n){return this.add(e,"gt",n)}gte(e,n){return this.add(e,"gte",n)}lt(e,n){return this.add(e,"lt",n)}lte(e,n){return this.add(e,"lte",n)}in(e,n){return this.add(e,"in",n)}like(e,n){return this.add(e,"like",n)}ilike(e,n){return this.add(e,"ilike",n)}match(e,n){return this.add(e,"match",n)}imatch(e,n){return this.add(e,"imatch",n)}is(e,n){return this.add(e,"is",n)}isDistinct(e,n){return this.add(e,"isdistinct",n)}not(e,n,o){return this.add(e,n,o,!0)}build(){return this.filters.join(",")}toString(){return this.build()}}var Sw;(function(t){t.ALL="*",t.INSERT="INSERT",t.UPDATE="UPDATE",t.DELETE="DELETE"})(Sw||(Sw={}));var Da;(function(t){t.BROADCAST="broadcast",t.PRESENCE="presence",t.POSTGRES_CHANGES="postgres_changes",t.SYSTEM="system"})(Da||(Da={}));var lo;(function(t){t.SUBSCRIBED="SUBSCRIBED",t.TIMED_OUT="TIMED_OUT",t.CLOSED="CLOSED",t.CHANNEL_ERROR="CHANNEL_ERROR"})(lo||(lo={}));class ki{get state(){return this.channelAdapter.state}set state(e){this.channelAdapter.state=e}get joinedOnce(){return this.channelAdapter.joinedOnce}get timeout(){return this.socket.timeout}get joinPush(){return this.channelAdapter.joinPush}get rejoinTimer(){return this.channelAdapter.rejoinTimer}constructor(e,n={config:{}},o){var r,a;if(this.topic=e,this.params=n,this.socket=o,this.bindings={},this.subTopic=e.replace(/^realtime:/i,""),this.params.config=Object.assign({broadcast:{ack:!1,self:!1},presence:{key:"",enabled:!1},private:!1},n.config),this.channelAdapter=new HE(this.socket.socketAdapter,e,this.params),this.presence=new qE(this),this._onClose(()=>{this.socket._remove(this)}),this._updateFilterTransform(),this.broadcastEndpointURL=V1(this.socket.socketAdapter.endPointURL()),this.private=this.params.config.private||!1,!this.private&&(!((a=(r=this.params.config)===null||r===void 0?void 0:r.broadcast)===null||a===void 0)&&a.replay))throw new Error(`tried to use replay on public channel '${this.topic}'. It must be a private channel.`)}subscribe(e,n=this.timeout){var o,r,a;
145if(this.socket.isConnected()||this.socket.connect(),this.channelAdapter.isClosed()){const{config:{broadcast:s,presence:i,private:l}}=this.params,c=(r=(o=this.bindings.postgres_changes)===null||o===void 0?void 0:o.map(p=>p.filter))!==null&&r!==void 0?r:[],u=!!this.bindings[Da.PRESENCE]&&this.bindings[Da.PRESENCE].length>0||((a=this.params.config.presence)===null||a===void 0?void 0:a.enabled)===!0,d={},g={broadcast:s,presence:Object.assign(Object.assign({},i),{enabled:u}),postgres_changes:c,private:l};this.socket.accessTokenValue&&(d.access_token=this.socket.accessTokenValue),this._onError(p=>{e==null||e(lo.CHANNEL_ERROR,FE(p))}),this._onClose(()=>e==null?void 0:e(lo.CLOSED)),this.updateJoinPayload(Object.assign({config:g},d)),this._updateFilterMessage(),this.channelAdapter.subscribe(n).receive("ok",async({postgres_changes:p})=>{if(this.socket._isManualToken()||this.socket.setAuth(),p===void 0){e==null||e(lo.SUBSCRIBED);return}this._updatePostgresBindings(p,e)}).receive("error",p=>{this.state=Fo.errored;const v=Object.values(p).join(", ")||"error";e==null||e(lo.CHANNEL_ERROR,new Error(v,{cause:p}))}).receive("timeout",()=>{e==null||e(lo.TIMED_OUT)})}return this}_updatePostgresBindings(e,n){var o;const r=this.bindings.postgres_changes,a=(o=r==null?void 0:r.length)!==null&&o!==void 0?o:0,s=[];for(let i=0;i<a;i++){const l=r[i],{filter:{event:c,schema:u,table:d,filter:g}}=l,p=e&&e[i];if(p&&p.event===c&&ki.isFilterValueEqual(p.schema,u)&&ki.isFilterValueEqual(p.table,d)&&ki.isFilterValueEqual(p.filter,g))s.push(Object.assign(Object.assign({},l),{id:p.id}));else{this.unsubscribe(),this.state=Fo.errored,n==null||n(lo.CHANNEL_ERROR,new Error("mismatch between server and client bindings for postgres changes"));return}}this.bindings.postgres_changes=s,this.state!=Fo.errored&&n&&n(lo.SUBSCRIBED)}presenceState(){return this.presence.state}async track(e,n={}){return await this.send({type:"presence",event:"track",payload:e},n.timeout||this.timeout)}async untrack(e={}){return await this.send({type:"presence",event:"untrack"},e)}on(e,n,o){const r=this.channelAdapter.isJoined()||this.channelAdapter.isJoining(),a=e===Da.PRESENCE||e===Da.POSTGRES_CHANGES;if(r&&a)throw this.socket.log("channel",`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`),new Error(`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`);return this._on(e,n,o)}async httpSend(e,n,o={}){var r;if(n==null)return Promise.reject(new Error("Payload is required for httpSend()"));const a=n instanceof ArrayBuffer||ArrayBuffer.isView(n),s={apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":a?"application/octet-stream":"application/json"};this.socket.accessTokenValue&&(s.Authorization=`Bearer ${this.socket.accessTokenValue}`);const i=new URL(this.broadcastEndpointURL);i.pathname+=`/${encodeURIComponent(this.subTopic)}/events/${encodeURIComponent(e)}`,this.private&&i.searchParams.set("private","true");const l={method:"POST",headers:s,body:a?n:JSON.stringify(n)},c=await this._fetchWithTimeout(i.toString(),l,(r=o.timeout)!==null&&r!==void 0?r:this.timeout);if(c.status===202)return{success:!0};if(c.status===404)return Promise.reject(new Error("httpSend() requires Realtime server v2.97.0 or newer; the endpoint returned 404. Update your Supabase CLI to a recent version, or upgrade the Realtime server in your self-hosted setup. See https://github.com/supabase/supabase-js/blob/master/packages/core/realtime-js/migrations/httpsend-server-version.md"));let u=c.statusText;try{const d=await c.json();u=d.error||d.message||u}catch{}return Promise.reject(new Error(u))}async send(e,n={}){var o,r;if(!this.channelAdapter.canPush()&&e.type==="broadcast"){console.warn("Realtime send() is automatically falling back to REST API. This behavior will be deprecated 
145in the future. Please use httpSend() explicitly for REST delivery.");const{event:a,payload:s}=e,i={apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"};this.socket.accessTokenValue&&(i.Authorization=`Bearer ${this.socket.accessTokenValue}`);const l={method:"POST",headers:i,body:JSON.stringify({messages:[{topic:this.subTopic,event:a,payload:s,private:this.private}]})};try{const c=await this._fetchWithTimeout(this.broadcastEndpointURL,l,(o=n.timeout)!==null&&o!==void 0?o:this.timeout);return await((r=c.body)===null||r===void 0?void 0:r.cancel()),c.ok?"ok":"error"}catch(c){return c instanceof Error&&c.name==="AbortError"?"timed out":"error"}}else return new Promise(a=>{var s,i,l;const c=this.channelAdapter.push(e.type,e,n.timeout||this.timeout);e.type==="broadcast"&&!(!((l=(i=(s=this.params)===null||s===void 0?void 0:s.config)===null||i===void 0?void 0:i.broadcast)===null||l===void 0)&&l.ack)&&a("ok"),c.receive("ok",()=>a("ok")),c.receive("error",()=>a("error")),c.receive("timeout",()=>a("timed out"))})}updateJoinPayload(e){this.channelAdapter.updateJoinPayload(e)}async unsubscribe(e=this.timeout){return new Promise(n=>{this.channelAdapter.unsubscribe(e).receive("ok",()=>n("ok")).receive("timeout",()=>n("timed out")).receive("error",()=>n("error"))})}teardown(){this.channelAdapter.teardown()}async _fetchWithTimeout(e,n,o){const r=new AbortController,a=setTimeout(()=>r.abort(),o),s=await this.socket.fetch(e,Object.assign(Object.assign({},n),{signal:r.signal}));return clearTimeout(a),s}_on(e,n,o){const r=e.toLocaleLowerCase(),a=n==null?void 0:n.filter;(a instanceof KE||typeof a=="object"&&a!==null&&typeof a.build=="function")&&(n=Object.assign(Object.assign({},n),{filter:a.build()}));const s=this.channelAdapter.on(e,o),i={type:r,filter:n,callback:o,ref:s};return this.bindings[r]?this.bindings[r].push(i):this.bindings[r]=[i],this._updateFilterMessage(),this}_onClose(e){this.channelAdapter.onClose(e)}_onError(e){this.channelAdapter.onError(e)}_updateFilterMessage(){this.channelAdapter.updateFilterBindings((e,n,o)=>{var r,a,s,i,l,c,u;const d=e.event.toLocaleLowerCase();if(this._notThisChannelEvent(d,o))return!1;const g=(r=this.bindings[d])===null||r===void 0?void 0:r.find(p=>p.ref===e.ref);if(!g)return!0;if(["broadcast","presence","postgres_changes"].includes(d))if("id"in g){const p=g.id,v=(a=g.filter)===null||a===void 0?void 0:a.event;return p&&((s=n.ids)===null||s===void 0?void 0:s.includes(p))&&(v==="*"||(v==null?void 0:v.toLocaleLowerCase())===((i=n.data)===null||i===void 0?void 0:i.type.toLocaleLowerCase()))}else{const p=(c=(l=g==null?void 0:g.filter)===null||l===void 0?void 0:l.event)===null||c===void 0?void 0:c.toLocaleLowerCase();return p==="*"||p===((u=n==null?void 0:n.event)===null||u===void 0?void 0:u.toLocaleLowerCase())}else return g.type.toLocaleLowerCase()===d})}_notThisChannelEvent(e,n){const{close:o,error:r,leave:a,join:s}=U1;return n&&[o,r,a,s].includes(e)&&n!==this.joinPush.ref}_updateFilterTransform(){this.channelAdapter.updatePayloadTransform((e,n,o)=>{if(typeof n=="object"&&"ids"in n){const r=n.data,{schema:a,table:s,commit_timestamp:i,type:l,errors:c}=r;return Object.assign(Object.assign({},{schema:a,table:s,commit_timestamp:i,eventType:l,new:{},old:{},errors:c}),this._getPayloadRecords(r))}return n})}copyBindings(e){if(this.joinedOnce)throw new Error("cannot copy bindings into joined channel");for(const n in e.bindings)for(const o of e.bindings[n])this._on(o.type,o.filter,o.callback)}static isFilterValueEqual(e,n){return(e??void 0)===(n??void 0)}_getPayloadRecords(e){const n={new:{},old:{}};return(e.type==="INSERT"||e.type==="UPDATE")&&(n.new=bw(e.columns,e.record)),(e.type==="UPDATE"||e.type==="DELETE")&&(n.old=bw(e.columns,e.old_record)),n}}class JE{constructor(e,n){this.socket=new LE(e,n)}get timeout(){return this.socket.timeout}get endPoint(){return this.socket.endPoint}get transport(){return this.socket.transport}get heartbeatIntervalMs(){return this.socket.heartbeatIntervalMs}get heartbeatCallback(){return this.socket.heartbeatCallback}set heartbeatCallback(e){this.socket.heartbeatCallback=e}get heartbeatTimer(){return this.socket.heartbeatTimer}get pendingHeartbeatRef(){return this.socket.pendingHeartbeatRef}get reconnectTimer(){return this.socket.reconnectTimer}get vsn(){return this.socket.vsn}get encode(){return this.socket.encode}get decode(){return this.socket.decode}get reconnectAfterMs(){return this.socket.reconnectAfterMs}get sendBuffer(){return this.socket.sendBuffer}get stateChangeCallbacks(){return this.socket.stateChangeCallbacks}connect(){this.socket.connect()}disconnect(e,n,o,r=1e4){return new Promise(a=>{setTimeout(()=>a("timeout"),r),this.socket.disconnect(()=>{e(),a("ok")},n,o)})}push(e){this.socket.push(e)}log(e,n,o){this.socket.log(e,n,o)}makeRef(){return this.socket.makeRef()}onOpen(e){this.socket.onOpen(e)}onClose(e){this.socket.onClose(e)}onError(e){this.socket.onError(e)}onMessage(e){this.socket.onMessage(e)}isConnected(){return this.socket.isConnected()}isConnecting(){return this.socket.connectionState()==zp.connecting}isDisconnecting(){return this.socket.connectionState()==zp.closing}connectionState(){return this.socket.connectionState()}endPointURL(){return this.socket.endPointURL()}sendHeartbeat(){this.socket.sendHeartbeat()}getSocket(){return this.socket}}const Tw={HEARTBEAT_INTERVAL:25e3,RECONNECT_DELAY:10,HEARTBEAT_TIMEOUT_FALLBACK:100},QE=[1e3,2e3,5e3,1e4],ZE=1e4;function XE(){const t=new Map;return{get length(){return t.size},clear(){t.clear()},getItem(e){return t.has(e)?t.get(e):null},key(e){var n;return(n=Array.from(t.keys())[e])!==null&&n!==void 0?n:null},removeItem(e){t.delete(e)},setItem(e,n){t.set(e,String(n))}}}function eI(){try{if(typeof globalThis<"u"&&globalThis.sessionStorage)return globalThis.sessionStorage}catch{}return XE()}const tI=`
146  addEventListener("message", (e) => {
147    if (e.data.event === "start") {
148      setInterval(() => postMessage({ event: "keepAlive" }), e.data.interval);
149    }
150  });`;class nI{get endPoint(){return this.socketAdapter.endPoint}get timeout(){return this.socketAdapter.timeout}get transport(){return this.socketAdapter.transport}get heartbeatCallback(){return this.socketAdapter.heartbeatCallback}get heartbeatIntervalMs(){return this.socketAdapter.heartbeatIntervalMs}get heartbeatTimer(){return this.worker?this._workerHeartbeatTimer:this.socketAdapter.heartbeatTimer}get pendingHeartbeatRef(){return this.worker?this._pendingWorkerHeartbeatRef:this.socketAdapter.pendingHeartbeatRef}get reconnectTimer(){return this.socketAdapter.reconnectTimer}get vsn(){return this.socketAdapter.vsn}get encode(){return this.socketAdapter.encode}get decode(){return this.socketAdapter.decode}get reconnectAfterMs(){return this.socketAdapter.reconnectAfterMs}get sendBuffer(){return this.socketAdapter.sendBuffer}get stateChangeCallbacks(){return this.socketAdapter.stateChangeCallbacks}constructor(e,n){var o;if(this.channels=new Array,this.accessTokenValue=null,this.accessToken=null,this.apiKey=null,this.httpEndpoint="",this.headers={},this.params={}
150,this.ref=0,this.serializer=new xE,this._manuallySetToken=!1,this._authPromise=null,this._workerHeartbeatTimer=void 0,this._pendingWorkerHeartbeatRef=null,this._pendingDisconnectTimer=null,this._disconnectOnEmptyChannelsAfterMs=0,this._resolveFetch=a=>a?(...s)=>a(...s):(...s)=>fetch(...s),!(!((o=n==null?void 0:n.params)===null||o===void 0)&&o.apikey))throw new Error("API key is required to connect to Realtime");this.apiKey=n.params.apikey;const r=this._initializeOptions(n);this.socketAdapter=new JE(e,r),this.httpEndpoint=V1(e),this.fetch=this._resolveFetch(n==null?void 0:n.fetch)}connect(){if(!(this.isConnecting()||this.isDisconnecting()||this.isConnected())){this.accessToken&&!this._authPromise&&this._setAuthSafely("connect"),this._setupConnectionHandlers();try{this.socketAdapter.connect()}catch(e){const n=e.message;throw new Error(`WebSocket not available: ${n}`)}this._handleNodeJsRaceCondition()}}endpointURL(){return this.socketAdapter.endPointURL()}async disconnect(e,n){return this._cancelPendingDisconnect(),this.isDisconnecting()?"ok":await this.socketAdapter.disconnect(()=>{clearInterval(this._workerHeartbeatTimer),this._terminateWorker()},e,n)}getChannels(){return this.channels}async removeChannel(e){const n=await e.unsubscribe();return n==="ok"&&e.teardown(),n}async removeAllChannels(){const e=this.channels.map(async o=>{const r=await o.unsubscribe();return o.teardown(),r}),n=await Promise.all(e);return await this.disconnect(),n}log(e,n,o){this.socketAdapter.log(e,n,o)}connectionState(){return this.socketAdapter.connectionState()||zp.closed}isConnected(){return this.socketAdapter.isConnected()}isConnecting(){return this.socketAdapter.isConnecting()}isDisconnecting(){return this.socketAdapter.isDisconnecting()}channel(e,n={config:{}}){const o=`realtime:${e}`,r=this.getChannels().find(a=>a.topic===o);if(r)return r;{const a=new ki(`realtime:${e}`,n,this);return this._cancelPendingDisconnect(),this.channels.push(a),a}}push(e){this.socketAdapter.push(e)}async setAuth(e=null){this._authPromise=this._performAuth(e);try{await this._authPromise}finally{this._authPromise=null}}_isManualToken(){return this._manuallySetToken}async sendHeartbeat(){this.socketAdapter.sendHeartbeat()}onHeartbeat(e){this.socketAdapter.heartbeatCallback=this._wrapHeartbeatCallback(e)}_makeRef(){return this.socketAdapter.makeRef()}_remove(e){this.channels=this.channels.filter(n=>n.topic!==e.topic),this.channels.length===0&&(this.log("transport","no channels remaining, scheduling disconnect"),this._schedulePendingDisconnect())}_schedulePendingDisconnect(){if(this._cancelPendingDisconnect(),this._disconnectOnEmptyChannelsAfterMs===0){this.log("transport","disconnecting immediately - no channels"),this.disconnect();return}
150this._pendingDisconnectTimer=setTimeout(()=>{this._pendingDisconnectTimer=null,this.channels.length===0&&(this.log("transport","deferred disconnect fired - no channels, disconnecting"),this.disconnect())},this._disconnectOnEmptyChannelsAfterMs),this.log("transport",`deferred disconnect scheduled in ${this._disconnectOnEmptyChannelsAfterMs}ms`)}_cancelPendingDisconnect(){this._pendingDisconnectTimer!==null&&(this.log("transport","pending disconnect cancelled - channel activity detected"),clearTimeout(this._pendingDisconnectTimer),this._pendingDisconnectTimer=null)}async _performAuth(e=null){let n,o=!1;if(e)n=e,o=!0;else if(this.accessToken)try{n=await this.accessToken()}catch(r){this.log("error","Error fetching access token from callback",r),n=this.accessTokenValue}else n=this.accessTokenValue;o?this._manuallySetToken=!0:this.accessToken&&(this._manuallySetToken=!1),this.accessTokenValue!=n&&(this.accessTokenValue=n,this.channels.forEach(r=>{const a={access_token:n,version:yE};n&&r.updateJoinPayload(a),r.joinedOnce&&r.channelAdapter.isJoined()&&r.channelAdapter.push(U1.access_token,{access_token:n})}))}async _waitForAuthIfNeeded(){this._authPromise&&await this._authPromise}_setAuthSafely(e="general"){this._isManualToken()||this.setAuth().catch(n=>{this.log("error",`Error setting auth in ${e}`,n)})}_setupConnectionHandlers(){this.socketAdapter.onOpen(()=>{(this._authPromise||(this.accessToken&&!this.accessTokenValue?this.setAuth():Promise.resolve())).catch(n=>{this.log("error","error waiting for auth on connect",n)}),this.worker&&!this.workerRef&&this._startWorkerHeartbeat()}),this.socketAdapter.onClose(()=>{this.worker&&this.workerRef&&this._terminateWorker()}),this.socketAdapter.onMessage(e=>{e.ref&&e.ref===this._pendingWorkerHeartbeatRef&&(this._pendingWorkerHeartbeatRef=null)})}_handleNodeJsRaceCondition(){this.socketAdapter.isConnected()&&this.socketAdapter.getSocket().onConnOpen()}_wrapHeartbeatCallback(e){return(n,o)=>{n=="sent"&&this._setAuthSafely(),e&&e(n,o)}}_startWorkerHeartbeat(){this.workerUrl?this.log("worker",`starting worker for from ${this.workerUrl}`):this.log("worker","starting default worker");const e=this._workerObjectUrl(this.workerUrl);this.workerRef=new Worker(e),this.workerRef.onerror=n=>{this.log("worker","worker error",n.message),this._terminateWorker(),this.disconnect()},this.workerRef.onmessage=n=>{n.data.event==="keepAlive"&&this.sendHeartbeat()},this.workerRef.postMessage({event:"start",interval:this.heartbeatIntervalMs})}_terminateWorker(){this.workerRef&&(this.log("worker","terminating worker"),this.workerRef.terminate(),this.workerRef=void 0)}_workerObjectUrl(e){let n;if(e)n=e;else{const o=new Blob([tI],{type:"application/javascript"});n=URL.createObjectURL(o)}return n}_initializeOptions(e){var n,o,r,a,s,i,l,c,u,d,g,p;this.worker=(n=e==null?void 0:e.worker)!==null&&n!==void 0?n:!1,this.accessToken=(o=e==null?void 0:e.accessToken)!==null&&o!==void 0?o:null;const v={};v.timeout=(r=e==null?void 0:e.timeout)!==null&&r!==void 0?r:vE,v.heartbeatIntervalMs=(a=e==null?void 0:e.heartbeatIntervalMs)!==null&&a!==void 0?a:Tw.HEARTBEAT_INTERVAL,this._disconnectOnEmptyChannelsAfterMs=(s=e==null?void 0:e.disconnectOnEmptyChannelsAfterMs)!==null&&s!==void 0?s:2*((i=e==null?void 0:e.heartbeatIntervalMs)!==null&&i!==void 0?i:Tw.HEARTBEAT_INTERVAL),v.transport=(l=e==null?void 0:e.transport)!==null&&l!==void 0?l:mE.getWebSocketConstructor(),v.params=e==null?void 0:e.params,v.logger=e==null?void 0:e.logger,v.heartbeatCallback=this._wrapHeartbeatCallback(e==null?void 0:e.heartbeatCallback),v.sessionStorage=(c=e==null?void 0:e.sessionStorage)!==null&&c!==void 0?c:eI(),v.reconnectAfterMs=(u=e==null?void 0:e.reconnectAfterMs)!==null&&u!==void 0?u:m=>QE[m-1]||ZE;let y,k;const w=(d=e==null?void 0:e.vsn)!==null&&d!==void 0?d:bE;switch(w){case wE:y=(m,b)=>
150b(JSON.stringify(m)),k=(m,b)=>b(JSON.parse(m));break;case $1:y=this.serializer.encode.bind(this.serializer),k=this.serializer.decode.bind(this.serializer);break;default:throw new Error(`Unsupported serializer version: ${v.vsn}`)}if(v.vsn=w,v.encode=(g=e==null?void 0:e.encode)!==null&&g!==void 0?g:y,v.decode=(p=e==null?void 0:e.decode)!==null&&p!==void 0?p:k,v.beforeReconnect=this._reconnectAuth.bind(this),(e!=null&&e.logLevel||e!=null&&e.log_level)&&(this.logLevel=e.logLevel||e.log_level,v.params=Object.assign(Object.assign({},v.params),{log_level:this.logLevel})),this.worker){if(typeof window<"u"&&!window.Worker)throw new Error("Web Worker is not supported");this.workerUrl=e==null?void 0:e.workerUrl,v.autoSendHeartbeat=!this.worker}return v}async _reconnectAuth(){await this._waitForAuthIfNeeded(),this.isConnected()||this.connect()}}var Vi=class extends Error{constructor(t,e){var n;super(t),this.name="IcebergError",this.status=e.status,this.icebergType=e.icebergType,this.icebergCode=e.icebergCode,this.details=e.details,this.isCommitStateUnknown=e.icebergType==="CommitStateUnknownException"||[500,502,504].includes(e.status)&&((n=e.icebergType)==null?void 0:n.includes("CommitState"))===!0}isNotFound(){return this.status===404}isConflict(){return this.status===409}isAuthenticationTimeout(){return this.status===419}};function oI(t,e,n){const o=new URL(e,t);if(n)for(const[r,a]of Object.entries(n))a!==void 0&&o.searchParams.set(r,a);return o.toString()}async function rI(t){return!t||t.type==="none"?{}:t.type==="bearer"?{Authorization:`Bearer ${t.token}`}:t.type==="header"?{[t.name]:t.value}:t.type==="custom"?await t.getHeaders():{}}function aI(t){const e=t.fetchImpl??globalThis.fetch;return{async request({method:n,path:o,query:r,body:a,headers:s}){const i=oI(t.baseUrl,o,r),l=await rI(t.auth),c=await e(i,{method:n,headers:{...a?{"Content-Type":"application/json"}:{},...l,...s},body:a?JSON.stringify(a):void 0}),u=await c.text(),d=(c.headers.get("content-type")||"").includes("application/json"),g=d&&u?JSON.parse(u):u;if(!c.ok){const p=d?g:void 0,v=p==null?void 0:p.error;throw new Vi((v==null?void 0:v.message)??`Request failed with status ${c.status}`,{status:c.status,icebergType:v==null?void 0:v.type,icebergCode:v==null?void 0:v.code,details:p})}return{status:c.status,headers:c.headers,data:g}}}}function Xl(t){return t.join("�")}var sI=class{constructor(t,e=""){this.client=t,this.prefix=e}async listNamespaces(t){const e=t?{parent:Xl(t.namespace)}:void 0;return(await this.client.request({method:"GET",path:`${this.prefix}/namespaces`,query:e})).data.namespaces.map(o=>({namespace:o}))}async createNamespace(t,e){const n={namespace:t.namespace,properties:e==null?void 0:e.properties};return(await this.client.request({method:"POST",path:`${this.prefix}/namespaces`,body:n})).data}async dropNamespace(t){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${Xl(t.namespace)}`})}async loadNamespaceMetadata(t){return{properties:(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Xl(t.namespace)}`})).data.properties}}async namespaceExists(t){try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${Xl(t.namespace)}`}),!0}catch(e){if(e instanceof Vi&&e.status===404)return!1;throw e}}async createNamespaceIfNotExists(t,e){try{return await this.createNamespace(t,e)}catch(n){if(n instanceof Vi&&n.status===409)return;throw n}}};function da(t){return t.join("�")}var iI=class{constructor(t,e="",n){this.client=t,this.prefix=e,this.accessDelegation=n}async listTables(t){return(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${da(t.namespace)}/tables`})).data.identifiers}async createTable(t,e){const n={};return this.accessDelegation&&(n["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${da(t.namespace)}/tables`,body:e,headers:n})).data.metadata}async updateTable(t,e){const n=await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${da(t.namespace)}/tables/${t.name}`,body:e});return{"metadata-location":n.data["metadata-location"],metadata:n.data.metadata}}async dropTable(t,e){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${da(t.namespace)}
150/tables/${t.name}`,query:{purgeRequested:String((e==null?void 0:e.purge)??!1)}})}async loadTable(t){const e={};return this.accessDelegation&&(e["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${da(t.namespace)}/tables/${t.name}`,headers:e})).data.metadata}async tableExists(t){const e={};this.accessDelegation&&(e["X-Iceberg-Access-Delegation"]=this.accessDelegation);try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${da(t.namespace)}/tables/${t.name}`,headers:e}),!0}catch(n){if(n instanceof Vi&&n.status===404)return!1;throw n}}async createTableIfNotExists(t,e){try{return await this.createTable(t,e)}catch(n){if(n instanceof Vi&&n.status===409)return await this.loadTable({namespace:t.namespace,name:e.name});throw n}}},lI=class{constructor(t){var o;let e="v1";t.catalogName&&(e+=`/${t.catalogName}`);const n=t.baseUrl.endsWith("/")?t.baseUrl:`${t.baseUrl}/`;this.client=aI({baseUrl:n,auth:t.auth,fetchImpl:t.fetch}),this.accessDelegation=(o=t.accessDelegation)==null?void 0:o.join(","),this.namespaceOps=new sI(this.client,e),this.tableOps=new iI(this.client,e,this.accessDelegation)}async listNamespaces(t){return this.namespaceOps.listNamespaces(t)}async createNamespace(t,e){return this.namespaceOps.createNamespace(t,e)}async dropNamespace(t){await this.namespaceOps.dropNamespace(t)}async loadNamespaceMetadata(t){return this.namespaceOps.loadNamespaceMetadata(t)}async listTables(t){return this.tableOps.listTables(t)}async createTable(t,e){return this.tableOps.createTable(t,e)}async updateTable(t,e){return this.tableOps.updateTable(t,e)}async dropTable(t,e){await this.tableOps.dropTable(t,e)}async loadTable(t){return this.tableOps.loadTable(t)}async namespaceExists(t){return this.namespaceOps.namespaceExists(t)}async tableExists(t){return this.tableOps.tableExists(t)}async createNamespaceIfNotExists(t,e){return this.namespaceOps.createNamespaceIfNotExists(t,e)}async createTableIfNotExists(t,e){return this.tableOps.createTableIfNotExists(t,e)}};function Gi(t){"@babel/helpers - typeof";return Gi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Gi(t)}function cI(t,e){if(Gi(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var o=n.call(t,e||"default");if(Gi(o)!="object")return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function hI(t){var e=cI(t,"string");return Gi(e)=="symbol"?e:e+""}function uI(t,e,n){return(e=hI(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function Aw(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(t,r).enumerable})),n.push.apply(n,o)}return n}function le(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?Aw(Object(n),!0).forEach(function(o){uI(t,o,n[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):Aw(Object(n)).forEach(function(o){Object.defineProperty(t,o,Object.getOwnPropertyDescriptor(n,o))})}return t}var ru=class extends Error{constructor(t,e="storage",n,o){super(t),this.__isStorageError=!0,this.namespace=e,this.name=e==="vectors"?"StorageVectorsError":"StorageError",this.status=n,this.statusCode=o}toJSON(){return{name:this.name,message:this.message,status:this.status,statusCode:this.statusCode}}};function au(t){return typeof t=="object"&&t!==null&&"__isStorageError"in t}var Vp=class extends ru{constructor(t,e,n,o="storage"){super(t,o,e,n),this.name=o==="vectors"?"StorageVectorsApiError":"StorageApiError",this.status=e,this.statusCode=n}toJSON(){return le({},super.toJSON())}},K1=class extends ru{constructor(t,e,n="storage"){super(t,n),this.name=n==="vectors"?"StorageVectorsUnknownError":"StorageUnknownError",this.originalError=e}};function lh(t,e,n){const o=le({},t),r=e.toLowerCase();for(const a of Object.keys(o))a.toLowerCase()===r&&delete o[a];return o[r]=n,o}function dI(t){const e={};for(const[n,o]of Object.entries(t))e[n.toLowerCase()]=o;return e}const pI=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),gI=t=>{if(typeof t!="object"||t===null)return!1;const e=Object.getPrototypeOf(t);
150return(e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in t)&&!(Symbol.iterator in t)},Gp=t=>{if(Array.isArray(t))return t.map(n=>Gp(n));if(typeof t=="function"||t!==Object(t))return t;const e={};return Object.entries(t).forEach(([n,o])=>{const r=n.replace(/([-_][a-z])/gi,a=>a.toUpperCase().replace(/[-_]/g,""));e[r]=Gp(o)}),e},mI=t=>!t||typeof t!="string"||t.length===0||t.length>100||t.trim()!==t||t.includes("/")||t.includes("\\")?!1:/^[\w!.\*'() &$@=;:+,?-]+$/.test(t),_w=t=>{if(typeof t=="object"&&t!==null){const e=t;if(typeof e.msg=="string")return e.msg;if(typeof e.message=="string")return e.message;if(typeof e.error_description=="string")return e.error_description;if(typeof e.error=="string")return e.error;if(typeof e.error=="object"&&e.error!==null){const n=e.error;if(typeof n.message=="string")return n.message}}return JSON.stringify(t)},fI=async(t,e,n,o)=>{if(t!==null&&typeof t=="object"&&"json"in t&&typeof t.json=="function"){const r=t;let a=parseInt(String(r.status),10);Number.isFinite(a)||(a=500),r.json().then(s=>{const i=(s==null?void 0:s.statusCode)||(s==null?void 0:s.code)||a+"";e(new Vp(_w(s),a,i,o))}).catch(()=>{const s=a+"";e(new Vp(r.statusText||`HTTP ${a} error`,a,s,o))})}else e(new K1(_w(t),t,o))},yI=(t,e,n,o)=>{const r={method:t,headers:(e==null?void 0:e.headers)||{}};if(t==="GET"||t==="HEAD"||!o)return le(le({},r),n);if(gI(o)){var a;const s=(e==null?void 0:e.headers)||{};let i;for(const[l,c]of Object.entries(s))l.toLowerCase()==="content-type"&&(i=c);r.headers=lh(s,"Content-Type",(a=i)!==null&&a!==void 0?a:"application/json"),r.body=JSON.stringify(o)}else r.body=o;return e!=null&&e.duplex&&(r.duplex=e.duplex),le(le({},r),n)};async function Gs(t,e,n,o,r,a,s){return new Promise((i,l)=>{t(n,yI(e,o,r,a)).then(c=>{if(!c.ok)throw c;if(o!=null&&o.noResolveJson)return c;if(s==="vectors"){const u=c.headers.get("content-type");if(c.headers.get("content-length")==="0"||c.status===204)return{};if(!u||!u.includes("application/json"))return{}}return c.json()}).then(c=>i(c)).catch(c=>fI(c,l,o,s))})}function J1(t="storage"){return{get:async(e,n,o,r)=>Gs(e,"GET",n,o,r,void 0,t),post:async(e,n,o,r,a)=>Gs(e,"POST",n,r,a,o,t),put:async(e,n,o,r,a)=>Gs(e,"PUT",n,r,a,o,t),head:async(e,n,o,r)=>Gs(e,"HEAD",n,le(le({},o),{},{noResolveJson:!0}),r,void 0,t),remove:async(e,n,o,r,a)=>Gs(e,"DELETE",n,r,a,o,t)}}const wI=J1("storage"),{get:Ki,post:wn,put:Kp,head:bI,remove:Ji}=wI,Dt=J1("vectors");var js=class{constructor(t,e={},n,o="storage"){this.shouldThrowOnError=!1,this.url=t,this.headers=dI(e),this.fetch=pI(n),this.namespace=o}throwOnError(){return this.shouldThrowOnError=!0,this}setHeader(t,e){return this.headers=lh(this.headers,t,e),this}async handleOperation(t){var e=this;try{return{data:await t(),error:null}}catch(n){if(e.shouldThrowOnError)throw n;if(au(n))return{data:null,error:n};throw n}}};let Q1;Q1=Symbol.toStringTag;var vI=class{constructor(t,e){this.downloadFn=t,this.shouldThrowOnError=e,this[Q1]="StreamDownloadBuilder",this.promise=null}then(t,e){return this.getPromise().then(t,e)}catch(t){return this.getPromise().catch(t)}finally(t){return this.getPromise().finally(t)}getPromise(){return this.promise||(this.promise=this.execute()),this.promise}async execute(){var t=this;try{return{data:(await t.downloadFn()).body,error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(au(e))return{data:null,error:e};throw e}}};let Z1;Z1=Symbol.toStringTag;var kI=class{constructor(t,e){this.downloadFn=t,this.shouldThrowOnError=e,this[Z1]="BlobDownloadBuilder",this.promise=null}asStream(){return new vI(this.downloadFn,this.shouldThrowOnError)}then(t,e){return this.getPromise().then(t,e)}catch(t){return this.getPromise().catch(t)}finally(t){return this.getPromise().finally(t)}getPromise(){return this.promise||(this.promise=this.execute()),this.promise}async execute(){var t=this;try{return{data:await(await t.downloadFn()).blob(),error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(au(e))return{data:null,error:e};throw e}}};const sd={limit:100,offset:0,sortBy:{column:"name",order:"asc"}},Cw={cacheControl:"3600",contentType:"text/plain;charset=UTF-8",upsert:!1};var xI=class extends js{constructor(t,e={},n,o){super(t,e,o,"storage"),this.bucketId=n}async uploadOrUpdate(t,e,n,o){var r=this;return r.handleOperation(async()=>{let a;const s=le(le({},Cw),o);let i=le(le({},r.headers),t==="POST"&&{"x-upsert":String(s.upsert)});const l=s.metadata;if(typeof Blob<"u"&&n instanceof Blob?(a=new FormData,a.append("cacheControl",s.cacheControl),l&&a.append("metadata",r.encodeMetadata(l)),a.append("",n)):typeof FormData<"u"&&n instanceof FormData?(a=n,a.has("cacheControl")||a.append("cacheControl",s.cacheControl),l&&!a.has("metadata")&&a.append("metadata",r.encodeMetadata(l))):(a=n,i["cache-control"]=`max-age=${s.cacheControl}`,i["content-type"]=s.contentType,l&&(i["x-metadata"]=r.toBase64(r.encodeMetadata(l))),(typeof ReadableStream<"u"&&a 
150instanceof ReadableStream||a&&typeof a=="object"&&"pipe"in a&&typeof a.pipe=="function")&&!s.duplex&&(s.duplex="half")),o!=null&&o.headers)for(const[g,p]of Object.entries(o.headers))i=lh(i,g,p);const c=r._removeEmptyFolders(e),u=r._getFinalPath(c),d=await(t=="PUT"?Kp:wn)(r.fetch,`${r.url}/object/${u}`,a,le({headers:i},s!=null&&s.duplex?{duplex:s.duplex}:{}));return{path:c,id:d.Id,fullPath:d.Key}})}async upload(t,e,n){return this.uploadOrUpdate("POST",t,e,n)}async uploadToSignedUrl(t,e,n,o){var r=this;const a=r._removeEmptyFolders(t),s=r._getFinalPath(a),i=new URL(r.url+`/object/upload/sign/${s}`);return i.searchParams.set("token",e),r.handleOperation(async()=>{let l;const c=le(le({},Cw),o);let u=le(le({},r.headers),{"x-upsert":String(c.upsert)});const d=c.metadata;if(typeof Blob<"u"&&n instanceof Blob?(l=new FormData,l.append("cacheControl",c.cacheControl),d&&l.append("metadata",r.encodeMetadata(d)),l.append("",n)):typeof FormData<"u"&&n instanceof FormData?(l=n,l.has("cacheControl")||l.append("cacheControl",c.cacheControl),d&&!l.has("metadata")&&l.append("metadata",r.encodeMetadata(d))):(l=n,u["cache-control"]=`max-age=${c.cacheControl}`,u["content-type"]=c.contentType,d&&(u["x-metadata"]=r.toBase64(r.encodeMetadata(d))),(typeof ReadableStream<"u"&&l instanceof ReadableStream||l&&typeof l=="object"&&"pipe"in l&&typeof l.pipe=="function")&&!c.duplex&&(c.duplex="half")),o!=null&&o.headers)for(const[g,p]of Object.entries(o.headers))u=lh(u,g,p);return{path:a,fullPath:(await Kp(r.fetch,i.toString(),l,le({headers:u},c!=null&&c.duplex?{duplex:c.duplex}:{}))).Key}})}async createSignedUploadUrl(t,e){var n=this;return n.handleOperation(async()=>{let o=n._getFinalPath(t);const r=le({},n.headers);e!=null&&e.upsert&&(r["x-upsert"]="true");const a=await wn(n.fetch,`${n.url}/object/upload/sign/${o}`,{},{headers:r}),s=new URL(n.url+a.url),i=s.searchParams.get("token");if(!i)throw new ru("No token returned by API");return{signedUrl:s.toString(),path:t,token:i}})}async update(t,e,n){return this.uploadOrUpdate("PUT",t,e,n)}async move(t,e,n){var o=this;return o.handleOperation(async()=>await wn(o.fetch,`${o.url}/object/move`,{bucketId:o.bucketId,sourceKey:t,destinationKey:e,destinationBucket:n==null?void 0:n.destinationBucket},{headers:o.headers}))}async copy(t,e,n){var o=this;return o.handleOperation(async()=>({path:(await wn(o.fetch,`${o.url}/object/copy`,{bucketId:o.bucketId,sourceKey:t,destinationKey:e,destinationBucket:n==null?void 0:n.destinationBucket},{headers:o.headers})).Key}))}async createSignedUrl(t,e,n){var o=this;return o.handleOperation(async()=>{let r=o._getFinalPath(t);const a=typeof(n==null?void 0:n.transform)=="object"&&n.transform!==null&&Object.keys(n.transform).length>0;let s=await wn(o.fetch,`${o.url}/object/sign/${r}`,le({expiresIn:e},a?{transform:n.transform}:{}),{headers:o.headers});const i=new URLSearchParams;n!=null&&n.download&&i.set("download",n.download===!0?"":n.download),(n==null?void 0:n.cacheNonce)!=null&&i.set("cacheNonce",String(n.cacheNonce));const l=i.toString();return{signedUrl:encodeURI(`${o.url}${s.signedURL}${l?`&${l}`:""}`)}})}async createSignedUrls(t,e,n){var o=this;return o.handleOperation(async()=>{const r=await wn(o.fetch,`${o.url}/object/sign/${o.bucketId}`,{expiresIn:e,paths:t},{headers:o.headers}),a=new URLSearchParams;n!=null&&n.download&&a.set("download",n.download===!0?"":n.download),(n==null?void 0:n.cacheNonce)!=null&&a.set("cacheNonce",String(n.cacheNonce));const s=a.toString();return r.map(i=>le(le({},i),{},{signedUrl:i.signedURL?encodeURI(`${o.url}${i.signedURL}${s?`&${s}`:""}`):null}))})}download(t,e,n){const o=typeof(e==null?void 0:e.transform)=="object"&&e.transform!==null&&Object.keys(e.transform).length>0?"render/image/authenticated":"object",r=new URLSearchParams;e!=null&&e.transform&&this.applyTransformOptsToQuery(r,e.transform),(e==null?void 0:e.cacheNonce)!=null&&r.set("cacheNonce",String(e.cacheNonce));const a=r.toString(),s=this._getFinalPath(t),i=()=>Ki(this.fetch,`${this.url}/${o}/${s}${a?`?${a}`:""}`,{headers:this.headers,noResolveJson:!0},n);return new kI(i,this.shouldThrowOnError)}async info(t){var e=this;const n=e._getFinalPath(t);return e.handleOperation(async()=>Gp(await Ki(e.fetch,`${e.url}/object/info/${n}`,{headers:e.headers})))}async exists(t){var e=this;const n=e._getFinalPath(t);try{return await bI(e.fetch,`${e.url}/object/${n}`,{headers:e.headers}),{data:!0,error:null}}catch(r){if(e.shouldThrowOnError)throw r;if(au(r)){var o;const a=r instanceof Vp?r.status:r instanceof K1?(o=r.originalError)===null||o===void 0?void 0:o.status:void 0;if(a!==void 0&&[400,404].includes(a))return{data:!1,error:r}}throw r}}getPublicUrl(t,e){const n=this._getFinalPath(t),o=new URLSearchParams;e!=null&&e.download&&o.set("download",e.download===!0?"":e.download),e!=null&&e.transform&&this.applyTransformOptsToQuery(o,e.transform),(e==null?void 0:e.cacheNonce)!=null&&o.set("cacheNonce",String(e.cacheNonce));const r=o.toString(),a=typeof(e==null?void 0:e.transform)=="object"&&e.transform!==null&&Object.keys(e.transform).length>0?"render/image":"object";return{data:{publicUrl:encodeURI(`${this.url}/${a}/public/${n}`)+(r?`?${r}`:"")}}}async remove(t){var e=this;return e.handleOperation(async()=>await Ji(e.fetch,`${e.url}/object/${e.bucketId}`,{prefixes:t},{headers:e.headers}))}async purgeCache(t,e,n){var o=this;return o.handleOperation(async()=>{const r=o._getFinalPath(t),a=new URLSearchParams;e!=null&&e.transformations&&a.set("transformations","true");const s=a.toString();return await Ji(o.fetch,`${o.url}/cdn/${r}${s?`?${s}`:""}`,{},{headers:o.headers},n)})}async list(t,e,n){var o=this;return o.handleOperation(async()=>{const r=e!=null&&e.sortBy?le(le({},sd.sortBy),e.sortBy):sd.sortBy,a=le(le(le({},sd),e),{},{sortBy:r,prefix:t||""});return await wn(o.fetch,`${o.url}/object/list/${o.bucketId}`,a,{headers:o.headers},n)})}async listV2(t,e){var n=this;return n.handleOperation(async()=>{const o=le({},t);return await wn(n.fetch,`${n.url}/object/list-v2/${n.bucketId}`,o,{headers:n.headers},e)})}encodeMetadata(t){return JSON.stringify(t)}toBase64(t){return typeof Buffer<"u"?Buffer.from(t).toString("base64"):btoa(t)}_getFinalPath(t){return`${this.bucketId}/${t.replace(/^\/+/,"")}`}_removeEmptyFolders(t){return t.replace(/^\/|\/$/g,"").replace(/\/+/g,"/")}applyTransformOptsToQuery(t,e){return e.width&&t.set("width",e.width.toString()),e.height&&t.set("height",e.height.toString()),e.resize&&t.set("resize",e.resize),e.format&&t.set("format",e.format),e.quality&&t.set("qual
150ity",e.quality.toString()),t}};const SI="2.110.0",yl={"X-Client-Info":`storage-js/${SI}`};var TI=class extends js{constructor(t,e={},n,o){const r=new URL(t);o!=null&&o.useNewHostname&&/supabase\.(co|in|red)$/.test(r.hostname)&&!r.hostname.includes("storage.supabase.")&&(r.hostname=r.hostname.replace("supabase.","storage.supabase."));const a=r.href.replace(/\/$/,""),s=le(le({},yl),e);super(a,s,n,"storage")}async listBuckets(t){var e=this;return e.handleOperation(async()=>{const n=e.listBucketOptionsToQueryString(t);return await Ki(e.fetch,`${e.url}/bucket${n}`,{headers:e.headers})})}async getBucket(t){var e=this;return e.handleOperation(async()=>await Ki(e.fetch,`${e.url}/bucket/${t}`,{headers:e.headers}))}async createBucket(t,e={public:!1}){var n=this;return n.handleOperation(async()=>await wn(n.fetch,`${n.url}/bucket`,{id:t,name:t,type:e.type,public:e.public,file_size_limit:e.fileSizeLimit,allowed_mime_types:e.allowedMimeTypes},{headers:n.headers}))}async updateBucket(t,e){var n=this;return n.handleOperation(async()=>await Kp(n.fetch,`${n.url}/bucket/${t}`,{id:t,name:t,public:e.public,file_size_limit:e.fileSizeLimit,allowed_mime_types:e.allowedMimeTypes},{headers:n.headers}))}async emptyBucket(t){var e=this;return e.handleOperation(async()=>await wn(e.fetch,`${e.url}/bucket/${t}/empty`,{},{headers:e.headers}))}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await Ji(e.fetch,`${e.url}/bucket/${t}`,{},{headers:e.headers}))}async purgeBucketCache(t,e,n){var o=this;return o.handleOperation(async()=>{const r=new URLSearchParams;e!=null&&e.transformations&&r.set("transformations","true");const a=r.toString();return await Ji(o.fetch,`${o.url}/cdn/${t}${a?`?${a}`:""}`,{},{headers:o.headers},n)})}listBucketOptionsToQueryString(t){const e={};return t&&("limit"in t&&(e.limit=String(t.limit)),"offset"in t&&(e.offset=String(t.offset)),t.search&&(e.search=t.search),t.sortColumn&&(e.sortColumn=t.sortColumn),t.sortOrder&&(e.sortOrder=t.sortOrder)),Object.keys(e).length>0?"?"+new URLSearchParams(e).toString():""}},AI=class extends js{constructor(t,e={},n){const o=t.replace(/\/$/,""),r=le(le({},yl),e);super(o,r,n,"storage")}async createBucket(t){var e=this;return e.handleOperation(async()=>await wn(e.fetch,`${e.url}/bucket`,{name:t},{headers:e.headers}))}async listBuckets(t){var e=this;return e.handleOperation(async()=>{const n=new URLSearchParams;(t==null?void 0:t.limit)!==void 0&&n.set("limit",t.limit.toString()),(t==null?void 0:t.offset)!==void 0&&n.set("offset",t.offset.toString()),t!=null&&t.sortColumn&&n.set("sortColumn",t.sortColumn),t!=null&&t.sortOrder&&n.set("sortOrder",t.sortOrder),t!=null&&t.search&&n.set("search",t.search);const o=n.toString(),r=o?`${e.url}/bucket?${o}`:`${e.url}/bucket`;return await Ki(e.fetch,r,{headers:e.headers})})}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await Ji(e.fetch,`${e.url}/bucket/${t}`,{},{headers:e.headers}))}from(t){var e=this;if(!mI(t))throw new ru("Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters.");const n=new lI({baseUrl:this.url,catalogName:t,auth:{type:"custom",getHeaders:async()=>e.headers},fetch:this.fetch}),o=this.shouldThrowOnError;return new Proxy(n,{get(r,a){const s=r[a];return typeof s!="function"?s:async(...i)=>{try{return{data:await s.apply(r,i),error:null}}catch(l){if(o)throw l;return{data:null,error:l}}}}})}},_I=class extends js{constructor(t,e={},n){const o=t.replace(/\/$/,""),r=le(le({},yl),{},{"Content-Type":"application/json"},e);super(o,r,n,"vectors")}async createIndex(t){var e=this;return e.handleOperation(async()=>await Dt.post(e.fetch,`${e.url}/CreateIndex`,t,{headers:e.headers})||{})}async getIndex(t,e){var n=this;return n.handleOperation(async()=>await Dt.post(n.fetch,`${n.url}/GetIndex`,{vectorBucketName:t,indexName:e},{headers:n.headers}))}async listIndexes(t){var e=this;return e.handleOperation(async()=>await Dt.post(e.fetch,`${e.url}/ListIndexes`,t,{headers:e.headers}))}async deleteIndex(t,e){var n=this;return n.handleOperation(async()=>await Dt.post(n.fetch,`${n.url}/DeleteIndex`,{vectorBucketName:t,indexName:e},{headers:n.headers})||{})}},CI=class extends js{constructor(t,e={},n){const o=t.replace(/\/$/,""),r=le(le({},yl),{},{"Content-Type":"application/json"},e);super(o,r,n,"vectors")}async putVectors(t){var e=this;if(t.vectors.length<1||t.vectors.length>500)throw new Error("Vector batch size must be between 1 and 500 items");return e.handleOperation(async()=>await Dt.post(e.fetch,`${e.url}/PutVectors`,t,{headers:e.headers})||{})}async getVectors(t){var e=this;return e.handleOperation(async()=>await Dt.post(e.fetch,`${e.url}/GetVectors`,t,{headers:e.headers}))}async listVectors(t){var e=this;if(t.segmentCount!==void 0){if(t.segmentCount<1||t.segmentCount>16)throw new Error("segmentCount must be between 1 and 16");
150if(t.segmentIndex!==void 0&&(t.segmentIndex<0||t.segmentIndex>=t.segmentCount))throw new Error(`segmentIndex must be between 0 and ${t.segmentCount-1}`)}return e.handleOperation(async()=>await Dt.post(e.fetch,`${e.url}/ListVectors`,t,{headers:e.headers}))}async queryVectors(t){var e=this;return e.handleOperation(async()=>await Dt.post(e.fetch,`${e.url}/QueryVectors`,t,{headers:e.headers}))}async deleteVectors(t){var e=this;if(t.keys.length<1||t.keys.length>500)throw new Error("Keys batch size must be between 1 and 500 items");return e.handleOperation(async()=>await Dt.post(e.fetch,`${e.url}/DeleteVectors`,t,{headers:e.headers})||{})}},EI=class extends js{constructor(t,e={},n){const o=t.replace(/\/$/,""),r=le(le({},yl),{},{"Content-Type":"application/json"},e);super(o,r,n,"vectors")}async createBucket(t){var e=this;return e.handleOperation(async()=>await Dt.post(e.fetch,`${e.url}/CreateVectorBucket`,{vectorBucketName:t},{headers:e.headers})||{})}async getBucket(t){var e=this;return e.handleOperation(async()=>await Dt.post(e.fetch,`${e.url}/GetVectorBucket`,{vectorBucketName:t},{headers:e.headers}))}async listBuckets(t={}){var e=this;return e.handleOperation(async()=>await Dt.post(e.fetch,`${e.url}/ListVectorBuckets`,t,{headers:e.headers}))}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await Dt.post(e.fetch,`${e.url}/DeleteVectorBucket`,{vectorBucketName:t},{headers:e.headers})||{})}},II=class extends EI{constructor(t,e={}){super(t,e.headers||{},e.fetch)}from(t){return new PI(this.url,this.headers,t,this.fetch)}async createBucket(t){var e=()=>super.createBucket,n=this;return e().call(n,t)}async getBucket(t){var e=()=>super.getBucket,n=this;return e().call(n,t)}async listBuckets(t={}){var e=()=>super.listBuckets,n=this;return e().call(n,t)}async deleteBucket(t){var e=()=>super.deleteBucket,n=this;return e().call(n,t)}},PI=class extends _I{constructor(t,e,n,o){super(t,e,o),this.vectorBucketName=n}async createIndex(t){var e=()=>super.createIndex,n=this;return e().call(n,le(le({},t),{},{vectorBucketName:n.vectorBucketName}))}async listIndexes(t={}){var e=()=>super.listIndexes,n=this;return e().call(n,le(le({},t),{},{vectorBucketName:n.vectorBucketName}))}async getIndex(t){var e=()=>super.getIndex,n=this;return e().call(n,n.vectorBucketName,t)}async deleteIndex(t){var e=()=>super.deleteIndex,n=this;return e().call(n,n.vectorBucketName,t)}index(t){return new jI(this.url,this.headers,this.vectorBucketName,t,this.fetch)}},jI=class extends CI{constructor(t,e,n,o,r){super(t,e,r),this.vectorBucketName=n,this.indexName=o}async putVectors(t){var e=()=>super.putVectors,n=this;return e().call(n,le(le({},t),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}async getVectors(t){var e=()=>super.getVectors,n=this;return e().call(n,le(le({},t),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}async listVectors(t={}){var e=()=>super.listVectors,n=this;return e().call(n,le(le({},t),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}async queryVectors(t){var e=()=>super.queryVectors,n=this;return e().call(n,le(le({},t),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}async deleteVectors(t){var e=()=>super.deleteVectors,n=this;return e().call(n,le(le({},t),{},{vectorBucketName:n.vectorBucketName,indexName:n.indexName}))}},BI=class extends TI{constructor(t,e={},n,o){super(t,e,n,o)}from(t){return new xI(this.url,this.headers,t,this.fetch)}get vectors(){return new II(this.url+"/vector",{headers:this.headers,fetch:this.fetch})}get analytics(){return new AI(this.url+"/iceberg",this.headers,this.fetch)}};const X1="2.110.0",co=30*1e3,oi=3,id=oi*co,OI=2*co,MI="http://localhost:9999",RI="supabase.auth.token",NI={"X-Client-Info":`gotrue-js/${X1}`},Jp="X-Supabase-Api-Version",e2={"2024-01-01":{timestamp:Date.parse("2024-01-01T00:00:00.0Z"),name:"2024-01-01"}},LI=/^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i,DI=10*60*1e3;class Qi extends Error{constructor(e,n,o){super(e),this.__isAuthError=!0,this.name="AuthError",this.status=n,this.code=o}toJSON(){return{name:this.name,message:this.message,status:this.status,code:this.code}}}function G(t){return typeof t=="object"&&t!==null&&"__isAuthError"in t}class WI extends Qi{constructor(e,n,o){super(e,n,o),this.name="AuthApiError",this.status=n,this.code=o}}function qI(t){return G(t)&&t.name==="AuthApiError"}class Sn extends Qi{constructor(e,n){super(e),this.name="AuthUnknownError",this.originalError=n}}class eo extends Qi{constructor(e,n,o,r){super(e,o,r),this.name=n,this.status=o}}class tt extends eo{constructor(){super("Auth session missing!","AuthSessionMissingError",400,void 0)}}function ec(t){return G(t)&&t.name==="AuthSessionMissingError"}class pa extends eo{constructor(){super("Auth session or user missing","AuthInvalidToken
150ResponseError",500,void 0)}}class tc extends eo{constructor(e){super(e,"AuthInvalidCredentialsError",400,void 0)}}class nc extends eo{constructor(e,n=null){super(e,"AuthImplicitGrantRedirectError",500,void 0),this.details=null,this.details=n}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}}function FI(t){return G(t)&&t.name==="AuthImplicitGrantRedirectError"}class Ew extends eo{constructor(e,n=null){super(e,"AuthPKCEGrantCodeExchangeError",500,void 0),this.details=null,this.details=n}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}}class HI extends eo{constructor(){super("PKCE code verifier not found in storage. This can happen if the auth flow was initiated in a different browser or device, or if the storage was cleared. For SSR frameworks (Next.js, SvelteKit, etc.), use @supabase/ssr on both the server and client to store the code verifier in cookies.","AuthPKCECodeVerifierMissingError",400,"pkce_code_verifier_not_found")}}class Qp extends eo{constructor(e,n){super(e,"AuthRetryableFetchError",n,void 0)}}function Iw(t){return G(t)&&t.name==="AuthRetryableFetchError"}class Pw extends eo{constructor(e="Refresh result discarded: session state changed mid-flight (e.g., concurrent signOut)"){super(e,"AuthRefreshDiscardedError",409,void 0)}}function zI(t){return G(t)&&t.name==="AuthRefreshDiscardedError"}class jw extends eo{constructor(e,n,o){super(e,"AuthWeakPasswordError",n,"weak_password"),this.reasons=o}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{reasons:this.reasons})}}class ch extends eo{constructor(e){super(e,"AuthInvalidJwtError",400,"invalid_jwt")}}const hh="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".split(""),Bw=` 	
151\r=`.split(""),$I=(()=>{const t=new Array(128);for(let e=0;e<t.length;e+=1)t[e]=-1;for(let e=0;e<Bw.length;e+=1)t[Bw[e].charCodeAt(0)]=-2;for(let e=0;e<hh.length;e+=1)t[hh[e].charCodeAt(0)]=e;return t})();function Ow(t,e,n){if(t!==null)for(e.queue=e.queue<<8|t,e.queuedBits+=8;e.queuedBits>=6;){const o=e.queue>>e.queuedBits-6&63;n(hh[o]),e.queuedBits-=6}else if(e.queuedBits>0)for(e.queue=e.queue<<6-e.queuedBits,e.queuedBits=6;e.queuedBits>=6;){const o=e.queue>>e.queuedBits-6&63;n(hh[o]),e.queuedBits-=6}}function t2(t,e,n){const o=$I[t];if(o>-1)for(e.queue=e.queue<<6|o,e.queuedBits+=6;e.queuedBits>=8;)n(e.queue>>e.queuedBits-8&255),e.queuedBits-=8;else{if(o===-2)return;throw new Error(`Invalid Base64-URL character "${String.fromCharCode(t)}"`)}}function Mw(t){const e=[],n=s=>{e.push(String.fromCodePoint(s))},o={utf8seq:0,codepoint:0},r={queue:0,queuedBits:0},a=s=>{VI(s,o,n)};for(let s=0;s<t.length;s+=1)t2(t.charCodeAt(s),r,a);return e.join("")}function UI(t,e){if(t<=127){e(t);return}else if(t<=2047){e(192|t>>6),e(128|t&63);return}else if(t<=65535){e(224|t>>12),e(128|t>>6&63),e(128|t&63);return}else if(t<=1114111){e(240|t>>18),e(128|t>>12&63),e(128|t>>6&63),e(128|t&63);return}throw new Error(`Unrecognized Unicode codepoint: ${t.toString(16)}`)}function YI(t,e){for(let n=0;n<t.length;n+=1){let o=t.charCodeAt(n);if(o>55295&&o<=56319){const r=(o-55296)*1024&65535;o=(t.charCodeAt(n+1)-56320&65535|r)+65536,n+=1}UI(o,e)}}function VI(t,e,n){if(e.utf8seq===0){if(t<=127){n(t);return}for(let o=1;o<6;o+=1)if(!(t>>7-o&1)){e.utf8seq=o;break}if(e.utf8seq===2)e.codepoint=t&31;else if(e.utf8seq===3)e.codepoint=t&15;else if(e.utf8seq===4)e.codepoint=t&7;else throw new Error("Invalid UTF-8 sequence");e.utf8seq-=1}else if(e.utf8seq>0){if(t<=127)throw new Error("Invalid UTF-8 sequence");e.codepoint=e.codepoint<<6|t&63,e.utf8seq-=1,e.utf8seq===0&&n(e.codepoint)}}function Ka(t){const e=[],n={queue:0,queuedBits:0},o=r=>{e.push(r)};for(let r=0;r<t.length;r+=1)t2(t.charCodeAt(r),n,o);return new Uint8Array(e)}function GI(t){const e=[];return YI(t,n=>e.push(n)),new Uint8Array(e)}function Br(t){const e=[],n={queue:0,queuedBits:0},o=r=>{e.push(r)};return t.forEach(r=>Ow(r,n,o)),Ow(null,n,o),e.join("")}function KI(t){return Math.round(Date.now()/1e3)+t}function JI(){return Symbol("auth-callback")}const pt=()=>typeof window<"u"&&typeof document<"u",Tr={tested:!1,writable:!1},n2=()=>{if(!pt())return!1;try{if(typeof globalThis.localStorage!="object")return!1}catch{return!1}if(Tr.tested)return Tr.writable;const t=`lswt-${Math.random()}${Math.random()}`;try{globalThis.localStorage.setItem(t,t),globalThis.localStorage.removeItem(t),Tr.tested=!0,Tr.writable=!0}catch{Tr.tested=!0,Tr.writable=!1}return Tr.writable};function QI(t){const e={},n=new URL(t);if(n.hash&&n.hash[0]==="#")try{new URLSearchParams(n.hash.substring(1)).forEac
151h((r,a)=>{e[a]=r})}catch{}return n.searchParams.forEach((o,r)=>{e[r]=o}),e}const o2=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),ZI=t=>typeof t=="object"&&t!==null&&"status"in t&&"ok"in t&&"json"in t&&typeof t.json=="function",va=async(t,e,n)=>{await t.setItem(e,JSON.stringify(n))},pn=async(t,e)=>{const n=await t.getItem(e);if(!n)return null;try{return JSON.parse(n)}catch{return null}},Ve=async(t,e)=>{await t.removeItem(e)};class su{constructor(){this.promise=new su.promiseConstructor((e,n)=>{this.resolve=e,this.reject=n})}}su.promiseConstructor=Promise;function oc(t){const e=t.split(".");if(e.length!==3)throw new ch("Invalid JWT structure");for(let o=0;o<e.length;o++)if(!LI.test(e[o]))throw new ch("JWT not in base64url format");return{header:JSON.parse(Mw(e[0])),payload:JSON.parse(Mw(e[1])),signature:Ka(e[2]),raw:{header:e[0],payload:e[1]}}}async function XI(t){return await new Promise(e=>{setTimeout(()=>e(null),t)})}function e8(t,e){return new Promise((o,r)=>{(async()=>{for(let a=0;a<1/0;a++)try{const s=await t(a);if(!e(a,null,s)){o(s);return}}catch(s){if(!e(a,s)){r(s);return}}})()})}function t8(t){return("0"+t.toString(16)).substr(-2)}function n8(){const e=new Uint32Array(56);if(typeof crypto>"u"){const n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",o=n.length;let r="";for(let a=0;a<56;a++)r+=n.charAt(Math.floor(Math.random()*o));return r}return crypto.getRandomValues(e),Array.from(e,t8).join("")}async function o8(t){const n=new TextEncoder().encode(t),o=await crypto.subtle.digest("SHA-256",n),r=new Uint8Array(o);return Array.from(r).map(a=>String.fromCharCode(a)).join("")}async function r8(t){if(!(typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof TextEncoder<"u"))return console.warn("WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256."),t;const n=await o8(t);return btoa(n).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}async function Ar(t,e,n=!1){const o=n8();let r=o;n&&(r+="/recovery"),await va(t,`${e}-code-verifier`,r);const a=await r8(o);return[a,o===a?"plain":"s256"]}const a8=/^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;function s8(t){const e=t.headers.get(Jp);if(!e||!e.match(a8))return null;try{return new Date(`${e}T00:00:00.0Z`)}catch{return null}}function i8(t){if(!t)throw new Error("Missing exp claim");const e=Math.floor(Date.now()/1e3);if(t<=e)throw new Error("JWT has expired")}function l8(t){switch(t){case"RS256":return{name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}};case"ES256":return{name:"ECDSA",namedCurve:"P-256",hash:{name:"SHA-256"}};default:throw new Error("Invalid alg claim")}}const c8=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;function ro(t){if(!c8.test(t))throw new Error("@supabase/auth-js: Expected parameter to be UUID but is not")}function gn(t){if(!t.passkey)throw new Error("@supabase/auth-js: the passkey API is experimental and disabled by default. Enable it by passing `auth: { experimental: { passkey: true } }` to createClient (or to the GoTrueClient constructor).")}function ld(){const t={};return new Proxy(t,{get:(e,n)=>{if(n==="__isUserNotAvailableProxy")return!0;if(typeof n=="symbol"){const o=n.toString();if(o==="Symbol(Symbol.toPrimitive)"||o==="Symbol(Symbol.toStringTag)"||o==="Symbol(util.inspect.custom)")return}throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the "${n}" property of the session object is not supported. Please use getUser() instead.`)},set:(e,n)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the "${n}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)},deleteProperty:(e,n)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the "${n}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)}})}function h8(t,e){return new Proxy(t,{get:(n,o,r)=>{if(o==="__isInsecureUserWarningProxy")return!0;
151if(typeof o=="symbol"){const a=o.toString();if(a==="Symbol(Symbol.toPrimitive)"||a==="Symbol(Symbol.toStringTag)"||a==="Symbol(util.inspect.custom)"||a==="Symbol(nodejs.util.inspect.custom)")return Reflect.get(n,o,r)}return!e.value&&typeof o=="string"&&(console.warn("Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server."),e.value=!0),Reflect.get(n,o,r)}})}function Rw(t){return JSON.parse(JSON.stringify(t))}const Er=t=>{if(typeof t=="object"&&t!==null){const e=t;if(typeof e.msg=="string")return e.msg;if(typeof e.message=="string")return e.message;if(typeof e.error_description=="string")return e.error_description;if(typeof e.error=="string")return e.error}return JSON.stringify(t)},u8=[500,501,502,503,504,520,521,522,523,524,525,526,527,528,529,530];async function Nw(t){var e;if(!ZI(t))throw new Qp(Er(t),0);if(u8.includes(t.status))throw new Qp(Er(t),t.status);let n;try{n=await t.json()}catch(a){throw new Sn(Er(a),a)}let o;const r=s8(t);if(r&&r.getTime()>=e2["2024-01-01"].timestamp&&typeof n=="object"&&n&&typeof n.code=="string"?o=n.code:typeof n=="object"&&n&&typeof n.error_code=="string"&&(o=n.error_code),o){if(o==="weak_password")throw new jw(Er(n),t.status,((e=n.weak_password)===null||e===void 0?void 0:e.reasons)||[]);if(o==="session_not_found")throw new tt}else if(typeof n=="object"&&n&&typeof n.weak_password=="object"&&n.weak_password&&Array.isArray(n.weak_password.reasons)&&n.weak_password.reasons.length&&n.weak_password.reasons.reduce((a,s)=>a&&typeof s=="string",!0))throw new jw(Er(n),t.status,n.weak_password.reasons);throw new WI(Er(n),t.status||500,o)}const d8=(t,e,n,o)=>{const r={method:t,headers:(e==null?void 0:e.headers)||{}};return t==="GET"?r:(r.headers=Object.assign({"Content-Type":"application/json;charset=UTF-8"},e==null?void 0:e.headers),r.body=JSON.stringify(o),Object.assign(Object.assign({},r),n))};async function X(t,e,n,o){var r;const a=Object.assign({},o==null?void 0:o.headers);a[Jp]||(a[Jp]=e2["2024-01-01"].name),o!=null&&o.jwt&&(a.Authorization=`Bearer ${o.jwt}`);const s=(r=o==null?void 0:o.query)!==null&&r!==void 0?r:{};o!=null&&o.redirectTo&&(s.redirect_to=o.redirectTo);const i=Object.keys(s).length?"?"+new URLSearchParams(s).toString():"",l=await p8(t,e,n+i,{headers:a,noResolveJson:o==null?void 0:o.noResolveJson},{},o==null?void 0:o.body);return o!=null&&o.xform?o==null?void 0:o.xform(l):{data:Object.assign({},l),error:null}}async function p8(t,e,n,o,r,a){const s=d8(e,o,r,a);let i;try{i=await t(n,Object.assign({},s))}catch(l){throw console.error(l),new Qp(Er(l),0)}if(i.ok||await Nw(i),o!=null&&o.noResolveJson)return i;try{return await i.json()}catch(l){await Nw(l)}}function Vt(t){var e;let n=null;f8(t)&&(n=Object.assign({},t),t.expires_at||(n.expires_at=KI(t.expires_in)));const o=(e=t.user)!==null&&e!==void 0?e:typeof(t==null?void 0:t.id)=="string"?t:null;return{data:{session:n,user:o},error:null}}function Lw(t){const e=Vt(t);return!e.error&&t.weak_password&&typeof t.weak_password=="object"&&Array.isArray(t.weak_password.reasons)&&t.weak_password.reasons.length&&t.weak_password.message&&typeof t.weak_password.message=="string"&&t.weak_password.reasons.reduce((n,o)=>n&&typeof o=="string",!0)&&(e.data.weak_password=t.weak_password),e}function Ho(t){var e;return{data:{user:(e=t.user)!==null&&e!==void 0?e:t},error:null}}function g8(t){return{data:t,error:null}}function m8(t){const{action_link:e,email_otp:n,hashed_token:o,redirect_to:r,verification_type:a}=t,s=Ps(t,["action_link","email_otp","hashed_token","redirect_to","verification_type"]),i={action_link:e,email_otp:n,hashed_token:o,redirect_to:r,verification_type:a},l=Object.assign({},s);return{data:{properties:i,user:l},error:null}}function Dw(t){return t}function f8(t){return!!t.access_token&&!!t.refresh_token&&!!t.expires_in}const cd=["global","local","others"];class y8{constructor({url:e="",headers:n={},fetch:o,experimental:r}){this.url=e,this.headers=n,this.fetch=o2(o),this.experimental=r??{},this.mfa={listFactors:this._listFactors.bind(this),deleteFactor:this._deleteFactor.bind(this)},this.oauth={listClients:this._listOAuthClients.bind(this),createClient:this._createOAuthClient.bind(this),getClient:this._getOAuthClient.bind(this),updateClient:this._updateOAuthClient.bind(this),deleteClient:this._deleteOAuthClient.bind(this),regenerateClientSecret:this._regenerateOAuthClientSecret.bind(this)},this.customProviders={listProviders:this._listCustomProviders.bind(this),createProvider:this._createCustomProvider.bind(this),getProvider:this._getCustomProvider.bind(this),updateProvider:this._updateCustomProvider.bind(this),deleteProvider:this._deleteCustomProvider.bind(this)},this.passkey={listPasskeys:this._adminListPasskeys.bind(this),deletePasskey:this._adminDeletePasskey.bind(this)}}
151async signOut(e,n=cd[0]){if(cd.indexOf(n)<0)throw new Error(`@supabase/auth-js: Parameter scope must be one of ${cd.join(", ")}`);try{return await X(this.fetch,"POST",`${this.url}/logout?scope=${n}`,{headers:this.headers,jwt:e,noResolveJson:!0}),{data:null,error:null}}catch(o){if(G(o))return{data:null,error:o};throw o}}async inviteUserByEmail(e,n={}){try{return await X(this.fetch,"POST",`${this.url}/invite`,{body:{email:e,data:n.data},headers:this.headers,redirectTo:n.redirectTo,xform:Ho})}catch(o){if(G(o))return{data:{user:null},error:o};throw o}}async generateLink(e){try{const{options:n}=e,o=Ps(e,["options"]),r=Object.assign(Object.assign({},o),n);return"newEmail"in o&&(r.new_email=o==null?void 0:o.newEmail,delete r.newEmail),await X(this.fetch,"POST",`${this.url}/admin/generate_link`,{body:r,headers:this.headers,xform:m8,redirectTo:n==null?void 0:n.redirectTo})}catch(n){if(G(n))return{data:{properties:null,user:null},error:n};throw n}}async createUser(e){try{return await X(this.fetch,"POST",`${this.url}/admin/users`,{body:e,headers:this.headers,xform:Ho})}catch(n){if(G(n))return{data:{user:null},error:n};throw n}}async listUsers(e){var n,o,r,a,s,i,l;try{const c={nextPage:null,lastPage:0,total:0},u=await X(this.fetch,"GET",`${this.url}/admin/users`,{headers:this.headers,noResolveJson:!0,query:{page:(o=(n=e==null?void 0:e.page)===null||n===void 0?void 0:n.toString())!==null&&o!==void 0?o:"",per_page:(a=(r=e==null?void 0:e.perPage)===null||r===void 0?void 0:r.toString())!==null&&a!==void 0?a:""},xform:Dw});if(u.error)throw u.error;const d=await u.json(),g=(s=u.headers.get("x-total-count"))!==null&&s!==void 0?s:0,p=(l=(i=u.headers.get("link"))===null||i===void 0?void 0:i.split(","))!==null&&l!==void 0?l:[];return p.length>0&&(p.forEach(v=>{const y=parseInt(v.split(";")[0].split("=")[1].substring(0,1)),k=JSON.parse(v.split(";")[1].split("=")[1]);c[`${k}Page`]=y}),c.total=parseInt(g)),{data:Object.assign(Object.assign({},d),c),error:null}}catch(c){if(G(c))return{data:{users:[]},error:c};throw c}}async getUserById(e){ro(e);try{return await X(this.fetch,"GET",`${this.url}/admin/users/${e}`,{headers:this.headers,xform:Ho})}catch(n){if(G(n))return{data:{user:null},error:n};throw n}}async updateUserById(e,n){ro(e);try{return await X(this.fetch,"PUT",`${this.url}/admin/users/${e}`,{body:n,headers:this.headers,xform:Ho})}catch(o){if(G(o))return{data:{user:null},error:o};throw o}}async deleteUser(e,n=!1){ro(e);try{return await X(this.fetch,"DELETE",`${this.url}/admin/users/${e}`,{headers:this.headers,body:{should_soft_delete:n},xform:Ho})}catch(o){if(G(o))return{data:{user:null},error:o};throw o}}async _listFactors(e){ro(e.userId);try{const{data:n,error:o}=await X(this.fetch,"GET",`${this.url}/admin/users/${e.userId}/factors`,{headers:this.headers,xform:r=>({data:{factors:r},error:null})});return{data:n,error:o}}catch(n){if(G(n))return{data:null,error:n};throw n}}async _deleteFactor(e){ro(e.userId),ro(e.id);try{return{data:await X(this.fetch,"DELETE",`${this.url}/admin/users/${e.userId}/factors/${e.id}`,{headers:this.headers}),error:null}}catch(n){if(G(n))return{data:null,error:n};throw n}}async _listOAuthClients(e){var n,o,r,a,s,i,l;try{const c={nextPage:null,lastPage:0,total:0},u=await X(this.fetch,"GET",`${this.url}/admin/oauth/clients`,{headers:this.headers,noResolveJson:!0,query:{page:(o=(n=e==null?void 0:e.page)===null||n===void 0?void 0:n.toString())!==null&&o!==void 0?o:"",per_page:(a=(r=e==null?void 0:e.perPage)===null||r===void 0?void 0:r.toString())!==null&&a!==void 0?a:""},xform:Dw});if(u.error)throw u.error;const d=await u.json(),g=(s=u.headers.get("x-total-count"))!==null&&s!==void 0?s:0,p=(l=(i=u.headers.get("link"))===null||i===void 0?void 0:i.split(","))!==null&&l!==void 0?l:[];return p.length>0&&(p.forEach(v=>{const y=parseInt(v.split(";")[0].split("=")[1].substring(0,1)),k=JSON.parse(v.split(";")[1].split("=")[1]);c[`${k}Page`]=y}),c.total=parseInt(g)),{data:Object.assign(Object.assign({},d),c),error:null}}catch(c){if(G(c))return{data:{clients:[]},error:c};throw c}}async _createOAuthClient(e){try{return await X(this.fetch,"POST",`${this.url}/admin/oauth/clients`,{body:e,headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(G(n))return{data:null,error:n};throw n}}async _getOAuthClient(e){try{return await X(this.fetch,"GET",`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(G(n))return{data:null,error:n};throw n}}async _updateOAuthClient(e,n){try{return await X(this.fetch,"PUT",`${this.url}/admin/oauth/clients/${e}`,{body:n,headers:this.headers,xform:o=>({data:o,error:null})})}catch(o){if(G(o))return{data:null,error:o};throw o}}async _deleteOAuthClient(e){try{return await X(this.fetch,"DELET
151E",`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(n){if(G(n))return{data:null,error:n};throw n}}async _regenerateOAuthClientSecret(e){try{return await X(this.fetch,"POST",`${this.url}/admin/oauth/clients/${e}/regenerate_secret`,{headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(G(n))return{data:null,error:n};throw n}}async _listCustomProviders(e){try{const n={};return e!=null&&e.type&&(n.type=e.type),await X(this.fetch,"GET",`${this.url}/admin/custom-providers`,{headers:this.headers,query:n,xform:o=>{var r;return{data:{providers:(r=o==null?void 0:o.providers)!==null&&r!==void 0?r:[]},error:null}}})}catch(n){if(G(n))return{data:{providers:[]},error:n};throw n}}async _createCustomProvider(e){try{return await X(this.fetch,"POST",`${this.url}/admin/custom-providers`,{body:e,headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(G(n))return{data:null,error:n};throw n}}async _getCustomProvider(e){try{return await X(this.fetch,"GET",`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(G(n))return{data:null,error:n};throw n}}async _updateCustomProvider(e,n){try{return await X(this.fetch,"PUT",`${this.url}/admin/custom-providers/${e}`,{body:n,headers:this.headers,xform:o=>({data:o,error:null})})}catch(o){if(G(o))return{data:null,error:o};throw o}}async _deleteCustomProvider(e){try{return await X(this.fetch,"DELETE",`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(n){if(G(n))return{data:null,error:n};throw n}}async _adminListPasskeys(e){gn(this.experimental),ro(e.userId);try{return await X(this.fetch,"GET",`${this.url}/admin/users/${e.userId}/passkeys`,{headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(G(n))return{data:null,error:n};throw n}}async _adminDeletePasskey(e){gn(this.experimental),ro(e.userId),ro(e.passkeyId);try{return await X(this.fetch,"DELETE",`${this.url}/admin/users/${e.userId}/passkeys/${e.passkeyId}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(n){if(G(n))return{data:null,error:n};throw n}}}function Ww(t={}){return{getItem:e=>t[e]||null,setItem:(e,n)=>{t[e]=n},removeItem:e=>{delete t[e]}}}globalThis&&n2()&&globalThis.localStorage&&globalThis.localStorage.getItem("supabase.gotrue-js.locks.debug");class w8 extends Error{constructor(e){super(e),this.isAcquireTimeout=!0}}function b8(){if(typeof globalThis!="object")try{Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__}catch{typeof self<"u"&&(self.globalThis=self)}}function r2(t){if(!/^0x[a-fA-F0-9]{40}$/.test(t))throw new Error(`@supabase/auth-js: Address "${t}" is invalid.`);return t.toLowerCase()}function v8(t){return parseInt(t,16)}function k8(t){const e=new TextEncoder().encode(t);return"0x"+Array.from(e,o=>o.toString(16).padStart(2,"0")).join("")}function x8(t){var e;const{chainId:n,domain:o,expirationTime:r,issuedAt:a=new Date,nonce:s,notBefore:i,requestId:l,resources:c,scheme:u,uri:d,version:g}=t;{if(!Number.isInteger(n))throw new Error(`@supabase/auth-js: Invalid SIWE message field "chainId". Chain ID must be a EIP-155 chain ID. Provided value: ${n}`);if(!o)throw new Error('@supabase/auth-js: Invalid SIWE message field "domain". Domain must be provided.');if(s&&s.length<8)throw new Error(`@supabase/auth-js: Invalid SIWE message field "nonce". Nonce must be at least 8 characters. Provided value: ${s}`);if(!d)throw new Error('@supabase/auth-js: Invalid SIWE message field "uri". URI must be provided.');if(g!=="1")throw new Error(`@supabase/auth-js: Invalid SIWE message field "version". Version must be '1'. Provided value: ${g}`);if(!((e=t.statement)===null||e===void 0)&&e.includes(`
152`))throw new Error(`@supabase/auth-js: Invalid SIWE message field "statement". Statement must not include '\\n'. Provided value: ${t.statement}`)}const p=r2(t.address),v=u?`${u}://${o}`:o,y=t.statement?`${t.statement}
153`:"",k=`${v} wants you to sign in with your Ethereum account:
154${p}
155
156${y}`;let w=`URI: ${d}
157Version: ${g}
158Chain ID: ${n}${s?`
159Nonce: ${s}`:""}
160Issued At: ${a.toISOString()}`;if(r&&(w+=`
161Expiration Time: ${r.toISOString()}`),i&&(w+=`
162Not Before: ${i.toISOString()}`),l&&(w+=`
163Request ID: ${l}`),c){let m=`
164Resources:`;for(const b of c){if(!b||typeof b!="string")throw new Error(`@supabase/auth-js: Invalid SIWE message field "resources". Every resource must be a valid string. Provided value: ${b}`);m+=`
165- ${b}`}w+=m}return`${k}
166${w}`}
166class Je extends Error{constructor({message:e,code:n,cause:o,name:r}){var a;super(e,{cause:o}),this.__isWebAuthnError=!0,this.name=(a=r??(o instanceof Error?o.name:void 0))!==null&&a!==void 0?a:"Unknown Error",this.code=n}toJSON(){return{name:this.name,message:this.message,code:this.code}}}class uh extends Je{constructor(e,n){super({code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:n,message:e}),this.name="WebAuthnUnknownError",this.originalError=n}}function S8({error:t,options:e}){var n,o,r;const{publicKey:a}=e;if(!a)throw Error("options was missing required publicKey property");if(t.name==="AbortError"){if(e.signal instanceof AbortSignal)return new Je({message:"Registration ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else if(t.name==="ConstraintError"){if(((n=a.authenticatorSelection)===null||n===void 0?void 0:n.requireResidentKey)===!0)return new Je({message:"Discoverable credentials were required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT",cause:t});if(e.mediation==="conditional"&&((o=a.authenticatorSelection)===null||o===void 0?void 0:o.userVerification)==="required")return new Je({message:"User verification was required during automatic registration but it could not be performed",code:"ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE",cause:t});if(((r=a.authenticatorSelection)===null||r===void 0?void 0:r.userVerification)==="required")return new Je({message:"User verification was required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT",cause:t})}else{if(t.name==="InvalidStateError")return new Je({message:"The authenticator was previously registered",code:"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED",cause:t});if(t.name==="NotAllowedError")return new Je({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if(t.name==="NotSupportedError")return a.pubKeyCredParams.filter(i=>i.type==="public-key").length===0?new Je({message:'No entry in pubKeyCredParams was of type "public-key"',code:"ERROR_MALFORMED_PUBKEYCREDPARAMS",cause:t}):new Je({message:"No available authenticator supported any of the specified pubKeyCredParams algorithms",code:"ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG",cause:t});if(t.name==="SecurityError"){const s=window.location.hostname;if(a2(s)){if(a.rp.id!==s)return new Je({message:`The RP ID "${a.rp.id}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else return new Je({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t})}else if(t.name==="TypeError"){if(a.user.id.byteLength<1||a.user.id.byteLength>64)return new Je({message:"User ID was not between 1 and 64 characters",code:"ERROR_INVALID_USER_ID_LENGTH",cause:t})}else if(t.name==="UnknownError")return new Je({message:"The authenticator was unable to process the specified options, or could not create a new credential",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}return new Je({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t})}function T8({error:t,options:e}){const{publicKey:n}=e;if(!n)throw Error("options was missing required publicKey property");if(t.name==="AbortError"){if(e.signal instanceof AbortSignal)return new Je({message:"Authentication ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else{if(t.name==="NotAllowedError")return new Je({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if(t.name==="SecurityError"){const o=window.location.hostname;if(a2(o)){if(n.rpId!==o)return new Je({message:`The RP ID "${n.rpId}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else return new Je({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t})}else if(t.name==="UnknownError")return new Je({message:"The authenticator was unable to process the specified options, or could not create a new assertion signature",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}return new Je({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t})}class A8{createNewAbortSignal(){if(this.controller){const n=new Error("Cancelling existing WebAuthn API call for new one");n.name="AbortError",this.controller.abort(n)}const e=new AbortController;return this.controller=e,e.signal}cancelCeremony(){if(this.controller){const e=new Error("Manually cancelling existing WebAuthn API call");e.name="AbortError",this.controller.abort(e),this.controller=void 0}}}const Zp=new A8;function qw(t){if(!t)throw new Error("Credential creation options are required");if(typeof PublicKeyCredential<"u"&&"parseCreationOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseCreationOptionsFromJSON=="function")return PublicKeyCredential.parseCreationOptionsFromJSON(t);const{challenge:e,user:n,excludeCredentials:o}=t,r=Ps(t,["challenge","user","excludeCredentials"]),a=Ka(e).buffer,s=Object.assign(Object.assign({},n),{id:Ka(n.id).buffer}),i=Object.assign(Object.assign({},r),{challenge:a,user:s});if(o&&o.length>0){i.excludeCredentials=new Array(o.length);for(let l=0;l<o.length;l++){const c=o[l];i.excludeCredentials[l]=Object.assign(Object.assign({},c),{id:Ka(c.id).buffer,type:c.type||"public-key",transports:c.transports})}}return i}function Fw(t){if(!t)throw new Error("Credential request options are required");if(typeof PublicKeyCredential<"u"&&"parseRequestOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseRequestOptionsFromJSON=="function")return PublicKeyCredential.parseRequestOptionsFromJSON(t);const{challenge:e,allowCredentials:n}=t,o=Ps(t,["challenge","allowCredentials"]),r=Ka(e).buffer,a=Object.assign(Object.assign({},o),{challenge:r});if(n&&n.length>0){a.allowCredentials=new Array(n.length);for(let s=0;s<n.length;s++){const i=n[s];a.allowCredentials[s]=Object.assign(Object.assign({}
166,i),{id:Ka(i.id).buffer,type:i.type||"public-key",transports:i.transports})}}return a}function Hw(t){var e;if("toJSON"in t&&typeof t.toJSON=="function")return t.toJSON();const n=t;return{id:t.id,rawId:t.id,response:{attestationObject:Br(new Uint8Array(t.response.attestationObject)),clientDataJSON:Br(new Uint8Array(t.response.clientDataJSON))},type:"public-key",clientExtensionResults:t.getClientExtensionResults(),authenticatorAttachment:(e=n.authenticatorAttachment)!==null&&e!==void 0?e:void 0}}function zw(t){var e;if("toJSON"in t&&typeof t.toJSON=="function")return t.toJSON();const n=t,o=t.getClientExtensionResults(),r=t.response;return{id:t.id,rawId:t.id,response:{authenticatorData:Br(new Uint8Array(r.authenticatorData)),clientDataJSON:Br(new Uint8Array(r.clientDataJSON)),signature:Br(new Uint8Array(r.signature)),userHandle:r.userHandle?Br(new Uint8Array(r.userHandle)):void 0},type:"public-key",clientExtensionResults:o,authenticatorAttachment:(e=n.authenticatorAttachment)!==null&&e!==void 0?e:void 0}}function a2(t){return t==="localhost"||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(t)}function dh(){var t,e;return!!(pt()&&"PublicKeyCredential"in window&&window.PublicKeyCredential&&"credentials"in navigator&&typeof((t=navigator==null?void 0:navigator.credentials)===null||t===void 0?void 0:t.create)=="function"&&typeof((e=navigator==null?void 0:navigator.credentials)===null||e===void 0?void 0:e.get)=="function")}async function s2(t){try{const e=await navigator.credentials.create(t);return e?e instanceof PublicKeyCredential?{data:e,error:null}:{data:null,error:new uh("Browser returned unexpected credential type",e)}:{data:null,error:new uh("Empty credential response",e)}}catch(e){return{data:null,error:S8({error:e,options:t})}}}async function i2(t){try{const e=await navigator.credentials.get(t);return e?e instanceof PublicKeyCredential?{data:e,error:null}:{data:null,error:new uh("Browser returned unexpected credential type",e)}:{data:null,error:new uh("Empty credential response",e)}}catch(e){return{data:null,error:T8({error:e,options:t})}}}const _8={hints:["security-key"],authenticatorSelection:{authenticatorAttachment:"cross-platform",requireResidentKey:!1,userVerification:"preferred",residentKey:"discouraged"},attestation:"direct"},C8={userVerification:"preferred",hints:["security-key"],attestation:"direct"};function ph(...t){const e=r=>r!==null&&typeof r=="object"&&!Array.isArray(r),n=r=>r instanceof ArrayBuffer||ArrayBuffer.isView(r),o={};for(const r of t)if(r)for(const a in r){const s=r[a];if(s!==void 0)if(Array.isArray(s))o[a]=s;else if(n(s))o[a]=s;else if(e(s)){const i=o[a];e(i)?o[a]=ph(i,s):o[a]=ph(s)}else o[a]=s}return o}function E8(t,e){return ph(_8,t,e||{})}function I8(t,e){return ph(C8,t,e||{})}class P8{constructor(e){this.client=e,this.enroll=this._enroll.bind(this),this.challenge=this._challenge.bind(this),this.verify=this._verify.bind(this),this.authenticate=this._authenticate.bind(this),this.register=this._register.bind(this)}async _enroll(e){return this.client.mfa.enroll(Object.assign(Object.assign({},e),{factorType:"webauthn"}))}async _challenge({factorId:e,webauthn:n,friendlyName:o,signal:r},a){var s;try{const{data:i,error:l}=await this.client.mfa.challenge({factorId:e,webauthn:n});if(!i)return{data:null,error:l};const c=r??Zp.createNewAbortSignal();if(i.webauthn.type==="create"){const{user:u}=i.webauthn.credential_options.publicKey;if(!u.name){const d=o;if(d)u.name=`${u.id}:${d}`;else{const p=(await this.client.getUser()).data.user,v=((s=p==null?void 0:p.user_metadata)===null||s===void 0?void 0:s.name)||(p==null?void 0:p.email)||(p==null?void 0:p.id)||"User";u.name=`${u.id}:${v}`}}u.displayName||(u.displayName=u.name)}switch(i.webauthn.type){case"create":{const u=E8(i.webauthn.credential_options.publicKey,a==null?void 0:a.create),{data:d,error:g}=await s2({publicKey:u,signal:c});return d?{data:{factorId:e,challengeId:i.id,webauthn:{type:i.webauthn.type,credential_response:d}},error:null}:{data:null,error:g}}case"request":{const u=I8(i.webauthn.credential_options.publicKey,a==null?void 0:a.request),{data:d,error:g}=await i2(Object.assign(Object.assign({},i.webauthn.credential_options),{publicKey:u,signal:c}));return d?{data:{factorId:e,challengeId:i.id,webauthn:{type:i.webauthn.type,credential_response:d}},error:null}:{data:null,error:g}}}}catch(i){return G(i)?{data:null,error:i}:{data:null,error:new Sn("Unexpected error in challenge",i)}}}async _verify({challengeId:e,factorId:n,webauthn:o}){return this.client.mfa.verify({factorId:n,challengeId:e,webauthn:o})}async _authenticate({factorId:e,webauthn:{rpId:n=typeof window<"u"?window.location.hostname:void 0,rpOrigins:o=typeof window<"u"?[window.location.origin]:void 0,signal:r}={}},a){if(!n)return{data:null,error:new Qi("rpId is required for WebAuthn authentication")};try{if(!dh())return{data:null,error:new Sn("Browser does not support WebAuthn",null)};const{data:s,error:i}=await this.challenge({factorId:e,webauthn:{rpId:n,rpOrigins:o},signal:r},{request:a});if(!s)return{data:null,error:i};const{webauthn:l}=s;return this._verify({factorId:e,challengeId:s.challengeId,webauthn:{type:l.type,rpId:n,rpOrigins:o,credential_response:l.credential_response}})}catch(s){return G(s)?{data:null,error:s}:{data:null,error:new Sn("Unexpected error in authenticate",s)}}}async _register({friendlyName:e,webauthn:{rpId:n=typeof window<"u"?window.location.hostname:void 0,rpOrigins:o=typeof window<"u"?[window.location.origin]:void 0,signal:r}={}},a){if(!n)return{data:null,error:new Qi("rpId is required for WebAuthn registration")};try{if(!dh())return{data:null,error:new Sn("Browser does not support WebAuthn",null)};const{data:s,error:i}=await this._enroll({friendlyName:e});if(!s)return await this.client.mfa.listFactors().then(u=>{var d;return(d=u.data)===null||d===void 0?void 0:d.all.find(g=>g.factor_type==="webauthn"&&g.friendly_name===e&&g.status!=="unverified")}).then(u=>u?this.client.mfa.unenroll({factorId:u==null?void 0:u.id}):void 0),{data:null,error:i};const{data:l,error:c}=await this._challenge({factorId:s.id,friendlyName:s.friendly_name,webauthn:{rpId:n,rpOrigins:o},signal:r},{create:a});return l?this._verify({factorId:s.id,challengeId:l.challengeId,webauthn:{rpId:n,rpOrigins:o,type:l.webauthn.type,credential_response:l.webauthn.credential_response}}):{data:null,error:c}}catch(s){return G(s)?{data:null,error:s}:{data:null,error:new Sn("Unexpected error in register",s)}}}}b8();const j8={url:MI,storageKey:RI,autoRefreshToken:!0,persistSession:!0,detectSessionInUrl:!0,headers:NI,flowType:"implicit",debug:!1,hasCustomAuthorizationHeader:!1,throwOnError:!1,lockAcquireTimeout:5e3,skipAutoInitialize:!1,experimental:{}},ga={};class Zi{get jwks(){var e,n;return(n=(e=ga[this.storageKey])===null||e===void 0?void 0:e.jwks)!==null&&n!==void 0?n:{keys:[]}}set jwks(e){ga[this.storageKey]=Object.assign(Object.assign({},ga[this.storageKey]),{jwks:e})}get jwks_cached_at(){var e,n;return(n=(e=ga[this.storageKey])===null||e===void 0?void 0:e.cachedAt)!==null&&n!==void 0?n:Number.MIN_SAFE_INTEGER}set jwks_cached_at(e){ga[this.storageKey]=Object.assign(Object.assign({},ga[this.storageKey]),{cachedAt:e})}constructor(e){var n,o,r;this.userStorage=null,this.memoryStorage=null,this.stateChangeEmitters=new Map,this.autoRefreshTicker=null,this.autoRefreshTickTimeout=null,this.visibilityChangedCallback=null,this.refreshingDeferred=null,this.lastRefreshFailure=null,this._sessionRemovalEpoch=0,this.initializePromise=null,this.detectSessionInUrl=!0,this.hasCustomAuthorizationHeader=!1,this.suppressGetSessionWarning=!1,this.lock=null,this.lockAcquired=!1,this.pendingInLock=[],this.broadcastChannel=null,this.logger=console.log;const a=Object.assign(Object.assign({},j8),e);if(this.storageKey=a.storageKey,this.instanceID=(n=Zi.nextInstanceID[this.storageKey])!==null&&n!==void 0?n:0,Zi.nextInstanceID[this.storageKey]=this.instanceID+1,this.logDebugMessages=!!a.debug,typeof a.debug=="function"&&(this.logger=a.debug),this.instanceID>0&&pt()){const s=`${this._logPrefix()} Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.`;console.warn(s),this.logDebugMessages&&console.trace(s)}if(this.persistSession=a.persistSession,this.autoRefreshToken=a.autoRefreshToken,this.experimental=(o=a.experimental)!==null&&o!==void 0?o:{},this.admin=new y8({url:a.url,headers:a.headers,fetch:a.fetch,experimental:this.experimental}),this.url=a.url,this.headers=a.headers,this.fetch=o2(a.fetch),this.detectSessionInUrl=a.detectSessionInUrl,this.flowType=a.flowType,this.hasCustomAuthorizationHeader=a.hasCustomAuthorizationHeader,this.throwOnError=a.throwOnError,this.lockAcquireTimeout=a.lockAcquireTimeout,a.lock!=null&&(this.lock=a.lock),this.jwks||(this.jwks={keys:[]},this.jwks_cached_at=Number.MIN_SAFE_INTEGER),this.mfa={verify:this._verify.bind(this),enroll:this._enroll.bind(this),unenroll:this._unenroll.bind(this),challenge:this._challenge.bind(this),listFactors:this._listFactors.bind(this),challengeAndVerify:this._challengeAndVerify.bind(this),getAuthenticatorAssuranceLevel:this._getAuthenticatorAssuranceLevel.bind(this),webauthn:new P8(this)}
166,this.oauth={getAuthorizationDetails:this._getAuthorizationDetails.bind(this),approveAuthorization:this._approveAuthorization.bind(this),denyAuthorization:this._denyAuthorization.bind(this),listGrants:this._listOAuthGrants.bind(this),revokeGrant:this._revokeOAuthGrant.bind(this)},this.passkey={startRegistration:this._startPasskeyRegistration.bind(this),verifyRegistration:this._verifyPasskeyRegistration.bind(this),startAuthentication:this._startPasskeyAuthentication.bind(this),verifyAuthentication:this._verifyPasskeyAuthentication.bind(this),list:this._listPasskeys.bind(this),update:this._updatePasskey.bind(this),delete:this._deletePasskey.bind(this)},this.persistSession?(a.storage?this.storage=a.storage:n2()?this.storage=globalThis.localStorage:(this.memoryStorage={},this.storage=Ww(this.memoryStorage)),a.userStorage&&(this.userStorage=a.userStorage)):(this.memoryStorage={},this.storage=Ww(this.memoryStorage)),pt()&&globalThis.BroadcastChannel&&this.persistSession&&this.storageKey){try{this.broadcastChannel=new globalThis.BroadcastChannel(this.storageKey)}catch(s){console.error("Failed to create a new BroadcastChannel, multi-tab state changes will not be available",s)}(r=this.broadcastChannel)===null||r===void 0||r.addEventListener("message",async s=>{this._debug("received broadcast notification from other tab or client",s),(s.data.event==="TOKEN_REFRESHED"||s.data.event==="SIGNED_IN")&&(this.lastRefreshFailure=null);try{await this._notifyAllSubscribers(s.data.event,s.data.session,!1)}catch(i){this._debug("#broadcastChannel","error",i)}})}a.skipAutoInitialize||this.initialize().catch(s=>{this._debug("#initialize()","error",s)})}isThrowOnErrorEnabled(){return this.throwOnError}_returnResult(e){if(this.throwOnError&&e&&e.error)throw e.error;return e}_logPrefix(){return`GoTrueClient@${this.storageKey}:${this.instanceID} (${X1}) ${new Date().toISOString()}`}_debug(...e){return this.logDebugMessages&&this.logger(this._logPrefix(),...e),this}async initialize(){return this.initializePromise?await this.initializePromise:(this.initializePromise=(async()=>this.lock!=null?await this._acquireLock(this.lockAcquireTimeout,async()=>await this._initialize()):await this._initialize())(),await this.initializePromise)}async _initialize(){var e;try{let n={},o="none";if(pt()&&(n=QI(window.location.href),this._isImplicitGrantCallback(n)?o="implicit":await this._isPKCECallback(n)&&(o="pkce")),pt()&&this.detectSessionInUrl&&o!=="none"){const{data:r,error:a}=await this._getSessionFromURL(n,o);if(a){if(this._debug("#_initialize()","error detecting session from URL",a),FI(a)){const l=(e=a.details)===null||e===void 0?void 0:e.code;if(l==="identity_already_exists"||l==="identity_not_found"||l==="single_identity_not_deletable")return{error:a}}return{error:a}}const{session:s,redirectType:i}=r;return this._debug("#_initialize()","detected session in URL",s,"redirect type",i),await this._saveSession(s),setTimeout(async()=>{i==="recovery"?await this._notifyAllSubscribers("PASSWORD_RECOVERY",s):await this._notifyAllSubscribers("SIGNED_IN",s)},0),{error:null}}return await this._recoverAndRefresh(),{error:null}}catch(n){return G(n)?this._returnResult({error:n}):this._returnResult({error:new Sn("Unexpected error during initialization",n)})}finally{await this._handleVisibilityChange(),this._debug("#_initialize()","end")}}async signInAnonymously(e){var n,o,r;try{const a=await X(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{data:(o=(n=e==null?void 0:e.options)===null||n===void 0?void 0:n.data)!==null&&o!==void 0?o:{},gotrue_meta_security:{captcha_token:(r=e==null?void 0:e.options)===null||r===void 0?void 0:r.captchaToken}},xform:Vt}),{data:s,error:i}=a;if(i||!s)return this._returnResult({data:{user:null,session:null},error:i});const l=s.session,c=s.user;return s.session&&(await this._saveSession(s.session),await this._notifyAllSubscribers("SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(a){if(G(a))return this._returnResult({data:{user:null,session:null},error:a});throw a}}async signUp(e){var n,o,r;try{let a;if("email"in e){const{email:u,password:d,options:g}=e;let p=null,v=null;this.flowType==="pkce"&&([p,v]=await Ar(this.storage,this.storageKey)),a=await X(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,redirectTo:g==null?void 0:g.emailRedirectTo,body:{email:u,password:d,data:(n=g==null?void 0:g.data)!==null&&n!==void 0?n:{},gotrue_meta_security:{captcha_token:g==null?void 0:g.captchaToken},code_challenge:p,code_challenge_method:v},xform:Vt})}else if("phone"in e){const{phone:u,password:d,options:g}=e;a=await X(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{phone:u,password:d,data:(o=g==null?void 0:g.data)!==null&&o!==void 0?o:{},channel:(r=g==null?void 0:g.channel)!==null&&r!==void 0?r:"sms",gotrue_meta_security:{captcha_token:g==null?void 0:g.captchaToken}},xform:Vt})}else throw new tc("You must provide either an email or phone number and a password");const{data:s,error:i}=a;if(i||!s)return await Ve(this.storage,`${this.storageKey}-code-verifier`),this._returnResult({data:{user:null,session:null},error:i});const l=s.session,c=s.user;return s.session&&(await this._saveSession(s.session),await this._notifyAllSubscribers("SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(a){if(await Ve(this.storage,`${this.storageKey}-code-verifier`),G(a))return this._returnResult({data:{user:null,session:null},error:a});throw a}}async signInWithPassword(e){try{let n;if("email"in e){const{email:a,password:s,options:i}=e;n=await X(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{email:a,password:s,gotrue_meta_security:{captcha_token:i==null?void 0:i.captchaToken}},xform:Lw})}else if("phone"in e){const{phone:a,password:s,options:i}=e;n=await X(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{phone:a,password:s,gotrue_meta_security:{captcha_token:i==null?void 0:i.captchaToken}},xform:Lw})}else throw new tc("You must provide either an email or phone number and a password");const{data:o,error:r}=n;if(r)return this._returnResult({data:{user:null,session:null},error:r});if(!o||!o.session||!o.user){const a=new pa;return this._returnResult({data:{user:null,session:null},error:a})}return o.session&&(await this._saveSession(o.session),await this._notifyAllSubscribers("SIGNED_IN",o.session)),this._returnResult({data:Object.assign({user:o.user,session:o.session},o.weak_password?{weakPassword:o.weak_password}:null),error:r})}catch(n){if(G(n))return this._returnResult({data:{user:null,session:null},error:n});throw n}}async signInWithOAuth(e){var n,o,r,a;return await this._handleProviderSignIn(e.provider,{redirectTo:(n=e.options)===null||n===void 0?void 0:n.redirectTo,scopes:(o=e.options)===null||o===void 0?void 0:o.scopes,queryParams:(r=e.options)===null||r===void 0?void 0:r.queryParams,skipBrowserRedirect:(a=e.options)===null||a===void 0?void 0:a.skipBrowserRedirect})}async exchangeCodeForSession(e){return await this.initializePromise,this.lock!=null?this._acquireLock(this.lockAcquireTimeout,async()=>this._exchangeCodeForSession(e)):this._exchangeCodeForSession(e)}async signInWithWeb3(e){const{chain:n}=e;switch(n){case"ethereum":return await this.signInWithEthereum(e);case"solana":return await this.signInWithSolana(e);default:throw new Error(`@supabase/auth-js: Unsupported chain "${n}"`)}}async signInWithEthereum(e){var n,o,r,a,s,i,l,c,u,d,g;let p,v;if("message"in e)p=e.message,v=e.signature;else{const{chain:y,wallet:k,statement:w,options:m}=e;let b;if(pt())if(typeof k=="object")b=k;else{const C=window;if("ethereum"in C&&typeof C.ethereum=="object"&&"request"in C.ethereum&&typeof C.ethereum.request=="function")b=C.ethereum;else throw new Error("@supabase/auth-js: No compatible Ethereum wallet interface on the window object (window.ethereum) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'ethereum', wallet: resolvedUserWallet }) instead.")}else{if(typeof k!="object"||!(m!=null&&m.url))throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");b=k}const x=new URL((n=m==null?void 0:m.url)!==null&&n!==void 0?n:window.location.href),S=await b.request({method:"eth_requestAccounts"}).then(C=>C).catch(()=>{throw new Error("@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid")});if(!S||S.length===0)throw new Error("@supabase/auth-js: No accounts available. Please ensure the wallet is connected.");const T=r2(S[0]);let A=(o=m==null?void 0:m.signInWithEthereum)===null||o===void 0?void 0:o.chainId;if(!A){const C=await b.request({method:"eth_chainId"});A=v8(C)}const _={domain:x.host,address:T,statement:w,uri:x.href,version:"1",chainId:A,nonce:(r=m==null?void 0:m.signInWithEthereum)===null||r===void 0?void 0:r.nonce,issuedAt:(s=(a=m==null?void 0:m.signInWithEthereum)===null||a===void 0?void 0:a.issuedAt)!==null&&s!==void 0?s:new Date,expirationTime:(i=m==null?void 0:m.signInWithEthereum)===null||i===void 0?void 0:i.expirationTime,notBefore:(l=m==null?void 0:m.signInWithEthereum)===null||l===void 0?void 0:l.notBefore,requestId:(c=m==null?void 0:m.signInWithEthereum)===null||c===void 0?void 0:c.requestId,resources:(u=m==null?void 0:m.signInWithEthereum)===null||u===void 0?void 0:u.resources};p=x8(_),v=await b.request({method:"personal_sign",params:[k8(p),T]})}try{const{data:y,error:k}=await X(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"ethereum",message:p,signature:v},!((d=e.options)===null||d===void 0)&&d.captchaToken?{gotrue_meta_security:{captcha_token:(g=e.options)===null||g===void 0?void 0:g.captchaToken}}:null),xform:Vt});if(k)throw k;if(!y||!y.session||!y.user){const w=new pa;return this._returnResult({data:{user:null,session:null},error:w})}return y.session&&(await this._saveSession(y.session),await this._notifyAllSubscribers("SIGNED_IN",y.session)),this._returnResult({data:Object.assign({},y),error:k})}catch(y){if(G(y))return this._returnResult({data:{user:null,session:null},error:y});throw y}}async signInWithSolana(e){var n,o,r,a,s,i,l,c,u,d,g,p;let v,y;if("message"in e)v=e.message,y=e.signature;else{const{chain:k,wallet:w,statement:m,options:b}=e;let x;if(pt())if(typeof w=="object")x=w;else{const T=window;if("solana"in T&&typeof T.solana=="object"&&("signIn"in T.solana&&typeof T.solana.signIn=="function"||"signMessage"in T.solana&&typeof T.solana.signMessage=="function"))x=T.solana;else throw new Error("@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.")}else{if(typeof w!="object"||!(b!=null&&b.url))throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");x=w}const S=new URL((n=b==null?void 0:b.url)!==null&&n!==void 0?n:window.location.href);if("signIn"in x&&x.signIn){const T=await x.signIn(Object.assign(Object.assign(Object.assign({issuedAt:new Date().toISOString()},b==null?void 0:b.signInWithSolana),{version:"1",domain:S.host,uri:S.href}),m?{statement:m}:null));let A;if(Array.isArray(T)&&T[0]&&typeof T[0]=="object")A=T[0];else if(T&&typeof T=="object"&&"signedMessage"in T&&"signature"in T)A=T;else throw new Error("@supabase/auth-js: Wallet method signIn() returned unrecognized value");if("signedMessage"in A&&"signature"in A&&(typeof A.signedMessage=="string"||A.signedMessage instanceof Uint8Array)&&A.signature instanceof Uint8Array)v=typeof A.signedMessage=="string"?A.signedMessage:new TextDecoder().decode(A.signedMessage),y=A.signature;else throw new Error("@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields")}else{if(!("signMessage"in x)||typeof x.signMessage!="function"||!("publicKey"in x)||typeof x!="object"||!x.publicKey||!("toBase58"in x.publicKey)||typeof x.publicKey.toBase58!="function")throw new Error("@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API");v=[`${S.host} wants you to sign in with your Solana account:`,x.publicKey.toBase58(),...m?["",m,""]:[""],"Version: 1",`URI: ${S.href}`,`Issued At: ${(r=(o=b==null?void 0:b.signInWithSolana)===null||o===void 0?void 0:o.issuedAt)!==null&&r!==void 0?r:new Date().toISOString()}`,...!((a=b==null?void 0:b.signInWithSolana)===null||a===void 0)&&a.notBefore?[`Not Before: ${b.signInWithSolana.notBefore}`]:[],...!((s=b==null?void 0:b.signInWithSolana)===null||s===void 0)&&s.expirationTime?[`Expiration Time: ${b.signInWithSolana.expirationTime}`]:[],...!((i=b==null?void 0:b.signInWithSolana)===null||i===void 0)&&i.chainId?[`Chain ID: ${b.signInWithSolana.chainId}`]:[],...!((l=b==null?void 0:b.signInWithSolana)===null||l===void 0)&&l.nonce?[`Nonce: ${b.signInWithSolana.nonce}`]:[],...!((c=b==null?void 0:b.signInWithSolana)===null||c===void 0)&&c.requestId?[`Request ID: ${b.signInWithSolana.requestId}`]:[],...!((d=(u=b==null?void 0:b.signInWithSolana)===null||u===void 0?void 0:u.resources)===null||d===void 0)&&d.length?["Resources",...b.signInWithSolana.resources.map(A=>`- ${A}`)]:[]].join(`
167`);const T=await x.signMessage(new TextEncoder().encode(v),"utf8");if(!T||!(T instanceof Uint8Array))throw new Error("@supabase/auth-js: Wallet signMessage() API returned an recognized value");y=T}}try{const{data:k,error:w}=await X(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"solana",message:v,signature:Br(y)},!((g=e.options)===null||g===void 0)&&g.captchaToken?{gotrue_meta_security:{captcha_token:(p=e.options)===null||p===void 0?void 0:p.captchaToken}}:null),xform:Vt});if(w)throw w;if(!k||!k.session||!k.user){const m=new pa;return this._returnResult({data:{user:null,session:null},error:m})}return k.session&&(await this._saveSession(k.session),await this._notifyAllSubscribers("SIGNED_IN",k.session)),this._returnResult({data:Object.assign({},k),error:w})}catch(k){if(G(k))return this._returnResult({data:{user:null,session:null},error:k});throw k}}async _exchangeCodeForSession(e){const n=await pn(this.storage,`${this.storageKey}-code-verifier`),[o,r]=(n??"").split("/");try{if(!o&&this.flowType==="pkce")throw new HI;const{data:a,error:s}=await X(this.fetch,"POST",`${this.url}/token?grant_type=pkce`,{headers:this.headers,body:{auth_code:e,code_verifier:o},xform:Vt});if(await Ve(this.storage,`${this.storageKey}-code-verifier`),s)throw s;if(!a||!a.session||!a.user){const i=new pa;return this._returnResult({data:{user:null,session:null,redirectType:null},error:i})}return a.session&&(await this._saveSession(a.session),await this._notifyAllSubscribers(r==="recovery"?"PASSWORD_RECOVERY":"SIGNED_IN",a.session)),this._returnResult({data:Object.assign(Object.assign({},a),{redirectType:r??null}),error:s})}catch(a){if(await Ve(this.storage,`${this.storageKey}-code-verifier`),G(a))return this._returnResult({data:{user:null,session:null,redirectType:null},error:a});throw a}}async signInWithIdToken(e){try{const{options:n,provider:o,token:r,access_token:a,nonce:s}=e,i=await X(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,body:{provider:o,id_token:r,access_token:a,nonce:s,gotrue_meta_security:{captcha_token:n==null?void 0:n.captchaToken}},xform:Vt}),{data:l,error:c}=i;
167if(c)return this._returnResult({data:{user:null,session:null},error:c});if(!l||!l.session||!l.user){const u=new pa;return this._returnResult({data:{user:null,session:null},error:u})}return l.session&&(await this._saveSession(l.session),await this._notifyAllSubscribers("SIGNED_IN",l.session)),this._returnResult({data:l,error:c})}catch(n){if(G(n))return this._returnResult({data:{user:null,session:null},error:n});throw n}}async signInWithOtp(e){var n,o,r,a,s;try{if("email"in e){const{email:i,options:l}=e;let c=null,u=null;this.flowType==="pkce"&&([c,u]=await Ar(this.storage,this.storageKey));const{error:d}=await X(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{email:i,data:(n=l==null?void 0:l.data)!==null&&n!==void 0?n:{},create_user:(o=l==null?void 0:l.shouldCreateUser)!==null&&o!==void 0?o:!0,gotrue_meta_security:{captcha_token:l==null?void 0:l.captchaToken},code_challenge:c,code_challenge_method:u},redirectTo:l==null?void 0:l.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:d})}if("phone"in e){const{phone:i,options:l}=e,{data:c,error:u}=await X(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{phone:i,data:(r=l==null?void 0:l.data)!==null&&r!==void 0?r:{},create_user:(a=l==null?void 0:l.shouldCreateUser)!==null&&a!==void 0?a:!0,gotrue_meta_security:{captcha_token:l==null?void 0:l.captchaToken},channel:(s=l==null?void 0:l.channel)!==null&&s!==void 0?s:"sms"}});return this._returnResult({data:{user:null,session:null,messageId:c==null?void 0:c.message_id},error:u})}throw new tc("You must provide either an email or phone number.")}catch(i){if(await Ve(this.storage,`${this.storageKey}-code-verifier`),G(i))return this._returnResult({data:{user:null,session:null},error:i});throw i}}async verifyOtp(e){var n,o;try{let r,a;"options"in e&&(r=(n=e.options)===null||n===void 0?void 0:n.redirectTo,a=(o=e.options)===null||o===void 0?void 0:o.captchaToken);const{data:s,error:i}=await X(this.fetch,"POST",`${this.url}/verify`,{headers:this.headers,body:Object.assign(Object.assign({},e),{gotrue_meta_security:{captcha_token:a}}),redirectTo:r,xform:Vt});if(i)throw i;if(!s)throw new Error("An error occurred on token verification.");const l=s.session,c=s.user;return l!=null&&l.access_token&&(await this._saveSession(l),await this._notifyAllSubscribers(e.type=="recovery"?"PASSWORD_RECOVERY":"SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(r){if(G(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async signInWithSSO(e){var n,o,r,a,s;try{let i=null,l=null;this.flowType==="pkce"&&([i,l]=await Ar(this.storage,this.storageKey));const c=await X(this.fetch,"POST",`${this.url}/sso`,{body:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},"providerId"in e?{provider_id:e.providerId}:null),"domain"in e?{domain:e.domain}:null),{redirect_to:(o=(n=e.options)===null||n===void 0?void 0:n.redirectTo)!==null&&o!==void 0?o:void 0}),!((r=e==null?void 0:e.options)===null||r===void 0)&&r.captchaToken?{gotrue_meta_security:{captcha_token:e.options.captchaToken}}:null),{skip_http_redirect:!0,code_challenge:i,code_challenge_method:l}),headers:this.headers,xform:g8});return!((a=c.data)===null||a===void 0)&&a.url&&pt()&&!(!((s=e.options)===null||s===void 0)&&s.skipBrowserRedirect)&&window.location.assign(c.data.url),this._returnResult(c)}catch(i){if(await Ve(this.storage,`${this.storageKey}-code-verifier`),G(i))return this._returnResult({data:null,error:i});throw i}}async reauthenticate(){return await this.initializePromise,this.lock!=null?await this._acquireLock(this.lockAcquireTimeout,async()=>await this._reauthenticate()):await this._reauthenticate()}async _reauthenticate(){try{return await this._useSession(async e=>{const{data:{session:n},error:o}=e;if(o)throw o;if(!n)throw new tt;const{error:r}=await X(this.fetch,"GET",`${this.url}/reauthenticate`,{headers:this.headers,jwt:n.access_token});return this._returnResult({data:{user:null,session:null},error:r})})}catch(e){if(G(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async resend(e){try{const n=`${this.url}/resend`;if("email"in e){const{email:o,type:r,options:a}=e;let s=null,i=null;this.flowType==="pkce"&&([s,i]=await Ar(this.storage,this.storageKey));const{error:l}=await X(this.fetch,"POST",n,{headers:this.headers,body:{email:o,type:r,gotrue_meta_security:{captcha_token:a==null?void 0:a.captchaToken},code_challenge:s,code_challenge_method:i},redirectTo:a==null?void 0:a.emailRedirectTo});return l&&await Ve(this.storage,`${this.storageKey}-code-verifier`),this._returnResult({data:{user:null,session:null},error:l})}else if("phone"in e){const{phone:o,type:r,options:a}=e,{data:s,error:i}=await X(this.fetch,"POST",n,{headers:this.headers,body:{phone:o,type:r,gotrue_meta_security:{captcha_token:a==null?void 0:a.captchaToken}}});return this._returnResult({data:{user:null,session:null,messageId:s==null?void 0:s.message_id},error:i})}throw new tc("You must provide either an email or phone number and a type")}catch(n){if(await Ve(this.storage,`${this.storageKey}-code-verifier`),G(n))return this._returnResult({data:{user:null,session:null},error:n});throw n}}async getSession(){return await this.initializePromise,this.lock!=null?await this._acquireLock(this.lockAcquireTimeout,async()=>this._useSession(async e=>e)):await this._useSession(async e=>e)}async _acquireLock(e,n){this._debug("#_acquireLock","begin",e);try{if(this.lockAcquired){const o=this.pendingInLock.length?this.pendingInLock[this.pendingInLock.length-1]:Promise.resolve(),r=(async()=>(await o,await n()))();return this.pendingInLock.push((async()=>{try{await r}catch{}})()),r}return await this.lock(`lock:${this.storageKey}`,e,async()=>{this._debug("#_acquireLock","lock acquired for storage key",this.storageKey);try{this.lockAcquired=!0;const o=n();for(this.pendingInLock.push((async()=>{try{await o}catch{}})()),await o;this.pendingInLock.length;){const r=[...this.pendingInLock];await Promise.all(r),this.pendingInLock.splice(0,r.length)}return await o}finally{this._debug("#_acquireLock","lock released for storage key",this.storageKey),this.lockAcquired=!1}})}finally{this._debug("#_acquireLock","end")}}async _useSession(e){this._debug("#_useSession","begin");try{const n=await this.__loadSession();return await e(n)}finally{this._debug("#_useSession","end")}}async __loadSession(){this._debug("#__loadSession()","begin"),this.lock!=null&&!this.lockAcquired&&this._debug("#__loadSession()","used outside of an acquired lock!",new Error().stack);try{let e=null;const n=await pn(this.storage,this.storageKey);if(this._debug("#getSession()","session from storage",n),n!==null&&(this._isValidSession(n)?e=n:(this._debug("#getSession()","session from storage is not val
167id"),await this._removeSession())),!e)return{data:{session:null},error:null};const o=e.expires_at?e.expires_at*1e3-Date.now()<id:!1;if(this._debug("#__loadSession()",`session has${o?"":" not"} expired`,"expires_at",e.expires_at),!o){if(this.userStorage){const s=await pn(this.userStorage,this.storageKey+"-user");s!=null&&s.user?e.user=s.user:e.user=ld()}if(this.storage.isServer&&e.user&&!e.user.__isUserNotAvailableProxy){const s={value:this.suppressGetSessionWarning};e.user=h8(e.user,s),s.value&&(this.suppressGetSessionWarning=!0)}return{data:{session:e},error:null}}const{data:r,error:a}=await this._callRefreshToken(e.refresh_token);if(a){if(!!(e.expires_at&&e.expires_at*1e3>Date.now())){const i=await pn(this.storage,this.storageKey);if(i&&i.refresh_token===e.refresh_token)return this._returnResult({data:{session:e},error:null})}return this._returnResult({data:{session:null},error:a})}return this._returnResult({data:{session:r},error:null})}finally{this._debug("#__loadSession()","end")}}async getUser(e){if(e)return await this._getUser(e);await this.initializePromise;let n;return this.lock!=null?n=await this._acquireLock(this.lockAcquireTimeout,async()=>await this._getUser()):n=await this._getUser(),n.data.user&&(this.suppressGetSessionWarning=!0),n}async _getUser(e){try{return e?await X(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:e,xform:Ho}):await this._useSession(async n=>{var o,r,a;const{data:s,error:i}=n;if(i)throw i;return!(!((o=s.session)===null||o===void 0)&&o.access_token)&&!this.hasCustomAuthorizationHeader?{data:{user:null},error:new tt}:await X(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:(a=(r=s.session)===null||r===void 0?void 0:r.access_token)!==null&&a!==void 0?a:void 0,xform:Ho})})}catch(n){if(G(n))return ec(n)&&(await this._removeSession(),await Ve(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({data:{user:null},error:n});throw n}}async updateUser(e,n={}){return await this.initializePromise,this.lock!=null?await this._acquireLock(this.lockAcquireTimeout,async()=>await this._updateUser(e,n)):await this._updateUser(e,n)}async _updateUser(e,n={}){try{return await this._useSession(async o=>{const{data:r,error:a}=o;if(a)throw a;if(!r.session)throw new tt;const s=r.session;let i=null,l=null;this.flowType==="pkce"&&e.email!=null&&([i,l]=await Ar(this.storage,this.storageKey));const{data:c,error:u}=await X(this.fetch,"PUT",`${this.url}/user`,{headers:this.headers,redirectTo:n==null?void 0:n.emailRedirectTo,body:Object.assign(Object.assign({},e),{code_challenge:i,code_challenge_method:l}),jwt:s.access_token,xform:Ho});if(u)throw u;return s.user=c.user,await this._saveSession(s),await this._notifyAllSubscribers("USER_UPDATED",s),this._returnResult({data:{user:s.user},error:null})})}catch(o){if(await Ve(this.storage,`${this.storageKey}-code-verifier`),G(o))return this._returnResult({data:{user:null},error:o});throw o}}async setSession(e){return await this.initializePromise,this.lock!=null?await this._acquireLock(this.lockAcquireTimeout,async()=>await this._setSession(e)):await this._setSession(e)}async _setSession(e){try{if(!e.access_token||!e.refresh_token)throw new tt;const n=Date.now()/1e3;let o=n,r=!0,a=null;const{payload:s}=oc(e.access_token);if(s.exp&&(o=s.exp,r=o<=n),r){const{data:i,error:l}=await this._callRefreshToken(e.refresh_token);if(l)return this._returnResult({data:{user:null,session:null},error:l});if(!i)return{data:{user:null,session:null},error:null};a=i}else{const{data:i,error:l}=await this._getUser(e.access_token);if(l)return this._returnResult({data:{user:null,session:null},error:l});a={access_token:e.access_token,refresh_token:e.refresh_token,user:i.user,token_type:"bearer",expires_in:o-n,expires_at:o},await this._saveSession(a),await this._notifyAllSubscribers("SIGNED_IN",a)}return this._returnResult({data:{user:a.user,session:a},error:null})}catch(n){if(G(n))return this._returnResult({data:{session:null,user:null},error:n});throw n}}async refreshSession(e){return await this.initializePromise,this.lock!=null?await this._acquireLock(this.lockAcquireTimeout,async()=>await this._refreshSession(e)):await this._refreshSession(e)}async _refreshSession(e){try{return await this._useSession(async n=>{var o;if(!e){const{data:s,error:i}=n;if(i)throw i;e=(o=s.session)!==null&&o!==void 0?o:void 0}if(!(e!=null&&e.refresh_token))throw new tt;const{data:r,error:a}=await this._callRefreshToken(e.refresh_token);return a?this._returnResult({data:{user:null,session:null},error:a}):r?this._returnResult({data:{user:r.user,session:r},error:null}):this._returnResult({data:{user:null,session:null},error:null})})}catch(n){if(G(n))return this._returnResult({data:{user:null,session:null},error:n});throw n}}async _getSessionFromURL(e,n){var o;try{if(!pt())throw new nc("No browser detected.");
167if(e.error||e.error_description||e.error_code)throw new nc(e.error_description||"Error in URL with unspecified error_description",{error:e.error||"unspecified_error",code:e.error_code||"unspecified_code"});switch(n){case"implicit":if(this.flowType==="pkce")throw new Ew("Not a valid PKCE flow url.");break;case"pkce":if(this.flowType==="implicit")throw new nc("Not a valid implicit grant flow url.");break;default:}if(n==="pkce"){if(this._debug("#_initialize()","begin","is PKCE flow",!0),!e.code)throw new Ew("No code detected.");const{data:b,error:x}=await this._exchangeCodeForSession(e.code);if(x)throw x;const S=new URL(window.location.href);return S.searchParams.delete("code"),window.history.replaceState(window.history.state,"",S.toString()),{data:{session:b.session,redirectType:(o=b.redirectType)!==null&&o!==void 0?o:null},error:null}}const{provider_token:r,provider_refresh_token:a,access_token:s,refresh_token:i,expires_in:l,expires_at:c,token_type:u}=e;if(!s||!l||!i||!u)throw new nc("No session defined in URL");const d=Math.round(Date.now()/1e3),g=parseInt(l);let p=d+g;c&&(p=parseInt(c));const v=p-d;v*1e3<=co&&console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${v}s, should have been closer to ${g}s`);const y=p-g;d-y>=120?console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale",y,p,d):d-y<0&&console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew",y,p,d);const{data:k,error:w}=await this._getUser(s);if(w)throw w;const m={provider_token:r,provider_refresh_token:a,access_token:s,expires_in:g,expires_at:p,refresh_token:i,token_type:u,user:k.user};return window.location.hash="",this._debug("#_getSessionFromURL()","clearing window.location.hash"),this._returnResult({data:{session:m,redirectType:e.type},error:null})}catch(r){if(G(r))return this._returnResult({data:{session:null,redirectType:null},error:r});throw r}}_isImplicitGrantCallback(e){return typeof this.detectSessionInUrl=="function"?this.detectSessionInUrl(new URL(window.location.href),e):!!(e.access_token||e.error||e.error_description||e.error_code)}async _isPKCECallback(e){const n=await pn(this.storage,`${this.storageKey}-code-verifier`);return!!(e.code&&n)}async signOut(e={scope:"global"}){return await this.initializePromise,this.lock!=null?await this._acquireLock(this.lockAcquireTimeout,async()=>await this._signOut(e)):await this._signOut(e)}async _signOut({scope:e}={scope:"global"}){return await this._useSession(async n=>{var o;const{data:r,error:a}=n;if(a&&!ec(a))return this._returnResult({error:a});const s=(o=r.session)===null||o===void 0?void 0:o.access_token;if(s){const{error:i}=await this.admin.signOut(s,e);if(i&&!(qI(i)&&(i.status===404||i.status===401||i.status===403)||ec(i)))return this._returnResult({error:i})}return e!=="others"&&(await this._removeSession(),await Ve(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({error:null})})}onAuthStateChange(e){const n=JI(),o={id:n,callback:e,unsubscribe:()=>{this._debug("#unsubscribe()","state change callback with id removed",n),this.stateChangeEmitters.delete(n)}};return this._debug("#onAuthStateChange()","registered callback with id",n),this.stateChangeEmitters.set(n,o),(async()=>(await this.initializePromise,this.lock!=null?await this._acquireLock(this.lockAcquireTimeout,async()=>{this._emitInitialSession(n)}):await this._emitInitialSession(n)))(),{data:{subscription:o}}}async _emitInitialSession(e){return await this._useSession(async n=>{var o,r;try{const{data:{session:a},error:s}=n;if(s)throw s;await((o=this.stateChangeEmitters.get(e))===null||o===void 0?void 0:o.callback("INITIAL_SESSION",a)),this._debug("INITIAL_SESSION","callback id",e,"session",a)}catch(a){await((r=this.stateChangeEmitters.get(e))===null||r===void 0?void 0:r.callback("INITIAL_SESSION",null)),this._debug("INITIAL_SESSION","callback id",e,"error",a),ec(a)?console.warn(a):console.error(a)}})}async resetPasswordForEmail(e,n={}){let o=null,r=null;this.flowType==="pkce"&&([o,r]=await Ar(this.storage,this.storageKey,!0));try{return await X(this.fetch,"POST",`${this.url}
167/recover`,{body:{email:e,code_challenge:o,code_challenge_method:r,gotrue_meta_security:{captcha_token:n.captchaToken}},headers:this.headers,redirectTo:n.redirectTo})}catch(a){if(await Ve(this.storage,`${this.storageKey}-code-verifier`),G(a))return this._returnResult({data:null,error:a});throw a}}async getUserIdentities(){var e;try{const{data:n,error:o}=await this.getUser();if(o)throw o;return this._returnResult({data:{identities:(e=n.user.identities)!==null&&e!==void 0?e:[]},error:null})}catch(n){if(G(n))return this._returnResult({data:null,error:n});throw n}}async linkIdentity(e){return"token"in e?this.linkIdentityIdToken(e):this.linkIdentityOAuth(e)}async linkIdentityOAuth(e){var n;try{const{data:o,error:r}=await this._useSession(async a=>{var s,i,l,c,u;const{data:d,error:g}=a;if(g)throw g;const p=await this._getUrlForProvider(`${this.url}/user/identities/authorize`,e.provider,{redirectTo:(s=e.options)===null||s===void 0?void 0:s.redirectTo,scopes:(i=e.options)===null||i===void 0?void 0:i.scopes,queryParams:(l=e.options)===null||l===void 0?void 0:l.queryParams,skipBrowserRedirect:!0});return await X(this.fetch,"GET",p,{headers:this.headers,jwt:(u=(c=d.session)===null||c===void 0?void 0:c.access_token)!==null&&u!==void 0?u:void 0})});if(r)throw r;return pt()&&!(!((n=e.options)===null||n===void 0)&&n.skipBrowserRedirect)&&window.location.assign(o==null?void 0:o.url),this._returnResult({data:{provider:e.provider,url:o==null?void 0:o.url},error:null})}catch(o){if(G(o))return this._returnResult({data:{provider:e.provider,url:null},error:o});throw o}}async linkIdentityIdToken(e){return await this._useSession(async n=>{var o;try{const{error:r,data:{session:a}}=n;if(r)throw r;const{options:s,provider:i,token:l,access_token:c,nonce:u}=e,d=await X(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,jwt:(o=a==null?void 0:a.access_token)!==null&&o!==void 0?o:void 0,body:{provider:i,id_token:l,access_token:c,nonce:u,link_identity:!0,gotrue_meta_security:{captcha_token:s==null?void 0:s.captchaToken}},xform:Vt}),{data:g,error:p}=d;return p?this._returnResult({data:{user:null,session:null},error:p}):!g||!g.session||!g.user?this._returnResult({data:{user:null,session:null},error:new pa}):(g.session&&(await this._saveSession(g.session),await this._notifyAllSubscribers("USER_UPDATED",g.session)),this._returnResult({data:g,error:p}))}catch(r){if(await Ve(this.storage,`${this.storageKey}-code-verifier`),G(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}})}async unlinkIdentity(e){try{return await this._useSession(async n=>{var o,r;const{data:a,error:s}=n;if(s)throw s;return await X(this.fetch,"DELETE",`${this.url}/user/identities/${e.identity_id}`,{headers:this.headers,jwt:(r=(o=a.session)===null||o===void 0?void 0:o.access_token)!==null&&r!==void 0?r:void 0})})}catch(n){if(G(n))return this._returnResult({data:null,error:n});throw n}}async _refreshAccessToken(e){const n="#_refreshAccessToken()";this._debug(n,"begin");try{const o=Date.now();return await e8(async r=>(r>0&&await XI(200*Math.pow(2,r-1)),this._debug(n,"refreshing attempt",r),await X(this.fetch,"POST",`${this.url}/token?grant_type=refresh_token`,{body:{refresh_token:e},headers:this.headers,xform:Vt})),(r,a)=>{const s=200*Math.pow(2,r);return a&&Iw(a)&&Date.now()+s-o<co})}catch(o){if(this._debug(n,"error",o),G(o))return this._returnResult({data:{session:null,user:null},error:o});throw o}finally{this._debug(n,"end")}}_isValidSession(e){return typeof e=="object"&&e!==null&&"access_token"in e&&"refresh_token"in e&&"expires_at"in e}async _handleProviderSignIn(e,n){const o=await this._getUrlForProvider(`${this.url}/authorize`,e,{redirectTo:n.redirectTo,scopes:n.scopes,queryParams:n.queryParams});return this._debug("#_handleProviderSignIn()","provider",e,"options",n,"url",o),pt()&&!n.skipBrowserRedirect&&window.location.assign(o),{data:{provider:e,url:o},error:null}}async _recoverAndRefresh(){var e,n;const o="#_recoverAndRefresh()";this._debug(o,"begin");try{const r=await pn(this.storage,this.storageKey);if(r&&this.userStorage){let s=await pn(this.userStorage,this.storageKey+"-user");!this.storage.isServer&&Object.is(this.storage,this.userStorage)&&!s&&(s={user:r.user},await va(this.userStorage,this.storageKey+"-user",s)),r.user=(e=s==null?void 0:s.user)!==null&&e!==void 0?e:ld()}else if(r&&!r.user&&!r.user){const s=await pn(this.storage,this.storageKey+"-user");s&&(s!=null&&s.user)?(r.user=s.user,await Ve(this.storage,this.storageKey+"-user"),await va(this.storage,this.storageKey,r)):r.user=ld()}if(this._debug(o,"session from storage",r),!this._isValidSession(r)){this._debug(o,"session is not val
167id"),r!==null&&await this._removeSession();return}const a=((n=r.expires_at)!==null&&n!==void 0?n:1/0)*1e3-Date.now()<id;if(this._debug(o,`session has${a?"":" not"} expired with margin of ${id}s`),a){if(this.autoRefreshToken&&r.refresh_token){const{error:s}=await this._callRefreshToken(r.refresh_token);s&&(zI(s)?this._debug(o,"refresh discarded by commit guard",s):this._debug(o,"refresh failed",s))}}else if(r.user&&r.user.__isUserNotAvailableProxy===!0)try{const{data:s,error:i}=await this._getUser(r.access_token);!i&&(s!=null&&s.user)?(r.user=s.user,await this._saveSession(r),await this._notifyAllSubscribers("SIGNED_IN",r)):this._debug(o,"could not get user data, skipping SIGNED_IN notification")}catch(s){console.error("Error getting user data:",s),this._debug(o,"error getting user data, skipping SIGNED_IN notification",s)}else await this._notifyAllSubscribers("SIGNED_IN",r)}catch(r){this._debug(o,"error",r),console.error(r);return}finally{this._debug(o,"end")}}async _callRefreshToken(e){var n,o;if(!e)throw new tt;if(this.refreshingDeferred)return this.refreshingDeferred.promise;if(this.lastRefreshFailure&&this.lastRefreshFailure.refreshToken===e&&Date.now()<this.lastRefreshFailure.expiresAt)return this._debug("#_callRefreshToken()","returning cached failure (cooldown active)"),this.lastRefreshFailure.result;const r="#_callRefreshToken()";this._debug(r,"begin");try{this.refreshingDeferred=new su;const a=await pn(this.storage,this.storageKey),{data:s,error:i}=await this._refreshAccessToken(e);if(i)throw i;if(!s.session)throw new tt;const l=await pn(this.storage,this.storageKey);if(a!==null&&(l===null||l.refresh_token!==a.refresh_token)){this._debug(r,"commit guard: storage changed since refresh started, discarding rotated tokens",{startedWith:"present",nowHolds:l?"replaced":"cleared"});const g={data:null,error:new Pw};return this.refreshingDeferred.resolve(g),g}const u=this._sessionRemovalEpoch;if(await this._saveSession(s.session),this._sessionRemovalEpoch!==u){this._debug(r,"commit guard (post-save): _removeSession ran during _saveSession, undoing write"),await Ve(this.storage,this.storageKey),this.userStorage&&await Ve(this.userStorage,this.storageKey+"-user");const g={data:null,error:new Pw};return this.refreshingDeferred.resolve(g),g}await this._notifyAllSubscribers("TOKEN_REFRESHED",s.session);const d={data:s.session,error:null};return this.lastRefreshFailure=null,this.refreshingDeferred.resolve(d),d}catch(a){if(this._debug(r,"error",a),G(a)){const s={data:null,error:a};if(!Iw(a)){const i=await pn(this.storage,this.storageKey);!!(i!=null&&i.expires_at&&i.expires_at*1e3>Date.now())?this._debug(r,"proactive refresh failed, access token still valid — preserving session"):await this._removeSession()}return this.lastRefreshFailure={refreshToken:e,result:s,expiresAt:Date.now()+OI},(n=this.refreshingDeferred)===null||n===void 0||n.resolve(s),s}throw(o=this.refreshingDeferred)===null||o===void 0||o.reject(a),a}finally{this.refreshingDeferred=null,this._debug(r,"end")}}async _notifyAllSubscribers(e,n,o=!0){const r=`#_notifyAllSubscribers(${e})`;this._debug(r,"begin",n,`broadcast = ${o}`);try{this.broadcastChannel&&o&&this.broadcastChannel.postMessage({event:e,session:n});const a=[],s=Array.from(this.stateChangeEmitters.values()).map(async i=>{try{await i.callback(e,n)}catch(l){a.push(l)}});if(await Promise.all(s),a.length>0){for(let i=0;i<a.length;i+=1)console.error(a[i]);throw a[0]}}finally{this._debug(r,"end")}}async _saveSession(e){this._debug("#_saveSession()",e),this.suppressGetSessionWarning=!0,await Ve(this.storage,`${this.storageKey}-code-verifier`);const n=Object.assign({},e),o=n.user&&n.user.__isUserNotAvailableProxy===!0;if(this.userStorage){!o&&n.user&&await va(this.userStorage,this.storageKey+"-user",{user:n.user});const r=Object.assign({},n);delete r.user;const a=Rw(r);await va(this.storage,this.storageKey,a)}else{const r=Rw(n);await va(this.storage,this.storageKey,r)}}async _removeSession(){this._sessionRemovalEpoch+=1,this._debug("#_removeSession()"),this.lastRefreshFailure=null,this.suppressGetSessionWarning=!1,await Ve(this.storage,this.storageKey),await Ve(this.storage,this.storageKey+"-code-verifier"),await Ve(this.storage,this.storageKey+"-user"),this.userStorage&&await Ve(this.userStorage,this.storageKey+"-user"),await this._notifyAllSubscribers("SIGNED_OUT",null)}_removeVisibilityChangedCallback(){this._debug("#_removeVisibilityChangedCallback()");const e=this.visibilityChangedCallback;this.visibilityChangedCallback=null;try{e&&pt()&&(window!=null&&window.removeEventListener)&&window.removeEventListener("visibilitychange",e)}
167catch(n){console.error("removing visibilitychange callback failed",n)}}async _startAutoRefresh(){await this._stopAutoRefresh(),this._debug("#_startAutoRefresh()");const e=setInterval(()=>this._autoRefreshTokenTick(),co);this.autoRefreshTicker=e,e&&typeof e=="object"&&typeof e.unref=="function"?e.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(e);const n=setTimeout(async()=>{await this.initializePromise,await this._autoRefreshTokenTick()},0);this.autoRefreshTickTimeout=n,n&&typeof n=="object"&&typeof n.unref=="function"?n.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(n)}async _stopAutoRefresh(){this._debug("#_stopAutoRefresh()");const e=this.autoRefreshTicker;this.autoRefreshTicker=null,e&&clearInterval(e);const n=this.autoRefreshTickTimeout;this.autoRefreshTickTimeout=null,n&&clearTimeout(n)}async startAutoRefresh(){this._removeVisibilityChangedCallback(),await this._startAutoRefresh()}async stopAutoRefresh(){this._removeVisibilityChangedCallback(),await this._stopAutoRefresh()}async dispose(){var e;this._removeVisibilityChangedCallback(),await this._stopAutoRefresh(),(e=this.broadcastChannel)===null||e===void 0||e.close(),this.broadcastChannel=null,this.stateChangeEmitters.clear()}async _autoRefreshTokenTick(){if(this._debug("#_autoRefreshTokenTick()","begin"),this.lock!=null){try{await this._acquireLock(0,async()=>{try{const e=Date.now();try{return await this._useSession(async n=>{const{data:{session:o}}=n;if(!o||!o.refresh_token||!o.expires_at){this._debug("#_autoRefreshTokenTick()","no session");return}const r=Math.floor((o.expires_at*1e3-e)/co);this._debug("#_autoRefreshTokenTick()",`access token expires in ${r} ticks, a tick lasts ${co}ms, refresh threshold is ${oi} ticks`),r<=oi&&await this._callRefreshToken(o.refresh_token)})}catch(n){console.error("Auto refresh tick failed with error. This is likely a transient error.",n)}}finally{this._debug("#_autoRefreshTokenTick()","end")}})}catch(e){if(e instanceof w8)this._debug("auto refresh token tick lock not available");else throw e}return}if(this.refreshingDeferred!==null){this._debug("#_autoRefreshTokenTick()","refresh already in flight, skipping");return}try{const e=Date.now();try{await this._useSession(async n=>{const{data:{session:o}}=n;if(!o||!o.refresh_token||!o.expires_at){this._debug("#_autoRefreshTokenTick()","no session");return}const r=Math.floor((o.expires_at*1e3-e)/co);this._debug("#_autoRefreshTokenTick()",`access token expires in ${r} ticks, a tick lasts ${co}ms, refresh threshold is ${oi} ticks`),r<=oi&&await this._callRefreshToken(o.refresh_token)})}catch(n){console.error("Auto refresh tick failed with error. This is likely a transient error.",n)}}finally{this._debug("#_autoRefreshTokenTick()","end")}}async _handleVisibilityChange(){if(this._debug("#_handleVisibilityChange()"),!pt()||!(window!=null&&window.addEventListener))return this.autoRefreshToken&&this.startAutoRefresh(),!1;try{this.visibilityChangedCallback=async()=>{try{await this._onVisibilityChanged(!1)}catch(e){this._debug("#visibilityChangedCallback","error",e)}},window==null||window.addEventListener("visibilitychange",this.visibilityChangedCallback),await this._onVisibilityChanged(!0)}catch(e){console.error("_handleVisibilityChange",e)}}async _onVisibilityChanged(e){const n=`#_onVisibilityChanged(${e})`;if(this._debug(n,"visibilityState",document.visibilityState),document.visibilityState==="visible"){if(this.autoRefreshToken&&this._startAutoRefresh(),!e)if(await this.initializePromise,this.lock!=null)await this._acquireLock(this.lockAcquireTimeout,async()=>{if(document.visibilityState!=="visible"){this._debug(n,"acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting");return}await this._recoverAndRefresh()});else{if(document.visibilityState!=="visible"){this._debug(n,"visibilityState is no longer visible, skipping recovery");return}await this._recoverAndRefresh()}}else document.visibilityState==="hidden"&&this.autoRefreshToken&&this._stopAutoRefresh()}async _getUrlForProvider(e,n,o){const r=[`provider=${encodeURIComponent(n)}`];if(o!=null&&o.redirectTo&&r.push(`redirect_to=${encodeURIComponent(o.redirectTo)}`),o!=null&&o.scopes&&r.push(`scopes=${encodeURIComponent(o.scopes)}`),this.flowType==="pkce"){const[a,s]=await Ar(this.storage,this.storageKey),i=new URLSearchParams({code_challenge:`${encodeURIComponent(a)}`,code_challenge_method:`${encodeURIComponent(s)}`});
167r.push(i.toString())}if(o!=null&&o.queryParams){const a=new URLSearchParams(o.queryParams);r.push(a.toString())}return o!=null&&o.skipBrowserRedirect&&r.push(`skip_http_redirect=${o.skipBrowserRedirect}`),`${e}?${r.join("&")}`}async _unenroll(e){try{return await this._useSession(async n=>{var o;const{data:r,error:a}=n;return a?this._returnResult({data:null,error:a}):await X(this.fetch,"DELETE",`${this.url}/factors/${e.factorId}`,{headers:this.headers,jwt:(o=r==null?void 0:r.session)===null||o===void 0?void 0:o.access_token})})}catch(n){if(G(n))return this._returnResult({data:null,error:n});throw n}}async _enroll(e){try{return await this._useSession(async n=>{var o,r;const{data:a,error:s}=n;if(s)return this._returnResult({data:null,error:s});const i=Object.assign({friendly_name:e.friendlyName,factor_type:e.factorType},e.factorType==="phone"?{phone:e.phone}:e.factorType==="totp"?{issuer:e.issuer}:{}),{data:l,error:c}=await X(this.fetch,"POST",`${this.url}/factors`,{body:i,headers:this.headers,jwt:(o=a==null?void 0:a.session)===null||o===void 0?void 0:o.access_token});return c?this._returnResult({data:null,error:c}):(e.factorType==="totp"&&l.type==="totp"&&(!((r=l==null?void 0:l.totp)===null||r===void 0)&&r.qr_code)&&(l.totp.qr_code=`data:image/svg+xml;utf-8,${l.totp.qr_code}`),this._returnResult({data:l,error:null}))})}catch(n){if(G(n))return this._returnResult({data:null,error:n});throw n}}async _verify(e){const n=async()=>{try{return await this._useSession(async o=>{var r;const{data:a,error:s}=o;if(s)return this._returnResult({data:null,error:s});const i=Object.assign({challenge_id:e.challengeId},"webauthn"in e?{webauthn:Object.assign(Object.assign({},e.webauthn),{credential_response:e.webauthn.type==="create"?Hw(e.webauthn.credential_response):zw(e.webauthn.credential_response)})}:{code:e.code}),{data:l,error:c}=await X(this.fetch,"POST",`${this.url}/factors/${e.factorId}/verify`,{body:i,headers:this.headers,jwt:(r=a==null?void 0:a.session)===null||r===void 0?void 0:r.access_token});return c?this._returnResult({data:null,error:c}):(await this._saveSession(Object.assign({expires_at:Math.round(Date.now()/1e3)+l.expires_in},l)),await this._notifyAllSubscribers("MFA_CHALLENGE_VERIFIED",l),this._returnResult({data:l,error:c}))})}catch(o){if(G(o))return this._returnResult({data:null,error:o});throw o}};return this.lock!=null?this._acquireLock(this.lockAcquireTimeout,n):n()}async _challenge(e){const n=async()=>{try{return await this._useSession(async o=>{var r;const{data:a,error:s}=o;if(s)return this._returnResult({data:null,error:s});const i=await X(this.fetch,"POST",`${this.url}/factors/${e.factorId}/challenge`,{body:e,headers:this.headers,jwt:(r=a==null?void 0:a.session)===null||r===void 0?void 0:r.access_token});if(i.error)return i;const{data:l}=i;if(l.type!=="webauthn")return{data:l,error:null};switch(l.webauthn.type){case"create":return{data:Object.assign(Object.assign({},l),{webauthn:Object.assign(Object.assign({},l.webauthn),{credential_options:Object.assign(Object.assign({},l.webauthn.credential_options),{publicKey:qw(l.webauthn.credential_options.publicKey)})})}),error:null};case"request":return{data:Object.assign(Object.assign({},l),{webauthn:Object.assign(Object.assign({},l.webauthn),{credential_options:Object.assign(Object.assign({},l.webauthn.credential_options),{publicKey:Fw(l.webauthn.credential_options.publicKey)})})}),error:null}}})}catch(o){if(G(o))return this._returnResult({data:null,error:o});throw o}};return this.lock!=null?this._acquireLock(this.lockAcquireTimeout,n):n()}async _challengeAndVerify(e){const{data:n,error:o}=await this._challenge({factorId:e.factorId});return o?this._returnResult({data:null,error:o}):await this._verify({factorId:e.factorId,challengeId:n.id,code:e.code})}async _listFactors(){var e;const{data:{user:n},error:o}=await this.getUser();if(o)return{data:null,error:o};const r={all:[],phone:[],totp:[],webauthn:[]};for(const a of(e=n==null?void 0:n.factors)!==null&&e!==void 0?e:[])r.all.push(a),a.status==="verified"&&r[a.factor_type].push(a);return{data:r,error:null}}async _getAuthenticatorAssuranceLevel(e){var n,o,r,a;
167if(e)try{const{payload:p}=oc(e);let v=null;p.aal&&(v=p.aal);let y=v;const{data:{user:k},error:w}=await this.getUser(e);if(w)return this._returnResult({data:null,error:w});((o=(n=k==null?void 0:k.factors)===null||n===void 0?void 0:n.filter(x=>x.status==="verified"))!==null&&o!==void 0?o:[]).length>0&&(y="aal2");const b=p.amr||[];return{data:{currentLevel:v,nextLevel:y,currentAuthenticationMethods:b},error:null}}catch(p){if(G(p))return this._returnResult({data:null,error:p});throw p}const{data:{session:s},error:i}=await this.getSession();if(i)return this._returnResult({data:null,error:i});if(!s)return{data:{currentLevel:null,nextLevel:null,currentAuthenticationMethods:[]},error:null};const{payload:l}=oc(s.access_token);let c=null;l.aal&&(c=l.aal);let u=c;((a=(r=s.user.factors)===null||r===void 0?void 0:r.filter(p=>p.status==="verified"))!==null&&a!==void 0?a:[]).length>0&&(u="aal2");const g=l.amr||[];return{data:{currentLevel:c,nextLevel:u,currentAuthenticationMethods:g},error:null}}async _getAuthorizationDetails(e){try{return await this._useSession(async n=>{const{data:{session:o},error:r}=n;return r?this._returnResult({data:null,error:r}):o?await X(this.fetch,"GET",`${this.url}/oauth/authorizations/${e}`,{headers:this.headers,jwt:o.access_token,xform:a=>({data:a,error:null})}):this._returnResult({data:null,error:new tt})})}catch(n){if(G(n))return this._returnResult({data:null,error:n});throw n}}async _approveAuthorization(e,n){try{return await this._useSession(async o=>{const{data:{session:r},error:a}=o;if(a)return this._returnResult({data:null,error:a});if(!r)return this._returnResult({data:null,error:new tt});const s=await X(this.fetch,"POST",`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:r.access_token,body:{action:"approve"},xform:i=>({data:i,error:null})});return s.data&&s.data.redirect_url&&pt()&&!(n!=null&&n.skipBrowserRedirect)&&window.location.assign(s.data.redirect_url),s})}catch(o){if(G(o))return this._returnResult({data:null,error:o});throw o}}async _denyAuthorization(e,n){try{return await this._useSession(async o=>{const{data:{session:r},error:a}=o;if(a)return this._returnResult({data:null,error:a});if(!r)return this._returnResult({data:null,error:new tt});const s=await X(this.fetch,"POST",`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:r.access_token,body:{action:"deny"},xform:i=>({data:i,error:null})});return s.data&&s.data.redirect_url&&pt()&&!(n!=null&&n.skipBrowserRedirect)&&window.location.assign(s.data.redirect_url),s})}catch(o){if(G(o))return this._returnResult({data:null,error:o});throw o}}async _listOAuthGrants(){try{return await this._useSession(async e=>{const{data:{session:n},error:o}=e;return o?this._returnResult({data:null,error:o}):n?await X(this.fetch,"GET",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:n.access_token,xform:r=>({data:r,error:null})}):this._returnResult({data:null,error:new tt})})}catch(e){if(G(e))return this._returnResult({data:null,error:e});throw e}}async _revokeOAuthGrant(e){try{return await this._useSession(async n=>{const{data:{session:o},error:r}=n;return r?this._returnResult({data:null,error:r}):o?(await X(this.fetch,"DELETE",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:o.access_token,query:{client_id:e.clientId},noResolveJson:!0}),{data:{},error:null}):this._returnResult({data:null,error:new tt})})}catch(n){if(G(n))return this._returnResult({data:null,error:n});throw n}}async fetchJwk(e,n={keys:[]}){let o=n.keys.find(i=>i.kid===e);if(o)return o;const r=Date.now();if(o=this.jwks.keys.find(i=>i.kid===e),o&&this.jwks_cached_at+DI>r)return o;const{data:a,error:s}=await X(this.fetch,"GET",`${this.url}/.well-known/jwks.json`,{headers:this.headers});if(s)throw s;return!a.keys||a.keys.length===0||(this.jwks=a,this.jwks_cached_at=r,o=a.keys.find(i=>i.kid===e),!o)?null:o}async getClaims(e,n={}){try{let o=e;if(!o){const{data:p,error:v}
167=await this.getSession();if(v||!p.session)return this._returnResult({data:null,error:v});o=p.session.access_token}const{header:r,payload:a,signature:s,raw:{header:i,payload:l}}=oc(o);if(!(n!=null&&n.allowExpired))try{i8(a.exp)}catch(p){throw new ch(p instanceof Error?p.message:"JWT validation failed")}const c=!r.alg||r.alg.startsWith("HS")||!r.kid||!("crypto"in globalThis&&"subtle"in globalThis.crypto)?null:await this.fetchJwk(r.kid,n!=null&&n.keys?{keys:n.keys}:n==null?void 0:n.jwks);if(!c){const{error:p}=await this.getUser(o);if(p)throw p;return{data:{claims:a,header:r,signature:s},error:null}}const u=l8(r.alg),d=await crypto.subtle.importKey("jwk",c,u,!0,["verify"]);if(!await crypto.subtle.verify(u,d,s,GI(`${i}.${l}`)))throw new ch("Invalid JWT signature");return{data:{claims:a,header:r,signature:s},error:null}}catch(o){if(G(o))return this._returnResult({data:null,error:o});throw o}}async signInWithPasskey(e){var n,o,r;gn(this.experimental);try{if(!dh())return this._returnResult({data:null,error:new Sn("Browser does not support WebAuthn",null)});const{data:a,error:s}=await this._startPasskeyAuthentication({options:{captchaToken:(n=e==null?void 0:e.options)===null||n===void 0?void 0:n.captchaToken}});if(s||!a)return this._returnResult({data:null,error:s});const i=Fw(a.options),l=(r=(o=e==null?void 0:e.options)===null||o===void 0?void 0:o.signal)!==null&&r!==void 0?r:Zp.createNewAbortSignal(),{data:c,error:u}=await i2({publicKey:i,signal:l});if(u||!c)return this._returnResult({data:null,error:u??new Sn("WebAuthn ceremony failed",null)});const d=zw(c);return this._verifyPasskeyAuthentication({challengeId:a.challenge_id,credential:d})}catch(a){if(G(a))return this._returnResult({data:null,error:a});throw a}}async registerPasskey(e){var n,o;gn(this.experimental);try{if(!dh())return this._returnResult({data:null,error:new Sn("Browser does not support WebAuthn",null)});const{data:r,error:a}=await this._startPasskeyRegistration();if(a||!r)return this._returnResult({data:null,error:a});const s=qw(r.options),i=(o=(n=e==null?void 0:e.options)===null||n===void 0?void 0:n.signal)!==null&&o!==void 0?o:Zp.createNewAbortSignal(),{data:l,error:c}=await s2({publicKey:s,signal:i});if(c||!l)return this._returnResult({data:null,error:c??new Sn("WebAuthn ceremony failed",null)});const u=Hw(l);return this._verifyPasskeyRegistration({challengeId:r.challenge_id,credential:u})}catch(r){if(G(r))return this._returnResult({data:null,error:r});throw r}}async _startPasskeyRegistration(){gn(this.experimental);try{return await this._useSession(async e=>{const{data:{session:n},error:o}=e;if(o)return this._returnResult({data:null,error:o});if(!n)return this._returnResult({data:null,error:new tt});const{data:r,error:a}=await X(this.fetch,"POST",`${this.url}/passkeys/registration/options`,{headers:this.headers,jwt:n.access_token,body:{}});return a?this._returnResult({data:null,error:a}):this._returnResult({data:r,error:null})})}catch(e){if(G(e))return this._returnResult({data:null,error:e});throw e}}async _verifyPasskeyRegistration(e){gn(this.experimental);try{return await this._useSession(async n=>{const{data:{session:o},error:r}=n;if(r)return this._returnResult({data:null,error:r});if(!o)return this._returnResult({data:null,error:new tt});const{data:a,error:s}=await X(this.fetch,"POST",`${this.url}/passkeys/registration/verify`,{headers:this.headers,jwt:o.access_token,body:{challenge_id:e.challengeId,credential:e.credential}});return s?this._returnResult({data:null,error:s}):this._returnResult({data:a,error:null})})}catch(n){if(G(n))return this._returnResult({data:null,error:n});throw n}}async _startPasskeyAuthentication(e){var n;gn(this.experimental);try{const{data:o,error:r}=await X(this.fetch,"POST",`${this.url}/passkeys/authentication/options`,{headers:this.headers,body:{gotrue_meta_security:{captcha_token:(n=e==null?void 0:e.options)===null||n===void 0?void 0:n.captchaToken}}});return r?this._returnResult({data:null,error:r}):this._returnResult({data:o,error:null})}catch(o){if(G(o))return this._returnResult({data:null,error:o});throw o}}async _verifyPasskeyAuthentication(e){gn(this.experimental);try{const{data:n,error:o}=await X(this.fetch,"POST",`${this.url}/passkeys/authentication/verify`,{headers:this.headers,body:{challenge_id:e.challengeId,credential:e.credential},xform:Vt});return o?this._returnResult({data:null,error:o}):(n.session&&(await this._saveSession(n.session),await this._notifyAllSubscribers("SIGNED_IN",n.session)),this._returnResult({data:n,error:null}))}catch(n){if(G(n))return this._returnResult({data:null,error:n});throw n}}async _listPasskeys(){gn(this.experimental);try{return await this._useSession(async e=>{const{data:{session:n},error:o}=e;if(o)return this._returnResult({data:null,error:o});if(!n)return this._returnResult({data:null,error:new tt});const{data:r,error:a}=await X(this.fetch,"GET",`${this.url}/passkeys`,{headers:this.headers,jwt:n.access_token,xform:s=>({data:s,error:null})});return a?this._returnResult({data:null,error:a}):this._returnResult({data:r,error:null})})}catch(e){if(G(e))return this._returnResult({data:null,error:e});throw e}}async _updatePasskey(e){gn(this.experimental);try{return await this._useSession(async n=>{const{data:{session:o},error:r}=n;if(r)return this._returnResult({data:null,error:r});if(!o)return this._returnResult({data:null,error:new tt});const{data:a,error:s}=await X(this.fetch,"PATCH",`${this.url}/passkeys/${e.passkeyId}`,{headers:this.headers,jwt:o.access_token,body:{friendly_name:e.friendlyName}});return s?this._returnResult({data:null,error:s}):this._returnResult({data:a,error:null})})}catch(n){if(G(n))return this._returnResult({data:null,error:n});throw n}}async _deletePasskey(e){gn(this.experimental);try{return await this._useSession(async n=>{const{data:{session:o},error:r}=n;if(r)return this._returnResult({data:null,error:r});if(!o)return this._returnResult({data:null,error:new tt});const{error:a}
167=await X(this.fetch,"DELETE",`${this.url}/passkeys/${e.passkeyId}`,{headers:this.headers,jwt:o.access_token,noResolveJson:!0});return a?this._returnResult({data:null,error:a}):this._returnResult({data:null,error:null})})}catch(n){if(G(n))return this._returnResult({data:null,error:n});throw n}}}Zi.nextInstanceID={};const B8=Zi,O8="2.110.0";let ri="",gh;if(typeof Deno<"u"){var hd;ri="deno",gh=(hd=Deno.version)===null||hd===void 0?void 0:hd.deno}else if(typeof document<"u")ri="web";else if(typeof navigator<"u"&&navigator.product==="ReactNative")ri="react-native";else{var ud;ri="node",gh=typeof process<"u"?(ud=process.version)===null||ud===void 0?void 0:ud.replace(/^v/,""):void 0}const l2=[`runtime=${ri}`];gh&&l2.push(`runtime-version=${gh}`);const M8={"X-Client-Info":`supabase-js/${O8}; ${l2.join("; ")}`},R8={headers:M8},N8={schema:"public"},L8={autoRefreshToken:!0,persistSession:!0,detectSessionInUrl:!0,flowType:"implicit"},D8={},W8={enabled:!1,respectSamplingDecision:!0};function q8(t,e,n,o){function r(a){return a instanceof n?a:new n(function(s){s(a)})}return new(n||(n=Promise))(function(a,s){function i(u){try{c(o.next(u))}catch(d){s(d)}}function l(u){try{c(o.throw(u))}catch(d){s(d)}}function c(u){u.done?a(u.value):r(u.value).then(i,l)}c((o=o.apply(t,[])).next())})}let dd=null;const F8="@opentelemetry/api";function H8(){return dd===null&&(dd=import(F8).catch(()=>null)),dd}function z8(){return q8(this,void 0,void 0,function*(){try{const t=yield H8();if(!t||!t.propagation||!t.context)return null;const e={};t.propagation.inject(t.context.active(),e);const n=e.traceparent;return n?{traceparent:n,tracestate:e.tracestate,baggage:e.baggage}:null}catch{return null}})}function $8(t){if(!t||typeof t!="string")return null;const e=t.split("-");if(e.length!==4)return null;const[n,o,r,a]=e;if(n.length!==2||o.length!==32||r.length!==16||a.length!==2)return null;const s=/^[0-9a-f]+$/i;return!s.test(n)||!s.test(o)||!s.test(r)||!s.test(a)||o==="00000000000000000000000000000000"||r==="0000000000000000"?null:{version:n,traceId:o,parentId:r,traceFlags:a,isSampled:(parseInt(a,16)&1)===1}}function U8(t,e){if(!t||!e||e.length===0)return!1;let n;if(t instanceof URL)n=t;else try{n=new URL(t)}catch{return!1}for(const o of e)try{if(typeof o=="string"){if(Y8(n.hostname,o))return!0}else if(o instanceof RegExp){if(o.test(n.hostname))return!0}else if(typeof o=="function"&&o(n))return!0}catch{continue}return!1}function Y8(t,e){if(e===t)return!0;if(e.startsWith("*.")){const n=e.slice(2);if(t.endsWith(n)&&(t===n||t.endsWith("."+n)))return!0}return!1}function V8(t){const e=[];try{const n=new URL(t);e.push(n.hostname)}catch{}return e.push("*.supabase.co","*.supabase.in"),e.push("localhost","127.0.0.1","[::1]"),e}function Xi(t){"@babel/helpers - typeof";return Xi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Xi(t)}function G8(t,e){if(Xi(t)!="object"||!t)return t;var n=t[Symbol.toPrimitive];if(n!==void 0){var o=n.call(t,e||"default");if(Xi(o)!="object")return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return(e==="string"?String:Number)(t)}function K8(t){var e=G8(t,"string");return Xi(e)=="symbol"?e:e+""}function J8(t,e,n){return(e=K8(e))in t?Object.defineProperty(t,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):t[e]=n,t}function $w(t,e){var n=Object.keys(t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(t);e&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(t,r).enumerable})),n.push.apply(n,o)}return n}function $e(t){for(var e=1;e<arguments.length;e++){var n=arguments[e]!=null?arguments[e]:{};e%2?$w(Object(n),!0).forEach(function(o){J8(t,o,n[o])}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(n)):$w(Object(n)).forEach(function(o){Object.defineProperty(t,o,Object.getOwnPropertyDescriptor(n,o))})}return t}const Q8=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),Z8=()=>Headers,X8=(t,e,n,o,r)=>{const a=Q8(o),s=Z8(),i=(r==null?void 0:r.enabled)===!0,l=(r==null?void 0:r.respectSamplingDecision)!==!1,c=i?V8(e):null;return async(u,d)=>{var g;const p=(g=await n())!==null&&g!==void 0?g:t;let v=new s(d==null?void 0:d.headers);if(v.has("apikey")||v.set("apikey",t),v.has("Authorization")||v.set("Authorization",`Bearer ${p}`),c){const y=await e7(u,c,l);y&&(y.traceparent&&!v.has("traceparent")&&v.set("traceparent",y.traceparent),y.tracestate&&!v.has("tracestate")&&v.set("tracestate",y.tracestate),y.baggage&&!v.has("baggage")&&v.set("baggage",y.baggage))}return a(u,$e($e({},d),{},{headers:v}))}};async function e7(t,e,n){if(!U8(typeof t=="string"||t instanceof URL?t:t.url,e))return null;const o=await z8();if(!o||!o.traceparent)return null;if(n){const r=$8(o.traceparent);if(r&&!r.isSampled)return null}return o}function Uw(t){return typeof t=="boolean"?{enabled:t}:t}function t7(t){return t.endsWith("/")?t:t+"/"}function n7(t,e){var n,o,r,a,s,i;const{db:l,auth:c,realtime:u,global:d}=t,{db:g,auth:p,realtime:v,global:y}=e,k=Uw(t.tracePropagation),w=Uw(e.tracePropagation),m={db:$e($e({},g),l),auth:$e($e({},p),c),realtime:$e($e({},v),u),storage:{},global:$e($e($e({},y),d),{},{headers:$e($e({},(n=y==null?void 0:y.headers)!==null&&n!==void 0?n:{}
167),(o=d==null?void 0:d.headers)!==null&&o!==void 0?o:{})}),tracePropagation:{enabled:(r=(a=k==null?void 0:k.enabled)!==null&&a!==void 0?a:w==null?void 0:w.enabled)!==null&&r!==void 0?r:!1,respectSamplingDecision:(s=(i=k==null?void 0:k.respectSamplingDecision)!==null&&i!==void 0?i:w==null?void 0:w.respectSamplingDecision)!==null&&s!==void 0?s:!0},accessToken:async()=>""};return t.accessToken?m.accessToken=t.accessToken:delete m.accessToken,m}function o7(t){const e=t==null?void 0:t.trim();if(!e)throw new Error("supabaseUrl is required.");if(!e.match(/^https?:\/\//i))throw new Error("Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.");try{return new URL(t7(e))}catch{throw Error("Invalid supabaseUrl: Provided URL is malformed.")}}var r7=class extends B8{constructor(t){super(t)}},a7=class{constructor(t,e,n){var o,r;this.supabaseUrl=t,this.supabaseKey=e;const a=o7(t);if(!e)throw new Error("supabaseKey is required.");this.realtimeUrl=new URL("realtime/v1",a),this.realtimeUrl.protocol=this.realtimeUrl.protocol.replace("http","ws"),this.authUrl=new URL("auth/v1",a),this.storageUrl=new URL("storage/v1",a),this.functionsUrl=new URL("functions/v1",a);const s=`sb-${a.hostname.split(".")[0]}-auth-token`,i={db:N8,realtime:D8,auth:$e($e({},L8),{},{storageKey:s}),global:R8,tracePropagation:W8},l=n7(n??{},i);if(this.settings=l,this.storageKey=(o=l.auth.storageKey)!==null&&o!==void 0?o:"",this.headers=(r=l.global.headers)!==null&&r!==void 0?r:{},l.accessToken)this.accessToken=l.accessToken,this.auth=new Proxy({},{get:(u,d)=>{throw new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(d)} is not possible`)}});else{var c;this.auth=this._initSupabaseAuthClient((c=l.auth)!==null&&c!==void 0?c:{},this.headers,l.global.fetch)}this.fetch=X8(e,t,this._getAccessToken.bind(this),l.global.fetch,l.tracePropagation),this.realtime=this._initRealtimeClient($e({headers:this.headers,accessToken:this._getAccessToken.bind(this),fetch:this.fetch},l.realtime)),this.accessToken&&Promise.resolve(this.accessToken()).then(u=>this.realtime.setAuth(u)).catch(u=>console.warn("Failed to set initial Realtime auth token:",u)),this.rest=new gE(new URL("rest/v1",a).href,{headers:this.headers,schema:l.db.schema,fetch:this.fetch,timeout:l.db.timeout,urlLengthLimit:l.db.urlLengthLimit}),this.storage=new BI(this.storageUrl.href,this.headers,this.fetch,n==null?void 0:n.storage),l.accessToken||this._listenForAuthEvents()}get functions(){return new aE(this.functionsUrl.href,{headers:this.headers,customFetch:this.fetch})}from(t){return this.rest.from(t)}schema(t){return this.rest.schema(t)}rpc(t,e={},n={head:!1,get:!1,count:void 0}){return this.rest.rpc(t,e,n)}channel(t,e={config:{}}){return this.realtime.channel(t,e)}getChannels(){return this.realtime.getChannels()}removeChannel(t){return this.realtime.removeChannel(t)}removeAllChannels(){return this.realtime.removeAllChannels()}async _getAccessToken(){var t=this,e,n;if(t.accessToken)return await t.accessToken();const{data:o}=await t.auth.getSession();return(e=(n=o.session)===null||n===void 0?void 0:n.access_token)!==null&&e!==void 0?e:t.supabaseKey}_initSupabaseAuthClient({autoRefreshToken:t,persistSession:e,detectSessionInUrl:n,storage:o,userStorage:r,storageKey:a,flowType:s,lock:i,debug:l,throwOnError:c,experimental:u,lockAcquireTimeout:d,skipAutoInitialize:g},p,v){const y={Authorization:`Bearer ${this.supabaseKey}`,apikey:`${this.supabaseKey}`};return new r7({url:this.authUrl.href,headers:$e($e({},y),p),storageKey:a,autoRefreshToken:t,persistSession:e,detectSessionInUrl:n,storage:o,userStorage:r,flowType:s,lock:i,debug:l,throwOnError:c,experimental:u,fetch:v,lockAcquireTimeout:d,skipAutoInitialize:g,hasCustomAuthorizationHeader:Object.keys(this.headers).some(k=>k.toLowerCase()==="authorization")})}_initRealtimeClient(t){return new nI(this.realtimeUrl.href,$e($e({},t),{},{params:$e($e({},{apikey:this.supabaseKey}),t==null?void 0:t.params)}))}_listenForAuthEvents(){return this.auth.onAuthStateChange((t,e)=>{this._handleTokenChanged(t,"CLIENT",e==null?void 0:e.access_token)})}_handleTokenChanged(t,e,n){(t==="TOKEN_REFRESHED"||t==="SIGNED_IN")&&this.changedAccessToken!==n?(this.changedAccessToken=n,this.realtime.setAuth(n)):t==="SIGNED_OUT"&&(this.realtime.setAuth(),e=="STORAGE"&&this.auth.signOut(),this.changedAccessToken=void 0)}};const s7=(t,e,n)=>new a7(t,e,n);function i7(){if(typeof window<"u")return!1;const t=globalThis.process;if(!t)return!1;const e=t.version;if(e==null)return!1;const n=e.match(/^v(\d+)\./);return n?parseInt(n[1],10)<=20:!1}i7()&&console.warn("⚠️  Node.js 20 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to N
167ode.js 22 or later. For more information, visit: https://github.com/orgs/supabase/discussions/45715");function l7(){var k,w;if(typeof window>"u")return;const t=location.hostname,n=["lovableproject.com","lovableproject-dev.com","lovable.app","gpt-eng.com","gptengineer.run"].some(m=>t===m||t.endsWith("."+m)),o="[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}",r=n?((k=t.match(new RegExp("^(?:id-preview(?:-[a-z0-9]+)?|project)--("+o+")(?:-dev)?(?=\\.|$)","i")))==null?void 0:k[1])??((w=t.match(new RegExp("^("+o+")(?=[.-])","i")))==null?void 0:w[1]):void 0,a=window.parent&&window.parent!==window;if(!r||!a)return localStorage;const s=t.endsWith(".lovableproject-dev.com")||t.endsWith(".gpt-eng.com"),i=s?/^https:\/\/([a-z0-9-]+\.)*(lovable\.dev|gptengineer\.app)$|^http:\/\/localhost:3000$/:/^https:\/\/([a-z0-9-]+\.)*(lovable\.dev|gptengineer\.app)$/,l=location.ancestorOrigins&&location.ancestorOrigins[0]||(document.referrer?new URL(document.referrer).origin:""),c=l&&i.test(l)?[l]:s?["https://lovable.dev","http://localhost:3000"]:["https://lovable.dev"],u="lovable-preview-auth:result",d=2e3,g=()=>Math.random().toString(36).slice(2)+Date.now().toString(36),p=(m,b,x)=>new Promise(S=>{const T=g();let A=!1,_;const C=O=>{A||(A=!0,clearTimeout(_),window.removeEventListener("message",P),S(O))},P=O=>{if(c.indexOf(O.origin)<0)return;const Y=O.data;Y&&Y.type===u&&Y.requestId===T&&C(Y)};window.addEventListener("message",P);const L={type:m,requestId:T,projectId:r,key:b};x!==void 0&&(L.value=x);for(const O of c)window.parent.postMessage(L,O);_=setTimeout(()=>C(null),d)});let v=!0;const y=250;return{getItem:async m=>{let b=await p("lovable-preview-auth:get",m);return!b&&v&&(await new Promise(x=>setTimeout(x,y)),b=await p("lovable-preview-auth:get",m)),v=!1,b&&b.ok&&typeof b.value=="string"?b.value===""?(localStorage.removeItem(m),null):b.value:localStorage.getItem(m)},setItem:(m,b)=>(localStorage.setItem(m,b),p("lovable-preview-auth:set",m,b).then(x=>{x&&x.ok&&typeof x.value=="string"&&localStorage.getItem(m)===b&&(x.value===""?localStorage.removeItem(m):localStorage.setItem(m,x.value))})),removeItem:m=>(localStorage.removeItem(m),p("lovable-preview-auth:remove",m).then(()=>{}))}}const c7="https://ncwgnllzoaakwjhcxmah.supabase.co",h7="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im5jd2dubGx6b2Fha3dqaGN4bWFoIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzE4NjE2ODQsImV4cCI6MjA4NzQzNzY4NH0.LKdsN39Pcct9PYQR6cgXcbsvgQ9wutCWRQrN489tUgE",Ja=s7(c7,h7,{auth:{storage:l7(),persistSession:!0,autoRefreshToken:!0}}),Xp="hb_internal";function u7(){if(!(typeof window>"u"))try{const e=new URLSearchParams(window.location.search).get("internal");e==="1"?localStorage.setItem(Xp,"1"):e==="0"&&localStorage.removeItem(Xp)}catch{}}function d7(){if(typeof window>"u")return!1;try{if(localStorage.getItem(Xp)==="1")return!0;const t=window.location.hostname;return!!(t==="localhost"||t==="127.0.0.1"||t.endsWith(".lovable.app")||t.endsWith(".lovable.dev")||t.endsWith(".lovableproject.com"))}catch{return!1}}const c2="19.99",p7=`$${c2}`,g7="/us-enterprise-audit",m7="https://vuni.ai/mini";function dN(t){const e=new URLSearchParams({utm_source:"hunterandbard",utm_medium:"referral",utm_campaign:"enterprise-audit"}),n=typeof window<"u"?d2():void 0;return n&&e.set("utm_content",n.slice(0,150)),`${m7}?${e.toString()}`}const h2="hb_audit_origin";function u2(t){try{sessionStorage.setItem(h2,t)}catch{}}function d2(){try{return sessionStorage.getItem(h2)||window.location.pathname}catch{return window.location.pathname}}function f7(){try{let t=sessionStorage.getItem("hb_visitor_session");return t||(t=crypto.randomUUID(),sessionStorage.setItem("hb_visitor_session",t)),t}catch{return"no-session"}}function pN(t){if(typeof window>"u"||d7())return;const e=new URLSearchParams(window.location.search);Ja.functions.invoke("notify-sprint-interest",{body:{kind:"audit",source:t,path:window.location.pathname,origin:d2(),referrer:document.referrer||null,session_id:f7(),utm_source:e.get("utm_source"),utm_medium:e.get("utm_medium"),utm_campaign:e.get("utm_campaign")}}).catch(()=>{})}
167const y7=({showCall:t=!0,className:e=""})=>{const{pathname:n}=Ao();return h.jsxs("section",{className:`on-dark bg-teal-700 rounded-lg px-8 md:px-16 py-16 md:py-24 text-center ${e}`,children:[h.jsxs("p",{className:"font-semibold text-xs text-white uppercase tracking-wider mb-4",children:["US Enterprise Messaging Audit · ",p7]}),h.jsxs("h2",{className:"font-display font-semibold text-[32px] md:text-cta uppercase text-white leading-[1.1] mb-6",children:["See what US buyers ",h.jsx("span",{className:"font-serif italic font-normal text-wasabi",children:"Actually Hear"})]}),h.jsx("p",{className:"subtitle-lead-on-dark mb-10 mx-auto [text-wrap:balance]",children:"The audit reads your website the way an enterprise buyer does, scores your messaging across six sections, and shows how AI assistants describe you."}),h.jsx(Kn,{variant:"wasabi",size:"xl",className:"group px-10 py-5",asChild:!0,children:h.jsxs(Ne,{to:g7,onClick:()=>u2(n),children:["Run the audit",h.jsx(Vn,{className:"ml-2 w-5 h-5 group-hover:translate-x-1 transition-transform"})]})}),t&&h.jsxs("p",{className:"mt-6 text-sm text-white/70",children:["Ready to talk instead?"," ",h.jsx(Ne,{to:"/contact",className:"text-wasabi underline underline-offset-4",children:"Book a 20-min call"})]})]})},w7="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFAAAABQCAYAAACOEfKtAAAAAXNSR0IArs4c6QAAAERlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAAUKADAAQAAAABAAAAUAAAAAAx4ExPAAAFPUlEQVR4Ae2czW7bRhCAZyQBUaKkWMBWLKCHqLfe6jxB2VtvcZ8g7q23JMeeKp16jH3sye4TOH6Csk8Q5dhT1UuhOAbCIGptIK63M5SpMNTyb0WKJDALCFzOzuzOfF5yl9ylUfX7u6BbzwHAoV9VyQPQB9752bgqB2zbRbW985KMd20rKNYOv/HOZ26xdZZbW4uqrwk8P1Cn3HCLr50BSlqDgABcAx6bdta0r8xcDYcKvEtl44DnzaY2diabxgH0wc0vTmB+4dj++WngZBYeIEzp6ILGU9vBq3mX8PuLEQXt0G/dpEDTAKrhKU2hflP9nT9Vf7Cft9LmAWyh1WWbCkbDELQ+8kEOBsNU/RuF5gHMGpmtHoO80i/V1uBxlioEoJmSAtTHWSAKQDPAhRT1gep/nvigIQCTAALQ/fbqxB/5Y/QEYAyYpZjvifNLGqnNSQCauUSk+klcLxSAEVQxp4om7vumMgFoomKWPTKJBaCJilnmmC5jAWiGZZb+82EYLRCAUSJJ56gFYBKf1DJ9vfIcLj0wlVpIAVte6MzPCsAokaTz62sBmMQntexudxLVkR4YJRJ3jjDxplPpgXF8Msh/N+lIDzRRMcnaeGASC0ATlagM8dibmVfyBGAU1uq5B20Yr4oXEgEYR+ajfBzX+1hFAH4EZcjh2Dt/bbz3Bcr1AohaBY7FHrV+EFtWaAHDm43SqqwXQADjO7cgCLVYr3WC85KOPNd7lgUet88A2aAeidYf1Pb9n2KdudLPY8sKKUAXOvgw7bINN9Xu3rl3mwROWFhtHp1urzfs9tRfl/++n7EvanvgdO/0jij7bQm+8R6ZXwDwR+p148v5PFeHQt9B3hPCq08bT/orcp73p1i2TT0G9SvaHJQraNoLQ9DI5gO46+7U8gFunFuoQUUJ2rdGBPJJSJwlS/ep5BEySyXr6lQOMAiAtpydUH4vOE8+Zhshk+soprRGozAeZg6pA8eZdUtWrE0P5DipF+rUeGlTpPfm9RepehtSqFEP3FDEBTdTG4D+Bz9ZguO5Iu+PrkmqDUCah2UfhecXPCesRWpX7QX3pm7n1s8E8IccvnzZ7d1V3c/u/ZF34pujjUyq/iCitu7vAbZ2M1kUqaSvH9CElqcu5ksSceo3p1cXtENuuLS3eaEXEubOtmhirfEd2blAi0em9Q9TnfytHD9fPjUVViZDOITe7VEQhP8S4T8YEajHG/TpBV0Vh2mfPzDA9KnDBr0mp2NfI6mtnQOLJ5b1vKfVOGjjd3EvVesFMMMcj/7gb4mI+ZJfD1WKtR6ZPset0ShM/mt4lRIFdVA8TdUpRQFHpldt9QIIOEmNXfufZ6WqlaOwCrFmAMsJu9haGeLACeoUgAGJPEekT8JunoYEYB5wgS6/AL759EEABlByH7X/6CkAc4NbGii+FwrAJQ+LDOo9AWjBLWTytQAM0bDIKgFoQW1pQqOxAFzSsMsIQDtugZUnAAMUNkd6eyQAbcAtbXAiAJcwLDLYOhWAFtx8E375e/b3CwFoCxBoZxglAWgDkHpfsHNfANoA5IWvm+9GBGBegLTk6r2ZHQdmAjAgkeWI+CvtDPtkDV0AZgHHOouetx9Vb9w/YIwGUPo5Dxion3lnZ7RTYTU1sQe6q2GUIvF4lwRtMXkYB49bbVwP5L0q9Cp9TKvwj2iRXRWKTusJQePFfXe5J+Y8uYXGAeRwKLgRHfhXeWriJVw5tLADAjBMwyIvAC2ghU0YoBsWVJrnKUPDUoe+TvweruCIJorDSn3X+pNHpEp9ydH4/3w0PkfeLZoUAAAAAElFTkSuQmCC";var pd="focusScope.autoFocusOnMount",gd="focusScope.autoFocusOnUnmount",Yw={bubbles:!1,cancelable:!0},b7="FocusScope",Dm=f.forwardRef((t,e)=>{const{loop:n=!1,trapped:o=!1,onMountAutoFocus:r,onUnmountAutoFocus:a,...s}=t,[i,l]=f.useState(null),c=In(r),u=In(a),d=f.useRef(null),g=Ee(e,y=>l(y)),p=f.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;f.useEffect(()=>{if(o){let y=function(b){if(p.paused||!i)return;const x=b.target;i.contains(x)?d.current=x:Ro(d.current,{select:!0})},k=function(b){if(p.paused||!i)return;const x=b.relatedTarget;x!==null&&(i.contains(x)||Ro(d.current,{select:!0}))},w=function(b){if(document.activeElement===document.body)for(const S of b)S.removedNodes.length>0&&Ro(i)};document.addEventListener("focusin",y),document.addEventListener("focusout",k);const m=new MutationObserver(w);return i&&m.observe(i,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",y),document.removeEventListener("focusout",k),m.disconnect()}}},[o,i,p.paused]),f.useEffect(()=>{if(i){Gw.add(p);const y=document.activeElement;if(!i.contains(y)){const w=new CustomEvent(pd,Yw);i.addEventListener(pd,c),i.dispatchEvent(w),w.defaultPrevented||(v7(A7(p2(i)),{select:!0}),document.activeElement===y&&Ro(i))}return()=>{i.removeEventListener(pd,c),setTimeout(()=>{const w=new CustomEvent(gd,Yw);i.addEventListener(gd,u),i.dispatchEvent(w),w.defaultPrevented||Ro(y??document.body,{select:!0}),i.removeEventListener(gd,u),Gw.remove(p)}
vendor: 4,126 bytes, line 167
167,0)}}},[i,c,u,p]);const v=f.useCallback(y=>{if(!n&&!o||p.paused)return;const k=y.key==="Tab"&&!y.altKey&&!y.ctrlKey&&!y.metaKey,w=document.activeElement;if(k&&w){const m=y.currentTarget,[b,x]=k7(m);b&&x?!y.shiftKey&&w===x?(y.preventDefault(),n&&Ro(b,{select:!0})):y.shiftKey&&w===b&&(y.preventDefault(),n&&Ro(x,{select:!0})):w===m&&y.preventDefault()}},[n,o,p.paused]);return h.jsx(ce.div,{tabIndex:-1,...s,ref:g,onKeyDown:v})});Dm.displayName=b7;function v7(t,{select:e=!1}={}){const n=document.activeElement;for(const o of t)if(Ro(o,{select:e}),document.activeElement!==n)return}function k7(t){const e=p2(t),n=Vw(e,t),o=Vw(e.reverse(),t);return[n,o]}function p2(t){const e=[],n=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT,{acceptNode:o=>{const r=o.tagName==="INPUT"&&o.type==="hidden";return o.disabled||o.hidden||r?NodeFilter.FILTER_SKIP:o.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)e.push(n.currentNode);return e}function Vw(t,e){for(const n of t)if(!x7(n,{upTo:e}))return n}function x7(t,{upTo:e}){if(getComputedStyle(t).visibility==="hidden")return!0;for(;t;){if(e!==void 0&&t===e)return!1;if(getComputedStyle(t).display==="none")return!0;t=t.parentElement}return!1}function S7(t){return t instanceof HTMLInputElement&&"select"in t}function Ro(t,{select:e=!1}={}){if(t&&t.focus){const n=document.activeElement;t.focus({preventScroll:!0}),t!==n&&S7(t)&&e&&t.select()}}var Gw=T7();function T7(){let t=[];return{add(e){const n=t[0];e!==n&&(n==null||n.pause()),t=Kw(t,e),t.unshift(e)},remove(e){var n;t=Kw(t,e),(n=t[0])==null||n.resume()}}}function Kw(t,e){const n=[...t],o=n.indexOf(e);return o!==-1&&n.splice(o,1),n}function A7(t){return t.filter(e=>e.tagName!=="A")}var md=0;function g2(){f.useEffect(()=>{const t=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",t[0]??Jw()),document.body.insertAdjacentElement("beforeend",t[1]??Jw()),md++,()=>{md===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(e=>e.remove()),md--}},[])}function Jw(){const t=document.createElement("span");return t.setAttribute("data-radix-focus-guard",""),t.tabIndex=0,t.style.outline="none",t.style.opacity="0",t.style.position="fixed",t.style.pointerEvents="none",t}var Cc="right-scroll-bar-position",Ec="width-before-scroll-bar",_7="with-scroll-bars-hidden",C7="--removed-body-scroll-bar-size";function fd(t,e){return typeof t=="function"?t(e):t&&(t.current=e),t}function E7(t,e){var n=f.useState(function(){return{value:t,callback:e,facade:{get current(){return n.value},set current(o){var r=n.value;r!==o&&(n.value=o,n.callback(o,r))}}}})[0];return n.callback=e,n.facade}var I7=typeof window<"u"?f.useLayoutEffect:f.useEffect,Qw=new WeakMap;function P7(t,e){var n=E7(null,function(o){return t.forEach(function(r){return fd(r,o)})});return I7(function(){var o=Qw.get(n);if(o){var r=new Set(o),a=new Set(t),s=n.current;r.forEach(function(i){a.has(i)||fd(i,null)}),a.forEach(function(i){r.has(i)||fd(i,s)})}Qw.set(n,t)},[t]),n}function j7(t){return t}function B7(t,e){e===void 0&&(e=j7);var n=[],o=!1,r={read:function(){if(o)throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:t},useMedium:function(a){var s=e(a,o);return n.push(s),function(){n=n.filter(function(i){return i!==s})}},assignSyncMedium:function(a){for(o=!0;n.length;){var s=n;n=[],s.forEach(a)}n={push:function(i){return a(i)},filter:function(){return n}}},assignMedium:function(a){o=!0;var s=[];if(n.length){var i=n;n=[],i.forEach(a),s=n}var l=function(){var u=s;s=[],u.forEach(a)},c=function(){return Promise.resolve().then(l)};c(),n={push:function(u){s.push(u),c()},filter:function(u){return s=s.filter(u),n}}}};return r}function O7(t){t===void 0&&(t={});var e=B7(null);return e.options=zn({async:!0,ssr:!1},t),e}var m2=function(t){var e=t.sideCar,n=Ps(t,["sideCar"]);if(!e)throw new Error("Sidecar: please provide `sideCar` property to import the right car");var o=e.read();if(!o)throw new Error("Sidecar medium not found");return f.createElement(o,zn({},n))};
vendor: 5,121 bytes, lines 167-204
167m2.isSideCarExport=!0;function M7(t,e){return t.useMedium(e),m2}var f2=O7(),yd=function(){},iu=f.forwardRef(function(t,e){var n=f.useRef(null),o=f.useState({onScrollCapture:yd,onWheelCapture:yd,onTouchMoveCapture:yd}),r=o[0],a=o[1],s=t.forwardProps,i=t.children,l=t.className,c=t.removeScrollBar,u=t.enabled,d=t.shards,g=t.sideCar,p=t.noRelative,v=t.noIsolation,y=t.inert,k=t.allowPinchZoom,w=t.as,m=w===void 0?"div":w,b=t.gapMode,x=Ps(t,["forwardProps","children","className","removeScrollBar","enabled","shards","sideCar","noRelative","noIsolation","inert","allowPinchZoom","as","gapMode"]),S=g,T=P7([n,e]),A=zn(zn({},x),r);return f.createElement(f.Fragment,null,u&&f.createElement(S,{sideCar:f2,removeScrollBar:c,shards:d,noRelative:p,noIsolation:v,inert:y,setCallbacks:a,allowPinchZoom:!!k,lockRef:n,gapMode:b}),s?f.cloneElement(f.Children.only(i),zn(zn({},A),{ref:T})):f.createElement(m,zn({},A,{className:l,ref:T}),i))});iu.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1};iu.classNames={fullWidth:Ec,zeroRight:Cc};var R7=function(){if(typeof __webpack_nonce__<"u")return __webpack_nonce__};function N7(){if(!document)return null;var t=document.createElement("style");t.type="text/css";var e=R7();return e&&t.setAttribute("nonce",e),t}function L7(t,e){t.styleSheet?t.styleSheet.cssText=e:t.appendChild(document.createTextNode(e))}function D7(t){var e=document.head||document.getElementsByTagName("head")[0];e.appendChild(t)}var W7=function(){var t=0,e=null;return{add:function(n){t==0&&(e=N7())&&(L7(e,n),D7(e)),t++},remove:function(){t--,!t&&e&&(e.parentNode&&e.parentNode.removeChild(e),e=null)}}},q7=function(){var t=W7();return function(e,n){f.useEffect(function(){return t.add(e),function(){t.remove()}},[e&&n])}},y2=function(){var t=q7(),e=function(n){var o=n.styles,r=n.dynamic;return t(o,r),null};return e},F7={left:0,top:0,right:0,gap:0},wd=function(t){return parseInt(t||"",10)||0},H7=function(t){var e=window.getComputedStyle(document.body),n=e[t==="padding"?"paddingLeft":"marginLeft"],o=e[t==="padding"?"paddingTop":"marginTop"],r=e[t==="padding"?"paddingRight":"marginRight"];return[wd(n),wd(o),wd(r)]},z7=function(t){if(t===void 0&&(t="margin"),typeof window>"u")return F7;var e=H7(t),n=document.documentElement.clientWidth,o=window.innerWidth;return{left:e[0],top:e[1],right:e[2],gap:Math.max(0,o-n+e[2]-e[0])}},$7=y2(),Qa="data-scroll-locked",U7=function(t,e,n,o){var r=t.left,a=t.top,s=t.right,i=t.gap;return n===void 0&&(n="margin"),`
168  .`.concat(_7,` {
169   overflow: hidden `).concat(o,`;
170   padding-right: `).concat(i,"px ").concat(o,`;
171  }
172  body[`).concat(Qa,`] {
173    overflow: hidden `).concat(o,`;
174    overscroll-behavior: contain;
175    `).concat([e&&"position: relative ".concat(o,";"),n==="margin"&&`
176    padding-left: `.concat(r,`px;
177    padding-top: `).concat(a,`px;
178    padding-right: `).concat(s,`px;
179    margin-left:0;
180    margin-top:0;
181    margin-right: `).concat(i,"px ").concat(o,`;
182    `),n==="padding"&&"padding-right: ".concat(i,"px ").concat(o,";")].filter(Boolean).join(""),`
183  }
184  
185  .`).concat(Cc,` {
186    right: `).concat(i,"px ").concat(o,`;
187  }
188  
189  .`).concat(Ec,` {
190    margin-right: `).concat(i,"px ").concat(o,`;
191  }
192  
193  .`).concat(Cc," .").concat(Cc,` {
194    right: 0 `).concat(o,`;
195  }
196  
197  .`).concat(Ec," .").concat(Ec,` {
198    margin-right: 0 `).concat(o,`;
199  }
200  
201  body[`).concat(Qa,`] {
202    `).concat(C7,": ").concat(i,`px;
203  }
204`)},Zw=function(){var t=parseInt(document.body.getAttribute(Qa)||"0",10);return isFinite(t)?t:0},Y7=function(){f.useEffect(function(){return document.body.setAttribute(Qa,(Zw()+1).toString()),function(){var t=Zw()-1;t<=0?document.body.removeAttribute(Qa):document.body.setAttribute(Qa,t.toString())}},[])},V7=function(t){var e=t.noRelative,n=t.noImportant,o=t.gapMode,r=o===void 0?"margin":o;Y7();var a=f.useMemo(function(){return z7(r)},[r]);return f.createElement($7,{styles:U7(a,!e,r,n?"":"!important")})},eg=!1;if(typeof window<"u")try{var rc=Object.defineProperty({},"passive",{get:function(){return eg=!0,!0}});window.addEventListener("test",rc,rc),window.removeEventListener("test",rc,rc)}catch{eg=!1}var ma=eg?{passive:!1}:!1,G7=function(t){return t.tagName==="TEXTAREA"},w2=function(t,e){if(!(t instanceof Element))return!1;var n=window.getComputedStyle(t);return n[e]!=="hidden"&&!(n.overflowY===n.overflowX&&!G7(t)&&n[e]==="visible")},K7=function(t){return w2(t,"overflowY")},J7=function(t){return w2(t,"overflowX")},Xw=function(t,e){var n=e.ownerDocument,o=e;do{typeof ShadowRoot<"u"&&o instanceof ShadowRoot&&(o=o.host);var r=b2(t,o);if(r){var a=v2(t,o),s=a[1],i=a[2];if(s>i)return!0}o=o.parentNode}while(o&&o!==n.body);return!1},Q7=function(t){var e=t.scrollTop,n=t.scrollHeight,o=t.clientHeight;return[e,n,o]},Z7=function(t){var e=t.scrollLeft,n=t.scrollWidth,o=t.clientWidth;return[e,n,o]},b2=function(t,e){return t==="v"?K7(e):J7(e)},v2=function(t,e){return t==="v"?Q7(e):Z7(e)},X7=function(t,e){return t==="h"&&e==="rtl"?-1:1},e9=function(t,e,n,o,r){var a=X7(t,window.getComputedStyle(e).direction),s=a*o,i=n.target,l=e.contains(i),c=!1,u=s>0,d=0,g=0;do{if(!i)break;var p=v2(t,i),v=p[0],y=p[1],k=p[2],w=y-k-a*v;
vendor: 4,569 bytes, lines 204-207
204(v||w)&&b2(t,i)&&(d+=w,g+=v);var m=i.parentNode;i=m&&m.nodeType===Node.DOCUMENT_FRAGMENT_NODE?m.host:m}while(!l&&i!==document.body||l&&(e.contains(i)||e===i));return(u&&(Math.abs(d)<1||!r)||!u&&(Math.abs(g)<1||!r))&&(c=!0),c},ac=function(t){return"changedTouches"in t?[t.changedTouches[0].clientX,t.changedTouches[0].clientY]:[0,0]},eb=function(t){return[t.deltaX,t.deltaY]},tb=function(t){return t&&"current"in t?t.current:t},t9=function(t,e){return t[0]===e[0]&&t[1]===e[1]},n9=function(t){return`
205  .block-interactivity-`.concat(t,` {pointer-events: none;}
206  .allow-interactivity-`).concat(t,` {pointer-events: all;}
207`)},o9=0,fa=[];function r9(t){var e=f.useRef([]),n=f.useRef([0,0]),o=f.useRef(),r=f.useState(o9++)[0],a=f.useState(y2)[0],s=f.useRef(t);f.useEffect(function(){s.current=t},[t]),f.useEffect(function(){if(t.inert){document.body.classList.add("block-interactivity-".concat(r));var y=nE([t.lockRef.current],(t.shards||[]).map(tb),!0).filter(Boolean);return y.forEach(function(k){return k.classList.add("allow-interactivity-".concat(r))}),function(){document.body.classList.remove("block-interactivity-".concat(r)),y.forEach(function(k){return k.classList.remove("allow-interactivity-".concat(r))})}}},[t.inert,t.lockRef.current,t.shards]);var i=f.useCallback(function(y,k){if("touches"in y&&y.touches.length===2||y.type==="wheel"&&y.ctrlKey)return!s.current.allowPinchZoom;var w=ac(y),m=n.current,b="deltaX"in y?y.deltaX:m[0]-w[0],x="deltaY"in y?y.deltaY:m[1]-w[1],S,T=y.target,A=Math.abs(b)>Math.abs(x)?"h":"v";if("touches"in y&&A==="h"&&T.type==="range")return!1;var _=Xw(A,T);if(!_)return!0;if(_?S=A:(S=A==="v"?"h":"v",_=Xw(A,T)),!_)return!1;if(!o.current&&"changedTouches"in y&&(b||x)&&(o.current=S),!S)return!0;var C=o.current||S;return e9(C,k,y,C==="h"?b:x,!0)},[]),l=f.useCallback(function(y){var k=y;if(!(!fa.length||fa[fa.length-1]!==a)){var w="deltaY"in k?eb(k):ac(k),m=e.current.filter(function(S){return S.name===k.type&&(S.target===k.target||k.target===S.shadowParent)&&t9(S.delta,w)})[0];if(m&&m.should){k.cancelable&&k.preventDefault();return}if(!m){var b=(s.current.shards||[]).map(tb).filter(Boolean).filter(function(S){return S.contains(k.target)}),x=b.length>0?i(k,b[0]):!s.current.noIsolation;x&&k.cancelable&&k.preventDefault()}}},[]),c=f.useCallback(function(y,k,w,m){var b={name:y,delta:k,target:w,should:m,shadowParent:a9(w)};e.current.push(b),setTimeout(function(){e.current=e.current.filter(function(x){return x!==b})},1)},[]),u=f.useCallback(function(y){n.current=ac(y),o.current=void 0},[]),d=f.useCallback(function(y){c(y.type,eb(y),y.target,i(y,t.lockRef.current))},[]),g=f.useCallback(function(y){c(y.type,ac(y),y.target,i(y,t.lockRef.current))},[]);f.useEffect(function(){return fa.push(a),t.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:g}),document.addEventListener("wheel",l,ma),document.addEventListener("touchmove",l,ma),document.addEventListener("touchstart",u,ma),function(){fa=fa.filter(function(y){return y!==a}),document.removeEventListener("wheel",l,ma),document.removeEventListener("touchmove",l,ma),document.removeEventListener("touchstart",u,ma)}},[]);var p=t.removeScrollBar,v=t.inert;return f.createElement(f.Fragment,null,v?f.createElement(a,{styles:n9(r)}):null,p?f.createElement(V7,{noRelative:t.noRelative,gapMode:t.gapMode}):null)}function a9(t){for(var e=null;t!==null;)t instanceof ShadowRoot&&(e=t.host,t=t.host),t=t.parentNode;return e}const s9=M7(f2,r9);var Wm=f.forwardRef(function(t,e){return f.createElement(iu,zn({},t,{ref:e,sideCar:s9}))});Wm.classNames=iu.classNames;var i9=function(t){if(typeof document>"u")return null;var e=Array.isArray(t)?t[0]:t;return e.ownerDocument.body},ya=new WeakMap,sc=new WeakMap,ic={},bd=0,k2=function(t){return t&&(t.host||k2(t.parentNode))},l9=function(t,e){return e.map(function(n){if(t.contains(n))return n;var o=k2(n);return o&&t.contains(o)?o:(console.error("aria-hidden",n,"in not contained inside",t,". Doing nothing"),null)}).filter(function(n){return!!n})},c9=function(t,e,n,o){var r=l9(e,Array.isArray(t)?t:[t]);ic[n]||(ic[n]=new WeakMap);var a=ic[n],s=[],i=new Set,l=new Set(r),c=function(d){!d||i.has(d)||(i.add(d),c(d.parentNode))};r.forEach(c);var u=function(d){!d||l.has(d)||Array.prototype.forEach.call(d.children,function(g){if(i.has(g))u(g);else try{var p=g.getAttribute(o),v=p!==null&&p!=="false",y=(ya.get(g)||0)+1,k=(a.get(g)||0)+1;ya.set(g,y),a.set(g,k),s.push(g),y===1&&v&&sc.set(g,!0),k===1&&g.setAttribute(n,"true"),v||g.setAttribute(o,"true")}catch(w){console.error("aria-hidden: cannot operate on ",g,w)}})};
vendor: 4,351 bytes, line 207
207return u(e),i.clear(),bd++,function(){s.forEach(function(d){var g=ya.get(d)-1,p=a.get(d)-1;ya.set(d,g),a.set(d,p),g||(sc.has(d)||d.removeAttribute(o),sc.delete(d)),p||d.removeAttribute(n)}),bd--,bd||(ya=new WeakMap,ya=new WeakMap,sc=new WeakMap,ic={})}},x2=function(t,e,n){n===void 0&&(n="data-aria-hidden");var o=Array.from(Array.isArray(t)?t:[t]),r=i9(t);return r?(o.push.apply(o,Array.from(r.querySelectorAll("[aria-live]"))),c9(o,r,n,"aria-hidden")):function(){return null}},lu="Dialog",[S2,gN]=wr(lu),[h9,Bn]=S2(lu),T2=t=>{const{__scopeDialog:e,children:n,open:o,defaultOpen:r,onOpenChange:a,modal:s=!0}=t,i=f.useRef(null),l=f.useRef(null),[c,u]=Gr({prop:o,defaultProp:r??!1,onChange:a,caller:lu});return h.jsx(h9,{scope:e,triggerRef:i,contentRef:l,contentId:Bt(),titleId:Bt(),descriptionId:Bt(),open:c,onOpenChange:u,onOpenToggle:f.useCallback(()=>u(d=>!d),[u]),modal:s,children:n})};T2.displayName=lu;var A2="DialogTrigger",u9=f.forwardRef((t,e)=>{const{__scopeDialog:n,...o}=t,r=Bn(A2,n),a=Ee(e,r.triggerRef);return h.jsx(ce.button,{type:"button","aria-haspopup":"dialog","aria-expanded":r.open,"aria-controls":r.contentId,"data-state":Hm(r.open),...o,ref:a,onClick:me(t.onClick,r.onOpenToggle)})});u9.displayName=A2;var qm="DialogPortal",[d9,_2]=S2(qm,{forceMount:void 0}),C2=t=>{const{__scopeDialog:e,forceMount:n,children:o,container:r}=t,a=Bn(qm,e);return h.jsx(d9,{scope:e,forceMount:n,children:f.Children.map(o,s=>h.jsx(aa,{present:n||a.open,children:h.jsx(Uh,{asChild:!0,container:r,children:s})}))})};C2.displayName=qm;var mh="DialogOverlay",E2=f.forwardRef((t,e)=>{const n=_2(mh,t.__scopeDialog),{forceMount:o=n.forceMount,...r}=t,a=Bn(mh,t.__scopeDialog);return a.modal?h.jsx(aa,{present:o||a.open,children:h.jsx(g9,{...r,ref:e})}):null});E2.displayName=mh;var p9=ps("DialogOverlay.RemoveScroll"),g9=f.forwardRef((t,e)=>{const{__scopeDialog:n,...o}=t,r=Bn(mh,n);return h.jsx(Wm,{as:p9,allowPinchZoom:!0,shards:[r.contentRef],children:h.jsx(ce.div,{"data-state":Hm(r.open),...o,ref:e,style:{pointerEvents:"auto",...o.style}})})}),Jr="DialogContent",I2=f.forwardRef((t,e)=>{const n=_2(Jr,t.__scopeDialog),{forceMount:o=n.forceMount,...r}=t,a=Bn(Jr,t.__scopeDialog);return h.jsx(aa,{present:o||a.open,children:a.modal?h.jsx(m9,{...r,ref:e}):h.jsx(f9,{...r,ref:e})})});I2.displayName=Jr;var m9=f.forwardRef((t,e)=>{const n=Bn(Jr,t.__scopeDialog),o=f.useRef(null),r=Ee(e,n.contentRef,o);return f.useEffect(()=>{const a=o.current;if(a)return x2(a)},[]),h.jsx(P2,{...t,ref:r,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:me(t.onCloseAutoFocus,a=>{var s;a.preventDefault(),(s=n.triggerRef.current)==null||s.focus()}),onPointerDownOutside:me(t.onPointerDownOutside,a=>{const s=a.detail.originalEvent,i=s.button===0&&s.ctrlKey===!0;(s.button===2||i)&&a.preventDefault()}),onFocusOutside:me(t.onFocusOutside,a=>a.preventDefault())})}),f9=f.forwardRef((t,e)=>{const n=Bn(Jr,t.__scopeDialog),o=f.useRef(!1),r=f.useRef(!1);return h.jsx(P2,{...t,ref:e,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:a=>{var s,i;(s=t.onCloseAutoFocus)==null||s.call(t,a),a.defaultPrevented||(o.current||(i=n.triggerRef.current)==null||i.focus(),a.preventDefault()),o.current=!1,r.current=!1},onInteractOutside:a=>{var l,c;(l=t.onInteractOutside)==null||l.call(t,a),a.defaultPrevented||(o.current=!0,a.detail.originalEvent.type==="pointerdown"&&(r.current=!0));const s=a.target;((c=n.triggerRef.current)==null?void 0:c.contains(s))&&a.preventDefault(),a.detail.originalEvent.type==="focusin"&&r.current&&a.preventDefault()}})}),P2=f.forwardRef((t,e)=>{const{__scopeDialog:n,trapFocus:o,onOpenAutoFocus:r,onCloseAutoFocus:a,...s}=t,i=Bn(Jr,n),l=f.useRef(null),c=Ee(e,l);return g2(),h.jsxs(h.Fragment,{children:[h.jsx(Dm,{asChild:!0,loop:!0,trapped:o,onMountAutoFocus:r,onUnmountAutoFocus:a,children:h.jsx(gl,{role:"dialog",id:i.contentId,"aria-describedby":i.descriptionId,"aria-labelledby":i.titleId,"data-state":Hm(i.open),...s,ref:c,onDismiss:()=>i.onOpenChange(!1)})}),h.jsxs(h.Fragment,{children:[h.jsx(y9,{titleId:i.titleId}),h.jsx(b9,{contentRef:l,descriptionId:i.descriptionId})]})]})}),Fm="DialogTitle",j2=f.forwardRef((t,e)=>{const{__scopeDialog:n,...o}=t,r=Bn(Fm,n);return h.jsx(ce.h2,{id:r.titleId,...o,ref:e})});j2.displayName=Fm;var B2="DialogDescription",O2=f.forwardRef((t,e)=>{const{__scopeDialog:n,...o}=t,r=Bn(B2,n);
207return h.jsx(ce.p,{id:r.descriptionId,...o,ref:e})});O2.displayName=B2;var M2="DialogClose",R2=f.forwardRef((t,e)=>{const{__scopeDialog:n,...o}=t,r=Bn(M2,n);return h.jsx(ce.button,{type:"button",...o,ref:e,onClick:me(t.onClick,()=>r.onOpenChange(!1))})});R2.displayName=M2;function Hm(t){return t?"open":"closed"}var N2="DialogTitleWarning",[mN,L2]=P3(N2,{contentName:Jr,titleName:Fm,docsSlug:"dialog"}),y9=({titleId:t})=>{const e=L2(N2),n=`\`${e.contentName}\` requires a \`${e.titleName}\` for the component to be accessible for screen reader users.
208
209If you want to hide the \`${e.titleName}\`, you can wrap it with our VisuallyHidden component.
210
211For more information, see https://radix-ui.com/primitives/docs/components/${e.docsSlug}`;return f.useEffect(()=>{t&&(document.getElementById(t)||console.error(n))},[n,t]),null},w9="DialogDescriptionWarning",b9=({contentRef:t,descriptionId:e})=>{const o=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${L2(w9).contentName}}.`;return f.useEffect(()=>{var a;const r=(a=t.current)==null?void 0:a.getAttribute("aria-describedby");e&&r&&(document.getElementById(e)||console.warn(o))},[o,t,e]),null},D2=T2,W2=C2,zm=E2,$m=I2,q2=j2,F2=O2,v9=R2;const k9=D2,x9=W2,H2=f.forwardRef(({className:t,...e},n)=>h.jsx(zm,{ref:n,className:ve("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",t),...e}));H2.displayName=zm.displayName;const z2=f.forwardRef(({className:t,children:e,...n},o)=>h.jsxs(x9,{children:[h.jsx(H2,{}),h.jsxs($m,{ref:o,className:ve("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",t),...n,children:[e,h.jsxs(v9,{className:"absolute right-4 top-4 roun
211ded-sm opacity-70 ring-offset-background transition-opacity data-[state=open]:bg-accent data-[state=open]:text-muted-foreground hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none",children:[h.jsx(Gh,{className:"h-4 w-4"}),h.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));z2.displayName=$m.displayName;const S9=({className:t,...e})=>h.jsx("div",{className:ve("flex flex-col space-y-1.5 text-center sm:text-left",t),...e});S9.displayName="DialogHeader";const T9=({className:t,...e})=>h.jsx("div",{className:ve("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",t),...e});T9.displayName="DialogFooter";const A9=f.forwardRef(({className:t,...e},n)=>h.jsx(q2,{ref:n,className:ve("text-lg font-semibold leading-none tracking-tight",t),...e}));A9.displayName=q2.displayName;const _9=f.forwardRef(({className:t,...e},n)=>h.jsx(F2,{ref:n,className:ve("text-sm text-muted-foreground",t),...e}));_9.displayName=F2.displayName;var nb=1,C9=.9,E9=.8,I9=.17,vd=.1,kd=.999,P9=.9999,j9=.99,B9=/[\\\/_+.#"@\[\(\{&]/,O9=/[\\\/_+.#"@\[\(\{&]/g,M9=/[\s-]/,$2=/[\s-]/g;function tg(t,e,n,o,r,a,s){if(a===e.length)return r===t.length?nb:j9;var i=`${r},${a}`;if(s[i]!==void 0)return s[i];for(var l=o.charAt(a),c=n.indexOf(l,r),u=0,d,g,p,v;c>=0;)d=tg(t,e,n,o,c+1,a+1,s),d>u&&(c===r?d*=nb:B9.test(t.charAt(c-1))?(d*=E9,p=t.slice(r,c-1).match(O9),p&&r>0&&(d*=Math.pow(kd,p.length))):M9.test(t.charAt(c-1))?(d*=C9,v=t.slice(r,c-1).match($2),v&&r>0&&(d*=Math.pow(kd,v.length))):(d*=I9,r>0&&(d*=Math.pow(kd,c-r))),t.charAt(c)!==e.charAt(a)&&(d*=P9)),(d<vd&&n.charAt(c-1)===o.charAt(a+1)||o.charAt(a+1)===o.charAt(a)&&n.charAt(c-1)!==o.charAt(a))&&(g=tg(t,e,n,o,c+1,a+2,s),g*vd>d&&(d=g*vd)),d>u&&(u=d),c=n.indexOf(l,c+1);return s[i]=u,u}function ob(t){return t.toLowerCase().replace($2," ")}function R9(t,e,n){return t=n&&n.length>0?`${t+" "+n.join(" ")}`:t,tg(t,e,ob(t),ob(e),0,0,{})}var Ks='[cmdk-group=""]',xd='[cmdk-group-items=""]',N9='[cmdk-group-heading=""]',U2='[cmdk-item=""]',rb=`${U2}:not([aria-disabled="true"])`,ng="cmdk-item-select",ka="data-value",L9=(t,e,n)=>R9(t,e,n),Y2=f.createContext(void 0),wl=()=>f.useContext(Y2),V2=f.createContext(void 0),Um=()=>f.useContext(V2),G2=f.createContext(void 0),K2=f.forwardRef((t,e)=>{let n=xa(()=>{var E,D;return{search:"",value:(D=(E=t.value)!=null?E:t.defaultValue)!=null?D:"",selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}}}),o=xa(()=>new Set),r=xa(()=>new Map),a=xa(()=>new Map),s=xa(()=>new Set),i=J2(t),{label:l,children:c,value:u,onValueChange:d,filter:g,shouldFilter:p,loop:v,disablePointerSelection:y=!1,vimBindings:k=!0,...w}=t,m=Bt(),b=Bt(),x=Bt(),S=f.useRef(null),T=G9();Qr(()=>{if(u!==void 0){let E=u.trim();n.current.value=E,A.emit()}},[u]),Qr(()=>{T(6,Y)},[]);let A=f.useMemo(()=>({subscribe:E=>(s.current.add(E),()=>s.current.delete(E)),snapshot:()=>n.current,setState:(E,D,F)=>{var $,re,N,te;if(!Object.is(n.current[E],D)){if(n.current[E]=D,E==="search")O(),P(),T(1,L);else if(E==="value"){if(document.activeElement.hasAttribute("cmdk-input")||document.activeElement.hasAttribute("cmdk-root")){let se=document.getElementById(x);se?se.focus():($=document.getElementById(m))==null||$.focus()}if(T(7,()=>{var se;n.current.selectedItemId=(se=B())==null?void 0:se.id,A.emit()}),F||T(5,Y),((re=i.current)==null?void 0:re.value)!==void 0){let se=D??"";(te=(N=i.current).onValueChange)==null||te.call(N,se);return}}A.emit()}},emit:()=>{s.current.forEach(E=>E())}}),[]),_=f.useMemo(()=>({value:(E,D,F)=>{var $;D!==(($=a.current.get(E))==null?void 0:$.value)&&(a.current.set(E,{value:D,keywords:F}),n.current.filtered.items.set(E,C(D,F)),T(2,()=>{P(),A.emit()}))},item:(E,D)=>(o.current.add(E),D&&(r.current.has(D)?r.current.get(D).add(E):r.current.set(D,new Set([E]))),T(3,()=>{O(),P(),n.current.value||L(),A.emit()}),()=>{a.current.delete(E),o.current.delete(E),n.current.filtered.items.delete(E);let F=B();T(4,()=>{O(),(F==null?void 0:F.getAttribute("id"))===E&&L(),A.emit()})}),group:E=>(r.current.has(E)||r.current.set(E,new Set),()=>{a.current.delete(E),r.current.delete(E)}),filter:()=>i.current.shouldFilter,label:l||t["aria-label"],getDisablePointerSelection:()=>i.current.disablePointerSelection,listId:m,inputId:x,labelId:b,listInnerRef:S}),[]);function C(E,D){var F,$;let re=($=(F=i.current)==null?void 0:F.filter)!=null?$:L9;return E?re(E,n.current.search,D):0}
vendor: 7,969 bytes, line 211
211function P(){if(!n.current.search||i.current.shouldFilter===!1)return;let E=n.current.filtered.items,D=[];n.current.filtered.groups.forEach($=>{let re=r.current.get($),N=0;re.forEach(te=>{let se=E.get(te);N=Math.max(se,N)}),D.push([$,N])});let F=S.current;V().sort(($,re)=>{var N,te;let se=$.getAttribute("id"),ie=re.getAttribute("id");return((N=E.get(ie))!=null?N:0)-((te=E.get(se))!=null?te:0)}).forEach($=>{let re=$.closest(xd);re?re.appendChild($.parentElement===re?$:$.closest(`${xd} > *`)):F.appendChild($.parentElement===F?$:$.closest(`${xd} > *`))}),D.sort(($,re)=>re[1]-$[1]).forEach($=>{var re;let N=(re=S.current)==null?void 0:re.querySelector(`${Ks}[${ka}="${encodeURIComponent($[0])}"]`);N==null||N.parentElement.appendChild(N)})}function L(){let E=V().find(F=>F.getAttribute("aria-disabled")!=="true"),D=E==null?void 0:E.getAttribute(ka);A.setState("value",D||void 0)}function O(){var E,D,F,$;if(!n.current.search||i.current.shouldFilter===!1){n.current.filtered.count=o.current.size;return}n.current.filtered.groups=new Set;let re=0;for(let N of o.current){let te=(D=(E=a.current.get(N))==null?void 0:E.value)!=null?D:"",se=($=(F=a.current.get(N))==null?void 0:F.keywords)!=null?$:[],ie=C(te,se);n.current.filtered.items.set(N,ie),ie>0&&re++}for(let[N,te]of r.current)for(let se of te)if(n.current.filtered.items.get(se)>0){n.current.filtered.groups.add(N);break}n.current.filtered.count=re}function Y(){var E,D,F;let $=B();$&&(((E=$.parentElement)==null?void 0:E.firstChild)===$&&((F=(D=$.closest(Ks))==null?void 0:D.querySelector(N9))==null||F.scrollIntoView({block:"nearest"})),$.scrollIntoView({block:"nearest"}))}function B(){var E;return(E=S.current)==null?void 0:E.querySelector(`${U2}[aria-selected="true"]`)}function V(){var E;return Array.from(((E=S.current)==null?void 0:E.querySelectorAll(rb))||[])}function U(E){let D=V()[E];D&&A.setState("value",D.getAttribute(ka))}function K(E){var D;let F=B(),$=V(),re=$.findIndex(te=>te===F),N=$[re+E];(D=i.current)!=null&&D.loop&&(N=re+E<0?$[$.length-1]:re+E===$.length?$[0]:$[re+E]),N&&A.setState("value",N.getAttribute(ka))}function I(E){let D=B(),F=D==null?void 0:D.closest(Ks),$;for(;F&&!$;)F=E>0?Y9(F,Ks):V9(F,Ks),$=F==null?void 0:F.querySelector(rb);$?A.setState("value",$.getAttribute(ka)):K(E)}let j=()=>U(V().length-1),H=E=>{E.preventDefault(),E.metaKey?j():E.altKey?I(1):K(1)},Z=E=>{E.preventDefault(),E.metaKey?U(0):E.altKey?I(-1):K(-1)};return f.createElement(ce.div,{ref:e,tabIndex:-1,...w,"cmdk-root":"",onKeyDown:E=>{var D;(D=w.onKeyDown)==null||D.call(w,E);let F=E.nativeEvent.isComposing||E.keyCode===229;if(!(E.defaultPrevented||F))switch(E.key){case"n":case"j":{k&&E.ctrlKey&&H(E);break}case"ArrowDown":{H(E);break}case"p":case"k":{k&&E.ctrlKey&&Z(E);break}case"ArrowUp":{Z(E);break}case"Home":{E.preventDefault(),U(0);break}case"End":{E.preventDefault(),j();break}case"Enter":{E.preventDefault();let $=B();if($){let re=new Event(ng);$.dispatchEvent(re)}}}}},f.createElement("label",{"cmdk-label":"",htmlFor:_.inputId,id:_.labelId,style:J9},l),cu(t,E=>f.createElement(V2.Provider,{value:A},f.createElement(Y2.Provider,{value:_},E))))}),D9=f.forwardRef((t,e)=>{var n,o;let r=Bt(),a=f.useRef(null),s=f.useContext(G2),i=wl(),l=J2(t),c=(o=(n=l.current)==null?void 0:n.forceMount)!=null?o:s==null?void 0:s.forceMount;Qr(()=>{if(!c)return i.item(r,s==null?void 0:s.id)},[c]);let u=Q2(r,a,[t.value,t.children,a],t.keywords),d=Um(),g=dr(T=>T.value&&T.value===u.current),p=dr(T=>c||i.filter()===!1?!0:T.search?T.filtered.items.get(r)>0:!0);f.useEffect(()=>{let T=a.current;if(!(!T||t.disabled))return T.addEventListener(ng,v),()=>T.removeEventListener(ng,v)},[p,t.onSelect,t.disabled]);function v(){var T,A;y(),(A=(T=l.current).onSelect)==null||A.call(T,u.current)}function y(){d.setState("value",u.current,!0)}if(!p)return null;let{disabled:k,value:w,onSelect:m,forceMount:b,keywords:x,...S}=t;return f.createElement(ce.div,{ref:Vr(a,e),...S,id:r,"cmdk-item":"",role:"option","aria-disabled":!!k,"aria-selected":!!g,"data-disabled":!!k,"data-selected":!!g,onPointerMove:k||i.getDisablePointerSelection()?void 0:y,onClick:k?void 0:v},t.children)}),W9=f.forwardRef((t,e)=>{let{heading:n,children:o,forceMount:r,...a}=t,s=Bt(),i=f.useRef(null),l=f.useRef(null),c=Bt(),u=wl(),d=dr(p=>r||u.filter()===!1?!0:p.search?p.filtered.groups.has(s):!0);Qr(()=>u.group(s),[]),Q2(s,i,[t.value,t.heading,l]);let g=f.useMemo(()=>({id:s,forceMount:r}),[r]);return f.createElement(ce.div,{ref:Vr(i,e),...a,"cmdk-group":"",role:"presentation",hidden:d?void 0:!0},n&&f.createElement("div",{ref:l,"cmdk-group-heading":"","aria-hidden":!0,id:c},n),cu(t,p=>f.createElement("div",{"cmdk-group-items":"",role:"group","aria-labelledby":n?c:void 0},f.createElement(G2.Provider,{value:g},p))))}),q9=f.forwardRef((t,e)=>{let{alwaysRender:n,...o}=t,r=f.useRef(null),a=dr(s=>!s.search);return!n&&!a?null:f.createElement(ce.div,{ref:Vr(r,e),...o,"cmdk-separator":"",role:"separator"})}),F9=f.forwardRef((t,e)=>{let{onValueChange:n,...o}=t,r=t.value!=null,a=Um(),s=dr(c=>c.search),i=dr(c=>c.selectedItemId),l=wl();return f.useEffect(()=>{t.value!=null&&a.setState("search",t.value)},[t.value]),f.createElement(ce.input,{ref:e,...o,"cmdk-input":"",autoComplete:"off",autoCorrect:"off",spellCheck:!1,"aria-autocomplete":"list",role:"combobox","aria-expanded":!0,"aria-controls":l.listId,"aria-labelledby":l.labelId,"aria-activedescendant":i,id:l.inputId,type:"text",value:r?t.value:s,onChange:c=>{r||a.setState("search",c.target.value),n==null||n(c.target.value)}})}),H9=f.forwardRef((t,e)=>{let{children:n,label:o="Suggestions",...r}=t,a=f.useRef(null),s=f.useRef(null),i=dr(c=>c.selectedItemId),l=wl();return f.useEffect(()=>{if(s.current&&a.current){let c=s.current,u=a.current,d,g=new ResizeObserver(()=>{d=requestAnimationFrame(()=>{let p=c.offsetHeight;u.style.setProperty("--cmdk-list-height",p.toFixed(1)+"px")})});return g.observe(c),()=>{cancelAnimationFrame(d),g.unobserve(c)}}},[]),f.createElement(ce.div,{ref:Vr(a,e),...r,"cmdk-list":"",role:"listbox",tabIndex:-1,"aria-activedescendant":i,"aria-label":o,id:l.listId},cu(t,c=>f.createElement("div",{ref:Vr(s,l.listInnerRef),"cmdk-list-sizer":""},c)))}),z9=f.forwardRef((t,e)=>{let{open:n,onOpenChange:o,overlayClassName:r,contentClassName:a,container:s,...i}=t;return f.createElement(D2,{open:n,onOpenChange:o},f.createElement(W2,{container:s},f.createElement(zm,{"cmdk-overlay":"",className:r}),f.createElement($m,{"aria-label":t.label,"cmdk-dialog":"",className:a},f.createElement(K2,{ref:e,...i}))))}),$9=f.forwardRef((t,e)=>dr(n=>n.filtered.count===0)?f.createElement(ce.div,{ref:e,...t,"cmdk-empty":"",role:"presentation"}):null),U9=f.forwardRef((t,e)=>{let{progress:n,children:o,label:r="Loading...",...a}=t;return f.createElement(ce.div,{ref:e,...a,"cmdk-loading":"",role:"progressbar","aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":r},cu(t,s=>f.createElement("div",{"aria-hidden":!0},s)))}),Ot=Object.assign(K2,{List:H9,Item:D9,Input:F9,Group:W9,Separator:q9,Dialog:z9,Empty:$9,Loading:U9});function Y9(t,e){let n=t.nextElementSibling;for(;n;){if(n.matches(e))return n;n=n.nextElementSibling}}function V9(t,e){let n=t.previousElementSibling;for(;n;){if(n.matches(e))return n;n=n.previousElementSibling}}function J2(t){let e=f.useRef(t);return Qr(()=>{e.current=t}),e}var Qr=typeof window>"u"?f.useEffect:f.useLayoutEffect;function xa(t){let e=f.useRef();return e.current===void 0&&(e.current=t()),e}function dr(t){let e=Um(),n=()=>t(e.snapshot());return f.useSyncExternalStore(e.subscribe,n,n)}function Q2(t,e,n,o=[]){let r=f.useRef(),a=wl();return Qr(()=>{var s;let i=(()=>{var c;for(let u of n){if(typeof u=="string")return u.trim();if(typeof u=="object"&&"current"in u)return u.current?(c=u.current.textContent)==null?void 0:c.trim():r.current}})(),l=o.map(c=>c.trim());a.value(t,i,l),(s=e.current)==null||s.setAttribute(ka,i),r.current=i}),r}var G9=()=>{let[t,e]=f.useState(),n=xa(()=>new Map);return Qr(()=>{n.current.forEach(o=>
211o()),n.current=new Map},[t]),(o,r)=>{n.current.set(o,r),e({})}};function K9(t){let e=t.type;return typeof e=="function"?e(t.props):"render"in e?e.render(t.props):t}function cu({asChild:t,children:e},n){return t&&f.isValidElement(e)?f.cloneElement(K9(e),{ref:e.ref},n(e.props.children)):n(e)}var J9={position:"absolute",width:"1px",height:"1px",padding:"0",margin:"-1px",overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",borderWidth:"0"};const Z2=f.forwardRef(({className:t,...e},n)=>h.jsx(Ot,{ref:n,className:ve("flex h-full w-full flex-col overflow-hidden rounded-md bg-popover text-popover-foreground",t),...e}));Z2.displayName=Ot.displayName;const Q9=f.forwardRef(({className:t,...e},n)=>h.jsxs("div",{className:"flex items-center border-b px-3","cmdk-input-wrapper":"",children:[h.jsx(wm,{className:"mr-2 h-4 w-4 shrink-0 opacity-50"}),h.jsx(Ot.Input,{ref:n,className:ve("flex h-11 w-full rounded-md bg-transparent py-3 text-sm outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:opacity-50",t),...e})]}));Q9.displayName=Ot.Input.displayName;const X2=f.forwardRef(({className:t,...e},n)=>h.jsx(Ot.List,{ref:n,className:ve("max-h-[300px] overflow-y-auto overflow-x-hidden",t),...e}));X2.displayName=Ot.List.displayName;const Z9=f.forwardRef((t,e)=>h.jsx(Ot.Empty,{ref:e,className:"py-6 text-center text-sm",...t}));Z9.displayName=Ot.Empty.displayName;const ex=f.forwardRef(({className:t,...e},n)=>h.jsx(Ot.Group,{ref:n,className:ve("overflow-hidden p-1 text-foreground [&_[cmdk-group-heading]]:px-2 [&_[cmdk-group-heading]]:py-1.5 [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:font-medium [&_[cmdk-group-heading]]:text-muted-foreground",t),...e}));ex.displayName=Ot.Group.displayName;const X9=f.forwardRef(({className:t,...e},n)=>h.jsx(Ot.Separator,{ref:n,className:ve("-mx-1 h-px bg-border",t),...e}));X9.displayName=Ot.Separator.displayName;const tx=f.forwardRef(({className:t,...e},n)=>h.jsx(Ot.Item,{ref:n,className:ve("relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled=true]:pointer-events-none data-[selected='true']:bg-accent data-[selected=true]:text-accent-foreground data-[disabled=true]:opacity-50",t),...e}));tx.displayName=Ot.Item.displayName;const eP="/assets/5-things-launch-C3bCObDE.png",tP="/assets/b2b-sms-hero-DXDIqJBF.jpg",nP="/assets/marketing-debt-CKJ1VMCZ.png",oP="/assets/clients-arent-converting-XtI3Izmx.webp",rP="/assets/choosing-strategic-accounts-Q50nfWkW.webp",aP="/assets/seo-aeo-featured-TRIOyPt8.webp",sP="/assets/advance-targeting-tactics-CkR1GA0t.webp",iP="/assets/knowing-your-audience-DjdgZ1Vm.webp",lP="/assets/marketing-debt-featured-BrsDANLi.webp",cP="/assets/ai-marketing-tools-VRY2MeZ_.webp",hP="/assets/sales-funnel-conversion-BXkbelh4.webp",uP="/assets/you-are-not-the-hero-Bu08-E3O.webp",dP="/assets/cro-tricks-DutXYzK2.webp",pP="/assets/behavior-engineering-canvas-CnNLAOBU.webp",gP="/assets/buyer-googled-hero-BidqwT7U.jpeg",mP="/assets/18-month-tax-hero-fA82V-YW.webp",fP="/assets/buying-committee-messaging-positioning-DMi5dUrN.jpeg",yP="/assets/martini-pipeline-funnel-D5V1Ez39.jpeg",wP="/assets/martini-pipeline-infographic-CgZ5ajda.jpeg",bP="/assets/positioning-messaging-storytelling-hero-CfmSsXqx.webp",vP="/assets/heuristics-kahneman-tversky-hero-DnsK8V11.webp",kP="/assets/fogg-tiny-habits-bmat-v4-DODTrseF.webp",xP="/assets/hooked-model-cycle-BWD81i2A.webp",SP="/assets/when-pain-is-good-hero-ln3d9T3E.webp",TP="/assets/founder-led-sales-hero-CHrLF1tY.webp",AP="/assets/stop-talking-about-yourself-hero-C2vMlymH.webp",_P="/assets/enterprise-decisions-hero-CeM9gv6Y.webp",CP="/assets/messaging-framework-keeps-selling-hero-DbbNuIZf.webp",EP="/assets/allstate-memory-devices-hero-Cr_2WCjf.webp",IP="/assets/cant-measure-enterprise-deal-hero-BTerG9jI.webp",PP="/assets/uber-vs-lyft-hero-Cv79O930.png",jP="/assets/positioning-brand-hero-amPl6AUV.webp",BP="/assets/vibe-coding-is-addictive-hero-adAa6Pl-.webp",OP="/assets/7-things-enterprise-marketing-hero-DASE505I.webp",MP="/assets/ai-image-test-2026-hero-C8x1qTTO.webp",RP="/assets/geo-b2b-hero-33krgWRa.webp",fN=["Enterprise Marketing","Enterprise Strategy","ABM & Pipeline","Brand & Design","Frameworks","Positioning","Brand","Behavioral Science"],yN=t=>Array.isArray(t.category)?t.category:[t.category],NP=t=>Array.isArray(t.category)?t.category[0]:t.category,Ym=[{id:"6024",image:RP,heroGrade:"wasabi",imageAlt:"Editorial black and white photograph of a vintage metal card catalog drawer pulled o
211pen with one index card standing above the rest",title:"Your buyer asked ChatGPT for a shortlist and you were not on it",slug:"generative-engine-optimization-b2b",category:["Frameworks","Enterprise Marketing"],seoTitle:"Generative Engine Optimization (GEO) Strategies for B2B Brands",seoDescription:"A practical GEO guide for B2B: how generative engines pick sources, what to change on your pages, and how to measure citations instead of rankings.",excerpt:"Rankings flat, traffic flat, pipeline gone. The shortlist got built inside an AI answer three weeks before anyone filled out a form, and your analytics will never show you that meeting.",readTime:6,author:"Shira Abel",datePublished:"2026-08-19",dateModified:"2026-08-20",tldr:"Generative engine optimization is the work of getting quoted inside an AI answer. B2B pages get quoted when they make checkable claims: named numbers, named sources, plain definitions, and a straight answer about who the product is not for.",faqSchema:[{question:"What is generative engine optimization (GEO)?",answer:"GEO is the practice of structuring content so generative engines such as ChatGPT, Perplexity, Google AI Overviews, and Copilot select and cite it when composing an answer. SEO competes for a ranked link. GEO competes for a sentence inside the answer itself."},{question:"How is GEO different from SEO and AEO?",answer:"SEO optimizes for position in a list of links. AEO is the industry label for optimizing to be cited by answer engines. GEO is the research term for the same discipline, focused on how generative models select source passages while they write. In practice a B2B team runs all three off one content operation."},{question:"Does GEO work for B2B companies with low search volume?",answer:"Yes. B2B buying questions are long, specific, and comparative, which is the query type buyers now hand to a model. A page that answers one narrow procurement question can be cited repeatedly at under 100 searches a month."},{question:"How do you measure GEO results?",answer:"Measure citation share. Run your buyers twenty real questions through ChatGPT, Perplexity, and Google AI Overviews on a fixed schedule, log which vendors get named and which of your URLs get linked, and split AI assistant referrals into their own channel in analytics."}],content:`<div class="blog-key-takeaways"><h2>Key takeaways</h2><ul><li>The shortlist gets built inside an AI answer, weeks before anyone touches your site.</li><li>Models quote pages that make checkable claims: numbers, named sources, plain definitions.</li><li>A 2024 Princeton and Georgia Tech study measured up to 40 percent more source visibility from adding quotes, statistics, and citations. Keyword stuffing did nothing.</li><li>Your narrowest, least glamorous pages get cited the most.</li><li>Log which vendors the model names for your buyers twenty real questions. That log replaces your rankings report.</li></ul></div>
212<p>A VP of marketing called me in June with flat traffic, fine rankings, and a pipeline that had fallen off a cliff. Sales kept hearing the same sentence in lost deals: "we went with the two vendors that came up in our research."</p>
213<p>Her buyer was a security director with 40 minutes and no patience. He asked a model to compare vendors for one specific workload, got three names with a paragraph each and four links, and forwarded it to his team as the shortlist. Nobody scrolled to position four. There was no position four.</p>
214<h2>What GEO actually is</h2>
215<p>Generative engine optimization is the work of getting your company quoted inside the answer. Success is one sentence in a generated response with your domain attached to it.</p>
216<p>The term comes out of <a href="https://arxiv.org/abs/2311.09735" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">a 2024 paper from Princeton, Georgia Tech, the Allen Institute, and IIT Delhi</a>. The researchers took real user queries, edited source pages in different ways, and measured which edits changed how often each source appeared in the generated answer. Quotations, statistics, and citations moved visibility by as much as 40 percent. Ke
216yword stuffing moved nothing, which surprised approximately no one who has read an AI answer lately.</p>
217<h3>SEO and GEO in one table</h3>
218<table><thead><tr><th></th><th>SEO</th><th>GEO</th></tr></thead><tbody><tr><td>Competes for</td><td>A ranked link</td><td>A sentence in the answer</td></tr><tr><td>Buyer behavior</td><td>Scan, click, read</td><td>Ask, accept, shortlist</td></tr><tr><td>Rewards</td><td>Authority and volume</td><td>Specificity and evidence</td></tr><tr><td>You measure</td><td>Position and traffic</td><td>Citation share</td></tr><tr><td>Moves in</td><td>Quarters</td><td>Weeks</td></tr></tbody></table>
219<p>If you already run <a href="/resources/blog/seo-is-no-longer-enough-b2b-guide-to-aeo" class="text-[#316263] font-bold underline">answer engine optimization</a>, keep the same operation and add one editing question: can a machine lift this paragraph and still be right?</p>
220<h2>Why the smaller company wins this one</h2>
221<p>B2B teams spent a decade losing search to publishers with bigger domains and more writers. Generative search hands part of that fight back.</p>
222<p>Buyer questions are prompts now. "Which SOC 2 automation platform handles a multi-entity European group with a US subsidiary" is a sentence, and G2 never wrote that listicle. The model assembles an answer out of whoever addressed the specifics, and that can be a 40 person company in Tel Aviv or Tallinn.</p>
223<p>The committee asks in parallel. The CFO asks about cost, the CISO asks about SOC 2 scope, the VP of engineering asks about the deployment model, three separate windows, none of them talking to each other yet. You need to be quotable in all three framings of the same deal.</p>
224<p>Specificity is the moat. "Median implementation is 11 weeks across 38 deployments" gets quoted. "Rapid time to value" gets skipped, because there is nothing in it to lift. (Every site I audit has at least four sentences that would survive being pasted onto a competitor's homepage. Those sentences were always dead weight. Now a machine agrees with me.)</p>
225<h2>Six edits that move it</h2>
226<ol>
227<li>Answer the question in the first 60 words of the section. Models excerpt from the top, and your narrative warm-up is where citations go to die.</li>
228<li>Attach a number to every claim: counts, weeks, dollars, sample sizes.</li>
229<li>Cite outward. Named studies, named analysts, named customers, with links.</li>
230<li>Define your category terms in the buyer's words, one clean sentence each. That sentence is what gets reused when someone asks what the category even is.</li>
231<li>Publish the comparison pages you have been avoiding: alternatives, build versus buy, honest fit criteria. Refuse, and a review aggregator writes your comparison for you.</li>
232<li>Keep the technical floor intact. Server-rendered HTML, real headings, Organization and FAQPage schema, and a robots policy that admits the AI crawlers you want citing you.</li>
233</ol>
234<h2>Say who you are not for</h2>
235<p>The fastest gain I see is the one founders fight hardest. Models are being asked to filter, and filtering runs on criteria. Name the company size, the region, the stack, and the situation where a competitor is the better call.</p>
236<p>You will land in fewer answers and win more of them. This is positioning work wearing a technical hat. When the sentence about who you serve is vague inside your own company, schema markup will not rescue it on the page.</p>
237<h2>Your new rankings report</h2>
238<p>Pull the twenty questions your buyers ask, in their words, off recorded sales calls instead of a keyword tool. Run them monthly through ChatGPT, Perplexity, Google AI Overviews, and Copilot. Log three things: are you named, who else is named, which URL got cited. Then split AI assistant referrals into their own channel in analytics, because right now that volume is hiding inside direct traffic.</p>
239<p>Citation share moves in weeks. Models re-crawl source material far faster than Google re-evaluates domain authority, which is the one piece of good news in this article.</p>
240<h2>Where to start this month</h2>
241<p>Pick the five questions that decide your deals. Write one page per question that answers it in the opening paragraph, backs it with numbers you can defend, cites outside sources, and says who the product is not for. Ship them, wait four weeks, re-run 
241your twenty questions.</p>
242<p>If you want to know why the model keeps naming someone else, the <a href="/us-enterprise-audit" class="text-[#316263] font-bold underline">US Enterprise Messaging Audit</a> scores how clearly your positioning lands with US buyers and with the machines they ask. It costs 19.99 USD.</p>`},{id:"6020",image:BP,heroGrade:"wasabi",imageAlt:"Editorial black and white studio still life of a single chrome mechanical lever arm mounted on a dark matte panel, caught mid-pull",title:'"Vibe Coding" Is Addictive: The Lure of the Variable Reward',slug:"vibe-coding-is-addictive",category:"Behavioral Science",seoTitle:'"Vibe Coding" Is Addictive: The Lure of the Variable Reward',seoDescription:"AI was supposed to give founders their evenings back. Variable reward, the near-miss effect, and METR's data explain why we're working more instead.",excerpt:"AI was supposed to make us faster. Instead everyone building is working more hours than before. The mechanism is the same one Skinner used to turn pigeons into gamblers, and METR has the numbers showing it distorts what we think we accomplished.",readTime:5,author:"Shira Abel",datePublished:"2026-07-26",dateModified:"2026-07-26",content:`<p>AI and "vibe coding" are making us work more than we ever did before, but I don't think it's for the reason most think it is.</p>
243<p>I was at a Women in Pavilion event last week and everyone who was building mentioned that they found themselves working more hours than less. I've seen the same sentiments mentioned on LinkedIn. While AI was supposed to be making us all so much more efficient and faster, we're finding ourselves working more while (possibly) getting more done.</p>
244<p>I think it's because we're all experiencing the addiction of a near miss. The mix of bad and great results is a variable reward and it's those rewards that fill our dreams with all of the things we can do. So we keep trying.</p>
245<h2>The lure of a variable reward</h2>
246<p><a href="https://www.bfskinner.org/product/schedules-of-reinforcement" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">B.F. Skinner and Charles Ferster</a> spent the 1950s testing what happens when you change the timing of a reward using pigeons and food. Fixed reward: food every fifth press. Variable ratio: food on average every fifth press, at unpredictable intervals. Variable reward produced the highest response rate and the strongest resistance to extinction. Cut the food off entirely and the fixed-reward birds quit fast. The variable-reward birds kept pressing. Skinner was confident enough about the mechanism to claim, in 1971, that he could turn a pigeon into a pathological gambler.</p>
247<p>A prompt is a variable reward. Most of them return something almost right. Occasionally one returns exactly the thing. You cannot predict which, and the unpredictability is what keeps you working far longer than you planned.</p>
248<h2>The near-win</h2>
249<p><a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC2658737/" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">Luke Clark's lab at Cambridge</a> put people in an fMRI scanner with a simplified slot machine and separated three outcomes: wins, near-misses, and full misses. Near-misses were rated as less pleasant than full misses. They also increased the desire to keep playing. On the scans they recruited the striatal and insula circuitry that responded to actual wins.</p>
250<p>The near-miss only increased the urge to keep going on trials where the player had arranged the gamble themselves. Personal control is the condition under which almost-winning grips hardest.</p>
251<p>You write the prompt. You give massive amounts of context and examples of what good looks like. When the output comes back at 80 percent, you are the one who set the bar, so the 80 percent reads as evidence that you are close (you might be, and the feeling is identical either way).</p>
252<p>Clark's explanation for why the brain gets so excited by a near-miss: in skill games, a near-miss is information. Nearly missing the goal tells you how to adjust your foot, and the reward response is paying you for learning something. On a slot machine the near-miss teaches you nothing, and the reward response fires anyway.</p>
253<p>Building with AI sits on both sides of that line and gives you no way to tell which side you are on. Sometimes the almost-right output narrows the space and the next prompt lands. Sometimes you are pulling a lever with an orange on the payline. From inside the session, both feel like progress.</p>
254<h2>The cost of never-ending work</h2>
255<p>I'm working on building my first product, like so many non-technical people. I finally made the leap in the spring, building md files to wrap an 
255LLM. But things got much more serious when Claude's Fable was released. First there was the mystery of the product. According to the news rumors Anthropic itself had called Fable too strong for a full release, which of course had me desperate to try it the second it came out (if you've seen my videos and the Star Wars bobble-heads, my geekiness should not come as a surprise). Now I'm "coding", or at least giving comments to Claude about how something should be built, testing it, having it fail, pointing out the failures, and having it get better with each comment and build.</p>
256<p>
257</p>
258<p>I'm finding myself working 24/7. I always had a rule to not work past 7p because it affected my sleep too much. That's out the window. I now bring my laptop to bed and work on this product until I go to sleep, and start again when I wake up. Obsessive is an understatement. I'm addicted.</p>
259<h2>Our addiction is also killing our judgment</h2>
260<p><a href="https://metr.org/blog/2025-07-10-early-2025-ai-experienced-os-dev-study/" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">METR did an experiment</a>. 16 experienced devs worked on 246 tasks in their own repos and expected to be 24 percent faster. When asked how much more efficient AI made them, they believed they'd been 20 percent faster. In fact, they were 19 percent slower on the clock. The near-miss keeps us going, and our heads justify it after.</p>
261<p>In February 2026 METR tried and failed to rerun the study because developers refused $50 an hour to work without AI. On top of that 30 to 50 percent of participants wouldn't submit the tasks they thought AI would help with most. They failed to recruit, which kind of confirms my hypothesis.</p>
262<h2>Getting back to baseline</h2>
263<p>I think the addiction is temporary. As the newness of AI fades and people start to get used to the feeling of "almost", most of us will start to add boundaries back to our daily lives. Once you have seen the pattern and named it, the near-miss loses some of its power.</p>
264<p>The same thing happens in companies. At the beginning of a build, "almost" feels like progress and everyone is happy to stay late. By the third quarter of shipping all hours of the day and night it stops feeling like progress as you're exhausted and want your life back.</p>`},{id:"6014",image:jP,heroGrade:"wasabi",imageAlt:"Editorial black and white still life: a machined steel gear on the left representing positioning as the differentiation machine, and a vintage brass bell mid-vibration on the right representing brand as the memory machine",title:"Positioning, brand, and which one your company needs",slug:"positioning-brand-which-one-your-company-needs",category:["Positioning","Brand"],seoTitle:"Positioning vs. Brand: Which One Your B2B Company Needs",seoDescription:"Positioning is the differentiation machine. Brand is the memory machine. A framework for B2B leaders to decide which lever moves the next quarter.",excerpt:"Positioning and brand are not the same lever. They are two different machines, built for two different jobs, and knowing which one your company needs determines whether next quarter's budget moves deals.",readTime:6,author:"Shira Abel",datePublished:"2026-07-06",dateModified:"2026-07-06",tldr:"Positioning is the differentiation machine: it changes what the buyer believes about the problem before anyone compares features. Brand is the memory machine: it keeps you top of mind for the 95 percent of buyers who are not in market today. Most companies in saturated enterprise categories need both, in sequence. Positioning first, because brand investment amplifies whatever claim you make. Then brand, because even a sharp position fades if nobody remembers it during the years before the buyer enters the market.",faqSchema:[{question:"When is brand the right lever to reach for instead of positioning?",answer:"Brand is the right lever when your differentiation is already sharp and framed correctly, but buyers do not remember you exist when the buying window opens. It is also the right lever in commodity categories where buyers cannot perceive a meaningful difference between vendors, so memory and familiarity decide."},{question:"What is the 95:5 rule in B2B?",answer:"Professor John Dawes at the Ehrenberg-Bass Institute published the 95:5 rule through LinkedIn's B2B Institute in 2021. Companies change providers of services roughly every five years, which means about 5 percent of your potential buyers are in market in any given quarter. The other 95 percent are not shopping. Brand is how you exist in their memory anyway."},{question:"Should B2B companies invest in positioning first or brand first?",answer:"Positioning first. Brand investment amplifies whatever claim you make, and amplifying an undifferentiated claim just makes you a louder version of everyone else. Then brand, because even a sharp position fades if nobody remembers it during the years before the buyer enters the market."}
264],content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>Positioning and brand are two different machines built for two different jobs. Positioning is the differentiation machine. Brand is the memory machine.</li><li>Roughly 95 percent of your potential buyers are not in market on any given day. Brand is how you exist in their memory until they are.</li><li>Buyers who felt they received personal value from a supplier were nearly three times more likely to develop high levels of brand commitment than those who saw only functional value (Gartner, 2024).</li><li>Bain and HBR found that buyers ranked cost as their top stated priority, but cost fell to 27th place in what actually drove loyalty, well behind emotional factors like reduced anxiety and reputational assurance.</li><li>Most companies in saturated enterprise categories need both, in sequence: positioning first, then brand.</li></ul></div>
265<p>Last week Louis Grenier published <a href="https://www.linkedin.com/feed/update/urn:li:activity:7477689551033909248/" target="_blank" rel="noopener noreferrer">a report on LinkedIn</a> about B2B SaaS and brand. It focused on using tactics better known from consumer advertising. One of his conclusions was that not enough companies are using sound in their advertising.</p>
266<p>Proof that no good idea happens in a vacuum, a few weeks ago I wrote about <a href="/resources/blog/memory-devices-allstate-enterprise-marketing" class="text-[#316263] font-bold underline">the memory devices behind Allstate's Mayhem campaign</a>, sonic branding, parallelism, novelty bias, and why B2B tech companies should be stealing them. Two people making the same argument in the same few weeks is a signal. Brand tactics are having a moment in B2B. <a href="https://www.stfo.io/research/b2b-brand-distinctiveness-2026/" target="_blank" rel="noopener noreferrer">His premise</a> set positioning as secondary, stating that staying front of mind is more impactful than differentiation.</p>
267<blockquote class="blog-pullquote"><p>&ldquo;I&rsquo;ve watched companies spend months sharpening their positioning, nailing their ICP, finding a true differentiation that would give the right people a compelling reason to pick them, and then ship a website, a campaign, an identity that&rsquo;s just&hellip; beige&hellip;&rdquo;</p><cite>&mdash; Louis Grenier</cite></blockquote>
268<p>Let&rsquo;s say that&rsquo;s true, the question leads to when brand is the right tool to reach for, instead of positioning?</p>
269<p>Positioning and brand are not the same lever. They are two different machines, built for two different jobs, and knowing which one your company needs determines whether next quarter's budget moves deals.</p>
270<h2>Positioning is the differentiation machine</h2>
271<p>Positioning is a claim about where you sit relative to the alternatives your buyer is already considering, including the alternative of doing nothing. The framework I use with clients asks three questions:</p>
272<ol>
273<li>Where do you sit in the buyer's mental map of options?</li>
274<li>How do you want them to feel when they encounter you?</li>
275<li>What do you want them to do next?</li>
276</ol>
277<p>Positioning is the foundation, not the whole house. Messaging turns that position into language each stakeholder on the buying committee can use, and storytelling makes the message memorable enough to survive the meetings your champion is in without you. I laid out that layering in <a href="/resources/blog/positioning-messaging-storytelling" class="text-[#316263] font-bold underline">What's the Difference Between Positioning, Messaging, and Storytelling?</a></p>
278<p><em>Brand answers a different question: whether anyone remembers you exist before they start looking, independent of who you are for, your why, or how you phrase it.</em></p>
279<p>And Louis differentiates himself with a bold, unfiltered personal brand. He is an expert in brand marketing, and his direct, no-filter voice is a deliberate choice that stands out for the mid-market SaaS audience he focuses on. My personal brand (the one you see on LinkedIn) is very buttoned up. Our market is companies that sell to enterprises, and I suspect his level of shock-and-awe cursing would not work for that audience. He&rsquo;
279s appealing to his audience using the brand methods he extols. It works. I think his content is great. His report inspired me to work on one for Hunter &amp; Bard focusing on deep tech. That will come out in a few weeks. I&rsquo;m also changing the methodology he used to better fit my philosophy on marketing.</p>
280<h3>How do you want them to feel?</h3>
281<p>The feel question is the one most enterprise tech companies skip, and it costs them. In a <a href="https://www.gartner.com/en/documents/5638391" target="_blank" rel="noopener noreferrer">2024 Gartner study</a> on the emotional B2B buying journey, buyers who felt they received personal value from a supplier were nearly three times more likely to develop high levels of brand commitment than those who saw only functional value. In other words, they were loyal due to an emotional payoff to them as an individual rather than to their company. These were enterprise purchases, the kind where a bad call follows the buyer into their next performance review. The dominant emotion is fear of choosing wrong, and positioning built entirely on feature superiority does not trigger that.</p>
282<h3>What we say is not what we mean</h3>
283<p>Bain &amp; Company quantified this in research with more than 2,300 B2B decision-makers, <a href="https://hbr.org/2018/03/the-b2b-elements-of-value" target="_blank" rel="noopener noreferrer">published in Harvard Business Review</a>: buyers ranked cost reduction as their top stated priority, yet Bain&rsquo;s statistical analysis of what actually drove loyalty found cost fell to 27th place, well behind emotional factors like reduced anxiety and reputational assurance. Vendors that delivered on six or more of these deeper value elements saw repeat-purchase intent more than double compared with those that didn&rsquo;t. (The committee produces the scoring spreadsheet after the feeling.)</p>
284<p>Positioning works when there is strategic space to claim: a segment the incumbents serve badly, or a problem the category defines wrong. If that space exists, positioning is the sharpest tool you have, because it changes what the buyer believes about the problem before anyone compares features.</p>
285<h2>Brand is the memory machine</h2>
286<p>Brand does a different job. It makes you the company the buyer already knows when the buying window finally opens.</p>
287<p>That window is smaller than most founders think. In <a href="/resources/blog/memory-devices-allstate-enterprise-marketing" class="text-[#316263] font-bold underline">the Allstate piece</a> I cited <a href="https://www.marketingweek.com/ehrenberg-bass-linkedin-b2b-buyers/" target="_blank" rel="noopener noreferrer">the research behind it</a>: Professor John Dawes at the Ehrenberg-Bass Institute published the 95:5 rule through LinkedIn's B2B Institute in 2021. Companies change providers of services roughly every five years, which means about 5 percent of your potential buyers are in market in any given quarter. The other 95 percent are not shopping. Brand is how you exist in their memory anyway, so that when they do enter the market, you are already on their consideration list. Dawes is blunt about the alternative: buyers do not sign contracts with companies they have barely heard of.</p>
288<p>This is why brand carries the load in commodity categories. When buyers cannot perceive a meaningful difference between vendors, memory and familiarity decide. The uncomfortable part is how much of enterprise tech has become a commodity category without admitting it. Suppliers' offerings look basically the same. The <a href="https://chiefmartec.com/2026/05/2026-marketing-technology-landscape-supergraphic-peak-martech-achieved-maybe/" target="_blank" rel="noopener noreferrer">martech landscape</a> that Scott Brinker and Frans Riemersma track now counts 15,505 tools. <a href="https://it-harvest.com/" target="_blank" rel="noopener noreferrer">IT-Harvest tracks more than 4,000 cybersecurity vendors</a>. If you&rsquo;re selling a SaaS product, it&rsquo;s likely that your buyer is drowning. One more message about being faster and more scalable does not throw them a rope.</p>
289<h2>Which machine does your company need?</h2>
290<p>Physician, heal thyself.</p>
291<p>Run the honest diagnostic first.</p>
292<p>If you have real differentiation and you&rsquo;re not being considered, your problem is either messaging (your differentiation isn&rsquo;t properly framed) or memory. If it&rsquo;s memory, the bigger name was remembered and you didn&rsquo;t come to mind because your competition spent years in front of the 95 percent while you waited for the 5 percent to raise a hand. That calls for brand work: consistent presence with a strong point of view and distinctive assets, aimed at buyers who are years away from a purchase.</p>
293<p>If buyers engage with you but the deals stall or collapse into price negotiations, your problem is positioning. Nothing you have said changes what they believe about the problem, so they score you on a spreadsheet where every row is a feature and the last row is cost. That calls for positioning work: reframe the problem and address the fear of cho
293osing wrong.</p>
294<p>Most companies in saturated enterprise categories need both, in sequence. Positioning first, because brand investment amplifies whatever claim you make, and amplifying an undifferentiated claim just makes you a louder version of everyone else. Then brand, because even a sharp position fades if nobody remembers it during the years before the buyer enters the market.</p>
295<p>Positioning gets you chosen when the buyer is looking. Brand is the reason they looked at you first.</p>`},{id:"6012",image:PP,heroGrade:"wasabi",imageAlt:"Side-by-side black and white portraits: Travis Kalanick of Uber on the left, Logan Green and John Zimmer of Lyft on the right, illustrating the contrast between a famous founder and the invisible competitors",title:"The Cognitive Science Behind B2B Buying: Why Your Company Needs a Face",slug:"cognitive-science-b2b-buying-why-your-company-needs-a-face",category:["Enterprise Strategy","Behavioral Science"],globalFeaturedOrder:0,seoTitle:"B2B Buyer Psychology: Why Your Company Needs a Face",seoDescription:"Discover the cognitive science behind B2B buying behavior. Learn how humanizing your B2B brand reduces perceived risk and accelerates the sales cycle.",ogImage:"https://hunterandbard.com/__l5e/assets-v1/d18ecdf5-d0b7-4873-9841-44e061f0f1a5/og-cognitive-science-b2b.jpg",excerpt:"The data-backed case for CEO branding and why invisible companies get filtered out. People do not trust brochures, they trust people, and your buyer's brain is wired to look for a face before it evaluates the product.",readTime:8,author:"Shira Abel",datePublished:"2026-06-23",dateModified:"2026-06-23",featured:!0,tldr:"Enterprise buyers cannot directly observe whether your company will deliver, so their brains fall back on cognitive shortcuts. A visible founder with a point of view is a signal. A faceless company is nothing for the heuristic to grab onto, and 
295your competitor's personality fills the space yours left empty. The data is consistent: CEO content earns 3x the engagement, converts at 4x the rate, and is trusted more than communications departments. For European founders entering the US, the gap is structural: US buyers expect to see a person, hear a point of view, and judge whether that person understands their world.",faqSchema:[{question:"Why do American B2B buyers rely on the visibility of the CEO?",answer:"Enterprise buying is an uncertainty problem. The buyer cannot directly observe whether your company will deliver, so they fall back on signals and heuristics. A visible founder who shares a real point of view triggers the expertise heuristic that decides whether you make the shortlist. A faceless company triggers nothing, so the buyer skips past it."},{question:"What does the data say about CEO visibility in B2B?",answer:"73 percent of B2B decision-makers trust thought leadership over marketing materials. 63 percent say a CEO is more credible than the communications department (Edelman Trust Barometer, 2024). CEO and founder content earns roughly 3x more engagement than company-page content, costs 73 percent less per engagement, and converts at 4x the rate (LinkedIn B2B Marketing Benchmark, 2024). 82 percent trust companies more when senior executives are active on social media."},{question:"Why do European founders struggle with visibility in the US market?",answer:"European founders come from engineering-driven cultures where the product is supposed to do the talking and self-promotion is culturally suspect. US buyers run on a different set of trust heuristics: they expect a visible leader with a bold point of view. What reads as professionalism in Stockholm or Berlin reads as a lack of conviction in New York or San Francisco."}],content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>Enterprise buying is an uncertainty problem. When buyers cannot directly observe whether you will deliver, they fall back on signals, and a visible founder is the strongest signal you have.</li><li>A faceless company gives the buyer's brain nothing to grab onto. Your competitor's personality fills the space yours left empty.</li><li>The data is consistent: CEO and founder content earns roughly 3x the engagement, costs 73 percent less per engagement, and converts at 4x the rate of company-page content.</li><li>73 percent of B2B decision-makers trust thought leadership over marketing materials. 63 percent trust a CEO more than the communications department.</li><li>For European founders entering the US, visibility is not optional. US buyers expect a leader with a point of view, and silence reads as a lack of conviction, not professionalism.</li></ul></div>
296<p>Quick: who founded Lyft?</p>
297
298<p>Most people cannot answer that. <a href="https://www.forbes.com/sites/biz_carson/2016/09/29/inside-story-how-lyft-was-founded/" target="_blank" rel="noopener noreferrer">Logan Green and John Zimmer</a> built a ride-sharing company that, by most accounts, had a better product experience, a friendlier brand, and a more likable culture than its competitor. It did not matter. Uber won, and Uber won in large part because everyone on the planet knew Travis Kalanick. He was combative, reckless, and <a href="https://www.nytimes.com/2017/06/21/technology/uber-ceo-travis-kalanick.html" target="_blank" rel="noopener noreferrer">eventually forced out of his own company</a>. He was also famous. And that fame functioned as a marketing asset that no amount of brand spending could replicate.</p>
299<p>This is the pattern that most B2B companies refuse to look at directly. People know <a href="https://www.nytimes.com/2022/10/27/technology/elon-musk-twitter-acquisition.html" target="_blank" rel="noopener noreferrer">Elon Musk's rockets and his tweets</a>. They know <a href="https://www.cnbc.com/2021/07/20/jeff-bezos-blue-origin-launch.html" target="_blank" rel="noopener noreferrer">Jeff Bezos went to space</a> and got in shape. They know <a href="https://www.cnbc.com/2023/05/15/mark-zuckerberg-completes-first-mma-tournament.html" target="_blank" rel="noopener noreferrer">Mark Zuckerberg does MMA</a> now. These CEO's are now personalities. And they are the reason that when someone hears Tesla, Amazon, or Meta, a human being comes to mind before a product does.</p>
300<p>The expectation has been set. Buyers at every level, from seed-stage startups to the Fortune 500, expect to know who is behind a company. What they believe, how they think, what they are like.&nbsp;</p>
301<p>This is not about becoming an influencer or performing for an audie
301nce. It is about understanding that your founder's personality is doing marketing work whether you invest in it or not. If you invest in it, it compounds. If you ignore it, your competitor's personality fills the space yours left empty.</p>
302<h2>Why a person works when a logo does not</h2>
303<p>There is a reason your buyer trusts a person over a page, and it is not sentimentality. It is how cognition works under uncertainty.</p>
304<p>Enterprise buying is an uncertainty problem. Your buyer cannot directly observe the thing they care about most: whether your company can actually deliver. So people look for signals. Michael <a href="https://www.nobelprize.org/prizes/economic-sciences/2001/spence/facts/" target="_blank" rel="noopener noreferrer">Spence won a Nobel Prize</a> for formalizing this. His signaling theory shows that when quality is unobservable, people rely on costly, visible signals to make inferences. A founder who shows up publicly, shares real thinking, and stakes their reputation on a point of view is sending a signal. The signal works because it is attached to a person. A person can be wrong. A person can be embarrassed. That risk is what makes the signal credible.</p>
305<p><a href="https://sites.socsci.uci.edu/~bskyrms/bio/readings/tversky_k_heuristics_biases.pdf" target="_blank" rel="noopener noreferrer">Daniel Kahneman and Amos Tversky</a> spent decades proving that people do not make decisions through exhaustive analysis. They use rules of thumb called heuristics. Having someone in front gives a face to the mental shortcuts regarding that company, and this makes it more memorable. A&nbsp;fast heuristic like &ldquo;this CEO clearly knows my industry&rdquo; often outperforms a spreadsheet comparison. (We've written before on <a href="/resources/blog/heuristics-the-secret-sales-weapon-you-might-already-be-using" class="text-[#316263] font-bold underline">how heuristics quietly run B2B sales</a>.)</p>
306<p>Kalanick was not likable. He was not polished. But he was a signal. Every headline, every controversy, every public appearance told the market: there is a real human being behind Uber who will burn the place down before he lets it fail. That is an extraordinarily powerful piece of information for a buyer, an investor, or a potential employee to have. Lyft's founders were probably better people. They were certainly more pleasant. But they were invisible, and invisible is not a signal. It is nothing.</p>
307<h2>What happens when you give them something to grab</h2>
308<p>Cognitive science predicts that a visible leader should outperform a faceless brand. Multiple data sets confirm it.</p>
309<h3>What the data says</h3>
310<table class="blog-data-table">
311<thead><tr><th>Finding</th><th>Source</th></tr></thead>
312<tbody>
313<tr><td>73% of B2B decision-makers trust thought leadership over marketing materials</td><td><a href="https://www.edelman.com/insights/thought-leadership-gets-b2b-buyers-back-into-game" target="_blank" rel="noopener noreferrer">Edelman-LinkedIn B2B Thought Leadership Impact Report</a></td></tr>
314<tr><td>63% say a CEO is more credible than the communications department</td><td><a href="https://www.edelman.com/trust/2024/trust-barometer" target="_blank" rel="noopener noreferrer">Edelman Trust Barometer, 2024</a></td></tr>
315<tr><td>3x more engagement on CEO/founder content vs. company page content</td><td><a href="https://business.linkedin.com/marketing-solutions/b2b-benchmark" target="_blank" rel="noopener noreferrer">LinkedIn platform data</a></td></tr>
316<tr><td>Executive content costs 73% less per engagement, converts at 4x the rate</td><td><a href="https://business.linkedin.com/marketing-solutions/b2b-benchmark" target="_blank" rel="noopener noreferrer">LinkedIn B2B Marketing Benchmark, 2024</a></td></tr>
317<tr><td>82% trust companies more when senior executives are active on social media</td><td><a href="https://www.entrepreneur.com/leadership/why-ceos-should-be-active-on-social-media/424500" target="_blank" rel="noopener noreferrer">Entrepreneur</a></td></tr>
318</tbody>
319</table>
320<p>For early-stage companies especially, the founder's personal credibility often compensates for institutional credibility the company has not yet built. You may not have the brand recognition of a category leader. But if your CEO is the most informed, most visible voice on the specific problem your buyer is trying to solve, you have something a brand page cannot manufacture.</p>
321<h2>The European problem (and why it matters for every quiet founder lau
321nching in the US)</h2>
322<p>If you are a European founder (or a reserved CEO) reading this, you probably have a specific objection forming right now. Something along the lines of: the product should speak for itself.</p>
323<p>In principle you are right. That's a baseline in the US though, so in practice, it's not enough.</p>
324<p>European founders, particularly from Northern, Central, and Eastern Europe, come from engineering-driven business cultures where product quality is the primary signal. Modesty is a professional value, not a personal limitation. Self-promotion is culturally suspect. VC firm <a href="https://www.vestbee.com/blog/articles/why-european-founders-struggle-in-the-us-market" target="_blank" rel="noopener noreferrer">Vestbee published research</a> capturing this gap precisely: European CEE founders come from cultures where the product is supposed to do the talking. But in the US, as one investor put it, <em>&ldquo;being the best product is not enough without being perceived as the best solution.&rdquo;</em></p>
325<p>Donal Crilly, a professor at London Business School who consults with multinationals on cross-cultural strategy, told Sifted that European founders entering the US need a bold, compelling narrative about how they will change the market. Anything less reads as timid to American VCs and enterprise buyers alike.</p>
326<h3>US vs Europe Trust Systems</h3>
327<table class="blog-data-table">
328<thead><tr><th></th><th>US buyer expectations</th><th>European founder defaults</th></tr></thead>
329<tbody>
330<tr><td><strong>Primary trust signal</strong></td><td>Who is behind this company?</td><td>What does the product do?</td></tr>
331<tr><td><strong>Credibility source</strong></td><td>Visible leader with a point of view</td><td>Engineering quality and technical specs</td></tr>
332<tr><td><strong>Narrative style</strong></td><td>Bold vision, personal story, market disruption</td><td>Product capabilities, team credentials, measured claims</td></tr>
333<tr><td><strong>Self-promotion</strong></td><td>Expected and rewarded</td><td>Culturally suspect</td></tr>
334<tr><td><strong>What &ldquo;modesty&rdquo; signals</strong></td><td>Lack of confidence or conviction</td><td>Professionalism and trustworthiness</td></tr>
335</tbody>
336</table>
337<p>This is not about becoming someone you are not. It is about understanding that US buyers are running on a different set of trust heuristics. The cognitive shortcuts that work in Stockholm or Berlin (where engineering credentials and product specs carry weight on their own) do not fire in New York or San Francisco, where buyers expect to see a person, hear a point of view, and make a judgment about whether that person understands their world.</p>
338<p>The European founders who have cracked this are worth studying. <a href="https://fortune.com/2025/09/12/klarna-cofounder-ceo-sebastian-siemiatkowski-rags-to-riches-story/" target="_blank" rel="noopener noreferrer">Sebastian Siemiatkowski at Klarna is the clearest example</a>. Swedish-born, Polish heritage, started at Burger King, traveled the world on cargo ships before building one of Europe's largest fintech companies. Siemiatkowski shows up everywhere: podcasts, media interviews, conference stages. <a href="https://www.klarna.com/international/press/snoop-dogg-becomes-a-shareholder-in-klarna-and-transforms-into-smoooth-dogg/" target="_blank" rel="noopener noreferrer">He partnered with Snoop Dogg for a brand campaign</a>. He made public, <a href="https://www.fastcompany.com/91468582/klarna-tried-to-replace-its-workforce-with-ai" target="_blank" rel="noopener noreferrer">controversial statements about AI replacing jobs</a> (and then publicly reversed course when the approach lowered quality). <a href="https://www.reuters.com/business/finance/klarna-valued-nearly-20-billion-shares-jump-nyse-debut-2025-09-10/" target="_blank" rel="noopener noreferrer">He IPO'd Klarna on the NYSE in 2025 at a $19 billion valuation</a>. Love him or not, US buyers and investors know who he is.</p>
339<p>Daniel Ek at Spotify followed a quieter version of the same playbook. Less flashy, more product-focused, but still a known name. <a href="https://www.billboard.com/pro/no-1-power-100-daniel-ek-spotify/" target="_blank" rel="noopener noreferrer">Billboard named him the most powerful person in the music industry</a>. When you hear Spotify, you can picture Ek. That matters.</p>
340<p>Beyond those two, the list gets thin fast. And both are Swedish, which has a slightly more entrepreneurial culture than the rest of the continent (not coincidentally, <a href="https://www.theguardian.com/world/2018/jan/12/sweden-home-computer-tax-break-1998" target="_blank" rel="noopener noreferrer">Sweden also subsidized personal computing earlier than most of Europe</a>, which Siemiatkowski himself credits for his career trajectory).</p>
341<p>Most European companies entering the US do one of three things instead. They hire a US-based executive who becomes the public face. They lean on earned media and third-party validation so the founder is cited by others rather than self-promoting. Or they relocate the CEO to be perceived as US-based, which <a href="https://www.vestbee.com/blog/articles/why-european-founders-struggle-in-the-us-market" target="_blank" rel="noopener noreferrer">multiple VCs told Vestbee</a> is one of the strongest signals at pre-seed and seed stages.</p>
342<p>None of these are wrong. But they are all workarounds for the same underlying problem: the US market expects a visible person, and most European companies show up without one.</p>
343<h2>The visibility check</h2>
344<p>Before you dismiss this as a branding exercise or a LinkedIn growth hack, run your company through these questions. Every &ldquo;no&rdquo; is a gap between you and the way your buyer's brain actually works.</p>
345<ul class="blog-checklist">
346<li>
346Can your buyer find your CEO or founder on LinkedIn within 10 seconds of hearing your company name?</li>
347<li>Has your CEO published or shared an original perspective in the last 30 days?</li>
348<li>If a prospect Googles your CEO's name, do they find industry-relevant content on the first page?</li>
349<li>Does your CEO speak at events where your buyers are in the room?</li>
350<li>Could a buyer describe what your CEO believes about your industry after spending five minutes on their profile?</li>
351<li>When your sales team sends a follow-up email, does the prospect already have a positive impression of the person behind the company?</li>
352<li>Is your founder's visibility strategy deliberate, or accidental?</li>
353</ul>
354<p>If most of these are no, you are not being evaluated and found wanting. You are being filtered out before you reach the shortlist. The buyer's cognitive shortcut has nothing to grab onto, so it grabs the next vendor who does have a visible, credible human at the front. (It also explains why <a href="/resources/blog/your-buyer-researched-you-before-the-call" class="text-[#316263] font-bold underline">your buyer has already researched you before the first call</a>, and what they found, or didn't find, decided whether the call happened at all.)</p>
355<p>Your product may be better, and you may be exactly what the buyer needs. But if nobody knows who is behind it, none of that matters.</p>
356<blockquote class="blog-pull-quote"><p>Personality works. Because buyers are human.</p></blockquote>
357<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Work With Us</p><h3 class="blog-inline-cta-title">Put a face on your company</h3><p class="blog-inline-cta-body">If your CEO is invisible in the market your buyers actually look at, start with a <a href="/products/sprint">Brand and Messaging Sprint</a>, or <a href="/contact">talk to us</a> about building a visibility strategy that does not require becoming an influencer.</p></div>`},{id:"6011",image:IP,editorialGrade:!0,imageAlt:"Black and white editorial photograph of an empty boardroom after a meeting has ended, long polished conference table with scattered water glasses and one chair pulled out, evoking the unseen room where enterprise decisions actually get made",title:"You can't measure the thing that wins the enterprise deal",slug:"cant-measure-what-wins-the-enterprise-deal",category:"Startups Selling to Enterprise · Brand",seoTitle:"You Can't Measure What Wins the Enterprise Deal",seoDescription:"In six-figure deals, the decision happens off your dashboard, in reference calls and committee conversations you never see. Here is how to influence them.",excerpt:"For a startup selling into enterprise, what decides the deal happens where you can't measure it. Brand is the budget line you can't prove but still have to defend.",readTime:6,author:"Shira Abel",datePublished:"2026-06-14",dateModified:"2026-06-14",featured:!0,globalFeaturedOrder:2,tldr:"In self-serve you can watch every click, so you optimize what you can see. In a six-figure enterprise deal you can't see the part that decides it, the booth conversation, the reference call between your prospect and a past customer, so the metrics on your dashboard track the cheap, visible edge of the deal and miss the expensive middle. The thing that keeps you on the shortlist is brand, and brand is the one line you can't define the way you define a paid-search number. That doesn't mean you can't defend it. It means you defend it with leading indicators a board already trusts, not with a conversion number you had to manufacture.",faqSchema:[{question:"Why isn't click-through rate enough when you sell to enterprise?",answer:"A startup selling six-figure deals to a few thousand enterprise accounts doesn't get the traffic that makes click-through optimization meaningful. It sees a few hundred site visitors in a good month, which can't reach statistical significance, so any test result is indistinguishable from noise. The bigger issue is that the deal is decided mostly off your site, in reference calls and committee discussions you never see, so on-site metrics track the smallest part of the decision."},{question:"If you can't measure brand directly, how do you justify the budget to a board?",answer:"You don't fake a conversion number. You report leading indicators a board already trusts: committee-level 'how did you hear about us,' inbound quality, and the trend in deal size. You frame brand as a multi-quarter bet measured in those indicators, not a campaign measured in last-click conversions."},{question:"What decides an enterprise deal if not the website?",answer:"Whether you were already on the shortlist when the buying window opened, and whether the people the committee trusts had something good to say about you. Gartner finds buyers spend only about 17 percent of the journey with all vendors combined, so most of the decision happens in independent research and peer conversations. Your website confirms what they already believe. It rarely creates the belief."}
357],content:`<div class="blog-key-takeaways"><h2>Key takeaways</h2><ul><li>When you sell to enterprise, the deal moves where you have no visibility. You can record a sales call. You can't record the reference call or the conversation at a conference.</li><li>Gartner finds buyers spend only 17 percent of the buying journey with all vendors combined, and roughly 5 to 6 percent with any one of them. The part you can instrument is the smallest part of the decision.</li><li>At low traffic, click-through and conversion optimization is noise. A few hundred visitors a month can't reach significance, so you're tuning numbers that can't tell you anything.</li><li>Brand gets cut first because it has no clean number, even though it's what puts you on the day-one shortlist. The measurable thing feels board-safe, so it wins the budget.</li><li>You defend brand with what a board already trusts: committee-level &ldquo;how did you hear about us,&rdquo; inbound quality, and the trend in deal size. Not a manufactured attribution number.</li></ul></div>
358<p>A company selling a fifty-dollar-a-month SaaS tool off its website can watch the whole thing. Every click on the pricing page, every drop-off in the signup flow. They can even see the step where a buyer hesitated. You don't get that. You're closing four hundred thousand dollars with a buying committee, and the deal turns on a dinner you weren't at, a reference call between your prospect and someone who used you two jobs ago, and a thread in a closed-community Slack group. None of it shows up in a report. The deal you can measure isn't the deal that pays your salary.</p>
359<p>This is the part of marketing to enterprise nobody wants to say out loud. You inherited your metrics from a world that doesn't apply to you. (And yes, your dashboard will keep producing tidy numbers whether or not they mean anything.) In self-serve, the dashboard is the territory. In enterprise, it's a thin and flattering sliver of it.</p>
360<h2>What your dashboard can see, and what it can't</h2>
361<p>Your instrumentation covers the cheap part of the deal. Site visits, form fills, email opens, the demo request. All of it real and visible, and all of it from the early edge of the deal. What it misses is everything that moves a committee. The conversation at your booth that your AE half-remembers. The peer your prospect texts to ask whether you were a nightmare to implement. The analyst call. The LLM query that built their shortlist before they ever reached your site. You record your sales calls. You don't record the backchannel, and the backchannel is where the deal is won or lost.</p>
362<p><a href="https://www.gartner.com/en/sales/insights/b2b-buying-journey" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">Gartner</a> has the number on this. Buyers spend only 17 percent of the entire buying journey meeting with all potential vendors combined. Of that you maybe get five or six percent personally, because you're one of several on the list. The slice you can see and influence directly is the smallest slice of the decision. The rest happens where you're not.</p>
363<h2>Your metrics are measuring the wrong thing</h2>
364<p>Start with click-through and conversion. Those numbers assume traffic you don't have. A startup selling six-figure deals to a few thousand accounts gets a few hundred to a few thousand people on the site in a good month, nowhere near enough to reach statistical significance on anything. You can run the A/B test. It will hand you a result indistinguishable from noise.</p>
365<p>Then there's lead scoring, which assumes a funnel that no longer exists. The buyer isn't moving politely from awareness to consideration to decision while your MQL model takes notes. They've defined what they need and narrowed the field before your system logs them as anything. (<a href="/resources/blog/martini-pipeline-abm-marketing-funnel-became" class="text-[#316263] font-bold underline">I wrote about how the funnel became a martini glass and what that does to your pipeline math.</a>) The metrics that look the most rigorous are the ones measuring a process that already broke.</p>
366<h2>The thing that wins is the thing you can't put a number on</h2>
367<p>What keeps you in an enterprise deal is being the name the committee trusts before the window opens. Most of your buyers aren't in-market right now. They will be in six or twelve months, and when they are, the question is whether you're the brand that comes to mind and whether the people they ask have something good to say. A two-hundred-thousand-dollar purchase isn't a credit-card swipe. It's a group doing due diligence on you, asking who uses you and whether your team holds up once the contract is signed. That's reputation. That's brand. You cannot instrument it like a checkout flow, because it lives in other people's heads and other people's conversations.
367</p>
368<h2>Why brand is the budget you can't defend (and still have to)</h2>
369<p>The bind is real. Brand is the riskiest line on your budget, not because it doesn't work, but because you can't define it the way you define a paid-search spend with a cost per lead attached. And you still have to stand in front of a board and prove every dollar was worth it. When you starve brand to overfund what's measurable, you don't just waste ad dollars. You increase the probability of coming second in every committee decision and compress your future pipeline. So the measurable thing gets funded, because it's defensible in the room, and brand gets cut first, because you couldn't put a clean number next to it. You starve the thing that decides whether you make the shortlist so you can optimize the thing that connects to something, anything, that you can show numbers on.</p>
370<blockquote class="blog-pull-quote"><p>You starve the thing that decides whether you make the shortlist so you can optimize the thing that connects to something, anything, that you can show numbers on.</p></blockquote>
371<h2>How to defend it anyway</h2>
372<p>You can't promise last-click attribution for brand, and you shouldn't try. A board can smell a manufactured number, and the moment they catch one, they stop trusting the rest. Bring leading indicators that come from systems a board already believes. Inbound quality and the trend in deal size, not raw lead volume.</p>
373<p>A brand survey of your real buyers, run once or twice a year, does the same job. Survey prior decision-makers and people who match your buyer profile at accounts you haven't sold to yet. Give them a buying situation where you can win and ask who they'd consider, something like &ldquo;Imagine you're selecting a vendor in this category in the next twelve months. Which companies come to mind?&rdquo;, with no list to pick from, so whatever surfaces is what's already in their heads. Track whether you're the first name out and whether that share of mind is improving over time. The small numbers aren't a problem, because your buyer list is short and knowable, so you survey a large slice of it and read the trend over time instead of chasing a representative sample you'll never get.</p>
374<p>None of these is a conversion number. Every one of them moves when your brand is working, and a board can follow the logic.</p>
375<p>The board doesn't need you to prove brand with a conversion number. It needs you to stop pretending the conversion number was ever the thing that won the deal.</p>
376<h2>Sources</h2>
377<ul>
378<li><a href="https://www.gartner.com/en/sales/insights/b2b-buying-journey" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">Gartner, The B2B Buying Journey</a>. Buyers spend roughly 17 percent of the journey meeting with all suppliers combined, and 5 to 6 percent with any one supplier.</li>
379<li>John Dawes, <a href="https://marketingscience.info/the-95-5-rule-in-b2b-marketing/" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">The 95-5 Rule</a>, Ehrenberg-Bass Institute for Marketing Science. About 5 percent of B2B buyers are in-market at any given time.</li>
380</ul>
381<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Work With Us</p><h3 class="blog-inline-cta-title">Get on the day-one shortlist</h3><p class="blog-inline-cta-body">If brand is the budget you can't prove but still have to defend, start with a <a href="/products/sprint">Brand and Messaging Sprint</a>, or <a href="/contact">talk to us</a> about building the system.</p></div>`},{id:"6009",image:EP,editorialGrade:!0,imageAlt:"Black and white editorial photograph of a lone suited figure standing at the edge of a single spotlight on an empty theater stage, evoking the personification device that makes the Allstate Mayhem character impossible to forget",title:"Memory Devices Allstate Uses That Your Technology Company Could Learn From",slug:"memory-devices-allstate-enterprise-marketing",category:["Enterprise Strategy","Behavioral Science"],seoTitle:"Memory Devices B2B Marketers Should Steal",seoDescription:"Allstate spent decades building memory devices that stick. The mnemonic tactics B2B tech marketers should steal to make their brand memorable.",excerpt:"Allstate's Mayhem campaign has survived three CMOs, two recessions, and a pandemic because it uses specific, identifiable persuasion mechanics. Those same memory devices translate directly to enterprise B2B, where 95 percent of buyers are not in-market today but will be later.",readTime:7,author:"Shira Abel",datePublished:"2026-06-08",contentBlocks:[{type:"youtube",videoId:"dFOBrWkzbi4",title:"Allstate Mayhem commercial",caption:"Allstate, Mayhem campaign."}],dateModified:"2026-06-08",featured:!0,globalFeaturedOrder:1,tldr:"Allstate and Farmers compete on recall, not features. The devices they use (sonic branding, parallelism, novelty bias, personification, contrast) translate directly to enterprise B2B, where roughly 95 percent of buyers are not in-market on any given day. The enterprise equivalents are ownable category language, absurd-but-true case studies, naming the enemy, and old-way versus new-way contrast. Pick one device, run it consistently for a year, and be in the room when the buying window opens.",faqSchema:[{question:"What memory devices does Allstate use in its marketing?",answer:"Allstate uses two primary devices. Personification: the Mayhem character takes abstract risk and gives it a body, a face, a personality. And contrast: Mayhem's chaos runs alongside Dennis Haysbert's calm baritone saying 'You're in good hands.' The contrast between the two makes both halves land harder than either would alone."},{question:"Why do memory devices matter for B2B enterprise marketing?",answer:"At any given time, roughly 95 percent of business buyers are not in-market for any particular category. They will be, just not now. The companies that win are the ones already in the buyer's head when the window opens. Memory devices are how a brand stays lodged 
381in the mind of the buyer who will open a window in 14 months."},{question:"What is the B2B equivalent of a jingle?",answer:"The enterprise equivalent of a jingle is a category phrase you own so completely that every time a prospect hears it, your brand is the referent. HubSpot coined 'inbound marketing'. Salesforce did the same with 'No Software'. Gong built 'reality of revenue' into every piece of content. Drift planted 'conversational marketing' until the phrase became the category. None of these required a Super Bowl. They required a phrase and the discipline to repeat it."}],content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>Allstate and Farmers compete in a category where products are nearly identical and nobody shops until something goes wrong. They <strong>win on recall, not features</strong>. The name that surfaces when the moment arrives gets the call.</li><li>Five persuasion mechanics do the work: <strong>sonic branding, parallelism, novelty bias, personification, and contrast</strong>. None of them are random. All of them are repeatable.</li><li>In enterprise B2B, roughly <strong>95 percent of buyers are not in-market</strong> on any given day. Most marketing speaks only to the 5 percent already evaluating, and encodes nothing for the rest.</li><li>The B2B equivalents already exist: <strong>ownable category language</strong> (HubSpot's "inbound marketing", Salesforce's "No Software"), <strong>absurd-but-true case studies</strong>, naming the enemy, and old-way versus new-way contrast.</li><li>Pick <strong>one device, run it consistently for a year</strong>, and you will be in the room when the buying window opens. Cleverness without repetition is just noise.</li></ul></div>
382<p>Dean Winters has been hit by a car, set on fire, dropped from a building, and dragged behind a boat. He&rsquo;s Allstate&rsquo;s Mayhem character, and he&rsquo;s been doing it since 2010. The campaign has survived three CMOs, two recessions, and a pandemic, because it works.</p>
383
384<p>Ask anyone in America what Mayhem looks like, and they&rsquo;ll describe a guy in a suit with a black eye. Ask them what Allstate&rsquo;s deductible options are, and you&rsquo;ll get a blank stare.</p>
385<blockquote class="blog-pull-quote"><p>That gap is the whole point.</p></blockquote>
386{{block:0}}
387
388<p>Allstate and Farmers Insurance both operate in a category where the product is nearly identical across competitors and nobody shops until something goes wrong. They can&rsquo;t win on features, so they compete on recall. The name that surfaces when the moment arrives gets the call. And the devices they use to stay lodged in your memory are not random. They are specific, identifiable persuasion mechanics.</p>
389<h2>What Farmers and Allstate actually do</h2>
390<p>Farmers uses three devices. The first is <strong>sonic branding</strong>: that jingle (&ldquo;We are Farmers, bum ba dum bum bum bum bum&rdquo;) encodes the brand name into a melodic pattern your brain replays whether you want it to or not. The second is <strong>parallelism</strong>: &ldquo;We know a thing or two because we&rsquo;ve seen a thing or two&rdquo; has the structure of a proverb, which makes it feel like received wisdom rather than ad copy. The third is <strong>novelty bias</strong>: their amusing, occasionally relatable, absurd-but-true claims stories (a car in a swimming pool, a tree through a roof during a wedding, a birdfeeder put together incorrectly by a husband looking to save money) trigger the part of your brain that flags unusual information as worth storing.</p>
391<p>Allstate uses two. <strong>Personification</strong>: the Mayhem character takes abstract risk and gives it a body, a face, a personality. You cannot fear a probability table. You can fear a guy grinning at you while he rips your bumper off. And <strong>contrast</strong>: Mayhem&rsquo;s chaos runs alongside Dennis Haysbert&rsquo;s calm baritone saying &ldquo;You&rsquo;re in good hands.&rdquo; The contrast between the two makes both halves land harder than either would alone.</p>
392<p>Both campaigns are also genuinely funny, which isn&rsquo;t incidental. <a href="https://link.springer.com/article/10.1007/s11747-008-0096-y" target="_blank" rel="noopener noreferrer">
392Humor generates positive affect</a>, and positive affect makes a brand more likable and easier to retrieve from memory. The joke and the brand land together because in both cases the humor is the device, not a distraction from it.</p>
393<p>A fair objection is that Allstate has the budget to run Super Bowl ads and you don&rsquo;t. But the devices don&rsquo;t require mass media to work, they require consistency and reach within your actual audience. A recurring character in a LinkedIn video series, a signature story format you open every keynote with, a newsletter that always closes with the same same cadence: these are the same mechanics operating at a different frequency. The principle stays the same, even if the medium scales down.</p>
394<p>None of these devices argue that the product is superior. They don&rsquo;t mention pricing, coverage limits, or claims processing speed. They exist to make the brand impossible to forget.</p>
395<p>In a category where the buying moment is unpredictable and uncontrollable, that is the strategy.</p>
396<h2>Enterprise buying has the same structural problem</h2>
397<p>No one wakes up on a random Tuesday and decides to evaluate data infrastructure vendors because you need them to. Nor will someone browse solution websites on her lunch break. Instead, something breaks or a discussion happens in a planning meeting. Or a competitor announces a partnership that changes the math. And then, suddenly, there&rsquo;s a buying window.</p>
398<p>The <a href="https://business.linkedin.com/advertise/resources/b2b-institute/b2b-research/trends/95-5-rule" target="_blank" rel="noopener noreferrer">LinkedIn B2B Institute and Ehrenberg-Bass Institute</a> have been publishing data on this for years. At any given time, roughly 95% of business buyers are not in-market for any particular category. They will be. Just not now. The companies that win <a href="/resources/blog/how-enterprise-b2b-decisions-are-made">enterprise deals</a> are the ones already in the buyer&rsquo;s head when the window opens.</p>
399<p>Most B2B companies ignore this completely. Focusing on what they know best, they pour budget into lead gen and bottom-funnel tactics: capturing demand that already exists. They fight over the 5% who are actively buying today and write off the 95% who will be buying in six, twelve, eighteen months. The math on that is brutal.</p>
400<blockquote class="blog-pull-quote"><p>You are spending the most money on the smallest audience in the most competitive moment of the buying cycle.</p></blockquote>
401<p>The solution is <a href="/resources/blog/the-18-month-tax">brand building</a>, but because it takes time and doesn&rsquo;t have a direct ROI, it&rsquo;s ignored by most companies. It requires long term faith to invest in, and needs to be driven by the CEO (even if it&rsquo;s owned by the CMO).</p>
402<h2>The devices translate. They just look different.</h2>
403<p>The earworm becomes ownable language, and ownable language is something enterprise brands can actually build. The enterprise equivalent isn&rsquo;t a jingle; it&rsquo;s a category phrase you own so completely that every time a prospect hears it, your brand is the referent. <strong>HubSpot</strong> didn&rsquo;t hire a mascot; they coined &ldquo;inbound marketing&rdquo; and repeated it until they owned the concept. <strong>Salesforce</strong> did the same with &ldquo;No Software&rdquo;, a two-word position that reframed what software meant before most competitors understood what was happening. <strong>Gong</strong> built &ldquo;reality of revenue&rdquo; into every piece of content they produced. <strong>Drift</strong> planted &ldquo;conversational marketing&rdquo; so consistently that the phrase became the category. None of these required a Super Bowl. They required <a href="/products/sprint">a phrase and the discipline to repeat it</a>.</p>
404<p>The absurd-but-true scenario becomes the <a href="/resources/blog/your-buyer-researched-you-before-the-call">case study that breaks the pattern</a>. Most B2B case studies read like they were written by the same person following a very boring formula. &ldquo;
404Company X improved efficiency by 30%.&rdquo; That has no personality and does not stick. What sticks is the weird, specific, too-particular-to-be-invented detail. The client who found out their sales team was spending 11 hours a week copying data between two systems that were supposed to be integrated. The company that lost a $4 million deal because the prospect&rsquo;s intern Googled them and the first result was a Glassdoor page with a 2.1 rating. Those stories lodge because they are concrete and slightly absurd, making them interesting. The same novelty bias that makes Farmers&rsquo; swimming-pool car memorable makes your strange-but-true client story memorable.</p>
405<p>Personification of risk becomes naming the enemy. Enterprise buyers cannot fear a vague category problem. &ldquo;Digital transformation challenges&rdquo; is not a threat. It is a phrase that slides in one ear and out the other. But &ldquo;your sales team is spending 40% of their time on work that will not exist in two years&rdquo; has a face. &ldquo;Your competitor just hired a fractional CMO and is repositioning against you right now&rdquo; has a face. Give the threat a body and the buyer&rsquo;s amygdala does the rest.</p>
406<p>Contrast works everywhere, in every medium. Old way versus new way. The pain of staying versus the relief of switching. Before and after. You need both halves of the frame or neither half registers. A product page that only talks about what you offer, without anchoring it against the pain of the status quo, is half a persuasion argument. And half doesn&rsquo;t convert.</p>
407<h2>The mistake</h2>
408<p>The miscalculation is believing that the same brain that can&rsquo;t shake the Mayhem character becomes a rational spreadsheet processor when it walks into an office. It does not. Daniel Kahneman spent a career demonstrating that <a href="https://pubmed.ncbi.nlm.nih.gov/17835457/" target="_blank" rel="noopener noreferrer">human decision-making is driven by heuristics</a>, not analysis, even among people whose jobs are analysis. Your buyer is still running System 1 in System 2&rsquo;s clothing. They respond to the same devices. They just need those devices delivered in a format that doesn&rsquo;t look like a Super Bowl ad.</p>
409<p>The mistake, concretely, is this: enterprise marketers produce almost exclusively System 2 content: whitepapers, ROI calculators, feature comparison sheets, and <a href="https://www.g2.com/" target="_blank" rel="noopener noreferrer">G2 review</a> campaigns. These are useful to the 5% who are already evaluating. They do nothing for the 95% who are not yet buying. All that content, and none of it encodes your brand into the mind of the buyer who will open a window in 14 months.</p>
410<p>The companies that close enterprise deals before the shortlist is even written are the ones that figured this out. They are not running better campaigns. They are running more memorable ones. And memorable is a function of specific, identifiable persuasion mechanics, not bigger budgets or better targeting.</p>
411<p>Allstate did not become the most recalled insurance brand by explaining their coverage. They built a character your brain cannot evict. Your enterprise brand has the same opportunity and the same constraint: the moment is coming, you do not control when, and when it arrives, you need to already be in the room.</p>
412<p>Start with one device. Pick your character, or your phrase, or your story format. Run it consistently for a year. The window will open when it opens. Your job is to already be there when it does.</p>
413<p>The device does the work whether they are actively reading your content or vaguely recalling a brand when a buying conversation finally starts. That is the whole point of Mayhem. That can be the whole point of yours.</p>
414<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Work With Us</p><h3 class="blog-inline-cta-title">Build a brand your buyers can&rsquo;t evict</h3><p class="blog-inline-cta-body">Pick your device and run it for a year. Start with a <a href="/products/sprint">Brand and Messaging Sprint</a>, or <a href="/contact">talk to us</a> about building the system.</p></div>`},{id:"6008",image:CP,editorialGrade:!0,imageAlt:"Black and white editorial photo of an empty enterprise boardroom with leather chairs around a polished conference table and a single half-full water glass, illustrating the rooms where renewal and expansion decisions get made without the vendor present",title:"The B2B Messaging Framework That Keeps Selling",slug:"b2b-messaging-framework-keeps-selling",category:"Enterprise Strategy",seoTitle:"The B2B Messaging Framework That Keeps Selling",seoDescription:"Most startups stop marketing the day the contract is signed. The companies earning 120%+ net revenue retention run a messaging system after the close too.",excerpt:"For startups and scaleups selling into enterprise, your message has to do the selling when you can’t be there. Most of the time, you can’t. The companies earning net revenue retention above 120 percent run a marketing operation inside their installed base. This post maps what that operation looks like and how to build one before your next renewal.",readTime:11,author:"Shira Abel",datePublished:"2026-06-05",dateModified:"2026-06-05",featured:!0,globalFeaturedOrder:2,tldr:"The most expensive gap in enterprise B2B is between closed-won and renewal. Most startups slow marketing to a crawl the day the contract is signed, then wonder why churn happens. The companies earning 120%+ NRR run a deliberate, role-specific post-sale marketing program: onboarding metrics at 30 days, an ROI report at 60-90, an expansion case study at the expansion window, a value brief 60 days before the budget cycle closes, and always-on enablement for CS. Your champion becomes your salesperson the moment you leave the call. Give them ammunition before they need it.",faqSchema:[{question:"What is post-sale marketing in B2B?",answer:"Post-sale marketing is a deliberate, role-specific marketing program aimed at people inside an existing customer account: the end user, the budget owner, the champion, the executive sponsor, and customer success. It exists to defend renewals, drive expansion, and arm the champion who has to justify your line item to people who weigh risk more heavily than upside."},{question:"Why does net revenue retention depend on marketing?",answer:"At renewal the full buying committee does not re-form. The solution is a budgeted line item, and someone still has to justify the cost. Whoever approved it carries the downside if the product stops delivering. Companies earning NRR above 120 percent do not leave that justification to chance. They run a role-specific marketing program that gives each person in the account what they need, when they need it."},{question:"What is the standard post-sale cadence?",answer:"Thirty days after close, end users need onboarding success metrics. Sixty to ninety days in, the budget owner needs an ROI report tied to the goals stated during the original sale. At the expansion window, the champion needs a case study of a similar company that expanded. Sixty days before the budget cycle closes, the executive sponsor needs a value brief. Always-on, the CS team needs the buying committee map and a marketing toolkit."},{question:"When should behavioral signals override the calendar?",answer:"A usage drop at day 45, a spike in support tickets in week three, or telemetry showing a team stopped logging in after the first two weeks are marketing problems, not customer success problems. Companies that track behavioral signals and intervene based on what those signals say rather than what the calendar says see measurably better retention. The cadence tells you what to send when things are going well. The signals tell you when things are not."}],content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>The most expensive gap in enterprise B2B is the one between <strong>closed-won and renewal</strong>. Most startups slow marketing to a crawl the day the contract is signed.<
414/li><li>Companies earning <strong>net revenue retention above 120 percent</strong> run a marketing operation inside their installed base, aimed internally.</li><li>Messaging persuades twice: <strong>inclusion</strong> (getting on the shortlist) and <strong>selection</strong> (winning once you&rsquo;re on it). Most frameworks only solve for the second.</li><li>Your real competitor is usually not another vendor. It is <strong>no decision</strong>. Inaction has to feel riskier than action.</li><li>Your champion becomes your <strong>salesperson the moment you leave the call</strong>. Give them the ammunition before they need to ask.</li></ul></div>
415<p>For startups and scaleups selling into enterprise, your message has to do the selling when you can&rsquo;t be there. Most of the time, you can&rsquo;t.</p>
416<p>The most expensive gap in enterprise B2B is the one between the closed-won and renewal. Thanks to budget constraints and focus on building the pipeline, most startups slow marketing to a crawl the day the contract is signed.</p>
417<blockquote>&ldquo;&hellip;only 3 percent of survey respondents reported having &hellip; omnichannel approaches for customer success and renewals tailored to customer needs.&rdquo;<cite><a href="https://www.mckinsey.com/industries/technology-media-and-telecommunications/our-insights/the-net-revenue-retention-advantage-driving-success-in-b2b-tech" target="_blank" rel="noopener noreferrer">McKinsey</a></cite></blockquote>
418<p>That means that there&rsquo;s not enough goodwill in the account to back you up when the customer is deciding whether to keep you or churn you when something cheaper comes along. The companies earning net revenue retention above 120 percent have figured this out. They run a <a href="/services/marketing-strategy">marketing operation inside their installed base</a>, aimed internally. This post maps what that operation looks like and how to build one before your next renewal.</p>
419<h2>What winning looks like</h2>
420<p>Snowflake reported <a href="https://www.sec.gov/Archives/edgar/data/0001640147/000164014725000207/fy2026q3earnings.htm" target="_blank" rel="noopener noreferrer">net revenue retention of 125 percent</a> for the quarter ending October 31, 2025. Its existing customers, as a group, spent about a quarter more this year than last, net of everyone who left. That growth is not earned by a sales team re-pitching every account. It comes from a product with marketing baked in combined with people inside those accounts making the case for more. The efficiency of the platform travels by word of mouth (and a shared success story case study) to a new team and finance approves more capacity. A VP two levels up from the original buyer decides the platform is strategic after seeing the changes to the KPIs. The solution expands inside the company without the seller in the room.</p>
421<h2>The architecture</h2>
422<p>The framework has four layers:</p>
423<ul>
424<li><strong>Positioning:</strong> where you sit in the market, who it&rsquo;s for, what category you live in, what the real alternatives are, and why you win.</li>
425<li><strong>Value proposition:</strong> why someone chooses you over those alternatives.</li>
426<li><strong>Messaging pillars:</strong> the three or four core claims you can actually prove.</li>
427<li><strong>Tone:</strong> how you say all of it, including how you want each audience to feel.</li>
428</ul>
429<p>Each layer feeds the one below it. The architecture is not the hard part.</p>
430<p>Before any layer gets populated, you extract the concrete pain from customer interviews and call recordings. Verbatim. If a customer wouldn&rsquo;t say it, it doesn&rsquo;t go in. This is the step everyone avoids. Marketers don&rsquo;t get the access they should to customers. This means they are often forced to write their <a href="/products/sprint">messaging</a> from the inside out. What they built, what they&rsquo;re proud of, what they think differentiates them. That is a self-description. Positioning starts with what the customer is trying to solve and what they were comparing when they made the decision.</p>
431<p>Enterprise deals are not decided by one person. <a href="https://www.gartner.com/en/sales/insights/b2b-buying-journey" target="_blank" rel="noopener noreferrer">Gartner</a>
431 puts the typical buying group at six to ten people. Each of them has a different agenda, a different risk profile, and a different definition of what a good outcome looks like. One document cannot do all of that at once. The companies that retain and expand build a presence where each role finds what they need. That is not six versions of a brochure. It is a messaging system built with the committee in mind from the start.</p>
432<p>Messaging can&rsquo;t substitute for proof. It can&rsquo;t fix a product that isn&rsquo;t differentiated. And it can&rsquo;t work without distribution. If those three aren&rsquo;t in place, no framework fixes what&rsquo;s broken.</p>
433<h2>Messaging persuades twice</h2>
434<p>Enterprise messaging has two jobs at two stages. Most startups only do one of them.</p>
435<p>The first job is <strong>inclusion</strong>. A buying committee forms a shortlist before any vendor is in active conversation with them. That shortlist is built from what they&rsquo;ve read, heard, and seen, your category presence, and your proof. If your positioning is unclear, you&rsquo;ve lost the competition before you even got a chance to try.</p>
436<p>The second job is <strong>selection</strong>. Once you&rsquo;re on the list, you compete against the alternatives that also made the cut. This is where most messaging effort goes: the demo, the proposal, the competitive battlecard, the sales deck. It&rsquo;s necessary. It&rsquo;s also the easier problem, because at least you&rsquo;re in the room.</p>
437<p>The four-layer architecture exists to win both. Positioning and proof handle inclusion. Value proposition and messaging pillars handle selection. Most frameworks only solve for the second.&nbsp;</p>
438<h2>What enterprise buyers actually use to differentiate</h2>
439<p>Enterprise buyers are not ranking features. They are running a private risk assessment, and the vendor who reduces personal professional exposure wins over the vendor with the better demo. The logic behind &ldquo;nobody got fired for buying IBM&rdquo; was never about the product. It was about what the decision would look like if something went wrong.</p>
440<p>The evidence they use is proof: references at companies like theirs (anonymized is possible when named isn&rsquo;t allowed), analyst validation, customer quotes. This is how you get in the door. It&rsquo;s not what keeps a customer from churning.</p>
441<p>Switching cost is the incumbent&rsquo;s weapon. If you&rsquo;re the challenger, switching cost is the barrier you&rsquo;re fighting, not an asset you hold. Don&rsquo;t confuse the two.</p>
442<p>Relationships accelerate; they don&rsquo;t decide. A relationship gets you the meeting. A committee will not override a risk verdict because they like the rep. Relationship is throughput, not the deciding variable.</p>
443<h2>Two different calculations</h2>
444<p>Loss aversion is the dominant force in aggregate. As Kahneman wrote in <em>Thinking, Fast and Slow</em>:</p>
445<blockquote><p>&ldquo;When directly compared or weighted against each other, losses loom larger than gains.&rdquo;</p><cite>Daniel Kahneman, <em>Thinking, Fast and Slow</em></cite></blockquote>
446<p>The economic buyer, IT, security, legal, and procurement are playing not-to-lose. They carry downside and no upside, so their entire job is to avoid the bad pick. The champion and the executive sponsor are the opposite. The champion&rsquo;s reputation rises if this works. The sponsor wants to look forward-thinking. Those two are playing to win. Everyone else at the table is a loss-aversion machine wearing business casual.</p>
447<p>A deal dies when the not-to-lose majority overrides the people playing to win. So your messaging has to do two jobs simultaneously. Give the champion the win story, something worth spending political capital on. Give everyone else the cover: proof you&rsquo;ve done this before with companies like theirs, security answers, defensibility. Do only the win story and you arm a champion who gets outvoted. Do only the not-to-lose story and nobody fights for you, so the deal dies.</p>
448
449<p>Doing nothing is the ultimate not-to-lose move. Your messaging has to make inaction feel riskier than action: the cost of staying where they are, the window they&rsquo;ll miss, the problem that compounds while they wait. That is the competitive argument most messaging never makes.</p>
450<p><a href="https://hbr.org/2018/03/the-b2b-elements-of-value" target="_blank" rel="noopener noreferrer">Bain&rsquo;s B2B Elements of Value research</a> (HBR, 2018) puts risk reduction, quality, and service support at the foundation of every enterprise purchase. That foundation gets tested at every renewal. The committee is still managing risk.</p>
451<h2>Post-sale messaging system</h2>
452<p>This is where the money is, and it is where nearly everyone stops doing the work.</p>
453<p>Most startups treat the post-sale period as customer success territory. CS owns the relationship and runs the QBRs. Marketing moves on to filling the top of the funnel. The buying committee map that marketing built to close the first deal gets filed and forgotten.</p>
454<p>At renewal, the full buying committee doesn&rsquo;t re-form. The solution is a budgeted line item and the department decides whether to keep spending. But someone still has to justify the cost. And whoever approved it still carries the downside if the product stops delivering.</p>
455<p>The companies earning net revenue retention above 120 percent are not leaving this to chance. They run a deliberate, role-specific marketing program. That program has five components, each aimed at a specific person in the account, timed to when that person needs it.</p>
456<h3>The standard cadence</h3>
457{{block:0}}
458<ul>
459<li><strong>Thirty days after close,</strong> end users need onboarding success metrics. A concrete measurement showing the product is doing what was promised. This is your first deposit in the trust account you will draw on at renewal.</li>
460<li><strong>Sixty to ninety days in,</strong> the budget owner needs an ROI report tied to the goals they stated during the original sale. Numbers they can put in front of their VP to prove the spend was justified. If your champion can&rsquo;t defend ROI at renewal, they have nothing to fight with. Give them the ammunition before they need to ask.</li>
461<li><strong>At the expansion window</strong> (and you should know when this is for each account), the champion needs a case study of a company similar to theirs that expanded. A specific success story: their industry, their size, the path to whatever KPI determines a win. Something they can forward with &ldquo;this could be us.&rdquo;</li>
462<li><strong>Sixty days before the budget cycle closes,</strong> the executive sponsor needs a value brief. If the renewal conversation starts in September, the VP needs the value story before July. By September the line is already contested and your champion is playing defense without a playbook.</li>
463<li><strong>
463Always-on,</strong> your <a href="/services/enterprise-strategy">CS team needs the buying committee map</a> and a marketing toolkit. <a href="https://www.forrester.com/report/customer-success-emerges-as-a-driver-of-influence-in-the-b2b-buying-journey/RES182780" target="_blank" rel="noopener noreferrer">Forrester&rsquo;s 2024 Buyers&rsquo; Journey Survey</a> found that customer success interactions were the third most-cited personal influence on B2B buying decisions, behind product experts and sales. If your CS team is flying without marketing air cover (and most are), you are handing the most influential post-sale touchpoint to someone with no marketing to work with.</li>
464</ul>
465<h2>When the calendar is wrong</h2>
466<p>The standard cadence is a starting point, not a plan. The best-run programs override the calendar with signals.</p>
467<p>A usage drop at day 45 should trigger an intervention that the standard cadence wouldn&rsquo;t deliver for another month. A spike in support tickets in week three means the onboarding success metrics are off. Product telemetry that shows a team stopped logging in after the first two weeks is not a customer success problem. It is a marketing problem: someone in the account decided the product wasn&rsquo;t worth their time, and nobody made the case.</p>
468<p>Companies that track behavioral signals (login frequency, feature adoption depth, support ticket patterns) and intervene based on what those signals say rather than what the calendar says see measurably better retention. The cadence tells you what to send when things are going well. The signals tell you when things aren&rsquo;t.</p>
469<h2>Committee turnover</h2>
470<p>The committee map you built to close the deal has a shelf life. People leave. New executives arrive. Each change is a risk event.</p>
471<p>When a champion leaves, you lose your internal salesperson. The replacement needs the value story from scratch: why the company bought, what the ROI has been, what expansion looks like. Marketing built that story once. It should not take a new champion three months of internal archaeology to reconstruct it.</p>
472<p>When a new VP arrives, they inherit a portfolio of vendor relationships they did not choose and do not yet understand. If you are not in front of that VP within the first 30 days with a value brief tailored to their priorities (not the old sponsor&rsquo;s priorities), someone else will be. New executives consolidate. Your job is to be the platform they consolidate around, not the one they cut.</p>
473<p>When procurement rotates, the compliance and security story resets. The answers your team provided during the original evaluation are buried in someone else&rsquo;s email. Surface them proactively or answer them again from scratch under less favorable conditions.</p>
474<h2>Healthy accounts vs. at-risk accounts</h2>
475<p>The standard cadence assumes a healthy account. For healthy accounts, the program focuses forward: expansion case studies, multi-threaded relationships across the committee, and proactive value briefs timed to the budget cycle.</p>
476<p>At-risk accounts need a different playbook:</p>
477<ul>
478<li><strong>Accelerated value proof:</strong> pull forward the ROI report and get it in front of the budget owner immediately, not at the scheduled 90-day mark.</li>
479<li><strong>Executive-to-executive engagement:</strong> your leadership talks to their leadership, because the relationship between a CSM and a day-to-day user is not enough to override a VP who wants to cut the line item.</li>
480<li><strong>Competitor displacement defense:</strong> if someone is shopping alternatives (and if they are at risk, they usually are), your champion needs the competitive argument before the challenger makes theirs.</li>
481</ul>
482<p>The at-risk cadence compresses timelines and elevates the seniority of every touchpoint. If you&rsquo;re running the standard playbook on an account that&rsquo;s already in trouble, you are doing the right things too late.</p>
483<h2>Run by end of day</h2>
484<ul>
485<li>When was the last time marketing sent anything to an existing customer that was not a product update or a newsletter? If the answer is never, that is the gap.</li>
486<li>
486Can your customer success team point to a specific piece of marketing material they used in the last renewal or expansion conversation? If they are writing their own, you have a quality control problem on top of a coverage one.</li>
487<li>Pull up the most recent QBR deck for your biggest account. Does it contain ROI metrics tied to the customer&rsquo;s stated goals from the original sale, or is it feature-usage charts and support ticket counts?</li>
488</ul>
489<p>Your message got you into the account. Whether it keeps working in every room after that is the difference between a contract that churns and one that compounds.</p>
490
491<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Work With Us</p><h3 class="blog-inline-cta-title">Build the messaging that keeps selling after the contract is signed</h3><p class="blog-inline-cta-body">If your post-sale program is a newsletter and a QBR, you are leaving NRR on the table. Start with a <a href="/products/sprint">Brand and Messaging Sprint</a>, or <a href="/contact">talk to us</a> about building the full system.</p></div>`,contentBlocks:[{type:"cadence-timeline"}]},{id:"6007",image:_P,editorialGrade:!0,imageAlt:"Black and white editorial photo of two professional colleagues with coffee cups talking in a modern office break room, illustrating the informal conversations where enterprise B2B vendor recommendations actually get made",title:"How Enterprise B2B Decisions Are Made (And How to Influence Them)",slug:"how-enterprise-b2b-decisions-are-made",category:["Enterprise Strategy","Behavioral Science"],seoTitle:"How Enterprise B2B Decisions Are Made",seoDescription:"Enterprise deals are decided in private conversations long before the RFP arrives. Learn the 5 things to have in place before the buying cycle starts.",excerpt:"Most enterprise deals are won and lost in conversations you will never see, between people who trust each other, where one of them tries to recall something about your company and either can or cannot. Here is what you need in place long before the buying cycle begins.",readTime:8,author:"Shira Abel",datePublished:"2026-05-27",dateModified:"2026-05-27",featured:!0,globalFeaturedOrder:1,tldr:"Enterprise B2B deals are decided in private conversations before the RFP exists. To become the vendor that gets named in those rooms, you need five things: a product that does what you say it does, a brand that holds up in the field, marketing that reaches buyers long before sales does, consistency across every touchpoint, and time. The dark funnel is a reputation problem, not a measurement problem. The only thing that shows up in the room you cannot see is what you already built into the market.",faqSchema:[{question:"What is the dark funnel in enterprise B2B?",answer:"The dark funnel is the set of conversations, recommendations, and private channels where buyers form opinions about vendors before any tracked interaction. It is not a measurement problem; it is a reputation problem. The only things that show up in those rooms are the things you already built into the market."},{question:"How do enterprise B2B buying decisions actually get made?",answer:"Most enterprise decisions are made before due diligence begins. A trusted colleague recommends a vendor in a private channel, the buying committee narrows the shortlist based on what they can recall, and the formal process confirms a choice that was effectively made earlier. Forrester finds 82% of B2B buyers trust internal coworkers and 79% trust vendors they already work with. Both sit outside your marketing team's control."},{question:"How does positioning affect AI search results?",answer:"LLMs do not fix unclear positioning; they expose it. When a buyer asks ChatGPT, Gemini, Perplexity or Claude about your category, the tool compresses your content into a few sentences. Specific, named claims about specific, named problems survive the compression. Vague category language disappears."},{question:"Why does marketing consistency matter more than a single big campaign?",answer:"Three psychological effects compound: the mere exposure effect builds familiarity, the serial-position effect keeps recent memories vivid, and the availability heuristic converts familiarity into a decision. Consistent presence across every surface (website, reviews, sales deck, founder content) feeds all three. A single brilliant campaign two years ago feeds none of them."}],content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>Becoming the known, trusted, chosen brand in enterprise B2B requires <strong>five things</strong>: a product that delivers, a brand that holds up in the field, marketing that reaches buyers before sales does, consistency across every touchpoint, and time.</li><li>Most enterprise deals are decided in <strong>private conversations</strong> long before the RFP arrives. The dark funnel is a reputation problem, not a measurement problem.</li><li>Forrester's Buyers' Journey shows the <strong>highest-trust sources</strong> in a buying decision are coworkers (82%) and existing vendors (79%). Both sit outside your marketing team's control.</li><li>Specificity survives compression. Vagueness does not. Whether the summarizer is a colleague at dinner or an LLM, your <strong>positioning either holds up or disappears</strong>.</li><li>Three effects compound to put you in the room: <strong>mere exposure</strong> builds familiarity, <strong>recency</strong> keeps it fresh, and <strong>availability</strong> converts it into a decision. There is no partial credit.</li></ul></div>
492<p><em>The 5 things you need to have long before the buying cycle begins.</em></p>
493<p>Becoming the trusted, known brand takes five things:</p>
494<ol>
495<li>A product that does what you say it does.</li>
496<li>A brand that fulfills its promise in the field, not just in the deck.</li>
497<li>Strong marketing that reaches buyers long before sales does.</li>
498<li>Consistency across every touchpoint and conversation.</li>
499<li>Time. Especially across multi-quarter enterprise buying cycles.</li>
500</ol>
501<p>People generally underestimate the importance of 4 and 5.</p>
502<h2>Why There Are No Shortcuts in Enterprise Sales Cycles</h2>
503<p>I cannot count how many companies that sell to enterprises who have come to me seeking shortcuts. There are none for high-value deals, period. And anyone telling you they have a shortcut is lying.</p>
504<p>Which means companies that sell to enterprises have to be better planners. It means going to events and working on making meetings with target accounts even when you are still selling to your internal warm networks. It means building content and pipeline long before you need it because it takes longer to convert and the companies in the pipe right now will not become customers or revenue for another year.</p>
505<blockquote class="blog-pullquote"><p>
505Over time, you become known, then trusted, then chosen.</p></blockquote>
506<p>It doesn&rsquo;t change that deals are often decided before the RFP arrives. Somewhere in a private Teams channel, a head of engineering had asked a former colleague for a recommendation. The colleague named a competitor. Not because the competitor had better technology, but because they came to mind first, were considered a good option, and trustworthy. She had read something they published six months earlier, and it stuck with her. The losing vendor had a stronger product, but didn&rsquo;t put much into marketing. They expected their sales team to explain it all with a pitch deck full of proof points. Nobody in the Teams channel even thought of them.</p>
507<p>That is how most enterprise deals are won and lost. Most of the time, the company knows which vendor it wants before due diligence even begins. Decisions are made in private conversations between people who trust each other, where one of them tries to recall something about your company and either can or cannot.</p>
508<p>Think about what showed up in that private conversation on your behalf. It wasn&rsquo;t your sales team or your carefully sequenced nurture campaign. Instead what stayed was an impression your content left in someone&rsquo;s head six months ago. That was your entire representation in the room where the decision got made. The room you did not know about.</p>
509<p>The dark funnel has always existed. It&rsquo;s as simple as asking colleagues for recommendations. It&rsquo;s usually framed as a measurement problem. How do we track what we cannot see? How do we attribute revenue to channels we cannot instrument? That framing is wrong. You will never instrument two people chatting at a conference. You will never put a tracking pixel on a dinner conversation. The dark funnel is not a data problem. It is a reputation problem.</p>
510<p>The only things that show up in that room are the things you already built.</p>
511<h2>What the room runs on</h2>
512<p>I have spent decades watching companies lose deals they should have won. The pattern is always the same. The product is strong. The team is capable. And when you ask five people in the building what the company does differently, you get five different vague answers that aren&rsquo;t especially good and don&rsquo;t hold up to scrutiny.</p>
513<p>This is a <a href="/resources/scale-framework">positioning problem</a>, and it is fatal in the dark funnel, because the dark funnel runs on one thing: the words other people use to describe you when you are not there.</p>
514<p>If you have a sentence that is specific and true and repeatable, you get on shortlists you never applied for. If it does not exist, if the best anyone can manage is &ldquo;I think they do something with data integration,&rdquo; you lose to the competitor who gave the market a sentence that stuck.</p>
515<table><thead><tr><th>Type</th><th>Example sentence</th></tr></thead><tbody><tr><td><strong>Specific</strong></td><td>&ldquo;We cut onboarding time for B2B SaaS sales teams in half.&rdquo;</td></tr><tr><td><strong>Vague</strong></td><td>&ldquo;We help companies onboard better.&rdquo;</td></tr></tbody></table>
516<p><a href="https://www.forrester.com/blogs/b2b-buyers-rate-their-most-trusted-information-sources/" target="_blank" rel="noopener noreferrer">Forrester&rsquo;s Buyers&rsquo; Journey</a> confirms the mechanic. Eighty-two percent of B2B buyers trust coworkers and management inside their own organization. Seventy-nine percent trust vendors they already work with. Industry peers and independent analysts sit between 66% and 72%. The highest-trust sources in a buying decision are the ones farthest from your marketing team&rsquo;s control.</p>
517<h2>Content that survives compression</h2>
518<p>A lot of B2B content is built to collect an email address. It sits behind a gate, creates an MQL, and someone follows up. The model is helpful if the form fill is near the start of the buyer&rsquo;s journey but it&rsquo;s not. It&rsquo;s typically at the end when the decision is close to done. The content that shaped the buyer&rsquo;s thinking was the blog post a colleague sent in a DM, the podcast episode on a commute, the article that showed up when they asked an LLM what mattered in your category.</p>
519<p>That last channel is the newest and the most brutal. Forrester&rsquo;s 2025 Buyers&rsquo; Journey Survey found that generative AI tools were the single most cited meaningful interaction type buyers used for vendor research. When an LLM answers a buyer&rsquo;s question about your category, it pulls from whatever content it can find and compresses it into a few sentences. If your content is vague, the compression loses you entirely. If your content makes specific, named claims about specific, named problems, the compression preserves your point. The same principle applies when a human summarizes you to a colleague over drinks. Specificity survives compression. Vagueness does not.</p>
520<p>Content that works in the dark funnel makes a clear-cut claim about a real problem. It is useful without requiring a sales conversation to complete the thought. And it is structured clearly enough that whether a person or a machine summarizes it, the summary still sounds like you.</p>
521<h2>Marketing makes sales easier</h2>
522<p>The <a href="/services/marketing-strategy">marketing</a> you&rsquo;re not doing today is the revenue you&rsquo;re not closing later. People forget you when you&rsquo;re not in front of them, and your <a href="/products/revenue-enablement">Account Executive</a> cannot be in all of the places all of the time.</p>
523<p>There&rsquo;s a reason the vendor in the Teams channel story came to mind first. She had seen their content a few months earlier, and it was written well enough to be memorable. She probably skimmed 
523it on her phone between meetings. And when the question came up, that company felt familiar, and familiar felt safe. Psychologists call this the <a href="https://www.ebsco.com/research-starters/psychology/mere-exposure-effect" target="_blank" rel="noopener noreferrer">mere exposure effect</a>: repeated contact with a stimulus increases liking, even when the person isn&rsquo;t paying conscious attention. It doesn&rsquo;t require engagement. It requires presence.</p>
524<p>But presence alone isn&rsquo;t enough if it happened two years ago. Memory decays, and it decays unevenly. The <a href="https://www.ebsco.com/research-starters/health-and-medicine/recency-effects" target="_blank" rel="noopener noreferrer">serial-position effect</a> shows that people recall what they encountered most recently far better than what came in the middle. Your brilliant LinkedIn post from 18 months ago is gone. The competitor&rsquo;s one from last week is what sticks. This is why consistency matters more than any single campaign, no matter how good it is. You are not building toward one moment of brilliance. You are trying to be the most recent, credible thing someone saw when the question comes up.</p>
525<p>And when the question does come up, people don&rsquo;t run a thorough evaluation. They go with what comes to mind. Tversky and Kahneman&rsquo;s work on the <a href="https://www.sciencedirect.com/science/article/abs/pii/0010028573900339" target="_blank" rel="noopener noreferrer">availability heuristic</a> showed that people judge probability and importance based on how easily examples surface in memory. If your company name comes up fast, you feel like the right answer. If it doesn&rsquo;t, you don&rsquo;t exist in that conversation. It has nothing to do with how good you are. You need to be in the buyer&rsquo;s head at the moment it mattered.</p>
526<p>These three effects compound. Repeated exposure builds familiarity. Recency keeps that familiarity fresh. And availability converts familiarity into a decision. Your <a href="/services/enterprise-strategy">marketing program</a> either feeds all three or it feeds none of them. There is no partial credit.</p>
527<h3>The only question that matters</h3>
528<p>There is a version of your company that circulates in conversations you will never see. It is not your brand guidelines. It is not your boilerplate. It is the three-sentence version that a real person would say to another real person when asked, &ldquo;Hey, what companies would you recommend for XYZ?&rdquo;</p>
529<p>No amount of attribution modeling fixes that sentence. No dashboard tells you that a buying committee met last Tuesday and nobody thought of you.</p>
530<p>So the question is not how to measure the dark funnel. The question is what you sent into it. What <a href="/products/sprint">messaging</a> did you give the market to use? What content did you build that is specific enough to survive six months in someone&rsquo;s memory and a two-sentence summary in an LLM response?</p>
531<p>Get those right, and the room takes care of itself.</p>
532<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Work With Us</p><h3 class="blog-inline-cta-title">Build the version of your company that shows up in the room</h3><p class="blog-inline-cta-body">If your positioning needs to survive six months in someone&rsquo;s memory and a two-sentence LLM summary, that is what we do. Start with a <a href="/products/sprint">Brand and Messaging Sprint</a>, or <a href="/contact">talk to us</a> about the bigger picture.</p></div>`},{id:"6005",image:yP,title:"The ABM Marketing Funnel Became a Martini Pipeline",slug:"martini-pipeline-abm-marketing-funnel-became",category:"Enterprise Marketing",seoTitle:"The Martini Pipeline: The ABM Funnel After LLMs",seoDescription:"The B2B funnel is no longer a bow-tie. It is a martini pipeline: wide at the top, narrow through LLM-assisted validation, and wide again after the win.",imageAlt:"Comparison infographic showing the pre-LLM ABM bow-tie funnel next to the post-LLM martini pipeline funnel, with ground-truth metrics: 95% day-one shortlist, 61% first contact, 94% use LLMs",excerpt:"For years, enterprise B2B teams have talked about the funnel like it was something we could see. Then ABM gave us the bow-tie. Now, in the post-LLM world, the funnel has changed shape again. It is not a bow-tie anymore. It is a martini pipeline: wide at the top, skinny through LLM-assisted validation, and wide again after the win.",readTime:9,author:"Shira Abel",featured:!0,globalFeaturedOrder:3,tldr:"The enterprise B2B funnel is no longer the ABM bow-tie. Buyers now start with requirements (not awareness), use LLMs to focus and validate, and arrive at first contact at 61% of the journey already knowing the category. 95% of deals are won by a vendor on the buyer's day-one shortlist, which means messaging, positioning, and consistency across every surface (website, reviews, sales deck, founder content) decide whether you are in the deal before anyone on your team knows there is one.",dateModified:"2026-04-26",content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>The post-LLM enterprise funnel is shaped like a martini glass: wide at the top, narrow almost immediately, skinny through validation, and wide again after the win.</li><li>The new buyer journey is requirements, focus, engagement, validation, decision. Instead of awareness, engagement, consideration, evaluation, decision.</li><li>95% of deals are won by a vendor on the buyer's day-one shortlist (6sense 2025). Not on that list? You are not in the deal.</li><li>First contact now happens at 61% of the buyer journey, pulled forward by 6 to 7 weeks. By the time sales is in the room, the buyer is validating, not learning.</li><li>LLMs expose unclear positioning quickly, because they access everything. Inconsistency across your website, reviews, sales deck, and founder content widens the perception gap and gets you eliminated.</li></ul></div>
533<p>For years, enterprise B2B teams have talked about the funnel like it was something we could see. A buyer became aware of a problem, engaged with content, considered vendors, evaluated options, made a decision, and then moved into expansion after the win. In reality it was never that clean, but it gave us a useful model. Then Account-Based Marketing came along and we started using the bow-tie funnel, because the sale didn&rsquo;t end at closed-won. Land-and-expand became the new norm (sell the initial proof of concept for 50k and expand the account to be 500k+). The right side of the funnel mattered too: adoption, retention, upsell, expansion, and all the lovely things that happen when a customer is successful.</p>
534<p>That model matters. Expansion is critical. Customer success is needed for highly technical products and helps expand accounts. None of that has disappeared.</p>
535<p>What has changed is the left side of the funnel.</p>
536<p>The top has compressed. The buyer is doing more work earlier, faster, and in places your team often cannot see yet. They are not slowly wandering through awareness, consideration, and evaluation the way your dashboard wants them to. They are getting together, figuring out what they need, asking LLMs and trusted communities for help, <a href="/resources/blog/your-buyer-researched-you-before-the-call" class="text-[#316263] font-bold underline">checking reviews and analysts</a>, and narrowing the field before most vendors know there is even a deal.</p>
537<p>
537When I first sketched the new funnel, I called it a champagne flute. Admittedly, I do not drink much. A colleague, who does drink occasionally, very kindly informed me that what I was describing was actually a martini glass. They were right. The new enterprise funnel is not really a bow-tie anymore. It is more like a martini glass: wide at the very top, narrow almost immediately, skinny through validation, and then wide again after the win.</p>
538<figure class="blog-figure"><img src="/assets/martini-pipeline-infographic.jpeg" alt="Comparison infographic showing the pre-LLM ABM bow-tie funnel next to the post-LLM martini pipeline funnel, with ground-truth metrics: 95% day-one shortlist, 61% first contact, 94% use LLMs" /><figcaption>The funnel is changing shape: from the ABM bow-tie to the post-LLM martini pipeline. Data: 6sense 2025, Forrester 2025.</figcaption></figure>
539<h2>The buyer starts with requirements now</h2>
540<p>That change matters because it shows where the decision pressure has moved.</p>
541<p>The old funnel started with awareness. The new one starts with requirements.</p>
542<p>A big difference.</p>
543<p>Buyers are not beginning by asking, &ldquo;Who should we talk to?&rdquo; They are beginning by asking, &ldquo;What do we need?&rdquo; The committee, whether formal or informal, starts sorting out requirements. What:</p>
544<ul>
545<li>problem are we trying to solve?</li>
546<li>matters most?</li>
547<li>are the must-have features?</li>
548<li>risk are we trying to avoid?</li>
549<li>does success need to look like?</li>
550<li>did we try before?</li>
551<li>will legal care about?</li>
552<li>will finance push back on?</li>
553<li>will make the implementation team revolt?</li>
554</ul>
555<p>This is where LLMs become dangerous for companies with weak messaging.</p>
556<p>A buyer can now ask ChatGPT, Gemini, Perplexity, Claude, or whatever tool they prefer to help them structure the category. They can ask what matters in the buying decision, which vendors fit a specific use case, and what questions they should ask before buying. They can ask for comparisons, risks, alternatives, weaknesses, and implementation issues.</p>
557<p>That does not mean the LLM is making the decision for them. This would be a lazy take, and I do not think it is what is happening. Enterprise buyers are not simply typing, &ldquo;Who should buy?&rdquo; and then handing over a purchase order. High-ACV products are complex decisions made with committees, politics, risk, procurement, legal, IT, finance, internal champions, and people who have very strong opinions because they were burned by purchasing a similar tool three jobs ago.</p>
558<p>But LLMs are helping buyers get smarter faster.</p>
559<p>Which is the real change.</p>
560<h2>The shortlist forms before you see the buyer</h2>
561<p>According to <a href="https://6sense.com/report/b2b-buyer-experience-report/" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">6sense&rsquo;s 2025 B2B Buyer Experience Report</a>, 95% of deals are won by a vendor that was on the buyer&rsquo;s initial day-one shortlist. The report also says the shortlist is typically small, with buyers coming into the process already familiar with most of the vendors they will consider.</p>
562<p>Think about what that means.</p>
563<p>Not on the day-one consideration list? You are not in the deal.</p>
564<p>Yes, there is technically a chance you can break in later. But if 95% of deals are won by a vendor that was already on the initial shortlist, then being absent from that list gives you terrible odds. It is the business equivalent of showing up to the airport after the plane has boarded, the door has closed, and then wondering why your seat is gone.</p>
565<p>This is where a lot of companies are still operating from an outdated assumption. They think the game is getting the buyer to raise their hand. That matters, but the more important question is whether the buyer, or the LLM helping the buyer, understood you well enough to include you before the hand was ever raised.</p>
566<p>That is where <a href="/resources/blog/what-messaging-and-positioning-can-and-cannot-do" class="text-[#316263] font-bold underline">messaging and positioning</a> come in.</p>
567<h2>Your website matters before the buyer visits it</h2>
568<p>For a while, people acted like websites had become less important because buyers were not always visiting them early in the process. That was probably already wrong, but with LLMs it is even more wrong.</p>
569<p>Your website may be more important now because it feeds the systems buyers use before they talk to you.</p>
570<p>
570The buyer may not visit your homepage until later, but the LLM will likely have already read it, <a href="/resources/blog/seo-is-no-longer-enough-b2b-guide-to-aeo" class="text-[#316263] font-bold underline">summarized it</a>, compared it, and used it to decide whether you fit the requirements.</p>
571<p>This is the part that should make every founder and marketing leader sit up straight.</p>
572<p>If your homepage is vague, you will be summarized vaguely. If your product pages sound like everyone else&rsquo;s product pages, you will be placed in the generic pile. If your differentiators are buried under jargon, the LLM may not pull them forward. If your website says one thing, your G2 reviews say another, your sales deck says a third, and your founder&rsquo;s LinkedIn says something else entirely, you have a consistency problem.</p>
573<p>And consistency matters because buyers are looking for confidence. They are trying to reduce risk. They are trying to figure out if you are who you say you are.
574
575
576Yes, that's a lot of "ifs" and yet so often these are the exact problems a company has because they never took the time to get their positioning, messaging, and storytelling down.</p>
577<p>LLMs expose unclear positioning quickly, because they access everything.</p>
578<p>This is why your website is no longer just a validation asset. It is part of how you get interpreted before the visible sales process begins.</p>
579<h2>The new journey is requirements, focus, engagement, validation, decision</h2>
580<p>The post-LLM funnel is not &ldquo;awareness, engagement, consideration, evaluation, decision&rdquo; with an AI sticker slapped on top. The steps are different because the behavior is different.</p>
581<p>The buyer starts with requirements. They define what they need, what they cannot tolerate, and what would make a vendor a fit.</p>
582<p>Then they move into focus. This is where the list gets narrowed quickly. The group figures out which list of 4 - 5 companies they are moving forward with. Typically there&rsquo;s already a favorite that the champion has already either reviewed or worked with previously. This list is built through LLM research and relationships. One or two wild cards might be in this mix, a newcomer that doesn&rsquo;t have a built reputation yet.</p>
583<p>Then comes engagement, but not in the old sense. This is not &ldquo;downloaded an eBook and now MQL scoring begins.&rdquo; This is focused engagement. They are looking deeply at that small group of vendors. They are not learning the category from scratch anymore. They are checking whether the vendors on the list hold up. The website gets reviewed, the materials get downloaded.</p>
584<p>Then comes validation. This is the skinny part of the martini glass.</p>
585<p>The buyer checks G2. They check Gartner, Forrester, and other analyst or expert sources if those matter in the category. They ask peers. They go into think tanks like Pavilion or private community Slack groups like AI Marketers Guild and say, &ldquo;Who are you using for this? What do I need to know? What went wrong? Who looks better in the sales process than they are in implementation?&rdquo;</p>
586<p>This part matters because a reference from someone who has already worked with your company is one of the strongest forms of trust. The buyer does not just want to know whether your product can technically do the thing. They want to know what it will feel like to live with the decision.</p>
587<p>Which is a different question.</p>
588<p>It includes product, but it also includes implementation, customer success, support, pricing surprises, politics, internal adoption, and whether the champion will look smart six months from now.</p>
589<p>Only after that do they move into decision.</p>
590<p>And by the time they get there, things can close faster because the uncertainty has been reduced.</p>
591<h2>First contact is not as early as it looks</h2>
592<p>6sense reports that buyers are now contacting vendors at around 61% of the way through their journey, pulled forward by about six to seven weeks compared with the prior year. Source: <a href="https://6sense.com/report/b2b-buyer-experience-report/" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">6sense 2025 B2B Buyer Experience Report</a>.</p>
593<p>At first glance, that sounds like great news. Earlier contact! Sales gets in sooner! Everyone celebrate.</p>
594<p>Yeah, no.</p>
595<p>Earlier contact does not necessarily mean earlier decision-making. It may mean buyers are doing the early work faster. They have already defined requirements, narrowed the field, checked the obvious sources, asked the LLM follow-up questions, and built a point of view. Now they are reaching out to vendors to see if their favorite is as good as they think.</p>
596<p>That first conversation is validation.</p>
597<p>If your sales team treats the buyer like they are at the beginning of the journey, you will create friction immediately. They already know the category. They may know y
597our pricing range. They may know your competitors. They may know the complaints in your reviews. They may know which features matter and which ones are table stakes. They are not asking, &ldquo;What do you do?&rdquo; They are asking, &ldquo;Can you prove you are what we already think you are?&rdquo;</p>
598<p>That requires a different sales motion.</p>
599<h2>Buying committees make this even messier</h2>
600<p><a href="https://www.gartner.com/en/sales/insights/b2b-buying-journey" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">Gartner</a> has been showing for years that B2B buying is not a simple linear process and that buyers spend much of the journey doing independent research before talking to sales.</p>
601<p><a href="https://www.forrester.com/blogs/category/b2b-buying/" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">Forrester&rsquo;s latest research</a> says that the buying committee has &ldquo;an average of thirteen people inside the buyer&rsquo;s organization and nine from outside involved in making a purchase decision.&rdquo;</p>
602<p>This matters because the LLM does not just empower one buyer. It empowers everyone on the committee.</p>
603<p>Your champion is doing research. The CFO is doing research. The technical evaluator is doing research. Procurement is doing research. Someone in operations is asking a peer. Someone else is checking reviews. A former colleague is sending a voice memo. The person who will be stuck using the system every day is asking different questions than the executive buyer.</p>
604<p>Everyone can now come to the table with their own research.</p>
605<p>That can help you if your messaging is clear and consistent.</p>
606<p>It can hurt you badly if it is not. Inconsistency lowers trust.</p>
607<p>The buyer is not receiving one controlled narrative from your sales team. They are assembling a picture from multiple sources. Those sources do not line up? Your perception gap widens.</p>
608<p>And when there is a perception gap, people do what they always do. They default to risk avoidance.</p>
609<h2>This is a perception problem</h2>
610<p>I keep coming back to this because it is the thing most companies miss.</p>
611<p>This is not just a traffic problem. It is not just an AEO problem. It is not just an AI visibility problem. It is not just &ldquo;we need more content.&rdquo;</p>
612<p>It is a perception problem.</p>
613<p>The buyer, the committee, the LLM, the analyst, the review site, the peer recommendation, and the sales conversation all need to add up to a coherent picture. That does not happen by accident. It happens when messaging and positioning are clear enough to travel.</p>
614<p>Many companies have an understanding problem.</p>
615<p>They cannot explain who they are for, what problem they solve, why they are different, what category they belong in, and why a buyer should trust them now. So the market fills in the gaps.</p>
616
617<p>And it is even more dangerous when the first pass is happening through an LLM.</p>
618<h2>What companies need to fix</h2>
619<p>The practical takeaway is not &ldquo;publish 200 AI-generated blog posts.&rdquo; Please for the love of all things, do not do that. You will get filtered out.</p>
620<p>The first thing to fix is your messaging. Your website needs to clearly explain who you are for, what problem you solve, what situation makes you the right fit, and why you are different from the alternatives. In clear language.</p>
621<p>The second thing to fix is your positioning. You cannot be everything to everyone. LLMs, like buyers, need context. Refusing to make strategic choices makes you harder to understand. Which means you are easier to exclude.</p>
622<p>The third thing to fix is your proof. Claims are not enough. You need customer stories, review presence, analyst references, comparison content, implementation proof, and clear examples of where you win. Social proof has always mattered in B2B, but now it is part of the data layer that helps buyers and LLMs decide whether you belong in the conversation.</p>
623<p>The fourth thing to fix is consistency. Your homepage, product pages, sales deck, founder content, review site listings, and case studies should not sound like they were written by five different c
623ompanies. Mixed messages create doubt. Doubt slows deals. In a compressed funnel, doubt can remove you before you ever get a chance to explain.</p>
624<h2>At the End of the Day</h2>
625<p>The funnel did not disappear.</p>
626<p>It moved upstream.</p>
627<p>Buyers are buying. Committees are deciding. Sales matters. Expansion matters. Relationships matter. Peer trust matters. Analyst and review sites matter.</p>
628<p>But the first meaningful filter now happens earlier than most teams are built for.</p>
629<p>The buyer starts with requirements. LLMs help them focus. Communities and third-party sources help them validate. Sales enters later than your process wants to admit, even when first contact technically happens earlier than before.</p>
630<p>That means your messaging and positioning have to work before you are in the room.</p>
631<p>Because by the time you get the meeting, the buyer has decided what box you are in.</p>
632<p>The question is whether that box helps you win.</p>
633<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Recommended Next Step</p><h3>Brand &amp; Messaging Sprint</h3><p>If your positioning is not earning you a spot on the day-one shortlist, the rest of the funnel cannot save you. Hunter &amp; Bard&rsquo;s two-week Sprint rebuilds the messaging architecture your buyers, their committees, and the LLMs they rely on need to put you in the deal before sales ever gets a meeting.</p><a href="/products/sprint" class="blog-inline-cta-link">Explore the Sprint &rarr;</a></div>
634<h2>Sources</h2>
635<ul>
636<li><a href="https://6sense.com/report/b2b-buyer-experience-report/" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">6sense, 2025 B2B Buyer Experience Report</a></li>
637<li><a href="https://www.gartner.com/en/sales/insights/b2b-buying-journey" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">Gartner, The B2B Buying Journey</a></li>
638<li><a href="https://www.forrester.com/blogs/category/b2b-buying/" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">Forrester, B2B buying research and insights</a></li>
639<li><a href="https://www.trustradius.com/vendor-blog/b2b-buying-disconnect-report" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">TrustRadius, B2B Buying Disconnect research</a></li>
640<li><a href="https://www.g2.com/research" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">G2, B2B software buyer research</a></li>
641</ul>`,faqSchema:[{question:"What is the martini pipeline funnel?",answer:"The martini pipeline is the post-LLM shape of the enterprise B2B funnel. It is wide at the very top (where buyers define requirements), narrow almost immediately as LLMs surface and prioritize the most relevant vendors, skinny through validation, and then wide again after the win during expansion. It replaces the ABM bow-tie because the left side of the funnel has compressed and the buyer is doing more work earlier and faster, often before vendors know there is even a deal."},{question:"What replaced awareness at the top of the new B2B funnel?",answer:"Requirements replaced awareness. Buyers are not beginning by asking 'Who should we talk to?' They are beginning by asking 'What do we need?' The committee sorts out the problem, the must-have features, the risk to avoid, what success needs to look like, and what legal, finance, and the implementation team will care about, often with help from LLMs, before any vendor is contacted."},{question:"What is the day-one shortlist and why does it matter?",answer:"According to 6sense's 2025 B2B Buyer Experience Report, 95% of deals are won by a vendor that was already on the buyer's initial day-one shortlist. The shortlist is typically small and forms before vendors are contacted. If you are not on the day-one shortlist, you are not just behind, you are not in the deal."},{question:"When does first contact happen in the post-LLM B2B buyer journey?",answer:"6sense reports that buyers now contact vendors at around 61% of the way through their journey, pulled forward by about six to seven weeks compared with the prior year. Earlier contact does not mean earlier decision-making. The buyer has already defined requirements, narrowed the field, and built a point of view. The first conversation is validation, not learning."},{question:"Why do LLMs make B2B messaging and positioning more important, not less?",answer:"LLMs do not fix unclear positioning. They expose it. If your homepage is vague, you will be summarized vaguely. If your product pages sound like everyone else's, you will be placed in the generic pile. If your website, G2 reviews, sales deck, and founder content say different things, the perception gap widens and risk-averse buyers eliminate you. The website is now part of how you get interpreted before the visible sales process begins."}]},{id:"6010",image:TP,imagePosition:"center",editorialGrade:!0,title:"Founder Led Sales: Why You Close Deals and Your Sales Hire Can't",slug:"founder-led-sales-why-first-sales-hire-fails",category:"Enterprise Strategy",seoTitle:"Founder Led Sales: Why Your First Sales Hire Fails",seoDescription:"A diagnostic guide for technical founders on why first sales hires fail and how to translate founder instinct into a repeatable enterprise sales process.",imageAlt:"Two empty wooden chairs facing each other in a dimly lit modern boardroom with deep teal walls, representing the absence of the founder's authority in a first sales hire's meetings",excerpt:"Your first sales hire will probably fail. SaaStr puts the number above 70% for early sales hires at venture-backed startups, and it climbs when the hire happens before the company has a repeatable sales process.",readTime:8,author:"Shira Abel",featured:!0,globalFeaturedOrder:1,tldr:"Most first sales hires at venture-backed companies fail, but not for the reason founders think. Founders close deals through 'grace': pre-existing relationships and the authority to make promises no employee can make. Enterprise hires fail because they lose the brand infrastru
641cture they relied on at their last job and inherit a deck built for engineers. The fix isn't a better salesperson. It's translating the founder's process into positioning, messaging, and playbooks a non-founder can run, before the first hire starts.",dateModified:"2026-05-12",content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>Over 70% of early sales hires at venture-backed companies fail, and the failure rate climbs when the hire happens before there is a repeatable sales process.</li><li>Founders close deals through 'grace': pre-existing relationships, technical authority, and the ability to make promises no employee can make.</li><li>Enterprise hires fail at small companies because they lose the brand infrastructure (marketing, case studies, credibility) they relied on at their last job.</li><li>The second hire usually succeeds because awareness has accumulated, the first hire reshaped the materials, and the second hire self-selected. </li><li>Reward speed to disqualification in the first 90 days. A fast 'no' protects time, the one resource that does not come back.</li><li>The fix is not a better salesperson. It is creating the <a href="/resources/blog/what-messaging-and-positioning-can-and-cannot-do" class="text-[#316263] font-bold underline">marketing tools that sales person needs</a> to succeed, before they start.</li></ul></div>
642<p><em>A guide for technical, high annual contract value (ACV), founders making their first sales hire</em></p>
643<p>Your first sales hire will probably fail. <a href="https://www.saastr.com/why-your-first-sales-rep-may-fail/" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">SaaStr puts the number above 70% for early sales hires at venture-backed startups</a>, and it climbs when the hire happens before the company has a repeatable sales process.</p>
644<p>That statistic doesn't surprise anyone who's lived through it. What surprises them is the reason. Most founders who've lost a first sales hire will tell you they hired the wrong person. Occasionally they'll say the market wasn't ready. Almost none of them will say the problem was them.</p>
645<p>It was.</p>
646<h2>You got in on a handshake, not a pitch</h2>
647<p>Think about how you closed your first ten customers. Not the pitch, the path.</p>
648<p>Most likely it was through your former colleague. Someone you sat next to at a conference and ended up in a two-hour conversation with. An investor who made an intro because they believed in what you were building. A friend of a friend who happened to run procurement at exactly the right company.</p>
649<p>You got in the door thanks to your relationships. Every single time. And those relationships gave you something a salesperson will never have: grace. The prospect already trusted you before the meeting started. They sat through the confusing slide. They asked clarifying questions instead of checking out. They took the second meeting because they liked you, not because your deck convinced them.</p>
650<p>When they asked about a feature you didn't have yet, you said "we're building that next quarter" and they believed you, because you're the one building it. When they got nervous about buying from a ten-person company, your presence in the room was the reassurance. The CEO is here. This is real.</p>
651<p>That's not selling a product. That's selling <em>you</em>. Your authority and your ability to make promises no employee can make.</p>
652<p>Now imagine stripping all of that away and handing the job to a stranger with a CRM login.</p>
653<h2>The deck you handed them was never doing the work</h2>
654<p>Pull up your sales deck. Try looking at it the way a non-engineer would.</p>
655<p>Most likely, there are too many words on every slide. Technical diagrams that make perfect sense to you and zero sense to a VP of operations who signs purchase orders. Acronyms you stopped noticing two years ago. A product architecture slide that exists because <em>you</em> think it's impressive, not because you're certain it helps move a deal forward.</p>
656<p>You never noticed any of this, because when you present that deck, you talk around the slides. You've learned to watch the room and skip the ones that aren't landing. You pivot mid-sentence when you sense hesitation. You translate your own engineering language into business language on the fly, without thinking about it.</p>
657<p>The deck was never doing the work. You were. And then you gave that deck to a salesperson and called 
657it onboarding.</p>
658<h2>Your hire lost the same thing you did</h2>
659<p>Look at the hire you made.</p>
660<p>Enterprise background. Big brand on the resume. Ten years of closing deals in your industry. Great connections. You thought: this person already knows how to sell. They just need my product.</p>
661<p>They thought: great product, smart founder, and I can bring my rolodex. Easy fit.</p>
662<p>Both wrong. Same reason.</p>
663<p>At the enterprise company, your salesperson had infrastructure you've never thought about. When they called a VP, the VP took the meeting because of the <em>company name</em>, not the rep's name. They had a product marketer who built the narrative. A sales engineer on every technical call. Case studies and reference customers on speed dial. A whole infrastructure designed to make the rep look credible before they opened their mouth.</p>
664<p>At your startup, they have a pitch deck built for engineers and a founder who said "go sell."</p>
665<p>You lost the CEO's authority. They lost the brand. Neither of you realized it. So when the pipeline didn't materialize, you blamed each other. <a href="https://www.forrester.com/blogs/category/b2b-buying/" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">Forrester's 2025 B2B Trust research</a> found buyers trust their own coworkers (82%) and existing vendors (79%) most. Salespeople from new vendors rank near the bottom, just above social media influencers. Your rep isn't competing with your competitor's rep. They're competing with the <a href="/resources/blog/your-buyer-researched-you-before-the-call" class="text-[#316263] font-bold underline">buyer's preference to talk to literally anyone else</a>. They have Google. They have peer networks. They have AI. The bar for what earns a meeting is higher than it was five years ago, and "Hi, I'm calling from a company you've never heard of" doesn't clear it.</p>
666<h2>The second hire works. Not for the reason you think.</h2>
667<p>The rep goes back to work in an enterprise within a year. The founder hires again. This time someone who's "worked with startups before." The second hire closes deals. The founder thinks: I just needed to find the right person.</p>
668<p>Yeah, no. Three things changed while nobody was paying attention.</p>
669<p>The company has been around a year longer. A few people in the market have heard of it. Not many. Enough. A low level of awareness is a lot better than none. That first salesperson, during their year of struggling, built things. Adjusted the deck. Wrote outbound emails that got replies. Figured out which objections came up on every call and started answering them preemptively. The materials are not perfect, but they've been reshaped by someone who is not the founder, for an audience that is not engineers. And the second hire, the startup-experienced one, self-selected. They evaluated the company before accepting the offer. They wouldn't have taken the job if they didn't believe they could rep it.</p>
670<p>The second hire is standing on the foundation that the first hire's year of pain accidentally built. The founder has no reason to ever connect those dots.</p>
671<h2>The prospect's real objection is not your price</h2>
672<p>Your salesperson picks up the phone. The person on the other end has never heard of your company.</p>
673<p>Their first thought is not "what does this product do?"</p>
674<p>It's: "Why would I talk to you? I have no idea who you are. If you were good, I would have heard of you."</p>
675<p>Dismissed. Before features or pricing. Before the deck is ever opened. The prospect doesn't evaluate the product, because the company doesn't exist in their world yet.</p>
676<p>This is the part that has to be solved before anyone is hired. Positioning. Messaging. The story of who this company is and why it exists. Build some awareness. Strong enough to create recognition before the first call, or at minimum, credible enough that a cold outreach doesn't get instantly deleted.</p>
677<h2>If you can only hire one, stay close</h2>
678<p>The ideal first move is two salespeople. Same materials, same market, same <a href="/resources/blog/the-18-month-tax" class="text-[#316263] font-bold underline">ramp</a>. One rep is an experiment with no control group. If that person fails, you cannot tell whether it was the person, the process, the materials, or the market. Two gives you data.</p>
679<p>Most early-stage budgets don't allow for two. If the budget only stretches to one, stay close to the deals. Not to close them. To watch. Sit in on calls. Read the email threads. Pay attention to where conversations die. The job is diagnostic: figure out whether deals are stalling because of the salesperson or because of the positioning, the materials, or the fact that nobody's heard of you yet.</p>
680<p>Founders who skip the diagnostic work spend a year guessing. Then they fire the rep and start over with the same broken system.</p>
681<p>One more thing. Don't put the first hire on a standard commission plan with a quota from day one. The first salesperson is not a closer. They are there to find out whether the sales process works without the founder in the room. Tying half their comp to a number they can't hit because the process hasn't been proven yet produces either desperate discounting or a resignation letter.</p>
682<p>First 90 days: pay them to learn. Reward speed to disqualification. A fast "no" protects the one resource that doesn't come back. Time.</p>
683<h2>The work that should happen first</h2>
684<p>The pattern repeats so consistently that when described to a room full of technical founders, the room goes quiet. Every time. Different c
684ompanies, different products. Same arc. Same ending.</p>
685<p>The fix is not finding a better salesperson. It's translating how the founder sells. The instinct and the trust they build without thinking about it into positioning, messaging, and a narrative that works when the founder is not in the room. It's building playbooks a non-founder can run with. And building a marketing plan so the company has a presence in the market before the new hire starts dialing.</p>
686<p>Most founders don't do this before the first hire. What usually happens: the founder realizes the website is actively hurting deals, or the new salesperson needs more than what exists, or a VC looks at the situation and tells them to get help.</p>
687<p>By then, the company has already lost a year. Sometimes more.</p>
688<p>The work is the same whenever you do it. The cost is not.</p>
689<p>The problem was never the salesperson.</p>
690<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Recommended Next Step</p><h3>Brand &amp; Messaging Sprint</h3><p>The Founder Instinct Translation closes the Sales Infrastructure Gap before your first sales hire ever starts dialing. Hunter &amp; Bard's two-week Sprint turns the trust and authority you build in the room into positioning, messaging, and playbooks a non-founder can run.</p><a href="/products/sprint" class="blog-inline-cta-link">Explore the Sprint &rarr;</a></div>`,faqSchema:[{question:"Why do first sales hires at startups fail?",answer:"SaaStr reports over 70% of early sales hires at venture-backed companies fail, and the rate climbs when the hire happens before there is a repeatable sales process. Most fail because the company has no repeatable process yet and the hire lacks the 'grace' (pre-existing trust and authority) the founder used to close deals."},{question:"What is founder-led sales?",answer:"Founder-led sales is selling that closes through the founder's pre-existing relationships, technical authority, and ability to make commitments no employee can make. Prospects sit through confusing slides, take a second meeting, and trust roadmap promises because the person making them is also building the product."},{question:"Why does an enterprise sales hire often fail at a small company?",answer:"At their previous enterprise employer, the rep had brand infrastructure: a known company name, product marketing, sales engineers, case studies, and reference customers. At a small company that infrastru
690cture does not exist, so the rep loses the credibility that opened doors for them while the founder loses the CEO authority that closed the deals."},{question:"Why does the second sales hire usually succeed?",answer:"Three things changed: a year of accumulated low-level market awareness, materials reshaped by the first hire for a non-engineer audience, and a second hire who self-selected by evaluating the company before accepting the offer. The second hire is standing on the foundation the first hire's year of pain accidentally built."},{question:"How should you compensate a first sales hire?",answer:"Do not put them on a standard commission plan with a day-one quota. For the first 90 days, pay them to learn and reward speed to disqualification. A fast 'no' protects time, the one resource that does not come back. Quotas tied to an unproven process produce desperate discounting or a resignation letter."},{question:"What work should happen before the first sales hire?",answer:"Translate founder instinct into positioning, messaging, and playbooks a non-founder can run, and build enough market presence that cold outreach is not instantly deleted. This is the Founder Instinct Translation that closes the Sales Infrastructure Gap, and skipping it usually costs the company a year."}]},{id:"6004",image:fP,title:"What Messaging and Positioning Can, and Cannot, Do for Your Company",slug:"what-messaging-and-positioning-can-and-cannot-do",category:"Enterprise Strategy",seoTitle:"What Messaging and Positioning Can (and Cannot) Do",seoDescription:"Strong B2B messaging will not close a six-figure deal on first contact. It keeps you on the day-one shortlist where 95% of winning vendors sit.",imageAlt:"Editorial illustration of an enterprise B2B buying committee around a boardroom table with overlapping speech bubbles, representing the multiple stakeholders messaging must serve",excerpt:"Get your messaging right and the leads will come. It is one of the most common promises in B2B marketing, and one of the most misleading. Strong positioning will not make a stranger buy a six-figure product on first contact. What it does is more important: it keeps you from being eliminated before the conversation begins.",readTime:9,author:"Shira Abel",featured:!0,globalFeaturedOrder:5,tldr:"Messaging and positioning will not close an enterprise deal on first contact. Their actual job is survival: keeping you on the day-one shortlist where 95% of winning vendors already sit, and giving your internal champion language they can use to align a 6-to-10 person buying committee. Positioning is infrastructure for risk-averse buyers, not a demand generation shortcut. It compounds over 12 to 18 months, and its value shows up in the deals that did not stall and the committees that did not eliminate you.",dateModified:"2026-04-21",content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>Strong B2B messaging will not close a six-figure deal on first contact. Anyone promising that has either never sold to enterprise or is selling you something.</li><li>95% of winning vendors are on the buyer's day-one shortlist, and 80% of deals are won by the pre-contact favorite. Positioning's job is to get you on that list before evaluation begins.</li><li>Enterprise buyers are not shopping. They are managing risk. Loss aversion (Kahneman & Tversky, 1979) means they weigh potential losses roughly twice as heavily as equivalent gains.</li><li>You are never selling to one person. Gartner's research shows enterprise buying committees include 6 to 10 decision-makers, each with their own evaluation lens.</li><li>The new buyer journey is requirements, focus, engagement, validation, decision. Instead of awareness, engagement, consideration, evaluation, decision.</li><li>Messaging keeps you in the room. Distribution, proof, and product-market fit do the rest. Positioning is infrastructure, not a 90-day pipeline fix.</li></ul></div>
691<p>Let's start with the promise someone almost certainly made you.</p>
692<p>Maybe it was at a conference or in a pitch deck from an agency. Maybe it was a LinkedIn post that got 3,000 likes. The promise sounds something like this: "Get your messaging right, and the leads will come." Or the slightly more sophisticated version: "Nail your positioning and you'll stand out in a crowded market."</p>
693<p>Both statements are partially true. Which makes them more dangerous than a lie.</p>
694<p>Strong messaging and positioning will not make a stranger buy an enterprise product the first time they encounter you. If you've just been discovered, meaning you showed up in a search, got a referral, or your SDR reached out cold, there is no amount of compelling copy that closes a six-figure deal at that moment. Anyone who tells you it can is either selling you something or has never actually worked in enterprise B2B. Possibly both.</p>
695<p>What it can do is less glamorous, and more important. But it requires understanding what's actually happening inside an enterprise buying decision, because it's almost nothing like what most people assume.</p>
696<h2>The Real Job of a B2B Buyer</h2>
697<p>Enterprise buyers are not shopping. They are managing risk.</p>
698<p>This is the piece that changes everything. In 1979, Daniel Kahneman and Amos Tversky published their landmark <a href="https://www.jstor.org/stable/1914185" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">Prospect Theory paper in <em>Econometrica</em></a>, demonstrating that people evaluate potential losses roughly twice as heavily as equivalent gains. They named the principle loss aversion. In consumer purchases, a bad decision costs money and some frustration. In enterprise purchases, a bad vendor decision can cost millions in implementation failures, derail critical projects, and end careers. The asymmetry between upside and downside is enormous, and it shapes every step of how a buying committee behaves.</p>
699<p>This is the origin of one of the most durable phrases in B2B sales: "Nobody ever got fired for buying IBM." It was never a compliment to IBM's product. It was a precise description of how loss aversion operates at an organizational level. Buyers choose vendors who reduce their personal professional exposure, not just vendors who deliver the best features or the sharpest pitch. The implication for your messaging is significant: being better than the incumbent is often less persuasive than being safe enough to stake your reputation on. <a href="https://www.mckinsey.com/capabilities/growth-marketing-and-sales/our-insights/business-branding-bringing-strategy-to-life" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">McKinsey's research on B2B branding</a> found that strong B2B brands outperform weak ones by 20% in EBIT margin. Buyers pay a premium for brands that make their professional lives less risky.</p>
700<h2>The Committee Problem Nobody Warns You About</h2>
701<p>Here is the other thing: you are never talking to one person.</p>
702<p>Edelman cites <a href="https://www.gartner.com/en/sales/insights/b2b-buying-journey" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">Gartner's research on complex B2B purchases</a>, found that the buying group includes 6 to 10 decision-makers, each arriving with 4 to 5 pieces of independent research they later share with the group. And every one of those people is evaluating your company through a completely different lens. The CFO needs a defensible ROI case that holds up under scrutiny. The head of IT is running a risk assessment: Will this break what we already have? Is it secure? Who supports it when something goes wrong? The end user wants to know if it makes their daily work meaningfully less painful. The legal and procurement team wants to know if you're going to be a contractual nightmare. The executive sponsor wants to know if choosing you makes them look forward-thinking or reckless. Sales just wants their lives to be easier, will you deliver that?</p>
703<p><a href="https://media.bain.com/Images/BAIN_BRIEF_The_B2B_Elements_of_Value.pdf" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">Bain & Company's research on the B2B Elements of Value</a> drew from quantitative and qualitative customer studies across three decades. This study i
703dentified 40 distinct elements that matter to B2B buyers, spanning five categories:</p>
704<ol>
705<li>Table stakes</li>
706<li>Functional</li>
707<li>Ease of doing business</li>
708<li>Individual</li>
709<li>Inspirational</li>
710</ol>
711<p>The individual and inspirational categories, which include things like reduced anxiety, career development, and social responsibility, are not soft. They are the dimensions that differentiate vendors who make the shortlist from those who get eliminated. Buyers are buying a story they can tell internally to justify the decision, a narrative that makes sense to each of the stakeholders who has to say yes.</p>
712<p>Your messaging has to work for all of them. Not simultaneously in one document, but across your entire presence. If your positioning is muddled at the top, no amount of persona-specific content fixes the problem downstream.</p>
713<h2>Messaging Is Keeping You in the Room</h2>
714<p>If you accept that enterprise buying is fundamentally about risk management across a committee of people with different fears, then the job of messaging becomes much clearer.</p>
715<blockquote><p><strong>Messaging keeps you from being eliminated.</strong> That is its primary function. Not persuasion. Survival.</p></blockquote>
716<p>Here is how elimination actually works. Long before a formal RFP or vendor evaluation process begins, buyers build a mental model of who belongs in the conversation. This is through conference appearances, peer recommendations, thought leadership, and accumulated exposure across time. That evidence forms a rough shortlist. Vendors who don't make that shortlist don't get considered. According to <a href="https://www.6sense.com/resources/the-2025-b2b-buyer-experience-report/" target="_blank" rel="noopener noreferrer" class="text-[#316263] font-bold underline">The B2B Buyer Experience Report for 2025</a>, 95% of winning vendors are already on the day one shortlist, and 80% of deals are won by the "pre-contact favorite." With first contact now happening at 61% of the journey (that's weeks faster than it was previously), the decision is effectively locked before you even engage. You are either on that list, or you don't exist. LLMs are helping determine that day one shortlist.</p>
717<p>Weak or generic positioning accelerates elimination. If a buyer lands on your website or encounters your pitch and cannot immediately answer <em>what does this company actually do, and who specifically is it for?</em>, you are gone. The brain processes unclear signals as risk, and in a risk-averse environment, anything unclear gets filtered out. In many B2B sectors, half of all brands are mistaken for a competitor by buyers, meaning enormous amounts of marketing spend effectively build awareness for someone else. Undifferentiated positioning is actively expensive.</p>
718<p>Strong positioning passes the elimination test. It gives the buyer's brain a clear, memorable category to file you in. It signals that you understand their world well enough to have earned a place in the evaluation. <strong>It does not close the deal.</strong> It keeps the door from closing on you before the conversation has a chance to begin.</p>
719<h2>What Good Messaging Does</h2>
720<p>Here's what good messaging genuinely delivers:</p>
721<ul>
722<li>It reduces friction in the evaluation process. When your positioning is crisp, buyers can quickly confirm you belong on their shortlist. Anything that simplifies that experience creates a measurable advantage.</li>
723<li>It aligns your internal team. Consistent messaging creates a shared vocabulary across sales, marketing, product, and customer success. When those functions say different things to different stakeholders, you create doubt. Doubt kills enterprise deals.</li>
724<li>It gives your champion something to work with. Your internal advocate needs clear, credible language they can adapt for each stakeholder they're selling to on your behalf. Weak messaging makes their job nearly impossible.</li>
725<li>It builds a compounding trust reserve. Consistent thought leadership, expert conference talks, and proven case studies build the credibility buyers draw on when they enter the market. This is the long game, and it is the one most worth playing.</li>
726</ul>
727<h2>The Trust Timeline Is Non-Negotiable</h2>
728<p>This research doesn't just explain why buyers are risk-averse. It explains why no message, however well-crafted, can compress a <em>trust-building process that requires time</em>. Trust in an enterprise context is not a feeling, it is a track record. It requires repeated exposure, demonstrated competence, and accumulated evidence that you will still exist and be worth dealing with 18 months after the contract is signed.<
728/p>
729<h2>What Messaging Cannot Do</h2>
730<p>In the interest of full transparency, because the space is full of people who will tell you what you want to hear:</p>
731<ul>
732<li><strong>It cannot substitute for proof.</strong> Positioning articulates a compelling claim. It cannot manufacture the case studies, client references, and third-party validation that make that claim credible. Bain's Elements of Value research is clear that substantive factors: risk reduction, quality, and service support all sit at the foundation of every B2B buying decision. Messaging sits on top of that foundation. It cannot replace it.</li>
733<li><strong>It cannot fix a product that isn't right for the market.</strong> This is the most common misapplication of messaging work. If the problem you're solving isn't urgent enough, or your solution isn't meaningfully differentiated, better language around it won't change the outcome. Positioning clarifies a genuine advantage. It cannot invent one.</li>
734<li><strong>It cannot work in isolation.</strong> Messaging without distribution is a document in a folder. It has to reach the right people, repeatedly, across channels, over time. Content, events, peer networks, earned media. All of these are the mechanisms that give positioning its power. The message is the what. Distribution is what makes it matter.</li>
735</ul>
736<h2>The Honest Expectation</h2>
737<p>When founders come to us at Hunter & Bard asking about messaging and positioning work, the first conversation we have is about expectations. Strong positioning is a 12-to-18-month investment in your market presence, not a 90-day pipeline fix. It pays off in the quality of your shortlist appearances, in the efficiency of your champion's internal selling effort, and in the compounding brand equity that makes you increasingly hard for competitors to displace.</p>
738<p>The companies that get frustrated with messaging work are almost always the ones who were told, implicitly or explicitly, that it was a demand generation shortcut. It isn't. It is infrastructure. And like all infrastru
738cture, its value is most visible in the problems you don't have: the deals that didn't stall because your positioning was clear, the committees that didn't eliminate you because your credibility was already established, the champions who could actually close because your materials gave them something real to work with.</p>
739<p>Your messaging is the evidence you present, over time and across every touchpoint, that you are that company.</p>
740<p>That is genuinely difficult to build. Anyone offering you something fast is selling magic. In enterprise B2B, magic doesn't exist. But clear, honest, well-executed positioning compounds in ways that become very hard for competitors to replicate. That's worth building.</p>
741<div class="blog-expert-verdict"><h3>Strategic Insight: Hunter & Bard</h3><p>Most messaging engagements fail because they are sold as pipeline accelerators when they are actually shortlist insurance. The companies that get the most value from positioning work treat it like infrastructure: built once, maintained continuously, and measured against the deals that did not slip rather than the ones that closed faster. If your sales team is constantly re-explaining who you are to every new stakeholder in a deal, that is a positioning problem showing up in the pipeline. Fixing it upstream is almost always cheaper than absorbing it downstream.</p></div>
742<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Recommended Next Step</p><h3>Brand & Messaging Sprint</h3><p>Hunter & Bard works with B2B technology companies to build the messaging and positioning foundations that earn enterprise trust before the first meeting, and long after the deal closes. Our two-week Sprint rebuilds the messaging architecture your buyers, their committees, and the LLMs they rely on need to put you in the deal before sales ever gets a meeting.</p><a href="/products/sprint" class="blog-inline-cta-link">Explore the Sprint →</a></div>`,faqSchema:[{question:"Can messaging and positioning close enterprise deals on their own?",answer:"No. Strong messaging and positioning will not make a stranger buy a six-figure enterprise product on first contact. Their actual job is to keep you on the buyer's day-one shortlist (where 95% of winning vendors already sit) and to give your internal champion language they can use to align the 6-to-10 person buying committee. Closing the deal still requires proof, distribution, and product-market fit."},{question:"How long does it take for B2B positioning work to pay off?",answer:"Strong positioning is a 12-to-18-month investment in your market presence, not a 90-day pipeline fix. The payoff shows up in the quality of your shortlist appearances, the efficiency of your champion's internal selling effort, and the compounding brand equity that makes you increasingly hard for competitors to displace."},{question:"Why are enterprise buyers so risk-averse?",answer:"Enterprise buyers are not shopping, they are managing risk. Kahneman and Tversky's 1979 Prospect Theory research showed people weigh potential losses roughly twice as heavily as equivalent gains. In enterprise purchases, a bad vendor decision can cost millions, derail projects, and end careers. That asymmetry shapes every step of how a buying committee behaves."},{question:"How many people are on a typical B2B buying committee?",answer:"Gartner's research on complex B2B purchases shows the buying group includes 6 to 10 decision-makers, each arriving with 4 to 5 pieces of independent research. Each evaluates the vendor through a different lens: CFO, IT, end user, legal, executive sponsor, and sales each have distinct concerns your messaging has to address across your presence."},{question:"What is the difference between messaging and proof in enterprise sales?",answer:"Positioning articulates a compelling claim. Proof (case studies, client references, third-party validation, security audits) is what makes the claim credible. Messaging sits on top of the foundation that proof creates. It cannot replace it. The most common failure of messaging work is using it as a substitute for evidence rather than a frame for it."}]},{id:"6006",image:bP,imagePosition:"center",title:"What's the Difference Between Positioning, Messaging, and Storytelling?",slug:"positioning-messaging-storytelling",category:"Enterprise Strategy",seoTitle:"Positioning vs. Messaging vs. Storytelling for B2B Tech",seoDescription:"Positioning, messaging, and storytelling are not the same thing. Learn how each layer helps B2B tech companies make complex value easier to trust.",imageAlt:"Photorealistic image showing a home progressing from foundation to framing to finished structure, representing positioning, messaging, and storytelling.",excerpt:"Positioning is the foundation. Messaging is the framing, wiring, and plumbing. Storytelling is the design and finishes. Each layer does different work, each depen
742ds on the one beneath it, and when something feels off in enterprise sales, the problem is almost always in one specific layer.",readTime:8,author:"Shira Abel",featured:!0,globalFeaturedOrder:2,tldr:"Positioning, messaging, and storytelling are not the same thing. Positioning is the foundation that defines where you are in the market and who you serve. Messaging is the framing that turns that position into shared language for every stakeholder on the buying committee. Storytelling is the finish that makes the message memorable enough to travel inside meetings you are not in. ",dateModified:"2026-05-01",content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>Positioning defines where you are in the market and who you serve.</li><li>Messaging turns that position into shared language for each stakeholder.</li><li>Storytelling makes the message memorable enough to travel inside the buying committee.</li><li>In enterprise sales, being understood once is not enough.</li></ul></div>
743<p>Thanks to living in an area with seismic activity and many hills, the foundations of homes here can often be problematic. When we were looking to buy a home I always brought a marble with me. If the place felt slightly off, I&rsquo;d put the marble on the ground to see where it went and how fast. Some homes were very obviously off and I didn&rsquo;t need the marble. The others felt slightly off, so I would check to see how the marble moved. You could see if there were gaps between the cabinets at the walls, if the walls were plumb, but not if there was mold or problems on the roof or under the house. The finishes were obvious though, you could see how much care was taken by the owners. And this was how you judged when deciding if it was worth it or not to buy.</p>
744<p>The same is true for your buyers. When something feels off about your <a href="/resources/blog/what-messaging-and-positioning-can-and-cannot-do" class="text-[#316263] font-bold underline">positioning, messaging, or story</a>, they can&rsquo;t always name what it is but they feel it. And in enterprise sales, that unease is enough to stall a deal or send someone back to a competitor. The truth is that positioning, messaging, and storytelling are not the same thing, and treating them like they are is one of the most expensive mistakes a complex-product company can make.</p>
745<p>Think of it this way. Together, positioning, messaging, and storytelling make the home where the written and verbal side of your <a href="/resources/blog/a-tale-of-two-companies-or-why-you-need-to-build-a-brand" class="text-[#316263] font-bold underline">brand lives</a>. Positioning is the foundation. Messaging is the framing, wiring, and plumbing. Storytelling is the design and finishes. Each layer does different work. Each layer depends on the one beneath it. And when something feels off the problem is almost always in one specific layer.</p>
746<figure class="blog-figure"><img src="/assets/positioning-messaging-storytelling-infographic.webp" alt="Infographic explaining positioning, messaging, and storytelling as three layers of a structure: foundation, framing, and finish." /><figcaption>Positioning is the foundation. Messaging is the framing. Storytelling is the finish buyers remember and repeat.</figcaption></figure>
747<p>The mistake many companies make is treating all three as one thing. That works fine until it doesn&rsquo;t. When your messaging isn&rsquo;t landing, your stories aren&rsquo;t traveling, and you have copy that sounds fine but doesn&rsquo;t move the needle, it&rsquo;s hard to diagnose because the symptoms look the same regardless of which layer is actually broken.</p>
748<p>Enterprise purchases involve buying committees. Your value has to make sense to everyone on that committee, not just the champion who is helping you sell inside the enterprise. That makes getting the layers right more important.</p>
749<p>Here is what each layer does and how to tell them apart.</p>
750<h2>Positioning is the foundation</h2>
751<p>The foundation determines what everything else can be. You can dress up a house with beautiful finishes, but if the foundation is cracked the wrong base conditions will amplify damage. The same is true for your brand. <a href="/services/marketing-strategy" class="text-[#316263] font-bold underline">Positioning strategy</a> is the strategic decision about where your company sits in the market and in the buyer&rsquo;s mind, and everything else you build rests on it.</p>
752<p>It answers basic but genuinely difficult questions:</p>
753<ul>
754<li>What category are you in?</li>
755<li>Who are you really for?</li>
756<li>What alternatives will the buyer compare you against?</li>
757<li>Why should they choose you over those alternatives?</li>
758<li>What kind of value do you create that your best-fit buyers recognize as worth paying for?</li>
759</ul>
760<p>Strategy is what you say No to. Being everything to everyone is basically being for no one.</p>
761<p>That matters because buyers do not evaluate companies in a vacuum. They sort, compare, and categorize. They decide, often within minutes, whether you are a tool, a platform, a point solution, a premium option, a risky bet, or a cheaper substitute for something they already know.</p>
762<p>I worked with a company that had been describing itself in a way that made it sound like a cheaper, lower-end solution in a known category. But that was not what the company was. The product was not low-end. The market they served was not looking for cheap. But the framing put them in the wrong mental box, and once a buyer puts you in the wrong box, you spend the rest of the conversation fighting that assumption instead of making your actual case.</p>
763<p>The work was not &ldquo;better words.&rdquo; The work was repositioning.</p>
764<p>We changed the messaging to be focused on being a specialized solution for a smaller, underserved market. Once the foundation was repoured in the right place, the messaging and stories built on top of it finally held. That is 
764what positioning does. It gives every other layer something solid to stand on.</p>
765<h2>Messaging is the framing, wiring, and plumbing</h2>
766<p>Once the foundation is set, messaging is the layer that makes the structure functional. Think of it as the framing, wiring, and plumbing. It is not visible on the surface, but everything that works in the house runs through it. Without it, nothing functions. And when it is built wrong, the problems show up everywhere even if the foundation beneath it is solid.</p>
767<p>Messaging turns positioning into usable language for the people who need to understand, believe, approve, defend, implement, renew, or expand the purchase. This is where companies often get tangled. The brilliant person leading demand gen has a completely different skillset required to be great at positioning, messaging, and storytelling. Occasionally someone will be good at all of them, but in my long career I&rsquo;ve found it rare to be in one person. They are very different skillsets.</p>
768<p>A clear <a href="/services/marketing-strategy" class="text-[#316263] font-bold underline">messaging architecture</a> is the connective layer between the company&rsquo;s strategic position and the specific people who need to act on it. I call it the Single Source of Truth. It&rsquo;s the architecture that keeps language consistent across everyone who sells, explains, or defends the product.</p>
769<p>The CFO does not need the same explanation as the VP of Engineering. The economic buyer, the technical evaluator, the day-to-day user, the procurement team, and the internal champion may all be looking at the same product, but they are not evaluating the same value. Research has identified dozens of different forms of value in business buying, ranging from functional value like cost reduction and scalability to more individual concerns like reduced anxiety and reputational assurance.</p>
770<p>Good messaging does not turn the company into something different for every stakeholder. That would create chaos. It keeps the position consistent while making the value legible to each person in the buying process. It gives sales a shared language and a clear architecture.</p>
771<p>This is also why messaging cannot stop at clever copy. The buyer&rsquo;s journey is not linear. Many B2B buyers prefer a rep-free experience, which raises the stakes for the material they consume before and between sales conversations. Your <a href="/services/website-design" class="text-[#316263] font-bold underline">website design and messaging</a> has to hold up in those spaces: when the buyer is reading your site alone at 10pm, comparing you to two alternatives, forwarding a deck to a colleague, or trying to explain why you belong on the shortlist.</p>
772<h2>Storytelling is the design and finishes</h2>
773<p>Storytelling does a different job than messaging. Messaging explains what is true. Storytelling helps people remember it and repeat it. In enterprise sales, some of the most important conversations happen when you are not there. Your champion hears the pitch, joins three other meetings, talks to their CFO, and then tries to explain why this vendor should stay in the conversation. Your message has to survive that process.</p>
774<p>If the foundation and the framing are solid but the design is missing, the house is functional but not memorable. Nobody takes pictures of exposed drywall. Nobody shares a story about a floorplan. The design is what makes the space livable, recognizable, and feel good. It&rsquo;s what makes someone say &ldquo;this is the place.&rdquo;</p>
775<p>A feature list usually won&rsquo;t do this. A generic value proposition typically won&rsquo;t either. A line like &ldquo;we help companies unlock transformation across the enterprise&rdquo; should be retired permanently, period.</p>
776<p>One of my favorite professors at Kellogg was Craig Wortmann. He teaches that both marketers and salespeople are inherently storytellers, and that the job is learning to tell the right story, at the right time, for the right reason. Marketing tells stories at scale across channels to build the brand and attract the right accounts. Sales tells stories one-to-one or one-to-committee to move a specific deal. Those are different storytelling moments that require different skills, but the underlying principle is the same: a story gives the buyer something substantial to hold onto, something that shows what changed, why it mattered, who cared, and what became possible after.</p>
777<p>There is a real difference between saying &ldquo;we improve operational visibility across cross-functional teams&rdquo;
777 and telling the story of a regional operations leader who had three teams using three different systems, spent every Monday reconciling conflicting reports, and finally had one version of the truth ready before the executive meeting. The first may be accurate. The second gets attention and is easier, and more fun, to retell.</p>
778<p>That is the job of storytelling in B2B. It is not decoration added after the serious strategy work is done. In complex sales, storytelling is part of how the strategy moves through an organization, which is why <a href="/services/revenue-enablement" class="text-[#316263] font-bold underline">sales narratives and revenue enablement</a> belong on the same shelf as positioning and messaging, not on a separate one.</p>
779<p>This is also where most case studies fail. They are technically correct and completely forgettable. They document the implementation, list the results, add a quote, and call it a story. A story is not a sequence of facts. It has tension, context, and a before and after that shows why the decision mattered to real people inside a real company. If the buyer cannot remember it, they cannot repeat it. If they cannot repeat it, it cannot help them build internal consensus.</p>
780<h2>The layers connect, but they don't collapse</h2>
781<p>The foundation gives the market a way to understand you. The framing gives everyone in the buying process a working language. The design gives the buyer something to carry into the next room. Said more directly: positioning defines where you are in the market and who you serve, messaging translates that position into usable language, and storytelling makes the message memorable enough to travel.</p>
782<p>When the three layers work together, the company becomes easier to understand. Not because the product became simple, but because the explanation became sharper.</p>
783<p>That matters because complexity is not the enemy in enterprise sales. Enterprise buyers buy complex things all the time: infrastructure, security platforms, data systems, AI products, operational software that touches multiple teams and carries real implementation risk. The issue is not complexity, it&rsquo;s clarity.</p>
784<p>The work has to happen at the right layer for things to be clear. If you want to go deeper on what messaging and positioning can and cannot do for a complex product, see <a href="/resources/blog/what-messaging-and-positioning-can-and-cannot-do" class="text-[#316263] font-bold underline">our companion piece on the limits of messaging work</a>, and for how this plays out in the post-LLM funnel, read <a href="/resources/blog/martini-pipeline-abm-marketing-funnel-became" class="text-[#316263] font-bold underline">The ABM Marketing Funnel Became a Martini Pipeline</a>.</p>
785<h2>Where Hunter &amp; Bard fits</h2>
786<p>At Hunter &amp; Bard, we work across all three layers because these problems don&rsquo;t show up in neat boxes.</p>
787<p>Our job is to help companies understand which kind of work they actually need, then build the strategy and materials to support it. That can mean positioning strategy, messaging architecture, sales narratives, website copy, case studies, founder language, or customer stories. The format depends on the business need.</p>
788<p>The goal is consistent: make complex value clear so prospects can trust, buy, and repeat internally. Because in enterprise sales, being understood once is not enough.</p>
789<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Work With Us</p><h3>Not sure which layer is off?</h3><p>Hunter &amp; Bard helps technical and complex-product companies clarify positioning, build messaging architecture, and create stories buyers can repeat inside the buying committee.</p><a href="/contact" class="blog-inline-cta-link">Work with Hunter &amp; Bard &rarr;</a></div>`,faqSchema:[{question:"What is the difference between positioning and messaging?",answer:"Positioning defines where a company sits in the market and in the buyer's mind. Messaging translates that position into language buyers, sellers, and stakeholders can use."},{question:"What is the difference between messaging and storytelling?",answer:"Messaging explains what is true. Storytelling makes that truth easier to remember, repeat, and carry into the next conversation."},{question:"Why does this matter in enterprise sales?",answer:"Enterprise purchases involve buying committees. Your value has to make sense to the champion, technical evaluator, economic buyer, procurement team, and other stakeholders, even when you are not in the room."},{question:"When does a company need positioning work?",answer:"A company needs positioning work when buyers place it in the wrong category, compare it to the wrong alternatives, or misunderstand why it matters."},{question:"When does a company need messaging work?",answer:"A company needs messaging work when different teams explain the company differently, sales lacks shared language, or buyers understand the product but not the value."},{question:"When does a company need storytelling work?",answer:"A company needs storytelling work when the facts are accurate but forgettable, case studies feel flat, or champions struggle to explain the value internally."}]},{id:"6002",image:mP,title:"THE 18-MONTH TAX: ASSUMING IS EXPENSIVE",slug:"the-18-month-tax",category:"Enterprise Marketing",seoTitle:"The 18-Month Tax of Skipping Expert Help",seoDescription:"Nearly half of startups fail by year five. The hidden trial-and-error tax of skipping fractional expertise costs founders more than hiring consultants.",imageAlt:"Hourglass with money flowing out representing the hidden cost of startup foun
789ders skipping expert help",excerpt:`Spending $10,000 on <a href="/resources/blog/what-messaging-and-positioning-can-and-cannot-do" class="text-[#316263] font-bold underline">messaging</a> feels reckless when your runway is short. But the real tax isn't the consultant fee. It’s the 18 months of high-friction sales and muddied feedback that follow. You aren't saving money; you're paying for the privilege of moving slower. Here is why getting your story right is the highest ROI move you can make for your sales velocity.`,readTime:8,author:"Shira Abel",featured:!0,globalFeaturedOrder:4,tldr:"Founders who skip outside expertise pay what amounts to an 18-month trial-and-error tax: 780+ hours of beginner-level work worth $156K+, delayed sales learning curves, and burned runway. Data from BLS, CB Insights, and Harvard Business School research all confirm that missing expertise, not missing capital, is what kills startups in years two through five. Fractional CMOs, contract counsel, and part-time specialists cost a fraction of the DIY alternative. Wasting time is expensive.",content:'<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>Founders who skip outside expertise pay an 18-month trial-and-error tax: 780+ hours of beginner-level work worth $156K+, delayed sales learning curves, and burned runway.</li><li>The highest-risk window for startups is not year one, it is years two through five, when early momentum fades and the business has to prove it can sell.</li><li>CB Insights data shows that among 400+ VC-backed failures, missing expertise (23%), not missing capital, was a top killer.</li><li>Every month spent self-teaching skills outside your core competency delays the Sales Learning Curve, the accumulation of real selling knowledge that drives predictable revenue.</li><li>Fractional CMOs, contract counsel, and part-time specialists cost a fraction of the DIY alternative. The expert is not the luxury: the 18 months of figuring it out yourself is.</li></ul></div><p>I get it. I really do.</p><p>When you’re staring at a runway that feels shorter every month, spending $10,000 on a consultant feels reckless. You didn’t build something from nothing to hand it off to someone else. You’re smart. You can figure it out. And besides, what if it doesn’t work? What if you spend the money and still don’t get traction?</p><p>That fear is legitimate. I’ve felt it. Most founders I know have felt it. But here’s what I’ve watched happen, over and over, to people who let that fear make their decisions for them: they end up spending far more than the expert would have cost. They just spend it slower, in ways that are harder to see on a spreadsheet, and by the time they realize it, 18 months have evaporated. And it’s cost them far more than the cost of the expert in the first place.</p><p>I call it the trial-and-error tax. And the data backs it up.</p><h3>The Numbers That Should Scare You</h3><p>The <a href="https://www.bls.gov/bdm/us_age_naics_00_table7.txt" target="_blank" rel="noopener noreferrer">U.S. Bureau of Labor Statistics</a> tracks business survival rates with the kind of cold accuracy that doesn’t care about your pitch deck. About 20% of new businesses fail within year one. That’s not the alarming part. The alarming part is what happens next. The highest-risk window isn’t the first year, when you’re still running on adrenaline and the idea is new. It’s years two through five, when the early momentum fades, funding gets thin, and you actually have to prove the business can sell. Nearly half of all startups are gone by year five.</p><p><a href="https://www.cbinsights.com/research/startup-failure-reasons-top/" target="_blank" rel="noopener noreferrer">CB Insights</a> dug into the why by analyzing over 400 VC-backed startups that shut down. These weren’t underfunded ideas. Together, the companies they studied had raised over $17.5 billion before dying. The median company raised $11 million. Money wasn’t the issue. The top killers were no real product-market fit (42% of failures), running out of cash (29%), and not having the right team around them (23%).</p><p>That last one is the one nobody wants to talk about honestly.</p><h3>What “Wrong Team” Actually Means</h3><p>When researchers say 23% of startups fail because of team issues, most founders read that as co-founder conflict or a bad hire. Sometimes it is. But more often, it means the founding team was missing the expertise they needed and either didn’t recognize the gap or couldn’t bring themselves to pay to fill it.</p><p>
789Tom Eisenmann, a professor at Harvard Business School who spent years studying why startups fail across 470 companies, identified what he calls the “Help Wanted” failure pattern. A team that lacks the skills the business needs at a critical moment and moves too slowly to fix it. <a href="https://hbswk.hbs.edu/item/why-start-ups-fail" target="_blank" rel="noopener noreferrer">His research</a> is pretty unambiguous: you can’t study your way out of this gap fast enough. The market doesn’t pause while you take the course.</p><p>And yet, founders keep trying. Because the alternative feels like a gamble. Because expertise costs money up front, and mistakes feel like they cost nothing. Until you add them all up.</p><h3>The Sales Problem Nobody’s Talking About</h3><p>Here’s where the trial-and-error tax gets really expensive, and it’s the piece I don’t see enough founders take seriously.</p><p>Every month you’re spending 15 hours a week trying to teach yourself SEO, rewriting your own copy for the fourth time, or figuring out whether your contract is enforceable — that’s time you are not spending on sales. Not just in the hours-in-a-day sense. You’re also not building the deep market knowledge that makes sales possible at scale.</p><p><a href="https://hbr.org/2006/07/the-sales-learning-curve" target="_blank" rel="noopener noreferrer">Mark Leslie and Charles Holloway</a> wrote about this in Harvard Business Review back in 2006, and it’s still one of the most useful frameworks I know. They called 
789it the Sales Learning Curve, the idea that every organization has to accumulate real selling knowledge before it can generate predictable revenue. You can’t skip ahead on that curve. You earn your place on it through actual sales conversations, real feedback, real losses. The problem is that every month you’re not having those conversations, you’re falling further behind.</p><p>The typical sales rep takes about 180 days to ramp to full productivity. But before you can even hire effectively, you need to know what a good sale looks like in your business. Founders who spend the first year and a half building skills they should have outsourced are delaying that discovery. And by the time they get there, they’ve burned runway and time they can’t get back.</p><h3>The Math Founders Don’t Run</h3><p>I want you to do something uncomfortable. Think about the hours you’ve spent in the last 18 months on tasks outside your actual expertise. Writing copy. Figuring out your tax structure. Teaching yourself Facebook ads. Building a sales process from scratch with no model to reference.</p><p>If it’s even 10 hours a week, that’s 780 hours over 18 months. If your time is worth $200 an hour, and if your startup is viable, it is worth at least that, you’ve invested $156,000 in activities you’re doing at a beginner level. The consultant you passed on because they charged $8,000? You’ve already spent more than that twenty times over, just in your own time. And that’s before you factor in the revenue you didn’t close while you were busy figuring out what everyone else on your team already knows.</p><p>The <a href="https://www.kauffman.org/entrepreneurship/research/" target="_blank" rel="noopener noreferrer">Kauffman Foundation</a>, which tracks entrepreneurship data nationally, has found consistently that access to the right expertise, not just capital, is one of the biggest predictors of whether a startup survives past year five. Founders who rely entirely on personal problem-solving in areas outside their core competency are the most financially exposed when growth transitions get hard.</p><h3>I Know Why You’re Doing It Anyway</h3><p>I’m not writing this to make you feel bad about decisions you’ve already made. I’m writing it because I’ve sat across from too many founders who, twelve or eighteen months in, say some version of the same thing: <em>I wish I’d called you sooner. I thought I couldn’t afford it, but it turns out I couldn’t afford not to.</em></p><p>The fear that drives the DIY decision isn’t irrational. You’re protecting something you built. You don’t know if it’s going to work. Spending money on experts when you’re not yet profitable feels like a bet you’re not sure you can make. I understand that completely.</p><p>But the decision isn’t “expert cost versus zero.” The actual comparison is expert cost versus the total bill of the trial-and-error tax, and that bill, once you add it up honestly, almost never comes out in favor of going it alone.</p><h3>What to Do Instead</h3><p>You don’t have to hire full-time. The market for fractional expertise is wide open right now. Fractional CMOs, contract legal counsel, part-time sales directors who’ve built what you’re building before, none of these require a six-figure salary line. They require a willingness to admit that your time, and your growth, is worth protecting.</p><p>Start with wherever your biggest unknown is. Not the thing you’ve been avoiding because it’s hard. The thing you’ve been avoiding because you’re not sure what good even looks like. That’s almost always where the tax is highest.</p><p>The expert isn’t the luxury. The 18 months of figuring it out yourself is.</p>'},{id:"6001",image:gP,title:"Your Buyer Researched You Before the Call. What Did They Find?",slug:"your-buyer-researched-you-before-the-call",category:"Enterprise Marketing",seoTitle:"Your Buyer Researched You Before the Call",seoDescription:"92% of B2B buyers have a preferred vendor before formal evaluation. The seven touchpoints enterprise buyers check before the first call.",imageAlt:"Enterprise B2B buyer research touchpoints before sales call",excerpt:"By the time a prospect agrees to a meeting with you, they've already formed an opinion. According to Forrester, 92% of B2B buyers start with a vendor already in mind. The meeting isn't where they decide. It's where they confirm.",readTime:15,author:"Shira Abel",featured:!0,globalFeaturedOrder:6,tldr:'Enterprise buyers research you across seven touchpoints before ever taking a call: your website, earned media, thought leadership, social presence, newsletter consistency, reviews, and <a href="/resources/blog/seo-is-no-longer-enough-b2b-guide-to-aeo" class="text-[#316263] font-bold underline">AEO</a>. Forrester data shows 92% already have a preferred vendor before formal evaluation. The halo effect means 
789strength in one area lifts everything; weakness in one contaminates the rest. Win the deal before the call starts.',content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li><strong>92% of B2B buyers</strong> start with a vendor already in mind; 41% have a single favorite before formal evaluation begins.</li><li>Enterprise buyers check <strong>seven touchpoints</strong> before the call: website, earned media, thought leadership, social presence, newsletter, reviews, and AEO.</li><li>The <strong>halo effect</strong> means strength in one area lifts perception everywhere; weakness in one contaminates the rest.</li><li>AI tools are multipliers, not substitutes: skilled hands produce different results than unskilled ones, and buyers can tell.</li><li>The companies that win aren't necessarily the best product. They're the ones who made it easy to feel confident.</li></ul></div><p>By the time a prospect agrees to a meeting with you, they've already formed an opinion.</p><p>According to <a href="https://www.digitalcommerce360.com/2025/07/07/forrester-b2b-buyers-choose-vendors-before-the-buying-process-begins/" target="_blank" rel="noopener noreferrer">Forrester's 2024 Buyers' Journey Survey</a>, 92% of B2B buyers start the purchasing process with at least one vendor already in mind, and 41% have already selected a single preferred vendor before formal evaluation even begins. Forrester's framing of this is blunt: "B2B buying today is a process of confirmation, not selection."</p><p>Read that again. The meeting isn't where they decide. It's where they confirm what they already believe.</p><p>Gartner data showed before the pandemic that <a href="https://hbr.org/2022/02/traditional-b2b-sales-and-marketing-are-becoming-obsolete" target="_blank" rel="noopener noreferrer">B2B buyers spend only</a> 17% of their total buying time in direct contact with potential vendors. That's gotten even smaller today and the use of LLMs for decision-making has risen. Your buyers are reading, comparing, and forming impressions long before anyone picks up a phone.</p><p>So what are they reading? And what are they concluding about you?</p><h2>The Stakes Are Higher Than You Think</h2><p>Enterprise buyers are not casual. When a company is evaluating a new vendor for a meaningful contract, they're not just deciding whether your product fits their needs. They're deciding whether your company is going to survive long enough to be worth betting on.</p><p>Switching costs inside an enterprise are real. Data migration, retraining staff, re-negotiating agreements, rebuilding integrations. The cost of a bad vendor choice isn't just financial. It's organizational disruption and, often, a career problem for whoever sponsored the decision. According to <a href="https://www.forrester.com/press-newsroom/forrester-the-state-of-business-buying-2024/" target="_blank" rel="noopener noreferrer">Forrester's State of Business Buying, 2024</a>, on average 13 people within an organization are involved in the buying decision, with 89% of purchases involving two or more departments. Every one of those stakeholders is trying to reduce the risk that they personally endorsed the wrong choice. Choosing the wrong vendor can become a career problem.</p><p>That pressure shapes how they research you. Before they ever agree to a call, they've done a background check. They've looked at your website. They've searched your name. They've checked LinkedIn. They've looked for any signal that tells them whether you're the real thing or a risk they can't afford to take.</p><p>What they find, or don't find, either builds confidence before you open your mouth, or starts eroding it.</p><h2>The Places They Look</h2><figure class="blog-inline-figure"><img src="/images/blog/buyer-googled-touchpoints.png" alt="The seven touchpoints enterprise buyers check before the first call" class="rounded-lg my-8 w-full" /></figure><h3>1. Your Website</h3><p>This is the first and most scrutinized stop. Nearly 60% of B2B buyers find and consume content directly from a <a href="https://www.digitalcommerce360.com/2024/05/07/b2b-buyers-multiple-digital-sales-channels/" target="_blank" rel="noopener noreferrer">vendor's website</a>. This is the first and most scrutinized stop. Vendor websites rank high among the dozen digital channels B2B buyers use in research, far outpacing direct sales contact.</p><p>The question they're asking isn't just "do I understand what this company does?" It's "does this company look like they know what they're doing?" Those are different questions. The first is about clarity. The second is about credibility. A website can answer the first question while completely failing the second.</p><p><strong>What good looks like:</strong> Clear positioning on who you serve and what you do. Specific language, not category language. A visual identity that holds together across every page. C
789opy that sounds like a human wrote it for another human.</p><p><strong>What empty looks like:</strong> A site where the homepage hero reads like a mission statement. Generic stock photography. Case studies that say "we helped a Fortune 500 company" without telling you anything. A blog with three posts from 2022.</p><p>The empty site doesn't just fail to help you. It actively signals that you don't have customers, don't have the resources to maintain your own presence, or don't take this seriously enough to do it right.</p><figure class="blog-inline-figure"><img src="/images/blog/buyer-googled-website-mockup.png" alt="Website mockup showing professional B2B brand presence" class="rounded-lg my-8 w-full" /></figure><h3>2. Earned Media</h3><p>Buyers look for evidence that the world has noticed you exist.</p><p>This doesn't mean you need a Wall Street Journal feature. But it does mean there should be something: a trade publication mention, a podcast appearance, a byline in an industry outlet, a quote in a relevant story. For companies selling into deeply technical markets, analyst coverage matters too. A mention in a Gartner or Forrester report isn't just a vanity metric. It's a signal to enterprise buyers that an independent expert found you credible enough to include. You don't need to pay for a full analyst engagement to get there. An initial pitch call with a relevant analyst costs nothing. If what you're doing is genuinely interesting, that relationship can lead to earned mention before you ever write a check.</p><p>Enterprise influencers, practitioners with meaningful LinkedIn followings who talk about your space, are increasingly part of this picture too. A credible third party who has organically mentioned your company carries weight that your own content simply can't replicate.</p><p><strong>What good looks like:</strong> Multiple external sources mentioning you, across multiple years, that you didn't pay for.</p><p><strong>What empty looks like:</strong> Nothing appears when someone searches your company name plus "review" or your company name plus the publication names in your space. The absence is itself a data point.</p><h3>3. Thought Leadership</h3><p>This is where companies reveal whether they actually understand the problem they claim to solve.</p><p>Content that's just promotional, "here's how our product works" or "five reasons to choose us," don't count. Enterprise buyers are looking for evidence that your team has a point of view. That you've thought about your space carefully enough to say something that isn't obvious.</p><p>The <a href="https://www.edelman.com/insights/thought-leadership-gets-b2b-buyers-back-into-game" target="_blank" rel="noopener noreferrer">Edelman-LinkedIn B2B Thought Leadership Impact Report</a>, which surveys thousands of global B2B decision-makers annually, has tracked this for years. 73% of B2B buyers consider thought leadership to be a better way of judging a company's expertise than marketing materials, and 54% say that companies which consistently produce thought leadership pieces have prompted them to research things they weren't previously considering.</p><p>One great quote from the report:</p><blockquote class="blog-pullquote"><p>75% of global B2B buyers and C-suite leaders say that a particular piece of thought leadership content has led them to research a product or service they were not previously considering. Among this group, 60% said that the content made them realize their organization was missing out on a significant business opportunity.</p></blockquote><p>There's a harder edge to this data worth noting. Approximately 70% of executives admitted that a piece of thought leadership content has made them wonder whether they should continue working with their current supplier, and 25% of those who questioned their supplier relationships ultimately ended or significantly reduced them.</p><p>Thought leadership isn't just acquisition. It's defense. Your competitors are either doing it or they're not. If they are, their content is reaching your existing customers too.</p><p>They are reviewing your writing. The question is whether your posts are worth reading.</p><p><strong>What good looks like:</strong> Original perspectives on your industry. Content that names real tensions and doesn't pretend everything is simple. Bylines and presentations that show your team's expertise holds up outside your own website.</p><p><strong>What empty looks like:</strong> A blog that rephrases things anyone could have Googled. Posts that announce features or awards with 
789no analysis. Topics that are adjacent to your actual expertise but don't demonstrate it. "10 tips for better [generic thing]."</p><h3>4. Social Presence</h3><p>Specifically LinkedIn. For B2B, it's the platform that matters. <a href="https://www.forrester.com/what-it-means/ep315-b2b-buyers-journey-generational-shift/" target="_blank" rel="noopener noreferrer">Forrester</a> research finds that younger buyers, now comprising nearly two-thirds of B2B buyers, are more likely than older buyers to turn to information sources not controlled by vendors. Meaning they are reaching out to their colleagues on private forums, looking for comments on LinkedIn, and reviewing reputation sites like G2.</p><p>The company page matters, but buyer scrutiny increasingly extends to the people behind the company. They're looking at the founders and senior team. How often do they post? What do they say? Do they seem like people who actually operate in this space, or does their profile look like it was set up to exist?</p><p>Consistency matters here more than volume. A company that posts something substantive every week looks more stable than one that posted fifteen times in January and then went quiet for four months.</p><p><strong>What good looks like:</strong> Active company page, founder and leadership presence that reflects genuine expertise. Commentary on industry topics that sounds like it came from someone who's actually doing the work.</p><p><strong>What empty looks like:</strong> A company page that hasn't been updated since the founding announcement. Founders with bare-minimum profiles. No employee activity visible. Or the opposite problem: a burst of content that abruptly stopped, which raises its own question about what happened.</p><figure class="blog-inline-figure"><img src="/images/blog/buyer-googled-linkedin-mockup.png" alt="LinkedIn company page mockup showing active B2B social presence" class="rounded-lg my-8 w-full" /></figure><h3>5. Newsletter / Consistent Content</h3><p>A newsletter is a proof-of-consistency signal. Whether someone subscribes or not, the existence of an active newsletter tells a buyer: this company shows up on a regular schedule. They have something to say and they say it consistently.</p><p>That consistency, over time, is a form of credibility that's hard to fake. Anyone can write one good blog post. Sustaining a newsletter for two years without stopping says something different about organizational stability and genuine engagement with a topic.</p><p><strong>What good looks like:</strong> A newsletter that's easy to find, has a real point of view, and has been running long enough to show a track record.</p><p><strong>What empty looks like:</strong> A sign-up form that links to a list with no recent issues. Or no newsletter at all, which on its own isn't disqualifying, but removes one credibility data point from a picture that may already be thin.</p><figure class="blog-inline-figure"><img src="/images/blog/buyer-googled-substack-mockup.png" alt="Newsletter mockup showing consistent B2B content publishing" class="rounded-lg my-8 w-full" /></figure><h3>6. Reviews and Social Proof</h3><p><a href="https://www.gartner.com/en/digital-markets/insights/b2b-marketing-trends" target="_blank" rel="noopener noreferrer">Gartner Digital Markets' 2024 Software Buying Behavior Survey</a> found that reading reviews before making a purchase decision is important for 98% of buyers, and 92% of buyers trust reviews written within the past year. This pattern shows up on platforms like G2, Capterra, Clutch, and Trustpilot depending on your category.</p><p>Reviews serve a different function than your own case studies. Your case studies say what you want them to say. Reviews say what your customers actually said. Buyers know the difference. IT decision-makers are particularly likely to be swayed by <a href="https://www.marketingprofs.com/articles/2024/51575/b2b-social-proof-boost-credibility-sales" target="_blank" rel="noopener noreferrer">expert testimonials</a>, and social proof tells B2B decision-makers: "This is a good product from a trustworthy business."</p><p><strong>What good looks like:</strong> Reviews that are specific, recent, and varied. Customers who describe what you actually helped them with, not just that they were "satisfied." Responses from your team that show you're paying attention.</p><p><strong>What empty looks like:</strong> No reviews at all. Three reviews from four years ago that all sound suspiciously similar. Or reviews that are overwhelmingly positive in a way that reads as coached.
789</p><p>The absence of reviews isn't a neutral signal for a company that's been operating for several years. It prompts a question: why hasn't anyone said anything publicly?</p><h3>7. Answer Engine Optimization (AEO) / Generative Answer Optimization (GEO)</h3><p>Your buyer is asking an LLM to do the vetting for them.</p><p><a href="https://www.forrester.com/blogs/from-keywords-to-context-impact-and-opportunity-for-ai-powered-search-in-b2b-marketing/" target="_blank" rel="noopener noreferrer">Forrester's</a> data suggests that nearly half of the "selection" phase now happens inside a chat interface. When a buyer asks AI, "Which of these three vendors is capable of a global rollout, handles XYZ, and speaks these languages?" they aren't just looking at your homepage. They want to know if you have all of the things, and they want that answer quickly.</p><p>AEO is the process of making sure that verdict is in your favor. If an AI cannot parse your technical specs or security standards because they are buried in a PDF or a gated form, you effectively don't exist in the AI-generated <a href="/resources/blog/martini-pipeline-abm-marketing-funnel-became" class="text-[#316263] font-bold underline">shortlist</a>. This is the new "invisible filter."</p><p><strong>What good looks like:</strong> Factual, declarative content and structured data that an LLM can cite with confidence. You want the AI to say, "Vendor X is the best fit because their documentation explicitly confirms SOC2 compliance and 24/7 support in EMEA."</p><p><strong>What empty looks like:</strong> A website that is all adjectives and no attributes. If your site is just a collection of "industry-leading" and "innovative" buzzwords, the answer engine will hallucinate a better-documented competitor into your spot.</p><p>The AI is looking for proof. If you don't provide the data, you're forcing the bot to guess. In enterprise sales, "guessing" is just another word for "disqualified."</p><h2>Why Consistency Across All Seven Matters</h2><p>This is where psychology becomes important.</p><p>In 1920, psychologist Edward Thorndike identified what he called the <a href="https://www.britannica.com/science/halo-effect" target="_blank" rel="noopener noreferrer">halo effect</a>: the tendency for a positive impression in one area to color our perception of everything else about a person or entity. A sharp logo? It must be a sharp company. A confident speaker? They must be an expert. The brain fills in the blanks based on very little information.</p><p><a href="https://www.mckinsey.com/capabilities/growth-marketing-and-sales/our-insights/b2b-business-branding" target="_blank" rel="noopener noreferrer">McKinsey's</a> analysis of B2B companies found that those with strong brands outperform weak ones by 20%, noting that many B2B companies still mistakenly think of branding as consumer-facing communication.</p><p>The reverse is equally true. A weak website casts doubt on the quality of your work. An empty social presence raises questions about whether the company is still active. One bad data point doesn't just affect that data point. It contaminates the read on everything else. Then the <a href="https://digitalcommons.murraystate.edu/etd/304/" target="_blank" rel="noopener noreferrer">horn effect</a> takes over, and suddenly everything you do is working against you.</p><p><a href="https://www.mckinsey.com/capabilities/strategy-and-corporate-finance/our-insights/the-halo-effect-and-other-managerial-delusions#/" target="_blank" rel="noopener noreferrer">McKinsey</a> has also written directly about this phenomenon in business, noting that a company's overall impression, its halo, shapes how we perceive its strategy, leaders, culture, and other elements, and that this halo effect can be created or destroyed by performance signals that may have nothing to do with underlying reality. If your performance doesn't back up your brand signals, the horn effect will go into place.</p><p>The seven touchpoints above don't operate in isolation. A buyer who lands on your website with a positive impression from a third-party mention will interpret an average website more generously than a buyer who arrives cold. Conversely, a buyer who finds your site thin will approach your pitch call with a skepticism that's harder to overcome than you think. When buyers have already chosen a favorite before the call, that favorite wins the deal most of the time. What you want is to already be the favorite.</p><h2>A Word on AI, Design, and the Limits of Tools</h2><p>AI has made it easier and cheaper to produce content, build websites, generate visuals, and maintain a presence. That's genuinely useful. But there's a conversation worth having about the difference between AI in skilled hands and AI in unskilled ones, because the output is not the same, and your buyers can tell.</p><p>Here's an honest internal example. I'll build something in an AI design tool and think it looks great. Then a trained designer looks at it and says "Oh dear no." They fix it. It looks a million times better. I can see that theirs looks better. I cannot do what they do.</p><figure class="blog-inline-figure"><img src="/images/blog/buyer-googled-dont-do-this.jpeg" alt="Side-by-side comparison of AI-generated design versus professionally refined design" class="rounded-lg my-8 w-full" /></figure><p>This isn't an AI problem. The tool is the same. The difference is that a real designer has spent years developing a trained eye, understanding hierarchy, whitespace, visual tension, color relationships, typography, in 
789ways that don't transfer just because you have access to a sophisticated tool. Writers know writing. Designers know design. Each discipline can use AI to accelerate its own expertise. Neither can use AI to replace the expertise it doesn't have.</p><p>When designers on Reddit discuss why AI-generated UX "feels off," spacing comes up constantly. The interfaces look professional but feel cramped or floaty in ways that are hard to articulate.</p><p>Good UX requires slowness in specific places. The pause where you reconsider whether users actually need this screen. The revision where you strip out half the elements because testing revealed people were overwhelmed. That judgment can't be automated (yet).</p><p>Research on professional versus non-professional evaluation of AI-generated design found that professional participants were adept at identifying deficiencies in AI-generated design schemes, with significant differences in focal points and observation patterns between professional and non-professional evaluators.</p><p>What's harder to explain is that you don't need to be a designer to feel it. Most people can't articulate what's wrong. They just feel a low-level unease, something that registers as "off" without being able to name what. That feeling is processed fast and it shapes perception before any rational evaluation begins. <a href="https://pubmed.ncbi.nlm.nih.gov/15582859/" target="_blank" rel="noopener noreferrer">Reber's processing fluency theory</a> suggests that ease of visual processing itself generates aesthetic pleasure, meaning design that requires effort to parse, even subtly, generates a negative response the viewer may not consciously attribute to anything.</p><p>The implication is not that you should avoid AI tools. It's that AI is a multiplier, not a substitute. In the hands of a skilled designer, it accelerates good work. In the hands of someone without design training, it mostly accelerates mediocrity with a professional finish, which is arguably more dangerous than obviously bad design, because it's harder to recognize.</p><p>This matters for your seven touchpoints because buyers are looking at your website, your social content, your collateral, and your visual identity and making rapid, mostly unconscious assessments. Consistency, coherence, and visual quality create the halo that makes everything else land better. The absence of those things creates a low-level skepticism that follows the buyer into the call.</p><h2>The Question to Ask Yourself</h2><p>Go look at your own seven touchpoints right now. Not through your own eyes, but through the eyes of a skeptical enterprise buyer who found you during research, hasn't talked to you yet, and is trying to figure out whether you're a real company that's going to be around in two years.</p><p>What do they find? And does it earn the meeting, or just survive it?</p><p>The companies that win enterprise business before the call starts aren't necessarily the ones with the best product. They're the ones who made it easy for a careful buyer to feel confident. That confidence is built across these six places, consistently, over time.</p><p>That's the work.</p><div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Ready to Fix Your Seven Touchpoints?</p><h3>Start With Positioning</h3><p>Hunter &amp; Bard helps B2B companies in deep tech, telecom, energy, and hardware sharpen their positioning and build the brand presence that earns trust before the first conversation. If the seven touchpoints above gave you a list of things to fix, that's where we start.</p><a href="/contact" class="blog-inline-cta-link">Get in touch →</a></div>`},{id:"50",image:nP,title:"Marketing debt - What is it? And why do you care?",slug:"marketing-debt-what-is-it-and-why-do-you-care",category:"Enterprise Marketing",seoTitle:"Marketing debt - What is it? And why do you care?",seoDescription:"Marketing debt is the compounding cost of shortcuts you took to ship fast. Learn what it is, why it stalls growth, and how to pay it down.",imageAlt:"Marketing Debt vs Technical Debt comparison for B2B startups",excerpt:"You've had your startup for awhile. You've bootstrapped, and you've succeeded. Your sales team has grown and has been exceeding goals, only you haven't...",readTime:4,tldr:'Marketing debt is the accumulated <a href="/resources/blog/the-18-month-tax" class="text-[#316263] font-bold underline">cost</a> of neglecting marketing while focusing on sales. Fixing it requires 1–2 years of systematic investment in messaging, branding, and lead generation infrastru
789cture.',content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li><strong>Marketing debt</strong> is the accumulated cost of shortcuts, deferred branding, and neglected lead generation, analogous to technical debt.</li><li>It compounds over time: the longer you wait, the more expensive and disruptive the fix.</li><li>Fixing it requires <strong>1–2 years</strong> of systematic investment in messaging, branding, and scalable lead gen.</li><li>Start with your website: 60% of B2B buying decisions happen before a prospect contacts you.</li></ul></div><p>You've had your startup for awhile. You've bootstrapped, and you've succeeded. Your sales team has grown and has been exceeding goals, only you haven't invested in marketing. And now you're starting to feel it.</p><p>Your marketing just might be hurting.</p><p>You proudly grew with moderate, or no, investment. And that means everything, justifiably, went into sales. That's what was needed to keep you alive. You have a team to support and a company to grow, if it wasn't bringing immediate ROI it didn't get attention. And grow you did.</p><p>You've got customers, and they <strong>love</strong> you. You know how amazing your company is, and now it's time for the rest of the world to know how good you are. Only there's no awareness in the general market. Your Sales team is awesome, but it's starting to putter because the lead flow is slowing down. Reaching out to their network worked really well in the beginning. Now their network has been farmed. Sales are growing, but not at the same rate. Not because your product isn't great, but because you didn't have the time to set up a consistent, scalable lead generation process. You didn't have the resources, and sales was more important than marketing. As it should have been, sales is how the company has gotten to where it is now.</p><p>You probably do not have a consistent clear message. Or the right tools set up, and the ones set up probably aren't optimized. Perhaps you haven't been paying attention to analytics like you should, or maybe your look and feel is scattered and disjointed.</p><p><strong>You have Marketing Debt.</strong> Like <a href="https://en.wikipedia.org/wiki/Technical_debt" target="_blank" rel="noopener noreferrer">Technical Debt</a>, it means the quick fixes and shortcuts, or the simple ignoring of processes that worked when you were small and your growth was organic, means that later you have some re-working, re-building, and process creating to implement in order to grow to critical mass.</p><p>Depending on how bad the Marketing Debt is, it can easily take a year to 2 years sort out your messaging, your look and feel, the processes, and build a scalable lead generation model.</p><div class="blog-expert-verdict"><h3>Strategic Insight: Hunter & Bard</h3><p>In our 14+ years of working with B2B companies entering and scaling in the US market, marketing debt is the single most common (and most underestimated) growth blocker we see. Companies that address it early with a focused sprint on messaging and positioning recover 2–3x faster than those who layer tactical campaigns on top of a broken foundation.</p></div><h2>Where to start to fix your marketing debt?</h2><p>At this point your marketing team is probably anemic, over-worked, stressed out, and under producing, because there's too much to be done and where the heck do you start?</p><p>Start with where sales come from now, and what methods of lead gen you want to test in the future.</p><p>Let's look at some of the ways to fill the lead gen funnel:</p><ul><li><strong>Outbound:</strong> Building lists, cold email workflows, cold calling</li><li><strong>Events:</strong> Conferences, trade shows, CABs, PACs, hosted evenings. Either your own or going to others</li><li><strong>Advertising:</strong> SEM, Facebook, industry publications, ads in newsletters, print, billboards, paid article placement</li><li><strong>Inbound:</strong> Blogging, guest blogging, landing pages, giving away Case Studies, White Papers, and data sheets</li><li><strong>Earned Media / PR:</strong> Press write ups, reviews, industry pundit and analyst outreach</li><li><strong>Referral:</strong> Partner programs and incentives for customers</li></ul><h2>Messaging</h2><p>Typically messaging means the website. Why? Because 60% of all business to business buying decisions are made before someone contacts your company and the bulk of that decision is made from information from the website. Your website is crucial.</p><p>The first stage of most websites the content is long and explains what your product is, even before, occasionally, the benefits. Why? Because no one knows what you do yet, and it needs to be explained. And you'll find at various stages of growth that message changes, gets shorter, more succinct. Your message starts to resonate as you explain the benefits instead of features. You speak to what your customer wants, because now you have customers and you know 
789what they want. Now is the time to create a messaging guide, and to consider re-doing your website.</p><h2>Branding</h2><p>Have you been working with one designer the entire time? Do you have a brand book that clearly states the rules so that your quickly growing company can fly in formation and show a united face to the public? If not, your brand might need some work. A strong brand builds mindshare, which increases recognition and trust and makes meetings easier to get, and deals easier to close. Design is meant to sell. Everyone knows T-Mobile Magenta, the Apple logo, and Intel Inside.</p><div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Recommended Next Step</p><h3>Brand & Messaging Sprint</h3><p>A focused 2-week sprint to align your positioning, messaging, and visual identity, designed specifically for B2B companies ready to fix their marketing debt and scale.</p><a href="/products/sprint" class="blog-inline-cta-link">Learn about the Sprint →</a></div><h2>Marketing Materials</h2><p>Does your sales team have the materials they need to get deals done? Do you have recent case studies and white papers? Testimonials and data sheets? Videos? Infographics? Webinars? What's typical for your market? What's missing? Now is the time to make a list of what you need and start checking things off. While making this list think about how materials can be re-purposed. White papers and case studies with similar subjects can be gated on a landing page and go into an outbound email campaign. These landing pages can also be added to the bottom of a blog post through a Call To Action (CTA).</p><p>This is just the start of things that need to be done, and depending on how agile your organization is, it can take 6 months to a year or more to get these things sorted. Hiring takes time, training takes time, and creating takes time.</p><p>In future posts I'll focus on the Lead Generation Funnel tactics mentioned above.</p>`},{id:"51",image:eP,title:"5 things to consider before you launch",slug:"5-things-to-consider-before-you-launch",seoTitle:"SaaS Launch Strategy: 5 Steps Before Your First Sale",seoDescription:"Planning a B2B SaaS product launch? Master buyer personas, website design, naming strategy, and enterprise strategy fundamentals before launch.",imageAlt:"Strategic SaaS launch planning and B2B enterprise strategy checklist",category:"Enterprise Strategy",excerpt:"Coming up with a killer idea for a SaaS product is just the very start of the road. Before you make your first sale and see your service start to benefit...",readTime:3,tldr:"",content:`<div class="blog-key-takeaways"><h3>Launch Readiness Checklist</h3><ul><li>Have you validated your company name for uniqueness and domain availability?</li><li>Is your website professionally designed for your target buyer?</li><li>Have you built detailed buyer personas from real audience research?</li><li>Do you have a marketing sales funnel mapped to content for each stage?</li><li>Is your social media presence established on the right platforms?</li></ul></div>
790Coming up with a killer idea for a SaaS product is just the very start of the road. Before you make your first sale and see your service start to benefit someone's business there's a whole lot of ground to cover and we're not even talking about the engineering side of things. It's tempting to start throwing things at the wall in the hopes that something sticks, but we highly recommend not rushing the process or you'll just double the amount of work you have to do down the road.
791<h2>Pick a great name</h2>
792A great name is everything. It's important for business recognition, and because it's the first thing people will hear and know about your company. <a href="/resources/blog/the-definitive-guide-to-naming-your-company">We have some tips to get you started. </a>Take your time with this one, it's a critical part of a launch. You don't want to rush it, changing names later on down the road comes with countless challenges.
793<h2>Website design</h2>
794Website design is another one of those things that feels like maybe it could be a little bit rushed, <a href="/resources/blog/why-your-clients-arent-converting-and-what-you-can-do-to-change-that">but really shouldn't be</a>. <a href="/resources/blog/framing-matters-use-your-words-well">There's a lot of science that goes into designing the ideal website</a> for the ideal audience. Don't be lulled into thinking that, just because website services like Squarespace offer a plug-and-play option where you can drag sections here and there, you could design your own website. Some things are best left to the professionals. If you don't have any design background, get help. But before you call your professional we recommend starting with number 3, it'll help a lot in the design process.
795<h2>Buyer personas</h2>
796Buyer Personas are fictional characters dreamed up to represent your ideal customer. This part of the launch process can be critical because it can really help you refine your product offerings and your marketing approach. <a href="/resources/blog/creating-useful-buyer-personas">Follow the tips we've outlined here</a>, but be aware that you're going to need to enlist some help from friends or other people whom you consider to be your target audience to make this work.
797<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Ready to Enter the US Market?</p><h4>US Market Intensive</h4><p>Skip the guesswork. Our 8-week intensive gives international B2B companies the enterprise strategy, messaging, and launch infrastru
797cture to enter the US market with confidence.</p><a href="/products/intensive" class="blog-inline-cta-link">Explore the Intensive →</a></div>
798<h2>Marketing sales funnel</h2>
799Once you've identified your ideal audience, found a name, have a very good grasp of exactly what you're offering, and have a website, you're ready to start thinking about your marketing materials. Get to know <a href="/resources/blog/is-the-sales-funnel-ruining-your-conversion-rate">the Marketing Sales Funnel</a> so you know exactly what kind of marketing materials you'll need. After that, it's <a href="/resources/blog/content-thats-worth-your-time">time to start writing</a>!
800<h2>Social presence and more</h2>
801There are countless more things to consider before you decide that you're completely ready to launch. First, are you ready to be <a href="/resources/blog/social-media-kpis-what-matters">present on social media</a>? And if so which sites? Which matches your brand personality and will serve your purposes better? There's no doubt that you need a blog, but what kind will you have? <a href="/resources/blog/5-compelling-reasons-to-have-a-blog-on-your-saas-website">We have a few suggestions about that</a>. Take a look at <a href="/resources/blog/why-you-should-consider-growth-hacking">our article on growth hacking</a> to see what hacks might help you get launched faster and with more power. And don't forget, <a href="/resources/blog/the-importance-of-setting-goals-in-marketing">it's important to set goals and stick to them</a>.
802<div class="blog-expert-verdict"><h3>Expert Verdict</h3><p>Most SaaS founders rush to market with a half-built brand and wonder why pipeline stalls. The five pillars above — naming, design, personas, funnel architecture, and social presence — aren't optional pre-launch tasks; they're the foundation of every successful enterprise motion. At Hunter & Bard, we've guided dozens of B2B companies through this exact sequence. The companies that invest in these fundamentals before launch consistently outperform those that try to retrofit them later.</p></div>
803<h2>Strategic Summary</h2>
804<ul><li>Your company name is a strategic asset — validate it for trademark conflicts, domain availability, and market resonance before committing.</li><li>Professional website design isn't a luxury; it's your highest-converting sales tool and the foundation of buyer trust.</li><li>Buyer personas built from real audience research prevent wasted spend and misaligned messaging across every channel.</li><li>A mapped marketing sales funnel ensures you have the right content for every stage of the buyer journey.</li><li>Strategic social media presence on the right platforms amplifies your launch and builds early community momentum.</li></ul>`},{id:"52",title:"Is the sales funnel ruining your conversion rate?",slug:"is-the-sales-funnel-ruining-your-conversion-rate",category:"Enterprise Strategy",seoDescription:"Is the traditional sales funnel hurting your B2B conversion rate? Learn why modern enterprise buyers do not move in a straight line, and what to do.",excerpt:"We all know about the tried and true trusted sales funnel and how it helps to weed out unqualified leads so your sales team can focus on qualified leads and...",readTime:5,tldr:"",image:hP,content:`<p>We all know about the tried and true trusted sales funnel and how it helps to weed out unqualified leads so your sales team can focus on qualified leads and increase productivity. The trusted sales funnel allows you to source leads and then nurture them to ensure that as many as possible convert into clients. The basics of the sales funnel are always the same. Acquire as many leads as possible during the ‘awareness stage,’ push them through the funnel, and gradually you are left with those that are ready to convert into sales. Makes sense right? But could the sales funnel secretly be ruining your conversion rate?</p>
805
806Like many others, you’re probably looking at your sales funnel in the wrong way. If you believe that your sales funnel is a one-way event and you’re willing to shed leads through the process, then you’re causing serious damage to your sales conversion rate. The way sales happens today has changed and you need to update the way you commit to the sales funnel.
807&nbsp;
808<h2>Not every consumer will start at the beginning</h2>
809There are a vast number of avenues from which a person can actively begin their journey with your brand. Some begin at the very beginning of the sales funnel with no knowledge of you, your brand or your product, and will enter the sales funnel during the awareness stage. Then there are those that will come into the sales funnel with prior knowledge of the product and what they believe they want, or need from you. This projects these consumers straight into the middle of the sales funnel, thus ensuring they miss out on the content that you have prepared for the first stage of the sales funnel.
810&nbsp;
811<h2>Why is missing a stage in the sales funnel so dramatic?</h2>
812You are looking to book a family holiday, you want a family holiday that will give you the perfect balance of family time and a little freedom from the kids. Along comes your friend who tells you of a place that her friend’s brother went to with his family the year before and you decide to check it out. In this example you’ve been given a recommendation and will immediately jump into the sales funnel, skipping right past the awareness and the discovery stages, since you’ve already sourced the company and what you want from it, and you have landed directly in the consideration stage.
813
814Due to you having skipped the first two stages, many marketers will wrongly assume that you have some knowledge of the brand. All the first stage content, directed at new leads is completely bypassed. Not only are you missing out on relevant content, but also the engagement events that occur during those stages.
815
816It’s the same thing in the B2B SaaS world. Leads that enter the sales cycle during the first two stages of the funnel are actively sourcing out information that is aimed at educating them towards brand recognition and building engagement and a relationship. With social media and mouth-to-mouth recommendations, more and more people jump directly into the middle of a sales funnel only to jump straight back out to consider another brand, all because no relationship has been carefully nurtured and no loyalty has been gained.
817
818The sales funnel is not a one-way system. Consumers are no longer sitting ducks waiting to be targeted and sailed down one route, they are actively gathering information from various sources; web, mobile, social and will move back and forth between the different stages rather than following the sales funnel directly.
819<h4>Lack of engagement = Lower retention</h4>
820<strong><a href="http://www.rosetta.com/reports/customer-engagement-rosetta-consulting-study/customer-engagement-from-the-consumers-perspective/" target="_blank" rel="noopener noreferrer" data-mce-target="_blank"><img class="owMrkClick aligncenter" src="http://cdn2.hubspot.net/hub/529323/hubfs/Sales_Funnel_Quote.png?t=1491866510481&amp;width=736&amp;height=137&amp;
820name=Sales_Funnel_Quote.png" sizes="(max-width: 736px) 100vw, 736px" srcset="//cdn2.hubspot.net/hub/529323/hubfs/Sales_Funnel_Quote.png?t=1491866510481&amp;width=368&amp;height=69&amp;name=Sales_Funnel_Quote.png 368w, //cdn2.hubspot.net/hub/529323/hubfs/Sales_Funnel_Quote.png?t=1491866510481&amp;width=736&amp;height=137&amp;name=Sales_Funnel_Quote.png 736w, //cdn2.hubspot.net/hub/529323/hubfs/Sales_Funnel_Quote.png?t=1491866510481&amp;width=1104&amp;height=206&amp;name=Sales_Funnel_Quote.png 1104w, //cdn2.hubspot.net/hub/529323/hubfs/Sales_Funnel_Quote.png?t=1491866510481&amp;width=1472&amp;height=274&amp;name=Sales_Funnel_Quote.png 1472w, //cdn2.hubspot.net/hub/529323/hubfs/Sales_Funnel_Quote.png?t=1491866510481&amp;width=1840&amp;height=343&amp;name=Sales_Funnel_Quote.png 1840w, //cdn2.hubspot.net/hub/529323/hubfs/Sales_Funnel_Quote.png?t=1491866510481&amp;width=2208&amp;height=411&amp;name=Sales_Funnel_Quote.png 2208w" alt="Sales_Funnel_Quote.png" width="736" height="137" /></a></strong>
821
822If you are not able to engage fully with a lead then you will be unable to build a fulfilled relationship. The results will affect the customer experience. Customer experience for someone that jumps right into the purchase stage will differ immensely from someone who has followed the sales funnel and become a nurtured lead. Nurtured leads will have had time to build an attachment to a brand which leads to increased retention.
823<h4>Customer experience journey</h4>
824The notion of a sales funnel can be interchanged with the customer experience journey. The idea is to build a fully recognizable journey for the customer regardless of where they join you in the sales funnel. You need to craft an action plan for every event that occurs, and turn every actionable event into an engagement, whether it be responding to a social media response that your company was tagged in when the user was recommended your services, or a thank you response to a purchase that will guide the user back to the product for add on services. Your goal is to turn a decision into an engagement.
825
826<a href="http://www.rosetta.com/reports/customer-engagement-rosetta-consulting-study/customer-engagement-from-the-consumers-perspective/" target="_blank" rel="noopener noreferrer" data-mce-target="_blank"><img class="owMrkClick aligncenter" src="http://cdn2.hubspot.net/hub/529323/hubfs/Second_Sales_Funnel_Quote.png?t=1491866510481&amp;width=732&amp;height=107&amp;name=Second_Sales_Funnel_Quote.png" sizes="(max-width: 732px) 100vw, 732px" srcset="//cdn2.hubspot.net/hub/529323/hubfs/Second_Sales_Funnel_Quote.png?t=1491866510481&amp;width=366&amp;height=54&amp;name=Second_Sales_Funnel_Quote.png 366w, //cdn2.hubspot.net/hub/529323/hubfs/Second_Sales_Funnel_Quote.png?t=1491866510481&amp;width=732&amp;height=107&amp;name=Second_Sales_Funnel_Quote.png 732w, //cdn2.hubspot.net/hub/529323/hubfs/Second_Sales_Funnel_Quote.png?t=1491866510481&amp;width=1098&amp;height=161&amp;name=Second_Sales_Funnel_Quote.png 1098w, //cdn2.hubspot.net/hub/529323/hubfs/Second_Sales_Funnel_Quote.png?t=1491866510481&amp;width=1464&amp;height=214&amp;name=Second_Sales_Funnel_Quote.png 1464w, //cdn2.hubspot.net/hub/529323/hubfs/Second_Sales_Funnel_Quote.png?t=1491866510481&amp;width=1830&amp;height=268&amp;name=Second_Sales_Funnel_Quote.png 1830w, //cdn2.hubspot.net/hub/529323/hubfs/Second_Sales_Funnel_Quote.png?t=1491866510481&amp;width=2196&amp;height=321&amp;name=Second_Sales_Funnel_Quote.png 2196w" alt="Second_Sales_Funnel_Quote.png" width="732" height="107" /></a>
827
828The sales funnel focuses on the final purchase, hence its name, sales! But we as marketers understand, the end purchase is not what makes a successful business, relationships are what drives success. Customer satisfaction and a positive customer experience in today’s world is vital because of the tremendous effect social media and customer reviews have on businesses. If you thought that bad news travelled fast in the 90’s, can you imagine the strength a single word can have now that the world is constantly online?
829
830Building the brand experience into a product and into a sale encourages retention and builds value. Although the sales funnel is focused on a final sale, we as marketers should not be separating the sales aspect of a business from the customer retention and engagement. These two separate entities should be endorsed as one. The sales funnel is a great starting point for businesses, but it is not an absolute and should be seen as a flexible journey that encourages a positive customer experience.`,seoTitle:"Is the sales funnel ruining your conversion rate?"},{id:"54",title:"A little politeness goes a long way: Introducing Permission selling",slug:"a-little-politeness-goes-a-long-way-introducing-permission-selling",category:"Enterprise Strategy",seoDescription:"Permission selling replaces aggressive outreach with trust-based engagement. Learn how buyer consent drives higher B2B enterprise conversion.",excerpt:"You have to admit that when you get a phone call while you are right in the middle of doing something and you answer, only to find that it’s just another sales...",readTime:3,tldr:"",content:`You have to admit that when you get a phone call while you are right in the middle of doing something and you answer, only to find that it’s just another sales call, you might get a tad frustrated. Doesn’t it annoy you that someone is trying to connect with you and trying to sell you a product when it just isn’t convenient for you? Rest assured, you are not alone in experiencing feelings other than pleasure when this happens. Nor are you alone in feeling like these negative feelings drive you to not want to indulge in conversation with this company, even if they’re selling a product that you’d potentially be interested in purchasing.
831
832In-your-face sales tactics are off-putting and out-dated. It’s time for sales teams to modernize their sales techniques and start selling the polite way. Welcome to permission selling, the future of successful marketing and selling techniques.
833
834Permission selling is based upon the Inbound marketing theory, which places the customer’s needs above all other. It’s a form of sales technique that allows the buyer to rule the engagement and the speed of the sales process.
835<h2>What is permission selling?</h2>
836Permission selling (a phrase coined by Seth Godin) is a sales theory that allows the customer to come to you, to be captured by your presence, without you reaching out to them. The whole concept is based around reaching out to people only after they’ve given you permission.
837
838Take a look around you. What brand do you see that truly captures your attention? Not exactly B2B, but I’ll still use the Haribo candy advertisements as my example. Totally aside from the fact that I am totally hooked on anything sweet, these advertisements capture my attention and make me smile. They make me remember the brand and make me want to approach the brand to find out more. No one has once asked me to taste the product, no one has offered me a special price if I purchase, nothing has been sold to me. I am attracted to this brand purely through my own free-will.
839
840<iframe src="https://www.youtube.com/embed/9scm3NCIH_E" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe>
841
842Whilst enjoying the video I have allowed this company to advertise their product to me, thus opening up a gateway for them to pursue engagement and start a relationship. I have inadvertently listened to their advertisement, I have bought into their brand and I am willing to listen to their marketing. If I am to click through to their website looking for more fun videos, I am likely to agree to complete an online form for a free sample product, or for the first glimpse of their next advertisement. They have gained my permission to sell to me.
843
844<img class="" title="Permission_Marketing_1.png" src="http://cdn2.hubspot.net/hub/529323/hubfs/blog-files/Permission_Marketing_1.png?t=1491866510481&amp;width=1920&amp;name=Permission_Marketing_1.png" sizes="(max-width: 1920px) 100v
844w, 1920px" srcset="//cdn2.hubspot.net/hub/529323/hubfs/blog-files/Permission_Marketing_1.png?t=1491866510481&amp;width=960&amp;name=Permission_Marketing_1.png 960w, //cdn2.hubspot.net/hub/529323/hubfs/blog-files/Permission_Marketing_1.png?t=1491866510481&amp;width=1920&amp;name=Permission_Marketing_1.png 1920w, //cdn2.hubspot.net/hub/529323/hubfs/blog-files/Permission_Marketing_1.png?t=1491866510481&amp;width=2880&amp;name=Permission_Marketing_1.png 2880w, //cdn2.hubspot.net/hub/529323/hubfs/blog-files/Permission_Marketing_1.png?t=1491866510481&amp;width=3840&amp;name=Permission_Marketing_1.png 3840w, //cdn2.hubspot.net/hub/529323/hubfs/blog-files/Permission_Marketing_1.png?t=1491866510481&amp;width=4800&amp;name=Permission_Marketing_1.png 4800w, //cdn2.hubspot.net/hub/529323/hubfs/blog-files/Permission_Marketing_1.png?t=1491866510481&amp;width=5760&amp;name=Permission_Marketing_1.png 5760w" alt="Permission_Marketing_1.png" width="1920" data-constrained="true" />
845<h2>How does permission marketing work?</h2>
846Permission marketing focuses on the following formula:
847<ul>
848 	<li>Attract – Bringing strangers to your brand through attractive content.</li>
849 	<li>Convert – Turning strangers into visitors by incorporating call-to-actions within your content.</li>
850 	<li>Close – Converting visitors to leads through follow-up lead nurturing</li>
851 	<li>Delight – Delivering the final sale and following through with retaining customers</li>
852</ul>
853According to <a href="http://blog.hubspot.com/marketing/permission-marketing-automation#sm.00114qco3bczcwz10rs2hadfn6nv3">Hubspot</a>, permission marketing is successful and leads to better results than direct marketing because your communications are:
854<ul>
855 	<li>Anticipated: The lead is waiting for your email.</li>
856 	<li>Relevant: The content is something the lead is interested in.</li>
857 	<li>Personal: The content is relevant to the lead.</li>
858</ul>
859As Seth Godin puts it, "Permission marketing turns strangers into friends and friends into loyal customers," "it's not just about entertainment - it's about education." Whether we're selling candy, or promoting a unique B2B SaaS service, we, as marketers, need to forget that we are trying to sell a product and need to create appealing content that not only educated, but also ignites the imagination of the buyer.`,seoTitle:"Permission Selling: Politeness as a B2B Tactic"},{id:"55",title:"A few helpful tips to beat blogger’s block",slug:"a-few-helpful-tips-to-beat-bloggers-block",category:"Enterprise Marketing",seoDescription:"Blogger's block kills B2B content momentum. A few practical tips to get unstuck and keep your enterprise content calendar moving.",excerpt:"It’s one thing to know that you should be blogging regularly , another to know what types of posts you should be writing , and yet a third to know what to...",readTime:5,tldr:"",content:`It’s one thing to know that <a href="https://hunterandbard.com/5-compelling-reasons-blog-saas-website/">you should be blogging regularly</a>, another to know <a href="https://hunterandbard.com/content-marketing-plan-cover-4-core-content-types/">what types of posts you should be writing</a>, and yet a third to know what to actually write in those posts. That’s right, writer’s block strikes for everyone, not just professional writers. So what’s a person to do when they know they have to get something up on the company blog and yet have zero idea what to write about? We have a couple suggestions.
860<h2>What's your company philosophy?</h2>
861It probably goes without saying that you’re in business because you strongly believe in what you do. Why not use your blog as the platform from which you can share some of your motivations for starting your SaaS company and for keeping it up and running. What prompted the launch? What has guided the development of the services you offer? What feedback has helped shape the growth of the company? All of these topics help establish you as an expert in the field and gives your company a unique
862<h2>The low hanging fruit: Client questions</h2>
863Even if you offer the world’s simplest SaaS product possible, your potential and existing clients are still going to have some questions they need answered. For the most part these are going to be addressed in your FAQ section, but once in a while a question will come along that deserves a slightly more in depth answer. Ask your sales team members to keep a running log of any interesting queries they have to field so that when the curse of the blinking cursor strikes you’ll have a list to pluck from.
864<h2>What's happening in the industry?</h2>
865In order to keep your finger on the pulse of what is happening in your industry you should really be actively participating in industry forums, following industry news, and even attending industry events. The good news is that doing so doesn’t just help guide your product development cycle, it can also feed your blog content. Is there a hot topic that’s being heavily debated in forums? Instead of sharing all of your insights in the comments section, you can craft a blog post sharing your take on the situation. Was a groundbreaking announcement just made? Again, share your thoughts in your blog. Posts like these are ideal for social sharing because it proves that you’re staying on top of relevant developments and gives potential users a way to get to know y
865ou.
866<h2>What's happening in the news?</h2>
867Industry news isn’t the only thing you should be keeping close tabs on. Current events might be relevant to your industry in unexpected ways. What’s happening today that can inspire a blog post and maybe gain you a few new readers and potential leads? Keep an eye on trending topics to see if maybe you can take advantage of the buzz. Please note: we in no way endorse taking advantage of national or even local tragedies to toot your own horn. There are classy ways to benefit from trending items and ways that are not so classy. Trust your gut to know the difference.
868<h2>Seasons and holidays</h2>
869Not everyone is going to have a SaaS product that’s the ideal gift for a Valentine’s Day present, but seasons and holidays are wonderful inspirations for blog posts. While the holiday gift idea might not be a great angle to grab, maybe you have the service that can improve a company’s productivity as they navigate the holiday season. Take a look at the season or upcoming holidays and see if you can tease out a relevant blog post or two.
870<h2>Behind the scenes</h2>
871One of the reasons Zappos became so incredibly popular so fast is because the CEO strongly believed in letting people see the behind the scenes of the operation. Customers loved seeing where the Zappos employees worked; it made them feel like they were buying from people they knew rather than from a soulless computer. You might not be selling something as emotionally evocative as shoes, but you can benefit from the same concept. Let your company culture shine through in your posts. Share pictures from the holiday party, of the conference rooms, or anything else that you feel makes your story come to life. You might be surprised at how much your clients enjoy seeing what’s happening on the other side of their computer screens.
872<h2>Real stories come to life</h2>
873Sometimes, to be converted to a paying client, all someone has to see is the product in action. Since software is inherently hard to see, the next best thing is hearing about how another user is putting it to work. If you have a client who is using your SaaS service in a unique or innovative way or someone who is a true power user, featuring their story on your blog is an amazing way to showcase what they’re doing so that others might be inspired. It’s also a great way to show clients how grateful you are for their business.
874<h2>Take aways and mistakes</h2>
875Most people shy away from ever admitting they were wrong, but great things come to those who have the courage to do so in as public a space as the company blog. Not only does standing up and saying “We were wrong about how we chose to do this.” show strength of character and a propensity for growth, it also tells your users that they can have inherent trust in what you are currently doing. It’s relationship-building gold. What have you tried and failed at? What have you implemented and had to change or remove? Fess up. Show off what you learned and how it improved the next thing you created. You’ll find that this is just another situation where honesty really is the best policy.`,seoTitle:"A few helpful tips to beat blogger’s block | Hunter & Bard"},{id:"403",title:"5 compelling reasons to have a blog on your SaaS website",slug:"5-compelling-reasons-to-have-a-blog-on-your-saas-website",category:"Enterprise Marketing",seoDescription:"Five data-backed reasons every B2B SaaS company needs a blog. Drive organic traffic, build authority, and support your enterprise sales funnel.",excerpt:"When you’re just getting started and your scrappy team is already stretched to the max, it’s hard to embrace the concept that, on top of everything else, you...",readTime:3,tldr:"",content:`When you’re just getting started and your scrappy team is already stretched to the max, it’s hard to embrace the concept that, on top of everything else, you need to create and maintain a company blog. And yet, we’re here to tell you that we don’t just suggest that you do, we insist on it.
876
877There are countless reasons why a blog should be one of the cornerstone elements of your content marketing strategy. How about we just give you a few to get you started?
878&nbsp;
879<h2>1. A blog drives traffic to your site</h2>
880We understand that the end goal of all of your marketing efforts is to increase traffic to your site so you can generate more sales. Great news, a blog will help you do just that.
881
882Generating good content on a consistent basis keeps your website relevant which means that search engines will keep serving up links to your site in response to user queries. Informative and useful posts are also easily shared via social media, giving your fans a way to help promote you to their networks, and giving you easy content to share on your social channels.
883&nbsp;
884<h2>2. A blog keeps your site relevant and interesting</h2>
885You only update SaaS offerings every so often, so for the most part, once your site has been created, the copy is rarely updated or changed. The goal of a search engine is to serve up the most up to date and relevant information they can find, so, if your site remains static and unchanged, very quickly, it’ll stop ranking at all. Regular updates on the blog make it seem as though the entire site is fresh and current. In short, it’s SEO gold. Even better, a great blog gives your existing clients a reason to keep coming back and gives you opportunities to upsell or cross-sell to them.
886&nbsp;
887<h2>3. A blog establishes you as an expert in the field</h2>
888Prospective clients don’t usually have much to go on when they’re searching for the ideal SaaS company to work with. They can read reviews, sometimes see the service at work for other clients, but other than that, it’s often slim pickings. That’s why so many of them rely on the company blog to garner more information about what you do and who you are. A blog is an incredible tool for connecting with potential and existing clients. It’s a great platform for sharing relevant information, for answering questions, or just for educating people about what services you provide and how those can help them reach their objectives.
889&nbsp;
890<h2>4. A blog supports your sales efforts</h2>
891The content that you place on your blog can, and should be, an intrinsic part of your marketing sales funnel. You can share customer stories, case studies, and key information about your services. You can address and respond to prevalent pain points or answer commonly asked questions. All of which helps inform readers and convince them that you have the service that will help them meet their goals.
892&nbsp;
893<h2>5. A blog gives your company personality a place to shine</h2>
894The beauty of blogs is that there’s lots of space in which you can express yourself. While the content has to be relevant and on target, it can be expansive. Unlike your home page where you need to be incredibly mindful of brevity and focus, on the blog, you can let your company’s personality fly. Think of the blog as a place where things can be expanded, explored, and exposed. 
894Company culture, brand ideals, thought leadership. It’s all valuable and deserves to have a place to thrive.`,seoTitle:"5 Reasons Your B2B SaaS Website Needs a Blog"},{id:"406",seoTitle:"5 High-Impact CRO Tricks to Boost B2B Conversion Rates",title:"5 great conversion rate optimization (CRO) tricks you should know",slug:"5-great-conversion-rate-optimization-cro-tricks-you-should-know",category:"Frameworks",image:dP,imageAlt:"Conversion Rate Optimization (CRO) strategy and website analytics visualization",excerpt:"Conversions are all about ensuring a visitor to your website undertakes an action while engaging with your brand. That's right. Conversion equals action, not...",readTime:4,author:"Shira Abel",seoDescription:"Master conversion rate optimization with five proven tricks. Streamline your site, clarify your messaging, and use heuristics to drive B2B conversions.",tldr:"",content:`<div class="blog-key-takeaways"><h3>Key Takeaways</h3><ul><li>Conversion equals action, not just sales.</li><li>Simplicity and clarity are the primary drivers of higher conversion rates.</li><li>Use heuristics to guide visitors toward your desired goal in under 8 seconds.</li></ul></div>
895
896<p>Conversions are all about ensuring a visitor to your website undertakes an action while engaging with your brand. That's right. Conversion equals action, not sale. Despite common belief, &#8220;conversion&#8221; doesn't directly reference the total number of sales that have occurred via your website. Instead, the conversion rate relates to any measureable action undertaken by a lead at any stage of engagement with your brand.</p>
897
898Prompts for a measurable action (often referred to as a call-to action (CTA)) can vary and often differ depending where they're placed in the <a href="/services/enterprise-strategy">sales funnel</a>. First time visitor, as we well know, are rarely ready to sign up, but they're often willing to carry out a different action. They might be willing to: create an account, sign up for an email, or request to download information. Because of that, CTAs placed throughout a website should be relevant to the visitor at the exact moment in their buyer's journey.
899
900Instead of a benchmark for sales, conversion rates are a structured and systematic way to understand your website's performance. Analyze the different actionable events on your website by tracking and measuring the effectiveness of your various CTAs to see if they meet your website's unique objectives and KPIs. This data can then be used to plan improvements.
901&nbsp;
902<h2>Now let's increase those conversion rates</h2>
903You can't ensure that every website visitor will click on all the right links and take all the desired actions, but you can make it a whole lot easier to guide them in the right direction.
904<h4>Make it nice and easy</h4>
905You've heard of the saying 'time is money' and in this thriving competitive market we live in, it's especially true when it comes to your website. The more steps it takes for a user to load a page and get to where they want to be, the more likely they are to abandon your website. Patience is not a virtue in the marketing world, it simply does not exist. If you want to ensure that users are not leaving your website before accomplishing one of your desired actions, then you need to ensure that the path to the desired action is smooth and simple.
906
907<div class="blog-expert-verdict"><h3>Expert Verdict</h3><p>Most B2B websites lose conversions not because of bad traffic, but because of unnecessary friction. The fastest path to higher conversion rates is reducing the steps between arrival and action. At Hunter &#38; Bard, we see this pattern repeatedly &#8212; streamlining the user journey and clarifying the <a href="/services/brand-messaging">messaging</a> delivers outsized results compared to any paid channel optimization.</p></div>
908
909<h4>Keep it simple</h4>
910Many companies make the mistake of displaying too many offers in a way that causes confusion and reduces the overall effectiveness of each offer. You should be aiming to keep the prospect's journey through your marketing sales funnel as straight forward and simple as possible.
911
912The CTAs on your website should be clearly indicated and should feature an explicit and engaging message. If you're displaying multiple CTAs on a single page, it should be obvious who they pertain to. It's fine to offer something compelling to a first time visitor and something equally compelling to the person nearing the end of their purchasing journey, it just needs to be obvious which is which.
913<h4>Streamline your site</h4>
914Clutter and confusion often turn web visitors off. Is your <a href="/services/brand-messaging">Unique Value Proposition</a> nice and clear? Do visitors understand the message you are trying to convey? Do prospects know what actions you'd like them to undertake? Are they getting all that within the first few seconds of their visit?
915
916Potential clients always appreciate the simplicity of a clean webpage and a clear path to their goals. Adding irrelevant information and images confuses the eye and the message which you are trying to convey. Every page on your website should have its own unique goal and all aspects of the content within each page should point towards your actionable goal. We all know that first impressions are the most important. Minimizing the content on your homepage could increase your overall conversions.
917<h4>Let the message speak for itself</h4>
918Are you trying to be cute and clever with your content? Is your message suffering because of it? Might be time to reconsider your tactics. It's important to focus on clarity when conveying a message. If you're needlessly using funky jargon or a funny tone, you could be sacrificing the clarity of the message. Be clear, concise, and on brand. Funny isn't bad, as long as it's not at the detriment of your messaging.
919
920Let's be clear, we're not asking you to assume your reader is an illiterate toddler; you don't need to be condescending. But do be aware that not all of your prospects will understand industry buzzwords that are second nature to you and your team. Take a step back and try to 
920see your website from the perspective of someone who doesn't know what you're offering. Would they understand it without needing to be walked through the concept? If the answer is no, it's time to rethink the <a href="/services/brand-messaging">clarity of your messaging</a>.
921
922<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Need Help With Conversions?</p><h3>Enterprise Strategy</h3><p>Our strategists audit your site's conversion paths and messaging to turn more visitors into pipeline. Get a structured plan backed by behavioral frameworks.</p><a href="/services/enterprise-strategy" class="blog-inline-cta-link">Explore Enterprise Strategy &#8594;</a></div>
923
924<h4>Make it instantly compelling</h4>
925You have around 8 seconds to grab a visitor's attention before they disappear from your website forever, so you want to provide a strong emotive message that will compel them to engage. When creating any type of content, always ask yourself if you are qualifying the audience, exploring the concept, and adding emotion, if you are, then you will effectively be pushing your reader towards the CTA that offers the solution to the question they need answered. By employing heuristics as you design your site, you'll ensure you are attracting the right people for the right action and helping them engage as soon as they arrive.`},{id:"412",title:"10 worthwhile post sales marketing tools",slug:"10-worthwhile-post-sales-marketing-tools",category:"Enterprise Marketing",seoDescription:"Reduce churn and increase LTV with 10 post-sales marketing tools. From onboarding to advocacy, retain B2B customers after the deal closes.",excerpt:"Convincing someone to purchase your products can be a costly endeavor. With wildly fluctuating advertising rates, oftentimes you might not recoup the customer...",readTime:4,tldr:"",content:`<p>Convincing someone to purchase your products can be a costly endeavor. With wildly fluctuating advertising rates, oftentimes you might not recoup the customer acquisition costs until the second or third sale. That’s why assuming that you’re done marketing to someone once they’ve made a purchase is a rooky mistake you shouldn’t make.</p>
926
927Here are some post sales marketing action items that can help you nurture your SaaS customers into becoming longtime fans and repeat buyers.
928&nbsp;
929<h2>Say thank you</h2>
930It’s such a simple thing, but one that’s so often forgotten. A simple, heartfelt thank you after a purchase lets a customer know they’re not just another number in a spreadsheet and that their purchase means something to you.
931
932Remember that, often when selling a SaaS product, the person doing the actual purchasing is not always the person who becomes the user. Both the C Level executive who made the purchase and the technical employee who will be using the product should be thanked.
933
934Sending a handwritten thank you note and swag that you’ve carefully picked for each person you’re thanking helps build the long lasting relationships you aspire to.
935&nbsp;
936<h2>Stay in regular contact</h2>
937When a customer purchases a SaaS product, they’re not just buying software, they’re also buying service, and great service starts with thank you. Think of it as the beginning of the great relationship you want to build. You sent a thank you email, but don’t let the communication stop there. Real, regular contact is what turns a one-time buyer into a strong customer. Account managers should check in with customers at least every few months and have real conversations that engage the client to see how their goals are progressing and where they might need help.
938&nbsp;
939<h2>Monitor customer success</h2>
940Keep a close eye on how often your customers use your service, how they’re using it, and their success rates. Keeping an eye on the metrics gives you plausible reasons to reach out and connect, either to give them advice on how to use the product better, or to share information about other products they might find useful.
941
942Your customers have the choice to either stay with you or test out the competition. Give them every reason to keep paying for your product month after month.
943&nbsp;
944<h2>User guides</h2>
945Your products make a world of sense to you because you’ve been living and breathing them since their inception. That’s not always the case for your customers. Creating videos, infographics, or even user guides that illustrate the best ways to use your products or showcasing how other customers have used your products allows users to get to work faster and more efficiently. It also sparks more opportunities to cross or upsell, which, if you hadn’t guessed, is definitely the ideal end goal.
946&nbsp;
947<h2>Upsell, cross-sell, sell more</h2>
948You’ve spent a considerable amount of time and money convincing someone to give your products a try. Now’s not the time to stop wooing them. Instead, now that they’ve had a chance to try one of your offerings, you can more easily upsell or cross-sell more products. If a client has fallen in love with your product and your services, then they’re the perfect target for an upgrade or an expansion.
949&nbsp;
950<h2>Ask for testimonials and reviews</h2>
951The easiest way to convince someone to try your products is to show them how much other people love them. Account managers should make a point to ask satisfied customers for testimonials. An effective testimonial is one that c
951omes from a real person, shares detailed feedback, is specific, and relevant. Few customers will balk at the idea of you hosting these on your site, after all, it’s advertising for them too!
952&nbsp;
953<h2>Put together case studies</h2>
954One of the items we recommend you incorporate into your Marketing Sales Funnel materials is a body of case studies showcasing how your SaaS has worked for your existing customers. Have account managers interview successful clients and share these stories with prospects to help convince them to convert.
955&nbsp;
956<h2>Customer forums</h2>
957Know who loves hearing people rave about software they use? Other people who have bought the same software. Savvy SaaS brands offer forums where customers can help each other trouble shoot or brainstorm as well as simply connect over a shared passion for your product. Have a really passionate core group of users? Maybe it’s time to expand from an online forum and start thinking about hosting networking events or conferences!
958&nbsp;
959<h2>Turn your customers into evangelists</h2>
960Make it easy for customers to recognize fellow brand loyalists with website badges, stickers, and other swag. People love feeling like they’re part of an inner circle and love spreading the word to others who might be interested.
961&nbsp;
962<h2>Launch an invite or referral program</h2>
963Don’t just make it easy for your customers to entice others in the space to try your products, make it worth their while. Don’t jump the gun and ask people to share too soon, wait until they’ve used your products for a while and are getting significant value from your SaaS. Check out this post by SaaS Growth Strategies for tips on creating a referral program that delivers.
964
965There’s no prescribed way to keep marketing beyond the sale. What works for one might not work for another. We suggest you test a few things and keep right on testing until you find the formula that works for you.`,seoTitle:"10 worthwhile post sales marketing tools | Hunter & Bard"},{id:"415",title:"You won't believe how clickbait and direct marketing come together",slug:"you-wont-believe-how-clickbait-and-direct-marketing-come-together",category:"Enterprise Marketing",seoDescription:"Clickbait tactics meet direct marketing principles. Learn how curiosity-driven headlines and clear CTAs combine to drive B2B engagement.",excerpt:"It’s tempting to blame the Buzzfeeds and Gawkers of the world on what we know as the clickbait epidemic, that thing where writers craft annoyingly alarmist and...",readTime:4,tldr:"",content:`It’s tempting to blame the Buzzfeeds and Gawkers of the world on what we know as the clickbait epidemic, that thing where writers craft annoyingly alarmist and vague headlines to coerce readers into clicking on their links and reading their articles. But the trend that has sadly moved from the dredges of the Internet and into direct marketing actually far pre-dates social media and even the World Wide Web.
966
967Fact is, humans have always been <a href="https://www.inverse.com/article/4069-the-5-psychological-reasons-you-can-t-resist-clickbait" target="_blank" rel="noopener noreferrer">wired to want to react to clickbait-like titles</a>, so much so that newspaper editors, way back in the early 1900’s, were already using sensational headlines to convince people to buy their paper instead of the competitor’s rag. Screamers, as they were known back then, dominated the first pages of news sheets, enticing people to pull out their pennies and buy the paper. It’s even rumored that <a href="http://io9.gizmodo.com/a-history-of-clickbait-the-first-100-years-1530683235" target="_blank" rel="noopener noreferrer">the Spanish-American war was started by needlessly sensational headlines.</a>
968&nbsp;
969<h2>Why is clickbait still around?</h2>
970There’s a reason clickbait has always existed. It’s because it works.
971
972We don’t want it to work. Most of the time we know better than to click on links with vague hyperbolic headlines. And yet, we more often than not, succumb to temptation. At least when we’re scrolling through our Facebook and Twitter feeds. (Less so when we’re reading our emails, but more on that in a bit.) It’s frustrating to be so easily manipulated.
973
974But clickbait still works because, unbeknownst to most, it has actually evolved over the years. 8-10 years ago, the odds of reading something in any way relevant to a headline titled “This woman went to the hospital for an ingrown toenail and you won’t believe what the doctors found!” were close to nil. Today, you’re more likely to be at least a little bit rewarded for your efforts.
975
976Without realizing it, our brains are constantly learning. Every time we click on something and end up disappointed or irritated, we are training our brains to ignore similar links in the future. So it didn’t take long for actual clickbait to start being solidly ignored all around the Internet.
977
978Headline writers had to evolve.
979
980Post titles remained sensational, but the corresponding articles started to be a little more relevant.
981
982It’s safe to assume that clickbait articles published today will be frivolous or silly, but at least nowadays, there’s usually some relevance to the headline and readers will be somewhat rewarded for clicking on the link.
983
984Clickbait evolved from headlines that were consistently misleading or articles that under-delivered on the promises made, to headlines that were simply sensational or oblique in nature. Our expectations evolved in parallel.
985&nbsp;
986<h2>So why doesn’t clickbait work as well in email or direct mail?</h2>
987So, if clickbait has evolved to keep people engaged and clicking, how come <a href="http://www.businesswire.com/news/home/20150428005196/en/Clickbait-Email-Subject-Lines-Don’t-Work-Return#.VT_VxWajGiG" target="_blank" rel="noopener noreferrer">studies have shown that clickbait-like subject lines in emails and on direct mail pieces don’t usually work</a>?
988
989Well, that has to do with the delicate inner-workings of the brain.
990
991Whether we’re aware of it or not, no matter what we’re doing, our brains are busy collecting information about everything that is going on around us. We’re constantly internalizing data, processing it, and acting based on what we’ve analyzed. It’s simple heuristics; each experience we have shapes our future reactions or decisions.
992
993When we see a clickbait link online, it’s not delivered in a vacuum. Usually we can see who has published the article, who has shared it, and who has liked it. Subconsciously that helps shape our decision about the outcome of clicking on the link.
994
995When we receive an email with a clickbait-like subject line or a direct mail piece with a clickbait headline on the envelope, unless we have a previous relationship with the sender, those usual mitigating factors aren’t there to help us decide whether or not we should bother clicking or opening.
996
997So we don’t.
998
999Because our past experiences have taught us that more often than not, what we’re seeing is something that won’t be worth our time and effort.
1000
1001The goal of direct response marketing is to generate an immediate response from consumers. So, in theory, that would mean that clickbait-like headlines and subject lines can be perfect for this form of marketing. The key lies in not forgetting that the Internet has taught us to become increasingly cynical and indifferent.
1002
1003If you can craft headlines that immediately invoke an emotional reaction that prompts the reader to open your email or your mailer without disappointing them or insulting them when they see the inside contents, then you’ve won the game.
1004
1005Next time you’re crafting an email, resist the urge to go for the low-hanging, overly clickbait-y subject line. Aim slightly higher and be sure to deliver on the promise. You’ll be rewarded by a higher open rate and much happier prospects or clients.`,seoTitle:"How Clickbait and Direct Marketing Come Together"},{id:"420",title:"You are not the hero",slug:"you-are-not-the-hero",seoTitle:"Customer-Centric Marketing: You Are Not the Hero",seoDescription:"In B2B marketing, the customer is the hero and your brand is the guide. Shift your story to become the ally or mentor in your customer's journey.",category:"Frameworks",image:uP,imageAlt:"The Hero’s Journey in B2B Customer-Centric Marketing",author:"Shira Abel",excerpt:"Everyone is the hero in their own story. Everyone else is just a character we use to further our story. Sometimes these characters are incredibly evil....",readTime:6,tldr:"",content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li><strong>The Customer is the Hero:</strong> In every brand narrative, the customer must be the protagonist, not the company.</li><li><strong>Your Role:</strong> Position your business as the ‘Mentor’ (Yoda) or ‘Ally’ (Samwise) to help the hero succeed.</li><li><strong>Avoid the Villain Role:</strong> Friction in user experience or rigid processes casts your brand as the antagonist.</li><li><strong>Empathy Mapping:</strong> Use archetypes to understand daily pain points and build emotional resonance.</li></ul></div>
1006
1007<p>Everyone is the hero in their own story. Everyone else is just a character we use to further our story.</p>
1008
1009Sometimes these characters are incredibly evil. Sometimes they are really amazing.
1010
1011A few months ago, my friend Shira told me a story about what transpired on her recent trip with her sons to Toronto. Her flight was delayed and landed after midnight in Buffalo, and she was supposed to rent a car and drive over the border. The villain in her story was the car rental company who didn’t stay open for all of the people on her flight with car reservations and doubled down by lying to her on the phone, and then not ever remedying the situation.
1012
1013She made an ally that night, who was going through the same situation as she was. She spotted a potential savi
1013or at a different car rental company, who stayed open and working, even though it was after midnight and their computers were down. Unfortunately, he was just a plot twist, and was unable to help her.
1014
1015Her fairytale vacation in Canada turned into a tragedy. She felt like a Disney princess, being forced to stay at home in her evil stepmother’s house, unable to go to the ball, wine tasting, sightseeing or any national parks, because she didn’t have a car for most of the trip. It was a story with no happy ending.
1016&nbsp;
1017<h2>When hearing customer stories, which character is your company?</h2>
1018Spoiler alert: you are not the hero.
1019
1020The stories we tell tend to go one way or the other. They are either, “I had the most amazing dinner because the hot waiter flirted with me the entire time.” or “The flight was delayed three hours, they didn’t have my gluten-free meal on the 15 hour flight, and I sat next to a baby crying the entire time.”
1021&nbsp;
1022<h2>People don’t tell uneventful stories.</h2>
1023I’ve heard that cleaners on Yelp have this problem. People tend to rate them when something bad happens, but not when they did exactly like they promised to do. The result is that they have a glut of bad reviews, even though it may only represent .1% of all their customers. Behaviorists call this phenomenon the “recall bias”, we only recall either the extreme positive or extreme negative aspects of a situation.
1024
1025As business owners, we have to stop thinking of our company’s story, but rather of how we can be an ally or a savior in our customer’s story. We have to begin to <a href="/services/brand-messaging">understand their stories</a>, and figure out where exactly we fit in.
1026
1027Chances are, we are going to be a character, we just don’t want to be cast as the evil witch.
1028
1029This means that we have to put ourselves in their shoes and wonder how they will interact with our offering.
1030
1031Is our brilliant idea ultimately a help or a hinderance to them?
1032
1033I was recently chatting with Shira about her newly adopted rescue puppy, Layla, she mentioned an interaction she had with her dog insurance company. They offered free tags, along with her $100 monthly payment. When she tried ordering the tags, she found out that the company chose not to include her dog’s name nor her contact information on the tags, as she had done in the past, but rather they wanted whoever would find the missing puppy to call a toll-free number and talk with an operator who would ultimately reunite Shira and Layla.
1034
1035The company was so focused on trying to be the hero of the story, that they did not take into consideration that things happen: there could be a virus on their system, a local power outage, or some other unimaginable event that would prevent from this convoluted process from happening, like them going bankrupt.
1036
1037In the story of a lost dog, the savior is actually the Good Samaritan who found Layla wandering around and took the time to find the owners. Not the insurance company who insinuated themselves into the middle of a process.
1038
1039The purpose of an insurance company is to play a positive role on the worst possible day of our dog’s life, one that we hope will never happen. In an article about dog insurance for <a href="https://www.vox.com/2015/8/10/9123013/dogs-insurance-should-i-buy" target="_blank" rel="noopener noreferrer">Vox</a> this past summer, Sarah Kliff quoted a Harvard economist in saying that he’d be ”blissfully happy if I never used my homeowners insurance.” We pay because we don’t want something to happen, not because we want a close intense relationship with our insurer. We want our insurer to take care of us and our dog, if need be. That’s it.
1040
1041Joseph Campbell, the creator of the monomyth or the Hero’s Journey, writes about all the different archetypical characters that are associated with the Hero. There are, of course, the Shadows, who are the villains and the enemies in the stories we tell. The evil corporations who were inflexible and only cared about the bottom line and not our happiness. The banks who charge insane fees because they know we don’t have another option.
1042
1043There are the mentors, like Yoda, Merlin, Wikipedia or Siri. And then there are the allies. The friends who accompany us along the way. The people who help us and provide the color in our lives. The bartender who listens to our story or the uber driver who has the most epic playlist.
1044
1045To become the hero in someone’s story, means that someone else is telling your company’s story. For example, I decided to make Shira the heroine of the anecdotes in this post. "Shira the mother, who travelled across the country alone with her two boys." "Shira the kindhearted person, who adopted a rescue puppy." The only time someone will write such a writeup about your company is if it is for a magazine spread or a newspaper exposé.
1046
1047<div class="blog-expert-verdict"><h3>Strategic Insight: Hunter & Bard</h3><p>The most successful B2B brands don’t sell features; they sell a transformation. By stepping out of the spotlight and providing the tools for your customer to win, you build unbreakable brand loyalty.</p></div>
1048&nbsp;
1049<h2>Customers don't write stories like that about you.</h2>
1050But you can try to always be a friend. You can try to make every customer service call a positive experience. Your customers may retell the story, and you could either be cast as an ally or a villain. You may be party to the worst day of their life, or one of the best.
1051
1052The first thing we must do is understand what our customer’s story is. Are we helping them on a daily basis, a 
1052weekly basis, a monthly basis or is our service the sort of thing they hope never to utilize? Is our job to educate them and inform them, like a mentor, or to provide a flawless service every time?
1053
1054When you take a step back and realize that you are not the hero, it enables you to become a better mentor or ally to your customers. You can’t plan that you will be there as a hero for the worst day of their life, because you never want your customers to experience such a horrible day. But you can be there to answer questions when they need. You can be there to lend a helping hand before something becomes a nightmare.
1055
1056The first step is <a href="/services/brand-messaging">understanding their story and their lifestyle</a>. Put yourself in their shoes and write a narrative about how they spend their days or live their lives. Identify five or ten fictitious archetypical customers and write the narrative for them. You should figure out what their daily pain points are and learn to empathize with them.
1057
1058You will always be a character in your customer’s stories, but it is your choice to decide which role you will be playing.
1059
1060<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Scale Your Story</p><h3>Master Your Brand Messaging</h3><p>Stop being the hero and start being the guide. Our Brand & Messaging Sprint helps you refine your narrative to resonate with US-market buyers.</p><a href="/services/brand-messaging" class="blog-inline-cta-link">Explore the Messaging Sprint →</a></div>
1061
1062We already know that you are not the hero.
1063
1064Don’t be the villain, aim to be an ally.`},{id:"422",title:"Why your clients aren't converting and what you can do to change that",slug:"why-your-clients-arent-converting-and-what-you-can-do-to-change-that",category:"Enterprise Strategy",image:oP,imagePosition:"bottom",seoTitle:"Why Your B2B Traffic Isn't Turning Into Revenue",seoDescription:"Your B2B website traffic means nothing without conversions. Proven CRO tactics and enterprise strategy fixes to turn visitors into pipeline.",imageAlt:"B2B conversion rate optimization strategy for SaaS companies",excerpt:"Most people spend countless hours designing their website, and then, when the project is done, never spend much time thinking about it again. Then they look at...",readTime:9,tldr:"",content:`<div class="blog-key-takeaways"><h3>Quick Strategic Audit</h3><p>Before you read further, run through this checklist. If you answer "no" to more than two, your conversion problem is structural, not cosmetic.</p><ul><li>Do you know where your traffic is actually coming from, and whether it's the <em>right</em> traffic?</li><li>Can a stranger understand your value proposition in 4 seconds?</li><li>Do you have multiple CTAs for different buyer stages (not just "Talk to Sales")?</li><li>Are your web forms asking too much too soon?</li><li>Does your site build trust with social proof, awards, and professional design?</li><li>Is your sales path clear and guided, or do visitors wander and bounce?</li></ul></div>
1065
1066<p>Most people spend countless hours designing their website, and then, when the project is done, never spend much time thinking about it again. Then they look at their stats and lament that only a tiny fraction of the people stopping by their site actually sign up for their services.</p>
1067
1068There are some very good reasons why that might be happening, and some relatively easy solutions to fixing the problem. Take a look at the primary reasons your visitors might not be converting, and what you can do to ensure they do.
1069&nbsp;
1070<h2>Where is your traffic coming from?</h2>
1071First things first, what's driving your website visitors to you? It's great that you're getting decent traffic to your site, but let's be honest now, where are these people hailing from? If they're coming from an appealing ad that's poorly targeted, you might be driving the wrong kinds of traffic to your site.
1072
1073<strong>The fix:</strong> Take a close look at your analytics to see what is driving traffic to your site. Is there something you can change? Are you getting the right visitors? Change up your ad placement for a few weeks to see if anything changes.
1074&nbsp;
1075<h2>Is your unique value proposition clear to all?</h2>
1076Studies have shown that people visiting any website decide in under 8 seconds 
1076if what they're seeing is <a href="https://conversionxl.com/blog/first-impressions-matter-the-importance-of-great-visual-design/">worthy of their attention</a> or not. And let's be clear, that 8 seconds is really the outlier. So, in, let's say, 4 seconds, can someone seeing your home page for the first time know exactly what you're offering, how it benefits them, and why they should be getting it from you and not the other guy? If you're not sure, have someone who doesn't actually know what you sell, take a look at your site for just a few seconds and ask them what they figured out. If you don't know your <a href="https://unbounce.com/conversion-glossary/definition/unique-value-proposition/">Unique Value Proposition (UVP)</a>, then it's time for a quick time out while you and your team figure out a clear and succinct way to articulate what you offer, why people should be getting it from you, and the benefits they'll receive if they do.
1077
1078<strong>The fix:</strong> Take a long hard look at the above the fold section of your home page. Is your UVP clearly outlined? If not, fix it. If it is, it's time to do a little testing. Change the way you display your UVP, change the wording, change the design. Test the different options to see which works best.
1079
1080<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Struggling with messaging clarity?</p><h4>Brand & Messaging Sprint</h4><p>In just 2 weeks, we'll pressure-test your value proposition, sharpen your positioning, and build messaging that converts — so visitors know exactly why they should choose you.</p><a href="/products/sprint" class="blog-inline-cta-link">Explore the Sprint →</a></div>
1081
1082&nbsp;
1083<h2>Do you have effective and actionable CTAs above the fold?</h2>
1084One of the things we hate seeing the most is when a website does a great job of showing off their UVP in a compelling and clear way, but there are no useful Call to Actions, CTAs to be found anywhere on the home page. Too many people shy away from actually asking their website visitors to do anything because they don't want to appear pushy or needy. Well, here's the deal, if you don't ask, they won't do. If your CTA is a tiny little tab at the top left of your screen, most people are going to overlook it entirely.
1085
1086Research tells us that 96% of people who first visit a B2B site aren't ready to convert. That means that if the only CTA is "Talk to a Rep," those 96% will click away. You need to give them options so they don't feel like they're being pushed before they're ready.
1087
1088<strong>The fix:</strong> No one says you can only have one CTA at the top of your home page. In fact, it's best if you have two or even three, each one appealing to someone in a different stage of the sales process. Make sure your <a href="https://hunterandbard.com/calls-actions-actually-convert/">CTAs are engaging</a> by asking yourself what pain points you solve and addressing them. Alternatively, you can ask yourself what obstacles are keeping prospects from converting and then addressing those in the CTA. If you're a relatively unknown entity, have a CTA that points to something that will reassure potential clients. If you're a small company, point your visitors to a page of testimonials.
1089
1090And let's not stop at the top of the page. While you definitely need a couple CTA options above the fold, you also need to have some below, so that when people are done reading what you've laid out for them to see, they don't have to scroll all the way back up to engage with you.
1091&nbsp;
1092<h2>Have you ever tested your CTAs?</h2>
1093You might well have some very appealing CTAs on your home page, but until you give your visitors something else to click, you might never know if that's the stumbling block that's keeping prospects from converting. Sometimes a red button performs exponentially better than a green one. Sometimes a question engages more people than a statement. There's no magic solution when it comes to CTAs for B2B SaaS companies. Each client set is so different from the other that what works for one might not work at all for another. The only way to see what converts yours is to try a few different things.
1094
1095<strong>The fix:</strong> Take a look at your CTAs, do they address your potential clients' questions in a clear and engaging way? When was the last time you changed them? Test a few options. Change the way the CTAs are worded. Change the way they look. Change where they're positioned. See what performs better and then test a few more options.
1096&nbsp;
1097<h2>What does your home page say exactly?</h2>
1098You've undoubtedly read your website copy about a million and one times. Plus, you know exactly what you meant when you wrote the copy, so that's exactly what you read when you see it. Someone who has never seen your site before might not have the same experience at all.
1099
1100Is there an overwhelming amount of information on your home page? Is it cluttered? C
1100onfusing? Off-putting? Remember, 4 seconds. That's all you get. So you'd better make the best use of it. And no, that doesn't mean throwing everything you've got at every passing visitor. It means being very selective and precise about what you decide to show them. Hubspot has a fantastic Infographic that outlines everything a great home page should have. <a href="http://blog.hubspot.com/blog/tabid/6307/bid/31097/12-Critical-Elements-Every-Homepage-Must-Have-Infographic.aspx#sm.0000h3xrx5aprffosdj15zxr8qd2u" target="_blank" rel="noopener noreferrer">Take a look</a> and compare your home page to their list.
1101
1102<strong>The fix:</strong> Pull in that friendly stranger that we mentioned up in #2. Or his friend. We're not picky. Have them take a look at your website and ask them how it makes them feel and what it makes them want to do. Do they feel the way you want them to feel and want to do what you want them to do? If not, it's time for a change.
1103
1104We suggest testing a few variations of your headline and sub-headline until you find a combination that does a great job of promoting your UVP and your brand personality even to someone who's only going to glance at what you have to offer.
1105&nbsp;
1106<h2>Are you asking too much?</h2>
1107Even if your browser is set up to auto-fill, no one actually enjoys filling out web forms. We all see them as a necessary evil, but our willingness to comply and hand out information drops a little more with each question we're forced to answer. Come on, you can admit it, we know you feel that way too. How long are the web forms on your own site? Are you asking for too much too soon? The balance between what you need to know and what your prospects are willing to tell you is going to be different than everyone else's and might possibly hinge on what you're offering up in exchange for that information. Bear that in mind when creating the forms you put on your site.
1108
1109<strong>The fix:</strong> You're going to be shocked, but the fix here is once again testing, testing, testing. What's the bare minimum you need to know to turn a visitor into, at the very least, a warm lead? How many questions are your visitors willing to answer? What is compelling enough to get them to jump hoops? Test a number of forms with different numbers of fields and different lead magnets until you find the sweet spot for your potential clients. And remember, it's always better to gather the information bit by bit as you move people through your sales funnel than to be greedy and try to get it all upfront in a way that risks turning people off completely.
1110&nbsp;
1111<h2>What are you doing to put your visitors at ease?</h2>
1112There's a reason people shop from Amazon. It's because Amazon is a known entity so it's not scary to give them your information or to make a transaction with them. Agreeing to work with someone new is a whole other kettle of fish, and for a B2B SaaS company, it can be especially scary because you can't exactly bundle the portion of service you've tried in the box it came in and demand a refund. It's your job to convince website visitors of all the different reasons they should trust you to help solve their current need.
1113
1114<strong>The fix:</strong> Without taking up a ton of valuable home page real-estate you can display a lot of content that can convince a prospect to consider your Sa
1114aS products. Show off any success indicator you might have accrued over the years like awards, recognition, or different industry seals. Display social proof that your potential clients' peers might have endorsed you. Share testimonials and reviews.
1115
1116Additionally, your website design can have a huge impact on your visitors and make them feel like they've found the right "fit" for them. Make sure your images portray the kinds of clients you actually cater to and that the language you use speaks to the people you'd like to attract. You'd be amazed at what a difference it can make.
1117&nbsp;
1118<h2>How clear is your sales path?</h2>
1119You know exactly the path you'd like every potential client to take to get them from prospect to converted user, but is it easy for them to follow when they come to your site? Odds are, it's clear to you, but your site doesn't do a great job of guiding them where you'd like them to go.
1120
1121<strong>The fix:</strong> Decide, based on what you've learned from past client experience, what's the best way to get those 96% who are just looking, to start dipping in a toe and then start guiding them through your site. What information do you need to lay out to snag their attention without overwhelming them, to inform them without turning them off? And then, yes, again, start testing. Where are you losing people? Why? What can you change to keep them interested?
1122
1123<div class="blog-expert-verdict"><h3>Expert Verdict</h3><p><strong>Hunter & Bard's take:</strong> Most B2B conversion problems aren't about traffic volume — they're about messaging clarity and trust architecture. If a stranger can't articulate your value in 4 seconds, no amount of ad spend will fix your funnel. Start with your UVP, layer in stage-appropriate CTAs, and build trust through design and social proof. Conversion optimization is a system, not a single fix.</p></div>
1124
1125<h2>Key Takeaways</h2>
1126<ul>
1127<li><strong>Audit your traffic sources</strong> — high volume means nothing if you're attracting the wrong audience through poorly targeted campaigns.</li>
1128<li><strong>Clarify your UVP above the fold</strong> — visitors decide in 4 seconds whether your site is worth their time.</li>
1129<li><strong>Deploy stage-appropriate CTAs</strong> — 96% of first-time B2B visitors aren't ready to talk to sales. Give them other options.</li>
1130<li><strong>Minimize form friction</strong> — ask only what you need for the current funnel stage and gather more over time.</li>
1131<li><strong>Build trust through design and proof</strong> — awards, testimonials, and professional design reduce perceived risk.</li>
1132<li><strong>Guide the sales path</strong> — don't assume visitors will find their way. Design a clear, tested journey from browse to convert.</li>
1133<li><strong>Test relentlessly</strong> — every element (headlines, CTAs, forms, layout) should be A/B tested to find what works for your specific audience.</li>
1134</ul>`},{id:"426",title:"The importance of knowing your audience",slug:"the-importance-of-knowing-your-audience",seoTitle:"B2B Audience Research: Map Your Customer Tribe",seoDescription:"Stop making noise and start attracting your tribe. Learn how to define audience demographics, lifestyle, and values to increase B2B conversion.",imageAlt:"B2B audience research and ideal customer persona mapping",category:"ABM & Pipeline",excerpt:"Every message you share with the marketplace either attracts attention, repels attention or gets lost in the shuffle.",readTime:4,tldr:"",image:sP,content:'<div class="blog-key-takeaways"><h3>Audience Research Checklist</h3><ul><li>Define basic demographics (age, location, income).</li><li>Map lifestyle and motivations of your character.</li><li>Identify core personality traits.</li><li>Test messaging against real data.</li></ul></div><p>Every message you share either attracts attention or gets lost. Understanding your audience is the foundation of S.C.A.L.E.</p><h2>Demographics &#38; data</h2><p>Defining basic details helps determine target market size.</p><div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Strategic Alignment</p><h3>Is your messaging hitting the mark?</h3><a href="/services/brand-messaging" class="blog-inline-cta-link">Explore the Messaging Sprint &#8594;</a></div><div class="blog-expert-verdict"><h3>Expert Verdict</h3><p>Business is people serving people. If you aren&#8217;t in the shoes of your clients, you&#8217;re just making noise.</p></div><h2>Strategic Summary</h2><ul><li>Move beyond demographics to lifestyle.</li><li>Ground personas in real data.</li><li>Align your vibe to your tribe.</li></ul>'},{id:"430",title:"Why you should consider growth hacking",slug:"why-you-should-consider-growth-hacking",category:"Enterprise Strategy",seoDescription:"Growth hacking is disciplined experimentation. Learn when it fits a B2B enterprise motion and when it just wastes your team's time.",excerpt:"Growth hacking is a term that gets bantered around a lot in the start-up world, so you might already know what it’s all about, but, just for those who don’t,...",readTime:4,tldr:"",content:`Growth hacking is a term that gets bantered around a lot in the start-up world, so you might already know what it’s all about, but, just for those who don’t, growth hacking is the fast-paced marketing and product development experimentation process that allows companies to identify the best ways to grow their business.
1135
1136A growth hacker is neither a marketer or a coder, but someone who straddles both worlds in order to bring a start-up or a small business rapidly to corporate growth territory. Since start-up owners rarely fully grasp exactly what marketing techniques their prospects will respond to, a growth hacker’s job is to test a variety of things to see what resonates best with the company’s particular audience. Their approach usually includes a variety of acquisitions, optimization strategies, and testing of technical details.
1137
1138After you read the following reasons to give growth hacking a try, check out this <a href="https://www.matthewbarby.com/saas-startup-growth-hacking/" target="_blank" rel="noopener noreferrer">long list of growth hack ideas outlined by Matthew Barby</a> and this <a href="http://sixteenventures.com/saas-marketing-growth-hacks" target="_blank" rel="noopener noreferrer">list by Lincoln Murphy</a> to get some inspiration for where to start. If you’re not a coder at all, but still want to give growth hacking a try, check out <a href="https://blog.kissmetrics.com/35-growth-hacking-tools/" target="_blank" rel="noopener noreferrer">these tools shared on the Kissmetrics blog</a>.
1139
1140First things first though. Let’s take a look at why you should even give growth hacking a shot.
1141&nbsp;
1142<h2>It's fast and scrappy</h2>
1143Start-ups, by definition, need to be quick on their toes and even quicker to pivot when needed. Traditional marketing is a critical component of company growth, but it has slower lead and response time than growth hacking meaning that you can’t quite learn and shift as fast as you could if you were using growth hacks.
1144
1145A growth hacker’s entire job is growth, so everything they do is focused and driven towards just that. Since there are no hard and fast rules or even preconceived notions, a growth hacker does what’s specifically needed to help the company grow. It’s the very definition of fast and scrappy. A traditional marketing team is made up of a number of people all working towards their specific goals. A growth hacker usually works solo, making the role better able to evolve as needed.
1146&nbsp;
1147<h2>It's about targeted approach vs broad reach</h2>
1148Traditional marketing is all about getting a product or service in front of the largest audience possible in order to make the biggest impact possible. Not only is that not feasible for a start-up or a small company with a tiny marketing budget, it might not be ideal from a logistics perspective. Too many people signing up for your Sa
1148aS product too soon might mean you can’t give users the level of service or attention you aspire to. It also means you have less control over customer satisfaction.
1149
1150Growth hacking marketing is a much more targeted approach that puts your products or services in front of a carefully selected audience. The metrics which are an integral part of growth marketing enable you to modify offerings according to what your clients really want and to help your SaaS company evolve quickly and
1151&nbsp;
1152<h2>It allows you to focus on your skills and ideal audience</h2>
1153There are a million different marketing options. Each could have a positive impact on your business reach, but there’s no way for a lean start-up to try each and every one. It’s not feasible from a financial or time perspective. Growth hacking gives you the option to focus on your business’s area of expertise and capitalize on saturating your ideal consumer base instead of constantly trying to break into new audience
1154&nbsp;
1155<h2>It’s a means to accelerated growth</h2>
1156<a href="https://neilpatel.com/what-is-growth-hacking/">Growth hacking</a> is not intended to be a long term solution. On the contrary, it’s perfect for the quick growth needed when a company launches. Using different growth hacking techniques makes it possible to quickly get your company to where you want it, so you can then switch to more a more traditional approach for consistent continual growth. The growth hacker, hybrid marketer/coder takes a hard long look at the question “How do I get clients to buy my product?” and then tests out various answers with A/B testing, landing pages, email delivery and open graph research. Every component of growth hacking is steeped in virality so it gets results fast and effectively. All of the learning accrued during the growth hacking phase eventually will go on to feed the more traditional marketing approach that ensues.`,seoTitle:"Why you should consider growth hacking | Hunter & Bard"},{id:"432",title:"SEO Is No Longer Enough: The B2B Leader's Guide to AEO",slug:"seo-is-no-longer-enough-b2b-guide-to-aeo",category:"Frameworks",seoTitle:"B2B Answer Engine Optimization (AEO) Guide",seoDescription:"How B2B enterprise teams get cited by ChatGPT, Perplexity, and Google AI Overviews. A 5-part framework for making your content the source AI trusts.",image:aP,imageAlt:"SEO vs AEO comparison diagram for B2B enterprise marketing strategy",excerpt:"Your buyers aren't scrolling through ten blue links anymore. They're asking AI for direct answers. If your content isn't structured to be cited by machines, you're invisible in the new search landscape.",readTime:8,tldr:"Traditional SEO gets you ranked in a list. AEO (Answer Engine Optimization) gets you cited inside AI-generated answers. B2B companies need both, but many are only doing the first. This guide breaks down the difference and gives you a practical framework for making your content AI-citable.",content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li><strong>AEO (Answer Engine Optimization)</strong> is the practice of structuring content so AI search engines cite you as a source in generated answers.</li><li><strong>GEO (Generative Engine Optimization)</strong> is the academic term for the same discipline, focused specifically on how generative models select sources.</li><li>Traditional SEO still matters for indexing, but <strong>AI-generated answers now sit above organic results</strong> in most search engines.</li><li>B2B enterprise buyers increasingly use AI tools (ChatGPT, Perplexity, Google AI Overviews) for vendor research, making AEO a revenue-critical capability.</li><li>The shift requires <strong>structural changes to how you write</strong>, not just what you write about.</li></ul></div>
1157<p>Here is the uncomfortable truth for most B2B marketing teams: your SEO strategy is optimizing for a format that is disappearing.</p>
1158<p>Traditional SEO optimizes for one outcome, ranking as a blue link on a search results page. The assumption is that a human will scan those results, click one, and read your page. That model worked for twenty years. It is breaking now.</p>
1159<p>In 2026, the dominant search experience looks different. A buyer types a question into ChatGPT, Perplexity, or Google, and gets a synthesized answer <em>before</em> any links appear. That answer cites sources. If your content is not one of those sources, you are functionally invisible to that buyer.</p>
1160<p>This is the shift from SEO to <strong>AEO, Answer Engine Optimization</strong>.</p>
1161<h2>What Is AEO (and How Is It Different from GEO)?</h2>
1162<p>You will see two terms used in this space, and they mean slightly different things:</p>
1163<p><strong>AEO (Answer Engine Optimization)</strong> is the broad industry term. It covers the full practice of optimizing content to be cited by AI-powered search tools, including ChatGPT, Perplexity, Google AI Overviews, and Copilot. The goal is to become a <em>source</em> that the AI trusts enough to reference.</p>
1164<p><strong>GEO (Generative Engine Optimization)</strong> is the more academic label, originating from research into how large language models select and rank source material during text generation. It focuses specifically on the mechanics of citation within generative outputs.</p>
1165<p>In practice, they are converging. AEO is winning as the go-to label in the industry, and it is the term we will use throughout this guide. But if you see GEO referenced elsewhere, know that it describes the same fundamental discipline.</p>
1166<h2>Why B2B Enterprise Marketers Should Care Right Now</h2>
1167<p>This is not a consumer search problem that will eventually trickle into enterprise. B2B buyers are <em>ahead</em> of the curve on AI search adoption. Here is why:</p>
1168<ul>
1169<li><strong>Complex purchase decisions</strong> drive buyers to AI tools that can synthesize multiple sources into a comparative answer ("Compare the top 5 enterprise ABM platforms for mid-market SaaS").</li>
1170<li><strong>Research-heavy buying cycles</strong> mean your prospects are asking dozens of questions before they ever talk to sales. If AI answers those questions without mentioning your brand, your pipeline suffers.</li>
1171<li><strong>Committee-based purchasing</strong> means multiple stakeholders are independently researching. The VP of Marketing, the CFO, and the CTO are all asking different questions to different AI tools. You need to surface across all of them.</li>
1172</ul>
1173<p>The companies that treat AEO as a channel, not a buzzword, will own the information layer that sits between buyer intent and vendor selection.</p>
1174<h2>Traditional SEO vs. AEO: A Side-by-Side</h2>
1175<p>This is not about abandoning SEO. It is about understanding what each discipline actually optimizes for:</p>
1176<table><thead><tr><th>
1176</th><th><strong>Traditional SEO</strong></th><th><strong>AEO</strong></th></tr></thead><tbody><tr><td><strong>Optimizes for</strong></td><td>Ranking position on a results page</td><td>Being cited as a source in an AI-generated answer</td></tr><tr><td><strong>User behavior</strong></td><td>Scan, click, read</td><td>Ask, receive synthesized answer</td></tr><tr><td><strong>Content goal</strong></td><td>Drive clicks to your page</td><td>Be the information the AI trusts enough to reference</td></tr><tr><td><strong>Key signal</strong></td><td>Backlinks, keywords, page authority</td><td>Structured clarity, topical authority, factual density</td></tr><tr><td><strong>Measurement</strong></td><td>Organic traffic, keyword rankings</td><td>Citation frequency, brand mentions in AI outputs</td></tr></tbody></table>
1177<p>The critical insight: <strong>SEO gets you indexed. AEO gets you cited.</strong> You need both, but most B2B teams are only doing the first.</p>
1178<h2>The AEO Framework for B2B Content</h2>
1179<p>Here is a practical framework for making your content AI-citable. We use five principles, organized around what AI models actually look for when selecting sources.</p>
1180<h3>1. Lead With Direct Answers</h3>
1181<p>AI engines prioritize content that answers a question in the first 100 words. This is the single highest-impact change you can make. Before any narrative setup, before any anecdote, state your answer clearly and factually.</p>
1182<p><strong>Bad:</strong> "In today's rapidly evolving digital landscape, companies are increasingly finding that..."</p>
1183<p><strong>Good:</strong> "Marketing debt is the accumulated cost of deferred branding, inconsistent messaging, and neglected lead generation infrastructure. It compounds over time and typically requires 1 to 2 years of systematic investment to resolve."</p>
1184<p>The good version is a citable fact. The bad version is filler that AI will skip.</p>
1185<h3>2. Use Structural Hierarchy Religiously</h3>
1186<p>One H1 per page. H2s for major sections. H3s for subsections. AI models parse heading structure to understand content architecture. If your headings are decorative rather than descriptive, the model cannot extract your key claims.</p>
1187<p>Think of your heading structure as an API for your content. Each heading should be a standalone query that the section beneath it answers.</p>
1188<h3>3. Build Topical Authority Through Content Clusters</h3>
1189<p>AI models trust sites that demonstrate deep, interconnected expertise on a topic. A single blog post on "ABM strategy" does not establish authority. Ten interlinked posts covering ABM from strategy to execution to measurement does.</p>
1190<p>Map your content to clusters around your core intellectual property. Each cluster should have a pillar page and supporting articles that reference each other with internal links. This mirrors how AI models build entity relationships, and it makes your entire domain more citable.</p>
1191<h3>4. Prioritize Factual Density Over Narrative</h3>
1192<p>AI models extract facts, statistics, frameworks, and definitions. They skip introductions, transitions, and narrative filler. This does not mean your writing should be dry, but it means every paragraph should contain at least one citable claim.</p>
1193<p>Tactics that increase factual density:</p>
1194<ul>
1195<li>Include specific numbers and timeframes ("60% of B2B buying decisions happen before first contact")</li>
1196<li>Name frameworks and methodologies explicitly</li>
1197<li>Use structured formats: tables, numbered lists, definition blocks</li>
1198<li>Attribute claims to named sources with links</li>
1199</ul>
1200<h3>5. Earn Cross-Domain Citations</h3>
1201<p>AI models use a version of authority signals similar to backlinks, but broader. They look for how often your brand, frameworks, or data are referenced by other trusted sources. Guest articles, podcast appearances, conference talks, and co-authored research all feed this signal.</p>
1202<p>The most powerful AEO asset is original research or a proprietary framework that other people cite. If you have developed an original methodology, make it easy to reference: give it a clear name, define it concisely, and make the definition page easy to find.</p>
1203<h2>What This Means for Your Existing Content</h2>
1204<p>Most B2B companies have years of blog content that was written for traditional SEO. That content is not useless, but it probably needs structural retrofitting to become AI-citable:</p>
1205<ul>
1206<li><strong>Add Key Takeaways blocks</strong> at the top of long-form posts (these are high-extraction targets for AI)</li>
1207<li><strong>Rewrite introductions</strong> to lead with direct answers rather than narrative buildup</li>
1208<li><strong>Add structured data</strong> (JSON-LD BlogPosting schema, FAQ schema where appropriate)</li>
1209<li><strong>Interlink aggressively</strong>
1209 within your content clusters</li>
1210<li><strong>Update outdated statistics</strong> with current, sourced numbers</li>
1211</ul>
1212<p>This is not a one-time project. It is a content operations discipline that should be built into your editorial workflow.</p>
1213<div class="blog-expert-verdict"><h3>Strategic Insight: Hunter & Bard</h3><p>In our work with B2B enterprise companies, we see AEO as the next layer of marketing debt. Teams that ignore it will find themselves invisible in the exact channels their buyers are shifting to. The good news: most of the work is structural, not creative. If your content already has substance, the retrofit is about formatting and architecture, not starting from scratch. The companies winning at AEO are the ones treating their content library as a knowledge base, not a blog.</p></div>
1214<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Recommended Next Step</p><h3>Enterprise Strategy Session</h3><p>Not sure where your content stands in the new AI search landscape? Our Enterprise Strategy engagement includes a full content audit and AEO readiness assessment for B2B companies ready to get ahead of the shift.</p><a href="/services/enterprise-strategy" class="blog-inline-cta-link">Learn about Enterprise Strategy →</a></div>`},{id:"435",image:AP,imageAlt:"Cinematic still of a darkened conference room at night with a single illuminated laptop screen, illustrating the shift in B2B social media from self-promotion to AI-mediated trust",editorialGrade:!0,title:"B2B Social Media Strategy: Stop Talking About Yourself",slug:"why-you-should-be-using-a-social-media-marketing-service",category:"Enterprise Marketing",seoTitle:"B2B Social Media Strategy for Enterprise | Hunter & Bard",seoDescription:"Social media rewards a distinct point of view. The B2B playbook: hybrid journalist roles, employee advocacy, and AI for research and drafting.",excerpt:"A few years ago one of the companies I was mentoring wanted to build their name through free marketing on social media. The first thing these companies do when they start taking social media seriously is talk about themselves. Unless you are the hottest ticket in town, it does not work.",readTime:7,author:"Shira Abel",datePublished:"2026-05-18",dateModified:"2026-05-18",tldr:"Social media rewards having a distinct point of view. The B2B teams winning on social treat the social media manager as a type of hybrid journalist/marketing role, build an employee advocacy structure, use AI for research (not the final draft), put budget toward the analysts and independent experts their buyers already trust, and make sure LLMs can actually find them. The posting cadence is the easy part. Knowing what to say is the hard part.",content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li><strong>Social media rewards having a distinct point of view.</strong> Content that feels personal enough that buyers start to trust you the way they trust someone they know wins over self-promotion.</li><li><strong>Hire a social media manager who acts as a hybrid journalist/marketer.</strong> Their most valuable skill is extraction from your engineers, product leads, and executives.</li><li><strong>Build an employee advocacy structure.</strong> Forrester estimates that by the end of 2026, employees outside centralized content teams will create two-thirds of all B2B content.</li><li><strong>Use AI for research, not for the final draft.</strong> The last hardcore edit has to come from a human who knows your market.</li><li><strong>Put budget toward the people your buyers already trust:</strong> analysts and independent experts. 75% of enterprise B2B companies plan to increase budgets for influencer relations this year.</li><li><strong>Make sure the machines can find you.</strong> Kantar found 74% of AI assistant users actively seek AI-driven brand recommendations. If the model does not know you, it will not choose you.</li></ul></div>
1215<p>A few years ago one of the companies I was mentoring wanted to build their name through &ldquo;free marketing&rdquo; on social media. First off, your time is not free, so social media is not free. It simply doesn&rsquo;t cost like an advertisement does. It&rsquo;s also going to be organic growth, so it will not immediately have the same punch as an advertisement.</p>
1216<p>
1216The other issue is the content when a startup founder decides the team needs to do social media. Typically it&rsquo;s LinkedIn, and often, if there is no marketer with an expertise in social on the team, it&rsquo;s done badly.</p>
1217<p>The first thing these companies do when they start taking social media seriously is talk about themselves. Product launches. Funding announcements. Hiring updates. It makes sense: they know their own company, so that is what they post about.</p>
1218<p>Unless you&rsquo;re the hottest ticket in town, it does not work.</p>
1219<p>Social media rewards having a distinct point of view. What it rewards is the thing that makes people stop scrolling and feel like someone is actually talking to them. Psychologists call this a parasocial relationship: the audience knows they have never met you, they know there is a team behind the account, but the content feels personal enough that they start to <a href="/resources/blog/your-buyer-researched-you-before-the-call" class="text-[#316263] font-bold underline">trust you the way they trust someone they know</a>. Mel Robbins built an empire on this. So did every B2B company whose social presence actually drives pipeline instead of collecting polite likes from employees&rsquo; friends and family.</p>
1220<p>If you are getting started or trying to fix what is not working, the rest of this piece is the playbook.</p>
1221<h2>Hire a social media manager who can interview, not just post</h2>
1222<p>Most companies treat social media as a distribution channel: make content somewhere else, hand it to the social person, have them schedule it. That is backward.</p>
1223<p>A good social media manager&rsquo;s most valuable skill is extraction, effectively acting as a hybrid journalist/marketing role. They sit with your principal engineer, your product lead, your CTO, and pull out the insight that person would never think to publish. Then they translate it into something that fits the channel. The subject matter expert never has to think about hooks, formats, or posting schedules. They just have to know things, which they already do.</p>
1224<p>This is creative, high-judgment work, and it is chronically undervalued. Companies that treat it like a junior tactical role get junior tactical results.</p>
1225<h2>Build an employee advocacy structure</h2>
1226<p>This connects directly to the point above, but goes beyond the social media manager. Forrester&rsquo;s 2026 B2B predictions estimate that by year&rsquo;s end, employees outside centralized content teams will create two-thirds of all B2B content. It is happening whether you plan for it or not.</p>
1227<p>The companies doing it well give their engineers, product leads, and executives three things: a short set of <a href="/resources/blog/what-messaging-and-positioning-can-and-cannot-do" class="text-[#316263] font-bold underline">messaging themes</a>, basic brand guardrails, and lightweight compliance training if their industry requires it. Then they get out of the way. Your principal engineer explaining why she chose one architecture over another will outperform a branded carousel about innovation with your target market.</p>
1228<p>The practical steps:</p>
1229<ul>
1230<li>Identify 5 to 10 internal experts whose work intersects with what your buyers care about.</li>
1231<li>Give them 3 to 5 approved messaging themes (not scripts, themes).</li>
1232<li>Provide a one-page brand voice guide so their posts feel like the same company without sounding like the same person.</li>
1233<li>Have your social media manager offer to ghost-draft or co-write for anyone willing but time-strapped.</li>
1234<li>Track what resonates and feed that back to the group monthly (side note: making the monthly report colorful and interesting will make people more likely to read it.)</li>
1235</ul>
1236<h2>Use AI for research, not for writing the final draft</h2>
1237<p>Marketing teams adopted generative AI earlier and more aggressively than most functions. The output shows it. How many feeds on LinkedIn are full of content that sounds like it was produced by the same tool?</p>
1238<p>AI helps with initial research, competitive scans, structural outlines, repurposing long-form content into shorter formats, and data synthesis.</p>
1239<p>Don&rsquo;t use AI to write the final published version of anything. The last hardcore edit has to come from a human who knows your market, your buyers, and what makes your company&rsquo;s perspective different from your competitors. If that person cannot take an AI draft and make it sound like something only your company would say, the problem is not the tool.</p>
1240<h2>Put budget toward the people your buyers already trust</h2>
1241<p>Forrester&rsquo;s same 2026 report found that 75% of enterprise B2B companies plan to increase budgets for influencer relations this year. In B2B, that means industry anal
1241ysts, independent subject-matter experts, and the niche voices your buyers already follow for credible commentary.</p>
1242<p>AI-generated content has flooded the internet to the point where buyers have a confidence problem. When trust wanes people default to the voices they already know. Analyst reports and expert posts carry more weight than your brand content because they are independently credible.</p>
1243<p>Where to put the money:</p>
1244<ul>
1245<li>Co-create content with 2 to 3 analysts who cover your space. Joint reports, LinkedIn Live panels, or a short video series where they interview your technical leads.</li>
1246<li>Build ongoing relationships with 10 to 15 independent experts your buyers follow. Guest posts, podcast appearances, collaborative research.</li>
1247<li>Move budget from low-converting programmatic display toward these relationships. They take months to build, which is exactly why they work: your competitors are not doing it because it is slow.</li>
1248</ul>
1249<p>One thing to know, analysts and independent experts will not attach their name to vague messaging. If you cannot clearly explain your <a href="/resources/blog/positioning-messaging-storytelling" class="text-[#316263] font-bold underline">category, your differentiation, and your point of view</a> in a conversation, they will pass. Get that clarity before you pitch the partnership.</p>
1250<h2>Make sure the machines can find you</h2>
1251<p>Kantar&rsquo;s 2026 Marketing Trends report found that 74% of AI assistant users actively seek AI-driven brand recommendations. Purchase decisions are increasingly mediated by <a href="/resources/blog/seo-is-no-longer-enough-b2b-guide-to-aeo" class="text-[#316263] font-bold underline">LLMs and AI agents that recommend based on what they have ingested from public content</a>. Kantar&rsquo;s line is direct. If the model does not know you, it will not choose you.</p>
1252<p>What to do:</p>
1253<ul>
1254<li>Audit your website, case studies, social posts, and long-form content for terminological consistency. Your product names, category language, and value proposition should use the same phrasing everywhere. No clever synonyms. Lose all &ldquo;special names.&rdquo;</li>
1255<li>Structure content so it is machine-legible: clear headings, specific claims, named products and categories. An LLM cannot parse a vague tagline into a recommendation.</li>
1256<li>Check what happens when you ask ChatGPT, Perplexity, or Gemini about your category while logged out in an incognito browser. If your company does not appear, or appears with inaccurate information, your public content is not doing its job.</li>
1257<li>Publish consistently in the formats LLMs ingest most reliably: long-form articles, case studies with specific outcomes, FAQ-style content that directly answers the questions your buyers ask.</li>
1258<li>Add structured data (JSON-LD BlogPosting schema, FAQ schema where appropriate)</li>
1259<li>Interlink aggressively within your content clusters</li>
1260<li>Update outdated statistics with current, sourced numbers</li>
1261</ul>
1262<h2>The hard part is not the posting</h2>
1263<p>Every tactic in this piece requires the same upstream work. You have to know what you are talking about and be willing to say it specifically. Your social media manager needs to know what story to extract. Your employee advocates need messaging themes clear enough to riff on. Your analyst partners need a point of view sharp enough to co-sign. And the AI models indexing your content need consistent, specific language to build a picture of who you are.</p>
1264<p>The posting cadence is the easy part. Knowing what to say is the hard part. Start there.</p>
1265<div class="blog-expert-verdict"><h3>Strategic Insight: Hunter &amp; Bard</h3><p>Hunter &amp; Bard builds brand positioning, messaging architecture, and materials for deep tech, telecom, energy, and hardware companies. We are not a social media agency. But when we engage in a strategic partnership, we review your social ecosystem to make sure your channels reflect the positioning we built together. <a href="/contact" class="text-[#316263] font-bold underline">Get in touch.</a></p></div>`,faqSchema:[{question:"Why does a distinct point of view matter on social media?",answer:"Social media rewards having a distinct point of view. It rewards content that makes people stop scrolling and feel like someone is actually talking to them. Psychologists call this a parasocial relationship: the audience knows they have never met you, but the content feels personal enough that they start to trust you the way they trust someone they know. Unless you are the hottest ticket in town, posting product launches, funding announcements, and hiring updates will not work."},{question:"What should a B2B social media manager actually do?",answer:"A good social media manager's most valuable skill is extraction, effectively acting as a hybrid journalist/marketing role. They sit with your principal engineer, your product lead, and your CTO, pull out the insight that person would never think to publish, and translate it into something that fits the channel. The subject matter expert never has to think about hooks, formats, or posting schedules. This is creative, high-judgment work that is chronically undervalued."},{question:"Should we use AI to write our social posts?",answer:"Use AI for initial research, competitive scans, structural outlines, repurposing long-form content into shorter formats, and data synthesis. Do not use AI to write the final published version. The last hardcore edit has to come from a human who knows your market, your buyers, and what makes your company's perspective different from your competitors."},{question:"How should B2B companies budget for influencer relations?",answer:"Forrester's 2026 report found that 75% of enterprise B2B companies plan to increase budgets for influencer relations this year. In B2B that means industry anal
1265ysts, independent subject-matter experts, and the niche voices your buyers already follow. Co-create content with 2 to 3 analysts who cover your space, build ongoing relationships with 10 to 15 independent experts, and move budget from low-converting programmatic display toward these relationships."},{question:"What is AEO and why does it matter for social media?",answer:"AEO (Answer Engine Optimization) is making sure LLMs and AI assistants can find, parse, and recommend you. Kantar found that 74% of AI assistant users actively seek AI-driven brand recommendations. If the model does not know you, it will not choose you. Audit your website, case studies, and social posts for terminological consistency, structure content so it is machine-legible, and check what ChatGPT, Perplexity, and Gemini say about your category in an incognito browser."}]},{id:"442",title:"Why is direct marketing so important?",slug:"why-is-direct-marketing-so-important",category:"Enterprise Strategy",seoDescription:"Direct marketing remains the most measurable B2B channel. Learn why targeted outreach beats brand awareness for enterprise pipeline generation.",excerpt:"There’s an old marketing adage that dates back too many years to consider which states that people only notice something after they’ve seen it three times. Of...",readTime:4,tldr:"",content:`<p>There’s an old marketing adage that dates back too many years to consider which states that people only notice something after they’ve seen it three times. Of course, back then people only saw ads on TV, in magazines, and on billboards and they hadn’t yet been trained to studiously ignore all forms of advertising.</p>
1266
1267Nowadays, ads are everywhere and because we’ve become inured to the onslaught, we no longer notice anything unless it strikes a specific chord. Which is where Direct Marketing comes in.
1268
1269Whereas indirect marketing serves to shout a company’s marketing message to the skies and hope it connects with someone at some useful level, <a href="http://www.marketing-schools.org/types-of-marketing/direct-marketing.html">direct marketing</a> aims to directly impact a customer’s buying decision through carefully targeted messaging. Let’s take a look at the different ways that can be beneficial.
1270&nbsp;
1271<h2>Direct benefits of direct marketing</h2>
1272<h4>1. Shape the ideal purchasing experience</h4>
1273A store owner can create a certain feel and experience just by choosing the right décor and layout for their space. A B2B manager doesn’t have that luxury. Customers aren’t coming into a specially designated area to make their purchasing decisions, they have to be converted through a website and marketing materials.
1274
1275By crafting a great direct marketing campaign, B2B owners can shape the ideal purchasing experience that leaves the customer feeling supported and understood and help usher them from discovery all the way through to purchase.
1276<h4>2. Build strong relationships with potential and existing customers</h4>
1277Direct marketing campaigns, such as email drip campaigns, can go a long way towards building and maintaining strong relationships with customers. Since direct marketing campaigns are sent to very carefully selected target audiences, it’s easy to know exactly what tone to use to engage them and drive click-throughs. Every message can build on the previous one, increasing the impact of each while nurturing a personal rapport between the customer and the brand.
1278<h4>3. Better targeting means better engagement</h4>
1279If you send a broad message to a broad audience, you might strike a chord with a handful of people who might be delighted to find out that your company exists. You’ll also be sending out an email or mailing a letter to a whole bunch of people who won’t care in the least and will be quick to discard what you’ve sent.
1280
1281If you take the time to send a target specific message to a specific target, your engagement numbers can only radically increase.
1282
1283Targeting a specific group or population can allow you to
1284<ul>
1285 	<li>Take advantage of the data collected by your SaaS management software to email customers who aren’t using specific services you believe would be benef
1285icial to them.</li>
1286 	<li>Re-engage potential customers who, at some point, fell out of your marketing sales funnel.</li>
1287 	<li>Contact past customers to entice them to renew their subscriptions or come back to you.</li>
1288 	<li>Customize your direct marketing messages to a group’s specific needs.</li>
1289 	<li>Promote products that will specifically meet the target’s wants.</li>
1290</ul>
1291<h4>4. Improve customer loyalty</h4>
1292Remember above where we hinted at the sheer number of messages that consumers are inundated with on a daily basis? That constant stream of new information means that people very easily forget things they haven’t heard about in a while. Strong direct marketing campaigns can keep brands and products front-of-mind for customers, ensuring they not only continue to use your SaaS, but that they’ll remember to recommend your products should someone ask them about a service like yours.
1293<h4>5. Enjoy greater measurability</h4>
1294Let’s be honest, relationships and loyalty are lovely, but nothing beats a good ol’ batch of numbers to get a marketer’s heart pumping. And numbers, or rather, data, is where direct marketing really excels. Whether you’re sending out direct mail post cards, <strong><a href="https://hunterandbard.com/setting-effective-drip-marketing-campaign/">setting up an email drip campaign</a></strong>, or designing online retargeting ads, you can include any number of tracking elements that will give you critical information about how your campaign is progressing and how your consumers are being affected by your messaging.
1295
1296All of that tracking makes direct marketing the ideal way to do small batch testing of campaigns before launching the full version, or to test a new product you’re not sure will be well received.
1297
1298But, most importantly, all of that tracking serves to improve the impact of your next direct marketing effort, and the one after that, and so on, and so forth.
1299<h4>6. Never ending targeting improvement</h4>
1300All marketing efforts, other than to drive sales and conversions, aim, at their core, to improve a customer’s brand experience. In order to deliver the ideal experience, you need to understand the customer’s needs and preferences. What better way to do that than by carefully analyzing the data collected by your direct marketing campaigns?
1301
1302And then, when you’ve analyzed the data and acted on it, you’ll have more data to analyze, which will in turn make your next campaign even better targeted and more effective. Really, the benefits just keep adding up.`,seoTitle:"Why is direct marketing so important? | Hunter & Bard"},{id:"446",title:"WHEN PAIN IS A GOOD THING: WHY UX FRICTION DRIVES ENGAGEMENT",slug:"when-pain-is-a-good-thing",category:["Frameworks","Behavioral Science"],seoTitle:"When Pain Is a Good Thing: UX Friction & Engagement",seoDescription:"Deliberate UX friction can deepen engagement. Using BJ Fogg's behavior model to design the right kind of hard into B2B products.",faqSchema:[{question:"Why would you intentionally add friction to a user experience?",answer:"Friction is useful when the user's motivation is high and the payoff matters to them. A small amount of work primes the user to go deeper into the product, increases their appreciation of what they find, and raises switching costs. The rule: only put friction behind a feature the user actually wants."},{question:"What is BJ Fogg's Behavior Model (B = MAT)?",answer:"BJ Fogg's model states that Behavior happens when Motivation, Ability, and a Trigger converge at the same moment. If motivation is high enough, users will tolerate lower ability (more friction) to complete the behavior. If any of the three is missing, the behavior does not happen."}
1302,{question:"How does Nir Eyal's Hooked Model apply to LinkedIn?",answer:"Hooked describes a loop of Trigger, Action, Variable Reward, and Investment. LinkedIn's Who's Viewed Your Profile feature runs the loop cleanly: an email or notification triggers a return visit, the click is the action, the mix of interesting and anonymous viewers delivers a variable reward, and the time spent looking is the investment. Repeat the loop and the external trigger becomes an internal habit."}],excerpt:"There are times when you want to put your user in pain. Yes, pain. Most user experience people talk about the importance of making things simple.",readTime:4,image:SP,heroGrade:"wasabi",imageAlt:"Black-and-white close-up photograph of a heavy iron padlock on a weathered wooden door, a quiet visual metaphor for friction designed into a user experience",tldr:"",content:`<p>There are times when you want to put your user in pain. Yes, pain. Most user experience people talk about the importance of making things simple. Even I talk about how <strong><a href="http://www.slideshare.net/shiraabel/500-startups-behavioral-engineering-2015" target="_blank" rel="noopener noreferrer">we're all trained monkeys</a> </strong>and we don’t want to be making decisions. Don’t make me think. Don’t put me in any pain. Yet greater pain leads to greater appreciation, and the feeling of accomplishment. It all depends on the motivation of the user and your end goal.</p>
1303
1304<p><em>This piece was originally written about LinkedIn's UX in 2017. The product has changed since, but the underlying behavioral principle still holds, and the example is the clearest way to show it.</em></p>
1305
1306My friend Itamar and I were talking about LinkedIn, making things simple, and user experience. Specifically, we were discussing Who’s Viewed Your Profile. Itamar couldn’t understand why LinkedIn would make you work and do an extra click to be able to view this. Why wasn’t it on the homepage?
1307
1308I don’t work at LinkedIn and I haven’t asked this to anyone I know who works at or worked at LinkedIn - but I have a good idea why LinkedIn doesn’t have the Who’s Viewed Your Profile list on the homepage. They want you to experience a bit of pain to see it. It primes you to go deeper into the site.
1309
1310Let’s think about <strong><a href="http://tinyhabits.com/" target="_blank" rel="noopener noreferrer">BJ Fogg’s Tiny Habits</a></strong>:
1311B= MAT or Behavior = Motivation Ability Trigger
1312
1313<figure><img src="`+kP+`" alt="Diagram of BJ Fogg's Tiny Habits behavior model: B = MAT, where Behavior equals Motivation, Ability, and Trigger" width="1600" height="900" loading="lazy" /></figure>
1314
1315The behavior is you going to see who’s viewed your profile. Your motivation is high. I look almost daily so I can see if there are potential leads there or anyone interesting that I should know is checking up on my profile. It’s a mixture of need for work and vanity, which means that the pain to play can be higher (i.e. a click in instead of on the homepage). My ability is still there - I can click from the homepage. My trigger is going to LinkedIn.
1316
1317We can also look at it from <strong><a href="https://www.nirandfar.com/how-to-manufacture-desire/" target="_blank" rel="noopener noreferrer">Nir Eyal’s Hooked Model</a></strong>:
1318
1319<figure><img src="`+xP+`" alt="Diagram of Nir Eyal's Hooked Model showing the four-stage habit loop: Trigger, Action, Variable Reward, and Investment" width="1600" height="900" loading="lazy" /></figure>
1320
1321It started with an External Trigger - I can’t remember if it was the Who’s Viewed Your Profile link on the homepage or an email with that information. Most likely it was the email which led me back to the site. Originally this link was on the right side, below something - but its since moved to be top and center of the page.
1322
1323The Action was me clicking through to see who’s viewed my profile. The Variable Reward? Some people were really cool and some were important. But not all were, and as such the reward was variable. My body rewarded me with a dopamine rush whenever I saw someone who impressed me viewed my profile. Some of the viewers were anonymous, which always sucks. The Investment is my time looking. Eventually I would keep going back until the external trigger became an internal one, where I check it daily when I take a writing break.
1324<h2>Why create the pain? A few reasons:</h2>
1325<ol>
1326 	<li>Because by clicking through you are now primed. Priming is “Priming is an implicit memory effect in which exposure to one stimulus influences a response to another stimulus.” (<a href="https://en.wikipedia.org/wiki/Priming_(psychology)" target="_blank" rel="noopener noreferrer">Wikipedia</a>). Which basically means once you’ve clicked on a link to go deeper inside the site you are more likely to dive deep and click on more links inside said site. More pages viewed means more ads viewed and more money for LinkedIn.</li>
1327 	<li>Working harder for something means we appreciate it more. Ever hear the phrase, “Why buy the cow when you get the milk for free?” This is the internet business version of that. By working harder to see the stuff you’re interested in you actually end up liking the site more and taking it more seriously.</li>
1328 	<li>It increases your commitment to the product. The fact that you are willing to work for something inside a product gives your subconscious a signal that this product is importance and by working inside it your commitment is now higher - that raises Customer Lifetime Value and raises switching costs.</li>
1329</ol>
1330The important thing is to make sure whatever feature you're putting a level of pain behind is something that the user actually wants. Don't worry, their actions will make it clear on whether they find it important or not, watch your analytics.`},{id:"460",title:"A tale of two companies - or - why you need to build a brand",slug:"a-tale-of-two-companies-or-why-you-need-to-build-a-brand",category:"Enterprise Marketing",seoDescription:"Two companies, same product, different outcomes. Learn why B2B brand building is the differentiator that separates market leaders from commodities.",excerpt:`I had a meeting with a company the other day and I had a discu
1330ssion with them that I've had a hundred times before. "I don't understand the point of making a...`,readTime:3,tldr:"",content:`I had a meeting with a company the other day and I had a discussion with them that I've had a hundred times before.
1331
1332"I don't understand the point of making a new website when it's such a big project by the time we're done it's already out of style. And I also don't see why we should be doing content, since you have to keep it up." In fact, this company couldn't see the point in marketing at all, really. But they were well invested in sales. That they felt was a wise budget allocation. So the website looked old and outdated. And the blog was sporadic. And the marketing was weak. The <a href="/resources/blog/positioning-messaging-storytelling" class="text-[#316263] font-bold underline">brand</a> value was Nil.
1333
1334"Okay," I responded. "Who is your biggest competitor?"
1335
1336We looked at their site. It was relatively well designed and new, it had content and a community that was fresh and constantly updated. It also had the largest portion of market in the industry.
1337
1338"How much more revenue does this company have?" I asked.
1339
1340"Much more than ours," he answered, "They own the market."
1341
1342"How much more are they spending on marketing?" I asked.
1343
1344"Much more than we are," he answered.
1345
1346"Do you think their delta of spending versus revenue is more than your profit margin?" I asked.
1347
1348"Yes," he answered.
1349
1350"That's why you need to invest in marketing," I replied.
1351
1352According to <a href="http://sethgodin.strikingly.com/"><strong>Seth Godin</strong></a> there are two types of marketing - direct and brand. Direct are the ads that will bring immediate results and are easy to measure. But what they won't do is build your brand. They don't build trust. Brand marketing is harder to measure. It's how people feel about your company. It's the community you build, the blog posts that are giving helpful information, the consistent and strong look and feel of all your materials. If you want to lead your industry you need both.
1353
1354Your product could be significantly better, but just like Betamax to VHS - the one with the best Brand wins.
1355
1356How do you build a brand?
1357<h2>What's inside matters</h2>
1358Building a brand means living the company ethos. What you believe in is what you do. If the goal of your company is to give loans to a niche market that is normally ignored due to their lower economic status - your content and company actions should be helping that community. Corporate Social Responsibility actions backs up that you mean what you say, and can bring wonderful PR (as every company action must have a fiscal benefit due to the managements fiduciary duties).
1359<h2>What's outside matters</h2>
1360Your brand must have a consistent look and feel. All of your materials online and off should be up to date, and if community is part of your company ethos - it should be on your site and active - you should be blogging, and depending on what type of business you have - have a forum. In the case of the 2 companies mentioned in the beginning, the leading company had both an active blog and a community run but company managed forum. Think about it like this, if you are choosing between 2 brands - similar in cost and reputation - which will you go with? The one that gives no information on their site and their site looks like it was done in 2003, or the one that has a well maintained active community and an informative, well designed website? I'm going to trust the maintained brand more, because keeping up a brand sends a signal that this company cares.`,seoTitle:"A Tale of Two Companies: Why You Need a Brand"},{id:"465",title:"Bad things happen when you ignore marketing debt",slug:"bad-things-happen-when-you-ignore-marketing-debt",seoTitle:"Marketing Debt: Why Ignoring It Stalls Growth",seoDescription:"Ignoring marketing debt leads to stalled growth and sales plateaus. Learn how to spot it and fix your B2B enterprise strategy before it compounds.",category:"Enterprise Marketing",author:"Shira Abel",excerpt:"The Sales Team alone cannot and will not get you to scale. And to be quite frank, it's unfair to expect them to. They might get you to a nice size business....",readTime:3,tldr:"Ignoring marketing debt doesn&#8217;t make it disappear &#8212; it compounds. This post breaks down the real business consequences and how to start addressing them before they stall your growth.",image:lP,imageAlt:"Consequences of ignoring marketing debt in B2B enterprise strategy",content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li><strong>Marketing debt</strong> is the cumulative cost of skipping foundational brand and lead-gen work in favor of short-term sales tactics.</li><li>Sales alone cannot scale a business &#8212; marketing builds the fuel pipeline.</li><li>Ignoring marketing debt causes top talent to leave and sales to plateau.</li><li>The fix: invest in funnel building, messaging, and brand awareness infrastru
1360cture.</li></ul></div>
1361
1362<p>The Sales Team alone cannot and will not get you to scale. And to be quite frank, it&#8217;s unfair to expect them to. Marketing debt &#8212; the cumulative cost of skipping foundational brand and lead-gen work in favor of short-term sales tactics &#8212; catches up with every company eventually. They might get you to a nice size business. They might even help you to profitability &#8212; but if you&#8217;re looking to be a behemoth in your industry, they will not get you there alone. For that, you need Marketing and Sales to work together. You also need an absolutely fantastic product, but that should go without saying.</p>
1363
1364<div class="blog-expert-verdict"><h3>Strategic Insight: Hunter &amp; Bard</h3><p>Companies that defer marketing investment don&#8217;t just lose momentum &#8212; they create <a href="/resources/blog/the-18-month-tax" class="text-[#316263] font-bold underline">compounding</a> debt that takes 2&#8211;3x longer to recover from. The earlier you address it, the faster your enterprise engine scales.</p></div>
1365
1366<p>Marketing is the oil tanker that drills the fuel that Sales runs on (I watched The Grand Tour tonight, so excuse my car references). And Sales is not a Tesla. If there is no petrol, you&#8217;re not moving.</p>
1367
1368<p>I&#8217;m writing this post after a discussion with my good friend Annika Ljas, because well, it&#8217;s an issue, and we haven&#8217;t seen anything written about it.</p>
1369
1370<p>Let&#8217;s say you have that amazing product. And you have a great sales team who is kicking ass and taking names. Why do you need marketing? You&#8217;re making money.</p>
1371
1372<p>If you don&#8217;t want to grow to scale, you may not need marketing. You&#8217;ll grow to the size you grow and that will be what it is and there you go. Or you could be Atlassian and have zero sales people and grow to be incredibly massive, but that&#8217;s off topic (they do have marketers BTW). But, I digress.</p>
1373
1374<p>What happens when you don&#8217;t invest in marketing is the <strong><a href="/resources/blog/marketing-debt-what-is-it-and-why-do-you-care">accumulation of Marketing Debt</a></strong>. If you don&#8217;t know what that is, click on that link because I wrote an entire post about it.</p>
1375
1376<p>Ignoring marketing debt is dangerous. First, your top salespeople don&#8217;t perform as well as they used to. They&#8217;ve mined their contact list, and have probably reached out to everyone they could think of that could be interested in your product. Maybe they have hunted all of the big game worthy of them to hunt. Maybe they are <a href="/engagements">missing the right materials</a>. Maybe the leads aren&#8217;t dropping on their lap the way they did in the beginning.</p>
1377
1378<p>But you&#8217;re still growing, so you hire more salespeople. Only most of them don&#8217;t make their goals. And some of the original team doesn&#8217;t make their goals either. If this continues for too long, your best salespeople will leave. Talented people have options, and they use those options when they are unhappy. In other words, your top people leave. And sales start to plateau. They might even drop. Why does this happen? Is it the goals? Or is it the lack of leads?</p>
1379
1380<p>Where are the leads coming from?</p>
1381
1382<p>If you only have one form of lead engagement (and it&#8217;s not inbound that accumulates over time and only becomes more powerful &#8212; and typically it&#8217;s not inbound because that takes time to start seeing results and companies that have sales teams running at full throttle and don&#8217;t invest in marketing don&#8217;t have that kind of patience) then you need to keep doing whatever you&#8217;re doing to build up those leads. Yes I realize that&#8217;s a seriously long run-on sentence and a double negative. I&#8217;m being creative.</p>
1383
1384<p>You need to <strong><a href="/services/enterprise-strategy">build your funnel</a>.</strong> Marketing does that. Marketing isn&#8217;t just your message (which <a href="/services/brand-messaging">needs to be on point</a>) or your look and feel (which should be glorious) it&#8217;s also building awareness for your top of the funnel lead generation. It&#8217;s also lead nurturing. It&#8217;s holding the hand of your prospect till they are ready to buy. Then sales takes over (or not, in the case of Atlassian).</p>
1385
1386<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Recommended Next Step</p><h3>Fix Your Enterprise Strategy</h3><p>Stop ignoring marketing debt. Our Enterprise Strategy engagement helps B2B companies build scalable lead generation and market positioning.</p><a href="/services/enterprise-strategy" class="blog-inline-cta-link">Explore Enterprise Strategy &#8594;</a></div>
1387
1388<p>If you don&#8217;t invest in marketing &#8212;
1388 how are people going to know you exist? Sales cold calling isn&#8217;t enough to get to the big numbers for the long term.</p>
1389
1390<p>Fortunately, there&#8217;s an answer. It&#8217;s called Marketing. Some people call it Lead Generation, others call it Growth Hacking or Growth Marketing. At the end of the day these are all just Marketing with new names.</p>`},{id:"468",title:"Behavior engineering canvas and framework",slug:"behavior-engineering-canvas-and-framework",category:["Frameworks","Behavioral Science"],image:pP,excerpt:"This is a framework for companies to use in order to brainstorm on users behavior. The behavior they have, the behavior we want them to have - and why they...",readTime:8,tldr:"",seoTitle:"The Behavior Engineering Canvas for B2B Buyers",seoDescription:"The Behavior Engineering Canvas aligns your team on customer motivation, incentives, and behavior. A working framework for B2B enterprise strategy.",imageAlt:"The Behavior Engineering Canvas framework for mapping B2B customer behavior",author:"Shira Abel",content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>The <strong>Behavior Engineering Canvas (BEC)</strong> aligns Marketing, Sales, and Product teams on customer motivation.</li><li>Identify the gap between current behavior and the behavior you want users to adopt.</li><li>Use psychological triggers like <strong>Reciprocity, Anchoring, and Priming</strong> to guide decision-making.</li><li>Focus on a &#8220;Small Ask&#8221; (Foot in the Door) to reduce friction in the B2B sales cycle.</li></ul></div>
1391
1392<p>This is a framework for companies to use in order to brainstorm on users behavior. The behavior they have, the behavior we want them to have - and why they would do what we want them to (in other words - what's the benefit to the customer?) This is a customer first, and customer focused framework. The open row of tools on the bottom are for Heuristics that could be used to trigger a behavior.</p>
1393
1394<h2>Behavior engineering canvas framework</h2>
1395You’re launching a startup or you’ve just taken over a Marketing / Biz Dev / Sales department in an enterprise, and you need to define your potential customers. You assume everyone shares your opinion on <strong><a href="/services/brand-messaging">who the target market is</a></strong> and how they think and behave - but do they? Usually an organization will have as many opinions as people in it (and occasionally it will have even more opinions than people, for those who simply can’t decide). If this sounds like your organization, the <strong><a href="https://hunterandbard.com/ten-things-youll-learn-behavior-engineering-canvas/">Behavior Engineering Canvas</a> </strong>is for you.
1396
1397I created the Behavior Engineering Canvas (BEC) as a framework to bring together all of the different disciplines inside of an organization and summarize their target customer’s behavior and motivation on one page. By using the BEC, you can determine who your customer is, how to separate proof from assumptions, how they behave and how motivated are they to do the tasks you want them to do. Mapping out your customer’s incentives, motivations and behaviors results in deeper insight into what features to implement in a product, how to design incentives and how to frame your messaging. This insight even affects <a href="/engagements">pricing decisions</a>. Every department of your business should frame decisions based on the information inside of the BEC - printing this out poster size and having it featured somewhere prominently is critical.
1398
1399<h2>Caveat</h2>
1400This is not a game of manipulation. If your product isn’t good, people will not use it - it’s very simple. You cannot manipulate word of mouth to grow your business to critical mass. At the center of all of this is a good product.
1401
1402<div class="blog-expert-verdict"><h3>Strategic Insight: Hunter &#38; Bard</h3><p>Most B2B failures stem from misaligned assumptions about user behavior. The BEC forces teams to move from &#8216;gut feel&#8217; to data-backed behavioral mapping, ensuring your <a href="/services/enterprise-strategy">enterprise strategy</a> hits the mark from day one.</p></div>
1403
1404<h2>Goal</h2>
1405As with everything we do in business - the Behavior Engineering Canvas starts with your goal. What do you want the customer to do? Is the end goal a trial demo? Is the goal for users to share your product? Is the goal to convince the key decision maker to purchase? You have to know what you want the customer to do before you can get them to actually do it.
1406
1407<h2>Who is the customer</h2>
1408You can’t truly map customer behavior without having a good idea of who your customer is. At the end of the day, even if you’re selling to a business - that business is run by people. This section should answer some basic demographic questions like age, gender, race, and socio economic level. In addition, it should identify your ideal customer’s position in company, personal hobbies, even what kind of car they drive. This is so you get a deeper insight into the type of person you are selling / marketing / doing business with.
1409
1410Of course, since much of this customer profile information is based on assumptions, it’s important to list what actual data you have and where it’s from. From there you can see what’s missing, that maybe you should know but don’t - or need to know but don’t. And you can sort how to get that missing info.
1411<h4>Behavior</h4>
1412What action are you looking for the customer to do? Is it to buy your product? To recommend your company to their peers? To sign up for your e-Newsletter? To go deeper in the site and learn more about your company? Choose one specific behavior and start mapping what they are currently doing, why they are doing it that way, what proof you have (yup - gap analysis again), along with what you want them to do instead and why. It’s important to understand your needs before you start thinking about what’s in it for your customers.
1413<h4>Motivation</h4>
1414Most of us are either emotional or logical depending on the situation. Which is your customer for the situation you’re describing? If it’s an emotional purchase (e.g. engagement ring) the price should be whole, and the primary motivation would probably be either Self Expression or Status (a ring you designed for her versus a Cartier ring - I’m sure she’d like either). If it’s logical (e.g. marketing automation software) then the primary would likely be competition - as in our software will get you further against your competition and we’re better than everyone else in our 
1414category due to X, Y, and Z.
1415
1416<h2>How will you help them decide?</h2>
1417This is where the actual behavior engineering comes in - at this point you have mapped out what you need to make sense of what you need to do.
1418<h4>Framing</h4>
1419How you say things matters. There’s a huge difference between an enterprise software that doesn’t offer everything that most do and costs less and an enterprise software for smaller enterprises that are currently being ignored in the market because they can’t afford the heavier software. One is a sub-par product for an over-served market. The other is a premium product for an underserved market. Guess what? You want to be the latter one.
1420<h4>Foot in the door</h4>
1421The art of the small ask. Ask for something so small that there’s very little pain to give it to you. This is why I believe in Cheapium over Freemium. Why are you putting time and effort towards those who may never buy your product and waste your time? Do a small ask instead - once they have become someone who pays for your product you can get them to may more for more features. What is the tiny thing you’re going to ask your customer to do? Something so small and seemingly meaningless that they have no real reason to say No?
1422<h4>Reciprocity</h4>
1423Reciprocity is a perceived obligation for your audience to interact with your business because you gave them something in the past. What is your company is doing to build up reciprocity towards your customer? Are you giving helpful webinars? Giving amazing content through your blog, newsletter and social channels? Are you distributing white papers and case studies that make them better at what they do for a living? What are you doing to help them? This could also be amazing swag at a conference or taking a potential client to lunch. What are you giving?
1424<h4>Anchoring</h4>
1425To be a leader in the market you need to use your messaging to anchor your position in the marketplace. If there’s already a clear leader there you need to find another way - think Avis in their old “We try harder” campaigns. Anchoring isn’t only about pricing. In what niche are you the Gold Standard? And how is that reflected in everything you do?
1426<h4>Priming</h4>
1427Priming is a small action that leads to either a repeat of that action or a bigger action. Think of LinkedIn’s Who’s Viewed Your Profile. It’s not on the main page. Instead you have to click deeper into the site to see it. Once you click deeper to see it, you are more likely to click on other pages and go even deeper into the LinkedIn site - which means more page views which means more deals on their advertising. It could also be about onboarding - with Twitter it’s following 10 people. What small action do you need your customer to make that could lead to something else?
1428<h4>Loss aversion</h4>
1429Fear of missing out is a real thing. That’s why conferences have an early bird price and shows how many amazing things were in past conferences. You don’t want to miss out. What does your customer prioritize so high that they would hate to miss out on?
1430<h4>Mere exposure</h4>
1431Ear worms work. Just being exposed to something does get it into your consciousness at some level. In today’s overstimulated world, it takes reaching a user between eight to fourteen times to remember your message. Where are you advertising?
1432
1433<h2>Inclusion</h2>
1434Cliques didn’t end just because you graduated high school - they’ve just become more sophisticated. This is where the data on your user’s hobbies come in - you can send subtle hints that they belong through your messaging (Mixpanel using an obscure Harry Potter reference in their onboarding for example - people can still understand how to use the product but if you get the reference you get a warm and fuzzy dopamine rush from being included). Another version of this is Us vs. Them contrast messaging. The best example of that would be the old PC vs Mac ads.
1435
1436<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Scale Your Strategy</p><h3>Optimize Your Enterprise Strategy</h3><p>Need help applying the Behavior Engineering Canvas to your specific market? Our Enterprise Strategy engagement helps you map complex buyer journeys.</p><a href="/services/enterprise-strategy" class="blog-inline-cta-link">Explore Enterprise Strategy &#8594;</a></div>
1437
1438<h2>Conclusion</h2>
1439By mapping out all of this information and posting it somewhere everyone on your team or organization can see it you’re al
1439igning everyone’s understanding of who the customer is and why actions are being taken to reach them. It also helps with brainstorming other ideas your company can do to help your customer decide that you’re the best choice.
1440
1441Interested in using the Behavior Engineering Canvas? We were hoping you would be - you can download it for your own use by going here. It's yours for the price of sharing your email. Don't worry, I don't believe in SPAM and even though I know that email marketing has the highest ROI of all digital marketing, we don't use it for ourselves all that often. When we do it's to give incredibly helpful information or to wish you a wonderful holiday.`},{id:"475",title:"Crafting the Marketing Sales Funnel that works for you",slug:"crafting-the-marketing-sales-funnel-that-works-for-you",category:"Frameworks",seoDescription:"Build a marketing-sales funnel tailored to your B2B business, from awareness to close, matched to how your buyers actually buy.",excerpt:"It doesn’t matter how beautiful your website might be or how tantalizing a product you’re selling, without a carefully crafted marketing sales funnel you’re...",readTime:4,tldr:"",content:`<p>It doesn’t matter how beautiful your website might be or how tantalizing a product you’re selling, without a <strong><a href="https://www.singlegrain.com/blog-posts/content-marketing/how-to-create-marketing-funnel/">carefully crafted marketing sales funnel</a> </strong>you’re going to lose potential customers.</p>
1442
1443Fact is, not everyone who comes across your site or your product is going to be ready to whip out their credit card right then and there. Some of them need to be carefully courted and nurtured into becoming your customer. This is especially true if your product is on the pricier end of the spectrum or a little more involved than, say, purchasing a t-shirt.
1444
1445So how do you turn those looky-loos into customers and fans?
1446
1447You do it with a carefully crafted, monitored, and massaged Marketing Sales Funnel.
1448
1449<strong> </strong>
1450<h2>What’s a Marketing Sales Funnel?</h2>
1451Simply put, a Marketing Sales Funnel is the system that allows you to track and shepherd your potential customers through different purchasing stages from mere interest, to sale, to becoming brand advocates.
1452<strong> </strong>
1453<h2>How do you set up a Marketing Sales Funnel?</h2>
1454Smart marketing tools like <strong><a href="https://www.hubspot.com/">Hubspot</a> </strong>make it possible to set up the different marketing activities that will usher your potential customers through the process, but, before you get to that stage, you have to do a little legwork.
1455<strong> </strong>
1456<h2>Getting your Marketing Sales Funnel ready</h2>
1457Every company’s sales funnel is going to be a little different because every company’s needs are different. <em>(Check out these </em><a href="https://petovera.com/best-sales-funnel-examples/"><em>12 Marketing Sales Funnel examples</em></a><em> to see how different they can get!) </em>Step one is going to involve sitting your sales team and your marketing team down together so they can determine what prospective customers need to know about your company and your products and what you need to know about them. This information will guide how you set up your Marketing Sales Funnel and what steps you include in the process.
1458<strong> </strong>
1459<h2>The different stages of the Marketing Sales Funnel</h2>
1460Traditionally a Marketing Sales Funnel is broken up into three sections and prospective customers are shepherded through each accordingly.
1461<ul>
1462 	<li>
1463<h4>Stage 1 – Top of the Funnel</h4>
1464</li>
1465</ul>
1466The goal of this stage is to help the customer answer the question <strong>“What do I need?”</strong> Great marketing materials to give away in this stage include solutions guides and eBooks that help the prospect gain a better understanding of how their pain points can be addressed.
1467<h5>Step One: Awareness of the product</h5>
1468Best ways to reach customers at this stage is through emails, social media, SEO, and word-of-mouth.
1469<h5>Step Two: Consideration of the purchase</h5>
1470Best ways to reach customers at this stage is through your website, e-commerce, and email.
1471<ul>
1472 	<li>
1473<h4>Stage 2 – Middle of the Funnel</h4>
1474</li>
1475</ul>
1476The goal at this point is to address the essential <strong>“Why do I need it from you?”</strong> question. It’s the ideal time to share case studies and pre-recorded webinars with potential customers so they can see what sets your company and products apart.
1477<h6>Step Three: Brand/Product preference</h6>
1478Best ways to reach customers at this stage is through email, product reviews and testimonials, press releases, and blog posts.
1479<ul>
1480 	<li>
1481<h4>Stage 3 – Bottom of the Funnel</h4>
1482</li>
1483</ul>
1484This is it, the moment of truth when you turn a prospect into a customer and beyond! The question that needs to be answered at this stage is <strong>“Why should I buy now?”</strong> Great tools to help you convert and retain are free trials, assessments, and personalized audits.
1485<h6>Step Four: Action</h6>
1486Congratulations, your prospect is on the verge of becoming a customer. Go you! At this point you really want to be communicating with them on your website, by phone, or in person.
1487<ul>
1488 	<li>
1489<h4>Stage 4 – Beyond the Funnel</h4>
1490</li>
1491</ul>
1492Did you think marketing ended with a sale? Shame on you! Once you have a one-off customer, it’s time to turn them into lifelong advocates and repeat customers!
1493<h5>Step Five: Loyalty to the brand/company</h5>
1494Now that they’ve purchased something from you keep engaging customers through email or social media to sell them further products and turn them into repeat customers.
1495<h5>Step Six: Brand advocacy</h5>
1496Once you’ve converted a customer, turn them into on-the-ground marketers who help convert their friends and fans to you through loyalty programs.
1497<strong> </strong>
1498<h2>Managing the Marketing Sales Funnel</h2>
1499Smart sales and marketing teams know that a funnel isn’t something you set and forget. It’s something you want to be constantly monitoring, evaluating, and tweaking so that it’s constantly performing optimally.
1500
1501Watch to see when prospects enter the funnel; thanks to the Internet and social media people are more likely to do their own research and to come to you at very different purchasing stages.
1502
1503Testing giveaways and marketing activities at each stage will give you critical insights into your customer’s purchasing habits and preferences. You might also want to evaluate when, in the Marketing Sales Funnel, you want to be handing Marketing Qualified Leads to the sales team. It could take a little trial and error to find the sweet spot for the hand-off.
1504
1505Like everything in marketing, setting up the ideal Marketing Sales Funnel will take some work on your part, but the return on investment for your time will be well worth the effort.`,seoTitle:"Craft a Marketing-Sales Funnel That Works for You"},{id:"478",title:"Creating useful buyer personas",slug:"creating-useful-buyer-personas",category:"ABM & Pipeline",seoDescription:"Create buyer personas that actually drive B2B sales. Move beyond demographics to build actionable profiles for ABM targeting and enterprise messaging.",excerpt:"Imagine for a moment, if you will, that you have an important message to share. Say, a B2B SaaS product you want to sell, for instance. Now, imagine that...",readTime:4,tldr:"",content:`Imagine for a moment, if you will, that you have an important message to share. Say, a B2B SaaS product you want to sell, for instance. Now, imagine that you’re trying to sell it to a room filled with people whom you know exactly nothing about. There you are, standing on the podium, ready to speak…what do you say? How do you sell your incredible product if you don’t know who you’re talking to?
1506
1507Now imagine that you’re having that very same experience, but the room is filled with people you know a lot about. You know where they work, what their role is in that company. You know their pain points and their objectives. You know how many people they manage and who they report to. Suddenly, that sale doesn’t seem so far out of reach, right?
1508
1509<a href="http://contentmarketinginstitute.com/2016/05/buyer-personas-essential-parts/"><strong>Buyer personas</strong></a> are fictional representations of your ideal client. They’re created by asking questions of your existing clients and your ideal prospects so you can craft very real, very well rounded pretend individuals to target when you’re creating marketing and sales materials.
1510
1511It’s not enough to think of your target as a whole demographic segment. In order to create effective marketing materials, you need to have a very tangible idea of who you’re speaking to in order to make the message resonate. It’s easier to sell to Bill, head of sales for a 500 employee company, who’s been there for 6 years, reports to Joe, who comes into the office every three months, but still holds the purse strings, than it is to a Sales Manager at a Mid-Level Company in the Midwest.
1512&nbsp;
1513<h2>Steps to preparing buyer personas</h2>
1514It’s easier to craft great brand personas if you already have a roster of clients, but it’s a valuable exercise even if you’re just getting started. Follow these steps to get the ball rolling, and remember, this can be a fluid process. Just like actual clients evolve, your brand personas will need to grow and change with time.
1515<h4>Make a critical assessment of your database</h4>
1516Take a close look at the existing clients in your database. What trends emerge? Keep an open mind. You’re looking for all sorts of details, from where they went to school, what industry they’re in, what’s the size of their company, what’s their role, etc.
1517<h4>Look beyond your database</h4>
1518Some databases don’t contain enough of the information that you need. In that case, it can be helpful to go through your list of clients, pick out the ones you consider to be representative of the types of clients you’d like more of, and then go scout them out on LinkedIn. You’ll be amazed at how much information can be found there.
1519<h4>Talk to your sales team</h4>
1520Because they’re the ones most closely in contact with prospects and clients, your sales team knows many things that can help you craft your buyer personas. Ask them what they know about their top clients, what they wish they knew, or what they think could be helpful.
1521<h4>Ask questions</h4>
1522There are a number of things you need to know about your ideal client in order to craft a useful persona. You can ask questions bit by bit, adding them to forms on your website that people need to fill out in order to receive useful tidbits like white papers or infographics. You can have sales people ask questions when they’re pitching to prospects. You can even pick up the phone and call your ideal client and ask them a few. The key thing is to ask the questions, and track the answers.
1523
1524Let yourself be inspired by the following questions to get yourself started:
1525<ul>
1526 	<li>Who is your ideal client? Where do they live? Are they male or female? What level of education do they have?</li>
1527 	<li>What industry are they in? What’s the size of their company?</li>
1528 	<li>What’s their role in the company? Who do they report to? Who reports to them? Who are the decision makers? Who holds the purse strings?</li>
1529 	<li>What knowledge and tools do they use?</li>
1530 	<li>What are their biggest challenges and pain points?</li>
1531 	<li>What are their goals? What are their business priorities?</li>
1532 	<li>What do they need to be successful?</li>
1533</ul>
1534&nbsp;
1535<h2>Crafting the buyer personas</h2>
1536With all of that information in hand, it’s time to create your personas. Sort through everything you have learned and tease out the trends and unifying information. Arm yourself with a template like <strong><a href="https://www.singlegrain.com/buyer-personas-2/complete-guide-developing-using-buyer-personas/">this one</a></strong>, or <a href="http://epiccontentmarketing.com/wp-content/uploads/2013/08/Buyer-Persona-Profile-Template-13.06.pdf"><strong>this one</strong></a>, and start creating the unique persona who represents the client you’ll be marketing to.  Give the persona a name. Assign it a picture. Make sure that you can really <em>see</em> the person so you know exactly who you’ll be talking to.
1537&nbsp;
1538<h2>How many personas do you need?</h2>
1539Most often B2B SaaS companies will find that they have 3 Buyer Personas:
1540<ul>
1541 	<li>the decision maker,</li>
1542 	<li>the person who will pay for the service,</li>
1543 	<li>and the brand evangelist who falls in love with your product and tells everyone to also use it.</li>
1544</ul>
1545You might find that your personal SaaS has a completely different set of buyer personas. You might find that you have a fourth, or only have two or one. It’s important for you to do the ground-work so you find what works best for you and your company’s marketing needs.`,seoTitle:"Creating useful buyer personas | Hunter & Bard"},{id:"506",title:"The secret to running a SaaS social media account",slug:"the-secret-to-running-a-saas-social-media-account",category:"Enterprise Marketing",seoDescription:"Consistency beats virality in B2B SaaS social media. Learn the repeatable system for running an enterprise social media presence that builds pipeline.",excerpt:"“Consistency” is more than a tasting note for a delicious fudge brownie, it’s the secret to running your company’s social media presence . Did you know that...",readTime:3,tldr:"",content:`“Consistency” is more than a tasting note for a delicious fudge brownie, it’s the secret to running your company’s <strong><a href="https://hunterandbard.com/using-social-media-marketing-service/">social media presence</a></strong>.
1546
1547Did you know that you can schedule your posts in advance to deploy throughout the week?
1548
1549Some of the frequent mistakes our specialists notice are firms that are active on Facebook and Twitter while ignoring their other accounts, or companies that are active for a short burst of time then let their social accounts go dormant. Social media accounts offer unprecedented access to your audience, and allows you to build reciprocity and trust over time by sharing important news articles and industry information.
1550
1551Think of the sites that you rely on to get up-to-date information. Imagine if you were accustomed to getting news and updates from a brokerage firm and they took a few weeks off. The lack of information could have a dramatic impact on your portfolio, and in that time you may choose to switch to a more reliable source.
1552
1553The same principle applies to your target audience. They don’t know that your team is overburdened this month and plans to catch up with social media in a few weeks. All they experience is the radio silence that accompanies a lack of pre-planning in your social media efforts. There are multiple services that offer scheduled updates, such as<strong> <a href="https://www.hubspot.com/">HubSpot</a></strong>, <strong><a href="https://signup.hootsuite.com/pro-ent-na-english-r10/?utm_source=google&amp;utm_medium=cpc&amp;utm_campaign=selfserve-bau-na-en--us-pua-google_search_branded_alpha-&amp;utm_term=hootsuite&amp;gclid=EAIaIQobChMIy7ThtKXH2gIVFNlkCh3qAA3XEAAYASAAEgLZTfD_BwE">HootSuite</a></strong> or <strong><a href="https://buffer.com/">Buffer</a></strong>.
1554<h6></h6>
1555<h6>As a best practice, spend a few hours at the top of each week making sure your social media pipelines are full.</h6>
1556&nbsp;
1557Your social media accounts are another way to reinforce your brand message. Think of your brand as a personality, and share topics and events that are appropriate for your audience. Make sure your accounts are set with your proper company logo and an appropriate image to represent your brand. For an extreme example, a software that is focused on healthy living would never show a photo of someone smoking a cigarette. Based on the same theory, a software that focused on managing your money wouldn’t discuss the top 10 luxury vacation destinations.
1558
1559Make sure the messages are not too ‘salesy’ or self-serving. It’s fine to mention your product’s new features or promote your attendance at a major industry event, but the majority of your posts should focus on information that is valuable to your target audience.
1560
1561Social media is not only a great place to advertise and engage, but a great place to listen. What sort of things are your followers and customers saying? What pain points are they mentioning?
1562
1563Don’t underestimate the value of the 1-to-1 contact available through social media. Ask your audience questions and allow them to vote for product feature improvements. Host interactive contests and promote the winner on your sites. Offer special discounts to your loyal followers or offer a bonus if they refer other clients.
1564<h6>
1564In a word: ENGAGE YOUR AUDIENCE.</h6>`,seoTitle:"The secret to running a SaaS social media account"},{id:"518",title:"The one essential marketing tool you may be forgetting",slug:"the-one-essential-marketing-tool-you-may-be-forgetting",category:"Enterprise Marketing",seoDescription:"The most overlooked marketing tool in B2B? A clear, measurable plan. Learn why strategy beats tactics for enterprise growth.",excerpt:"“This year I’m going to the gym every day.” A common New Year’s resolution we are all too familiar with. January is when gyms see memberships go up. Gym...",readTime:3,tldr:"",content:`<p>“This year I’m going to the gym every day.” A common New Year’s resolution we are all too familiar with. January is when gyms see memberships go up. Gym regulars get frustrated that they can’t use their favorite machines at their usual times. Many feel good that they are making their resolution a reality. And then February rolls around and it’s back to business as usual. The newcomers stop coming and the regulars get their favorite machines back. Think about your business site as a New Year’s resolution. Excited for this new venture you set up the site with an ‘About Me’ page, contact info, how to order, etc. You customize and personalize it until it’s perfect and then step back and wait for traffic. At first it will come and then it will dwindle down. Why is this? You’ve upheld your resolution to create a perfect site but after announcing the launch you stopped doing things to give people a reason to come back to your site. You’re not blogging. </p>
1565
1566Is blogging dead? No.<strong><a href="https://hunterandbard.com/5-compelling-reasons-blog-saas-website/"> Blogging</a></strong> is a way to bring fresh content to your site, it shows a personal side to your business, and it offers your target market a treasure trove of information that shows how you know better than anyone how to solve their problem.
1567&nbsp;
1568<h2><strong> </strong>
1569Sharing information helps your audience</h2>
1570Blogging is a way to show you care. You enjoy your field and you want to help your customers. Like social media, blogging can show a personal side of your business. Often businesses can seem very corporate and anonymous, you don’t know who created the ads or who is writing product descriptions. However, with a blog post you can include your personality, in a professional manner, of course, while delivering information to your reader. When you are passionate about something it shows in your writing.
1571&nbsp;
1572<h2>Thought leadership</h2>
1573Blogging also proves you are an authority in your field. By writing a well researched and written blog post you prove your credibility. To be a <a href="https://hunterandbard.com">thought leader</a> in your industry you need to prove yourself. Illustrate the depth of your knowledge in a blog post to prove that you’re worth your salt, as they say.
1574&nbsp;
1575<h2>Building conversation</h2>
1576In addition to helping others with great information, blogging opens a dialogue between you and your reader. A well written post will have points that are open for discussion. You can use this to jump start a rapport with your readers to convert them from leads to customers.
1577&nbsp;
1578<h2>SEO</h2>
1579Each blog post is based on one topic which means each page will have one main keyword. This is perfect for improving your Search Engine Optimization (SEO). In addition to looking for specific keywords, search engines also love new content. By blogging regularly you add to the likelihood that your recent post will come up first in search results. You can also add links to other posts on the one you landed on to drive more traffic to the rest of your site.
1580&nbsp;
1581<h2><strong> </strong>
1582Clarifies your thoughts</h2>
1583Writing out your thoughts helps you clarify what you think, and it helps you think deeper about the subjects you and your readers care about.
1584&nbsp;
1585<h2><strong> </strong>
1586Fun</h2>
1587Lastly, blogging can be a lot of fun. Writing broadens the mind and opens your eyes to the world around you. It requires creativity and a healthy dose of adjectives. So whether your market is jewelry, a new invention, or b2b, your content will be better because of it.
1588&nbsp;
1589<h2>Bonus point</h2>
1590Blogs are immortal. And content builds - bringing you more potential results in search engines. Once something is on the internet it can always be found. So while you do need to keep updating your site so that your customers have a reason to come back, your content will always be out there for someone who is really searching.
1591<h6><strong>
1592</strong>The takeaway point is never underestimate the power of the people and their internet usage. If you want to connect and gain you need to offer a spot to do that. Blogging is the perfect opportunity for this.</h6>`,seoTitle:"The One Marketing Tool You May Be Forgetting"},{id:"534",title:"Getting HOOKED! In Israel with Nir Eyal",slug:"getting-hooked-in-israel-with-nir-eyal",category:["Enterprise Marketing","Behavioral Science"],seoDescription:"Nir Eyal on habit-forming products, the Hooked model, and what B2B marketers can learn from consumer behavioral design. Recorded in Israel.",excerpt:"Nir Eyal came to lead a workshop at the Microsoft R&D Center in Hertzliya this month. Sponsored by UpWestLabs in Silicon Valley where he himself is based, the...",readTime:4,tldr:"",content:`<p>Nir Eyal came to lead a workshop at the Microsoft R&amp;D Center in Hertzliya this month. Sponsored by <a href="http://upwestlabs.com/"><strong>UpWestLabs</strong></a>
1592 in Silicon Valley where he himself is based, the workshop was called, “Hooked! How to Drive Engagement by Creating User Habits.” Nir Eyal is a mentor and writer known for his ideas on the place where technology, business and human psychology meet. He writes about them on his personal blog, <a href="https://www.nirandfar.com/"><strong>NirandFar.com</strong></a> and for magazines like Forbes and Psychology Today, drawing as well from his own experience as a two-time entrepreneur.</p>
1593
1594Before getting started, Eyal surveyed his audience to see how many were actually working on startups. By the show of hands, more than half the room was which was hardly a surprise. Israel is a well-known hotbed of innovation, attracting more venture capital per person than any other country – 2.5 times more than the U.S. and 300 times China (!). On any given week in Tel Aviv, one can find multiple Meetups and industry events geared towards aspiring entrepreneurs and showcasing people with advice that can help them. Like Eyal.
1595
1596As if his personal cachet wasn’t enough to lure entrepreneurs in, Eyal’s workshop title held the promise of cracking the secret code to success. The room was packed and both of Eyal’s workshops – he had given one at the Google Campus in Tel Aviv the day before – were sold out. What entrepreneur doesn’t care about user engagement? Who doesn’t want their users to become “hooked”??
1597
1598The 4-½ hour workshop was a combination of straight-up lecture and various exercises. Everyone partnered up so they could help each other through some of the questions Eyal posed to arrive at key insights about their respective business.
1599
1600Here are some of the key takeaways we walked away with:
1601&nbsp;
1602<h2>Find “The Hook”</h2>
1603Engagement depends on cultivating habits by repeatedly connecting the solution with the problem until it becomes indispensible. As Eyal put it, if your solution isn’t a painkiller that solves an immediate problem or “pain” then it’s a vitamin. Being a vitamin isn’t a bad thing so long as you can find “the hook” – or itch – that will help make it habit-forming. Consider Facebook. It wasn’t until Facebook that posting and checking status updates on the Internet became so reflexive, users began to believe it was the best way to stay in touch with their friends. Unlike painkillers, vitamins require finding – then exacerbating – an itch to make sure users need to scratch it again and again. Indeed, frequent use is key to turning a product into a habit. But take note: this sort of thing can take time. “A habit isn’t created, it is built upon,” said Eyal, “Like a pearl.”
1604&nbsp;
1605<h2>Get those internal triggers right</h2>
1606<strong><a href="https://medium.com/startup-grind/the-billion-dollar-mind-trick-an-intro-to-triggers-1ed8b6db489d">Internal triggers</a></strong> are the emotional markers that pinpoint why your product will resonate with customers. Picking the right ones requires knowing your users well enough to know what pain you are solving for them. While external triggers – i.e. paid or earned media – prompt action (like traffic to your site), they only work if the right internal triggers are in place. To illustrate his point Eyal cited the “famous” Betty Crocker mistake as an example. Thinking their instant cake recipe would be a hit because it was fast, Betty Crocker missed the mark on how to sell it to customers. To fix their approach they had to learn an important lesson about their customers: for them, making a cake was as much about pride and love as convenience or speed. This key insight into customers’ internal triggers about cake enabled Betty Crocker to redirect its approach to more effectively explain how their instant cake could help.
1607&nbsp;
1608<h2>Focus on ability first</h2>
1609Once the hook and right internal triggers are in place, ability will be what ultimately moves users to action. By this Eyal was referring to the importance of making it REALLY EASY for users to actually do whatever it is you want them to do: sign up, log in, share, etc. For Google, the design and layout of their homepage is centered on driving the desired action of getting users to search. Twitter is another good example, with a homepage that became increasingly simplified – even spare – as people got to know the brand. If people can’t act quickly and easily, motivating them will only go so far said Eyal. This is why startups need to focus on ability first – and simplifying their message as much as possible to drive the desired behavior.
1610
1611In a country prone to invention and innovation, Eyal’s lecture was an important reminder that success is not just about having a brilliant product – but also about who you hope to find on the receiving end. If you’re not thinking about how you’re going to get them “hooked” on the road to launch and beyond, there may just be a Betty Crocker mistake in the future!
1612<h6>If you missed Eyal’s workshop you can get the slides <strong><a href="http://www.slideshare.net/nireyal/hooked-model">here</a></strong>. If you attended and had some takeaways of your own we’d love to hear them in the comments below.</h6>`,seoTitle:"Getting HOOKED! In Israel with Nir Eyal | Hunter & Bard"},{id:"536",title:"The definitive guide to naming your company",slug:"the-definitive-guide-to-naming-your-company",category:"Enterprise Marketing",seoDescription:"Naming your B2B company is a strategic decision, not a creative one. Learn the frameworks, linguistics, and market positioning behind great brand names.",excerpt:'A rose by any other name [might well] smell as sweet," but a company hangs a lot more than just scent on its name. You might have thought that coming up with a...',readTime:6,tldr:"",content:`A rose by any other name [might well] smell as sweet," but a company hangs a lot more than just scent on its name. You might have thought that coming up with a viable business idea was the hardest part of the start-up process, but you’d be mistaken. Ideas are a dime a dozen, while great names are worth their weight in gold and can easily be the linchpin that determines whether your brainchild will stay the course.
1613<h2></h2>&nbsp;
1614<h2>Why is a great name so important?</h2>
1615Everyone knows that first impressions are critical. Since, more often than not, the name is the very first thing people will hear about your company, it carries a lot of responsibility. The right name captures your potential customer’s attention all while giving them a taste of what you do and who you are.
1616
1617As John Williams says in his Entrepreneur article on the subject, “Not only does your company’s name serve as a first impression of your business, it serves as the heart of your brand.”
1618<h2></h2>&nbsp;
1619<h2>How long should you take to find the right name?</h2>
1620While it often feels as though you should choose a name and nab the URL as quickly as possible so you can get on with other, more pressing matters, like actually launching your business, it’s definitely not something you want to rush.
1621
1622Simply put, much like those high school essays always ended up being as long as they had to be, finding the right name will take the time it takes. Better to put in the right amount of effort and time and end up with the perfect name than to rush through the process and regret it just a few months down the road. Trust us, it’s much easier to start off on the right foot than it is to rebrand after you’ve launched.
1623<h2></h2>&nbsp;
1624<h2>So, how do you find the right name?</h2>
1625Finding the perfect name <strong><a href="https://www.entrepreneur.com/article/223401">is a multi-step process</a></strong> that can’t be done alone. Ready? Let’s go.
1626<h4>
16261. First gather up a few trusted people for a good old fashioned brainstorm</h4>
1627Three or four people should do the trick. Make sure they’re people with a vested interest - business partners, your spouse, your best friend, anyone who is willing to put in the time and effort needed to come up with sheer brilliance. If they have a creative mindset, even better.
1628
1629Tape big sheets of paper to the walls and start writing down words that relate to your industry, to your product, to the feelings you want your products to inspire. In this phase you don’t want to judge, just write. Capture everything everyone says, no matter how silly. You never know what might inspire genius.
1630
1631Questions that can spark more ideas and words:
1632<ul>
1633 	<li>Who’s the target audience?</li>
1634 	<li>What are they looking for?</li>
1635 	<li>What edge to you bring to the space?</li>
1636 	<li>What problem are you looking to solve?</li>
1637</ul>
1638<h4></h4>
1639<h4></h4>
1640<h4>2. Second, lay down a few objectives you’d like your company’s name to meet</h4>
1641Approach the naming of your company as you would any other business or marketing decision. Your name has to meet some tangible objectives. What would you like them to be?
1642
1643These objectives are going to be entirely subjective and personal, but we suggest starting with some of these:
1644<ul>
1645 	<li>Your name should be memorable and easy to read, say, and spell.</li>
1646</ul>
1647Cuil<em>, launched in 2008, was pronounced “cool.” Hard to spell, challenging to explain, and definitely not memorable.</em>
1648<ul>
1649 	<li>
1650<h6>Your name should be engaging and create interest in your business.</h6>
1651</li>
1652</ul>
1653Thoof<em> was going to be the hot new search engine in 2007. Bummer they picked such a terrible name.</em>
1654<ul>
1655 	<li>
1656<h6>Your name should be unique, easily searchable online, and not offensive in other languages.</h6>
1657</li>
1658</ul>
1659<em>It would be a shame if your global expansion were to be slowed down because you inadvertently picked a name that meant something nasty somewhere else. Just be glad you weren’t on the team that had to launch the </em>Lumia<em> phone in Spain.</em>
1660<ul>
1661 	<li>
1662<h6>Your name should correlate to your business and industry.</h6>
1663</li>
1664</ul>
1665<em>Oddly, </em>Fairtilizer<em> sells music, not that stuff that makes your garden grow green.</em>
1666<ul>
1667 	<li>
1668<h6>Your name should convey your brand message and evoke the pertinent emotions.</h6>
1669</li>
1670</ul>
1671Jiglu<em>. Anyone want to venture a guess as to what that software does? And no, it has nothing to do with jiggling jello.</em>
1672<ul>
1673 	<li>
1674<h6>Your name shouldn’t limit your potential for growth.</h6>
1675</li>
1676</ul>
16771-800-Flowers<em> and </em>CompUSA <em>are just two examples of the countless companies who forgot about expansion and market evolution.</em>
1678
1679&nbsp;
1680<h4>3. Now it’s time to evaluate the words that came out of your brainstorm</h4>
1681Grab a marker and circle all of the words that fit with your chosen objectives.
1682
1683Narrow down your list to the top 12 words that speak the most to you and play around with them to see what you and your naming team can come up with.
1684<h4></h4>
1685<h4>4. Then, thoroughly investigate your top choices</h4>
1686By now, you should have a solid list of options that could definitely do your dreams and objectives justice. One not so minor detail remains; you have to see if the name is available.
1687
1688First, run a quick Google search for the names you’re considering to make sure nothing unsavory turns up.
1689
1690Then, take your list of 12 and start checking to see if the URL is available, if the name has been trademarked, or if anyone is sitting on the social media handles.
1691<ul>
1692 	<li>Keep in mind that you might want to think of a new name if the .com URL isn’t available to minimize confusion for your potential customers.</li>
1693 	<li>Take a little time to check on names that are similar to the ones you’re investigating so that you’re not registering something just a letter or two off from a potential competitor. Aside from losing clients to them, you might also be opening yourself up to unwanted legal action.</li>
1694</ul>
1695<h4></h4>
1696<h4>5. And last, but not least, run the finalists by people who matter</h4>
1697Yes, your spouse is emotionally invested in this venture, but they might not be your target customer. So, once you have a solid list of names that you love, that are on brand, and that have passed the investigation test, it’s time for the final test.
1698
1699Identify a handful of potential customers and show them the names you’ve selected. Ask them what the name evokes, how it makes them feel, if they’re compelled to learn more, and what it tells them about your brand.
1700
1701Early on in the process you’re bound to find a name that speaks to you and grabs your attention. Don’t let yourself become obsessed with this name. Keep an open mind and trust in the process. Just like you can’t run a company on your own, you can’t pick a name on your own. But if you run through the steps one at a time, we’re pretty convinced you’ll come up with something you’ll be proud to share with the world.`,seoTitle:"The definitive guide to naming your company | Hunter & Bard"},{id:"546",title:"How to build credibility with your audience",slug:"how-to-build-credibility-with-your-audience",category:"Enterprise Marketing",seoDescription:"Thought leadership builds B2B credibility faster than advertising. Learn how to position your expertise to earn trust with enterprise buyers.",excerpt:"Thought leadership is quickly becoming the new currency in the information age. The old adage “It’s not what you know, it’s who you know” has never been more...",readTime:4,tldr:"",content:`<strong><a href="https://hunterandbard.com">Thought leadership</a></strong> is quickly becoming the new currency in the information age. The old adage “It’s not what you know, it’s who you know” has never been more relevant, and technology has made this both a blessing and a curse. Social media has broken the barrier between the company and the consumer, creating a new level of expectation for interacting with your audience. Online information moves fast, and suddenly everybody is an expert. You must build credibility with your audience or risk being lost in the sea of online data.
1702
1703Here are some great ways to develop an authentic presence in your industry and build credibility with your audience:
1704&nbsp;
1705<h2>Accurate research</h2>
1706Building credibility with your audience starts with<strong><a href="https://marketingland.com/7-ways-get-know-audience-better-181862"> understanding your audience</a>.</strong> In order to make informed decisions on what to say and what type info to share, you need to know whom you are talking to and what is most important to them. It also helps to know how your audience is viewing your information. The type of content to share on LinkedIn is different than what is shared on Twitter, so knowing where your audience is connecting with your company is helpful for making decisions. Targeting the correct content to the correct audience is fundamental for building credibility.
1707&nbsp;
1708<h2>Relevant &amp; timely news</h2>
1709Posting relevant and timely industry news is an easy way to build a core following. People are busy, and increasingly are skimming news articles instead of reading the full details. It’s also exhausting to visit multiple sites to stay up to speed on the news. Save you audience’s time by organizing all of the best news sources on your website and social media accounts. You need to read these articles to stay current with your industry anyway, why not share what you’ve learned. However, the stories need to be carefully selected for your audience. The last thing you want is for your connections to wonder why you send the article to them. Provide an easy way to stay current on industry pulse points, and your audience will become loyal fans and your business will grow.
1710&nbsp;
1711<h2>Book reviews &amp; summaries</h2>
1712Another great way to build credibility with your audience is writing reviews and summaries of popular industry-related books and reports. This helps your audience in two ways. Reading a summary of a book’s key points is valuable to your audience for saving their time, but also because you can explain the information in context to your industry and provide your opinions along the way. Connecting the dots from a general book to practical applications in your industry based on your experience adds value for your audience, and makes the information easier to grasp. The same principal is true for industry research data. It’s easy to get caught up in the numbers and statistics, and your ability to distill the information and make it relevant is incredibly valuable to your audience.
1713&nbsp;
1714<h2>Provide backstage access</h2>
1715A key strategy for <strong><a href="http://www.toprankblog.com/2016/05/credibility-trust-content-marketing/">building credibility</a></strong> with your audience is providing information they can’t get anywhere else. This includes leveraging your presence at important industry events, as well as private interviews with influential leaders in your industry. Giving this ‘backstage access’ is valuable because so many companies are cutting their budgets on training and event attendance. This especially affects small firms that simply can’t afford to pay thous
1715ands of dollars in event registration fees. Sharing access to coveted private events and influential leaders is one of the most valuable services you can provide your audience.
1716&nbsp;
1717<h2>Personify your leadership team</h2>
1718Finally, a strong way to build credibility with your audience is to provide direct access to your leadership team. Be accessible for questions and openly share opinions and insights. Host special events where your audience can experience a one-to-one interaction. Give your audience a virtual seat at the table for important announcements. More than ever, the faces of the company give cues to the marketplace about your firm’s culture, relevance and trustworthiness. Help build the correct picture of your team in their minds. Helping your audience see the human side of your company will go a long way in building credibility.
1719
1720As you can see, there are tons of options to build credibility with your audience. It’s important to understand your target consumer, know their likes and dislikes, and know where you’re able to reach them both in person and online. Become a fixture at the places where your customers already frequent will build your credibility in no time.
1721
1722How do you connect with your audience?`,seoTitle:"How to build credibility with your audience | Hunter & Bard"},{id:"548",title:"How to launch your rebrand",slug:"how-to-launch-your-rebrand",category:"Enterprise Strategy",seoDescription:"Launching a B2B rebrand requires more than a new logo. Learn the strategic rollout plan for repositioning your enterprise brand without losing momentum.",excerpt:"“If you are not embarrassed by the first version of your product, you've launched too late.” – Reid Hoffman What is the true cost of a cheaply crowdsourced...",readTime:4,tldr:"",content:`<blockquote>“If you are not embarrassed by the first version of your product, you've launched too late.”
1723
1724<strong>– Reid Hoffman </strong></blockquote>
1725What is the true cost of a cheaply crowdsourced company logo? Alternately, what is the value of a poorly launched rebrand?
1726
1727When launching a startup, certain things naturally end up being placed lower on the priority list. Let’s be honest, half the time you aren’t quite sure what your product will look like or what the market fit will be. The feedback loop during those early days is crucial to learn more about your customer base. Branding is downgraded in importance. Many (erroneously) look at it as an unnecessary expense and waste. Some companies even use inexpensive crowdsourcing sites to design an unoriginal, poorly designed logo, which is, at best, worthless and at worst, very costly.
1728
1729However, eventually your company grows and you start finding a need to build a brand that represents the category leader you are becoming, so you hire an<strong> <a href="https://hunterandbard.com/marketing-and-sales-enablement-materials/">amazing branding agency</a></strong> to handle your rebrand. Your agency has done a spectacular rebrand and now it’s time to launch.
1730
1731What do you need to do to maximize the impact of your new rebrand:
1732<h2>Internal launch</h2>
1733Make the rebrand launch time a company-wide party. The whole team should know the date and time, so they don’t start leaking the look and feel before the PR goes out. Every member of the team should receive a brand book and all the core materials, so they can know how the rebrand affects them. (Hint: It should. At the very least, their emails and internal presentations should look different, even if they are on the engineering team.)
1734
1735Also, get swag and cupcakes. T-shirts, notebooks, pens, stickers - this brand needs to be showing the love to everyone in your office. They need to want to “wear the t-shirt”.
1736
1737You are finally past the “eating ramen” stage of company life, so let them eat cake! Team members may even want to Instagram, Facebook or Tweet pictures of the cupcakes with the new logo on them! (After the PR announcement though - not before :))
1738<h2>Make sure all of your materials are aligned at once</h2>
1739If you’ve been around awhile, you probably have more than a few properties online that you maintain, as well as offline materials and sales materials. All of them should be aligned at once in order to make sure the company vision is complete and 
1739you don’t lose mindshare by having conflicting imagery on properties.
1740
1741Don’t show a schizophrenic company vision with multiple logos at various locations. Instead plan the morning of the launch to do a full brand refresh online along with the announcement.
1742
1743Create a list of all the places your logo exists before that morning, so that you don’t have to stress out finding each property and potentially missing one in the mayhem of launch. Here’s a list to help you get started:
1744
1745→  Website
1746<ul>
1747 	<li style="list-style-type: none;">
1748<ul>
1749 	<li>Make sure your new logo files have your company name in them, or else when someone does a Google image search for your company they will only see your old brand</li>
1750</ul>
1751</li>
1752</ul>
1753→  Social media profiles
1754<ul>
1755 	<li style="list-style-type: none;">
1756<ul>
1757 	<li>Profile Picture</li>
1758 	<li>Header Image</li>
1759 	<li>About Section</li>
1760</ul>
1761</li>
1762</ul>
1763→  Hacker News
1764
1765→  Forums, message boards, places you comment often
1766<ul>
1767 	<li style="list-style-type: none;">
1768<ul>
1769 	<li>Quora</li>
1770 	<li>GitHub</li>
1771</ul>
1772</li>
1773</ul>
1774→  Online advertising
1775
1776→  Email signatures
1777
1778→  Every person’s LinkedIn profile in your company (this should be checked and updated to remain current anyhow)
1779
1780→  Physical signage
1781
1782→  Online directories
1783
1784→  Business cards
1785
1786→  Merchandise
1787
1788→  Marketing collateral
1789
1790→. Sales materials
1791<h2>Company blog post about the rebrand</h2>
1792<strong><a href="https://medium.com/the-story/the-story-behind-medium-s-new-logo-4cd3e143dfcf#.fy3x63d8p">Medium did it</a></strong>. So did AirBNB. It’s standard practice to explain the purpose, goal and thought process of the rebrand. Often the agency involved will write something as well, explaining what their intent was and <strong><a href="https://www.wearedesignstudio.com/works/airbnb-process/">why they took the brand in a certain direction</a></strong>.
1793
1794<strong> </strong>Don’t just post the rebrand post on your website though. It should also be posted on Medium and LinkedIn (under the CEO and CMO profiles as well as the company one).
1795<h2>PR</h2>
1796When AirBNB did it’s controversial rebrand they went full throttle (pun intended) with the PR. First there was the full explanation given in its own blog <strong><a href="http://blog.airbnb.com/belong-anywhere/">about the belo and the meaning behind it</a></strong>. Then came <strong><a href="http://www.entrepreneur.com/article/235709">Entrepreneur</a>, <a href="http://www.fastcompany.com/3033130/most-innovative-companies/airbnb-unveils-a-major-rebranding-effort-that-paves-the-way-for-sh">Fast Company</a></strong>, and more. The buzz spread even faster since AirBNB’s logo could be interpreted in so many interesting ways. Assuming that your rebranding isn’t quite so, well, bawdy, you might not get as much coverage as AirBNB - so how do you get that coverage of your rebrand?
1797
1798→  Every journalist that covered AirBNB, Medium or another brand you are more closely associated with - make a list and pitch them your rebrand and the story behind it.
1799
1800→  Segment your email list and hone the message to each segment:
1801<ul>
1802 	<li style="list-style-type: none;">
1803<ul>
1804 	<li>Partners</li>
1805 	<li>Clients</li>
1806 	<li>Influencers</li>
1807</ul>
1808</li>
1809</ul>
1810&nbsp;
1811<h2>Advertising</h2>
1812You should be everywhere on your launch day with your new logo. Make sure all retargeting campaigns are on full-throttle. The campaign should reflect the new messaging of the rebrand. If you don't normally advertise, now would be a good time to do a small awareness campaign. Some of the destination spots we recommend for your rebranding launch (if you're a tech company) would be:
1813<ul>
1814 	<li style="list-style-type: none;">
1815<ul>
1816 	<li>Entrepreneur</li>
1817 	<li>Business Insider</li>
1818 	<li>Fast Company</li>
1819 	<li>GeekWire</li>
1820</ul>
1821</li>
1822</ul>`,seoTitle:"How to launch your rebrand | Hunter & Bard"},{id:"554",title:"Interview with Paul Teshima from Eloqua and now nudge on SaaS Insider",slug:"interview-with-paul-teshima-from-eloqua-and-now-nudge-on-saas-insider",category:"Enterprise Marketing",seoDescription:"Paul Teshima of Eloqua and Nudge shares lessons on relationship intelligence, sales, and building B2B SaaS products buyers trust.",excerpt:"Paul Teshima is a successful technology executive who has run services, customer success, account management, support and product management. He's a firm...",readTime:3,tldr:"",content:`<p><a href="https://nudge.ai/author/pteshima/">Paul Teshima</a> is a successful technology executive who has run services, customer success, account management, support and product management. He's a&nbsp;firm believer that culture eats strategy for breakfast, and business culture can be built through storytelling. He's always been a leader with a strong focus on sales and customer engagement.</p>
1823
1824Previously Paul helped lead Eloqua (marketing automation) as part of the executive team from $0 to over $100 million in revenue, through IPO and a successful acquisition for $957 million by Oracle.
1825
1826Now Paul is the co-founder and CEO of Nudge, focused on helping business people build and grow the right business relationships from their large network of weak connections. There he lives his&nbsp;passion for building great teams and products that help customers grow their businesses.
1827<div class="hs-blog-social-share"></div>
1828<div class="section post-body"></div>`,seoTitle:"Paul Teshima (Eloqua, Nudge) on SaaS Insider"},{id:"556",title:"Interview with Pere Codina from Kompyte: Growth, marketing tools, outbound marketing",slug:"interview-with-pere-codina-from-kompyte-growth-marketing-tools-outboun
1828d-marketin",category:"Enterprise Marketing",seoDescription:"Pere Codina of Kompyte discusses growth marketing tools and outbound strategy for B2B SaaS companies entering competitive enterprise markets.",excerpt:"What do you do when you have a new product and almost no dialogue with your market? When copying and pasting a strategy from the competition is not an option...",readTime:25,tldr:"",content:`<p>What do you do when you have a new product and almost no dialogue with your market? When copying and pasting a strategy from the competition is not an option and you have to learn from your own mistakes?</p>
1829
1830Looking back over the past almost three years, based on the experience he had with <a href="http://www.kompyte.com" target="_blank" rel="noopener noreferrer"><strong>Kompyte</strong></a>, Pere Codina learned:
1831<ul>
1832 	<li>“There was no technology that could provide a full overview of what the competition was doing. This is what we created in <a href="http://www.kompyte.com/"><strong>Kompyte</strong></a>.””
1833SaaS and software companies in the United States, Northern Europe and Israel are identified to be the ones that are performing best, the ones for whom <strong><a href="http://www.kompyte.com">Kompyte</a></strong> is delivering the most value.</li>
1834 	<li>Something that turned out to be working quit good in the US, if you have to offer something new that needs to be shown to everyone, is cold emailing.
1835One of the biggest challenges for <strong><a href="http://www.kompyte.com/">Kompyte</a></strong> - how to educate the market. “Get the closest you can to them! Send them emails, talk to all of them, show them how to use it, learn from you first user, then teach these tactics to the next users coming to your platform.”</li>
1836 	<li>One of the most important things is to make sure that the user understands what the product is going to provide, and how can they leverage it, because “if you are not going to leverage it, it's going to be worth nothing. ””</li>
1837 	<li>“Smaller companies turned. And they turned because they didn't have the time to spend tracking what the competition was doing.””</li>
1838 	<li>“The market is going to show you where you have to go. It just needs some questions and get ready to have some turns. That's it.”</li>
1839</ul>
1840The following is a script of the talk between Shira and Pere about what marketing channels work best for <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong>, how they found their niche and what tactics they use to get leads into the funnel. You can also listen to the podcast above.
1841
1842<strong>Shira:</strong>
1843So Pere, I have been looking at your Linkdin background. You started with a web development agency?
1844
1845<strong>Pere:</strong>
1846Yes, we started when we were still in university with one of the current co-founders. We were just students working and studying at the same time. Then still in our university years we quit our jobs and we started our first company and this is how it started. From there on we moved from a services model to a product model and we end up doing our first SaaS product, which was really local, but we learned a lot.
1847
1848<strong>Shira:</strong>
1849Ok. So let’s actually switch over and tell us about <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong>.
1850
1851<strong>Pere:</strong>
1852Basically, Kompyte is a service for companies to boost and improve their marketing performance by leveraging what's working for their competitors. We realized that some of our best customers, that were having online shops or website to sell online B2B or B2C, they had big problems identifying what competitors were doing. It was really hard for them to understand when a competitor had a new feature or if they were changing the pricing. This was because they had tons of competitors and they didn't have the time to check manually all of their websites, advertisements, social media and so on. Then we were looking if some other companies out there were offering this as a service and we realized that there was almost nothing. There were many tools in different areas but there was no technology that could provide a full overview of what the competition was doing. This is what we created in <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong>. A software that is tracking all your competitors websites, advertisement, social profiles, online content and much more, so that you can identify not only what your competitors are doing but also what's working for them – which solutions are performing best, what are they best at, and then leverage all this insights to perfect your value proposition or improve your campaign’s conversion rates.
1853
1854<strong>Shira:</strong>
1855Would this work for a company that is selling to enterprise and has a long sales cycle or is this more for SaaS company that has a short sales cycle and much less expensive product and also maybe e-commerce?
1856
1857<strong>Pere:
1858</strong>We have customers from 50 employees up selling B2B solutions for small companies in a lower price point, and we also have customers in corporate industries. We are currently selling to three of the top 5 tech companies in the US. I mean it's useful for everyone. It’s about understanding what is the competition is selling, how are they selling it, then leveraging it – and then anyone can do this. It doesn't depend on the size of the company.
1859
1860<strong>Shira:
1861</strong>What is your sales cycle like?
1862
1863<strong>Pere:</strong>
1864Basically once we have the lead generated it’s about 32 days until we close a deal. For corporate deals it may take a bit longer, because there is all this paper work before, but before that we get the leads from cold emailing or some inbound tactics. Especially bit of hacking using special landing pages and twitterbots. Then depen
1864ding on where the lead is coming from we have two different processes. If it is an outbound lead, the first thing you have to do is show them the product demo and then after this demo you can reach them out again and start negotiating with them, if they would like to use it or not. If it’s an inbound lead then things are different. I mean they are registered, so they have something in mind. It's all about contacting them, reaching them out and understanding if it's something that will provide value for them or not. The first thing with inbound leads is to pre-qualify them.
1865
1866<strong>Shira:</strong>
1867You are calling it inbound but it’s really ads isn't it? I mean it's ads to landing pages?
1868
1869<strong>Pere:</strong>
1870Yes, we have ads to landing pages, we tried some content marketing like inbound content marketing. It wasn't really working for us at the beginning. It may work in the future but now we are tracking something like million companies, so what we do is we generate landing pages for this companies and we mention them in Twitter for example. So they go to the website and then see what Kompyte is doing. They have a competitive report for one company for example.
1871
1872<strong>Shira:</strong>
1873Is that through an Ad or is that through a twitterbot?
1874
1875<strong>Pere:</strong>
1876It's a twitterbot.
1877
1878<strong>Shira:</strong>
1879Does it constantly get close down for spam?
1880
1881<strong>Pere:</strong>
1882No. We have many different accounts. If you are mentioning all of them then - yes, but you can set a threshold and do not mention all the targets in all the tweets. Probably 20% of the tweets have a mention and the other ones are just using the domain name of the company. So basically what you are looking for is that they find themselves there and they identify their own competitive analysis report, which is what you provide inside, but for other companies. Then they can see what is the best content they have, which is the most engaging touch-base they have, which is the last advertisement or the last changes in their websites. It’s like a teaser of what they are going to find inside <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong>.
1883
1884<strong>Shira:</strong>
1885Back to the twitterbot. Did you programmed it so that, for example, one in every twenty tweets is going to be something towards the company? Where does the other content come from - basically quotes and things like that?
1886
1887<strong>Pere:</strong>
1888So, it's a bit more complex. We have lead generation machine that is identifying target companies and target persons in this companies automated. All is programmed in Google Apps, using Google Spreadsheets. What we do is, we extract the list of contacts and companies that are on our radar, then from here on we set <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a> </strong>to track these companies automatically. Even if no one is registered in Kompyte, at least we are tracking their online activity. With this <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong> is providing a list of companies that we have already pre-tracking information from, which means if they are registered the chances they are going to seek quality data and information are going to be higher. With this we generate the list of domains and their twitter identifiers and then we have a robot within a spreadsheet that is posting this tweets. They are like a set of tweet templates that you can A/B test and we A/B test them. Then we generate this tweets, which are like: "Hey check out what is this company doing today. You can see it here!" Then when they search themselves they find it. That's it.
1889
1890<strong>Shira:</strong>
1891So it comes up with the mentions and they don't really need to search themselves. It comes up with their own mentions in twitter. You mentioned that you are tracking a million companies and you have also mentioned that you have sold to companies with size 50, to four or three of the largest five tech companies in Silicon Valley? Shouldn't you be focused on one group that you sell to only?
1892
1893<strong>Pere:</strong>
1894Yes, but we are still identifying this. We are in an early stage. One of the big challenges we had when we created this company is that we didn't know 
1894who was going to be our target. At the beginning we thought it was going to be e-commerce companies in Spain. I mean, almost any company would be using competitive intelligence, but you have to identify which are going to be the first users. So one thing we did one year ago was cold emailing companies from all the industries and then we identified that companies in tech industries were the once that were performing best. Now, one of the things we are identifying is that SaaS and software companies are the once that are performing best, the once for whom <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong> is delivering the most value. Yes, we are constantly trying to narrow this target and probably the next step will be narrowing it more to the size of the company.
1895
1896<strong>Shira:</strong>
1897So you narrowed it to vertical first, then you tried in Spain and that didn't work and now you switched over. You mentioned in our pre-recording chat that you are focusing on the US?
1898
1899<strong>Pere:</strong>
1900Yes, absolutely! When we started selling to any country, what we realized is that the countries that are performing best were based in the US, Northern Europe and Israel and especially in the US.
1901
1902<strong>Shira:</strong>
1903Why do you think that the US, Northern Europe and Israel perform so well?
1904
1905<strong>Pere:</strong>
1906I think it's something cultural. If you look in the SaaS innovation companies and the Saas innovations that landed in Europe you will realize that Southern Europe adopts the new technology five to eight years later then the north of Europe or the United States. So we have something that's new, that has been there. If you have to start from scratch identifying your first customers, it's going to be in the US. The thing we have identified here is that the feedback provided by companies in the United States and not only by companies, but also by investors or anyone, is more transparent, more valuable than the one you receive in Europe. It's something coming with the culture. So if you really want to make something new, you will need a lot of feedback, because you can’t copy anyone. You need what your user says. Companies in the States and the people in the States are more used to adopt and start using new technologies than people in Southern Europe. That's it.
1907
1908<strong>Shira:</strong>
1909Ok. So it's the States, it's tech companies, and you are still deciding on what size company?
1910
1911<strong>Pere:</strong>
1912One of the things we know, is for example, that when we decided to focus in tech we saw that we sold a lot to startups and then what happened is that most of these startups, which we sold to, just turned. That is when we identified that the size of the company is going to be higher and higher.
1913
1914<strong>Shira:</strong>
1915<span style="font-size: inherit;">That makes sense. You want your turn rate in a SaaS company to be ideally below 3%, if not even negative turn. What's your sales cycle like?</span>
1916
1917<strong>Pere:</strong>
1918<span style="font-size: inherit;">What we do is we generate this leads and then once they are registered we call them two or three times and we have conversation with them. What we try to do is make sure the lead, the contact, understands what </span><a style="font-size: inherit;" href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a><span style="font-size: inherit;"> is going to do and make sure that their desired outcome is what we are going to deliver them. At this process if the lead is pre-qualified then it's passed to another person, who is closing the deal. This is something I am currently doing. Then from here on it's all about making sure they receive this outcome and once they decide to start we start with a customer success process. From when the lead is generated till we close the deal is let's say four or five weeks and from here on they are three more weeks for onboarding process. This is basically couple or three learning sessions and making sure that this person, this user really understands how to use and how to leverage this technology.</span>
1919
1920<strong>Shira:</strong>
1921What type of goal setting do you do? How far do you go out? Do you set goals? How do you organize everything you've accomplished so far?
1922
1923<strong>Pere:</strong>
1924You mean in sales?
1925
1926<strong>Shira:</strong>
1927For sales and marketing, yes.
1928
1929<strong>Pere:</strong>
1930So basically what we are using is technology. Once we get the lead interested we ask them for three competitors, and then we ask them for a call to show them how <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong> is tracking the competition. It's like: "Hey send me three competitors. I am going to track them for you for a few days, then I'm going to show you what happens." And then they send the competitors and we get the first call. For the calls we are using a system tool. So for setting up all the calls we use Assistant Tool or Calendly. Then using, for example, Skype what we do is show them how Kompyte is working and we get them on board.” Hey this is your account you can use it from now on." That's it.
1931
1932<strong>Shira:</strong>
1933Ok. Let's talk about things that you've done in the past. What did you do that you thought would totally blow up, but it didn't? It just died.
1934
1935<strong>Pere:</strong>
1936We spent like one year trying to sell in Spain. Trying to sell to marketing agencies and it didn't work.
1937
1938<strong>Shira:</strong>
1939Did you try marketing agencies outside of Spain or did you try marketing agencies just inside of Spain?
1940
1941<strong>Pere:</strong>
1942Some of them are outside of Spain. We were looking for multipliers, I mean clients that are going to sell your solution to tons of clients and we thought that the first one is going to be a marketing agency. The
1942n we realized that marketing agencies are extremely focused in one thing. Let's say they are going to be content marketing agency or a SCM marketing agency. They have their own tools for tracking this. When it comes to the strategy it's provided specially more for consultant firms. One thing that we are doing is trying to get some consultant firms like strategy and business consultants using Kompyte. But, yes. We tried to sell to marketing agencies and we extremely failed there, because they didn't care about what Kompyte was doing for their clients and as soon as we decided to focus in the final company then everything started going fine.
1943
1944<strong>Shira:</strong>
1945What happened that you thought that wouldn't do so well and ended up totally blowing up?
1946
1947<strong>Pere:</strong>
1948Cold emailing was the best one. In Europe if you send an email to a company, especially if you do it in Germany, they are going to send you an email saying: "Hey do not email me anymore!" That's it…and from the very beginning. And this is if you are lucky! If you are not lucky you will have to go to the court. But things in the US are completely different. We didn't know that and what we tried was to email everybody attending this conference where we are going to be and then see if we can have some more people in the booth for example. It was a big boom. We send tons of emails and our booth was full all the days. We had 50 meetings in one day. It was something crazy. This was one of the things we thought is not going to work and we realized this cold emailing is working quite good. Especially if you have something new that no one is searching for in the internet and you need to show it to everyone.
1949
1950<strong>Shira:</strong>
1951That's another thing, you do have a new product that isn't a familiar thing. It's not something that companies necessarily have been searching for. They don't realize it exists. How you have been going about educating your market?
1952
1953<strong>Pere:</strong>
1954This is one of the biggest challenges we have right now. Imagine that a SaaS company that has a product and that they are a lot of products like that out there. Let's say a CRM company. The market is aware of what CRM is. They know. They have been using CRM for the last few years. But when you have something new and no one is searching for this keywords it's extremely hard. So we tried generating content marketing, generating content. And then the problem with the content was that our target is marketing managers in tech companies. So how much content is out there for them. You have to write awesome content! And if you really want to write awesome content from Spain for the States - it's going to be hard. You can do SEO optimizing keywords because just a few companies are searching for your keywords.
1955
1956<strong>Shira:</strong>
1957So with the keywords ‘best business intelligence’ or ‘competitive intelligence’?
1958
1959<strong>Pere:</strong>
1960Competitive intelligence is too wide. If they are looking for competitive intelligence, they are probably doing some research and s
1960o on, so it doesn't make sense to spend money with this. One of the things with the keywords that worked out fine for us, was for example hacking other processes, like optimize your landing page by tracking your competitors. That's like landing page optimization hacks. This was good content that performed quite good, but at the end you are talking about landing page optimization. There are tons of content for landing page optimization so the problem you are solving is not doing competitive intelligence, the problem you are solving is optimizing landing pages, but in a different way, in a completely new way, for example.
1961So what did we do at the beginning to educate this market? What was best thing? Get the closest you can to them! Send them emails, talk to all of them, show them how to use it, learn from you first customer, first user, then teach these tactics to the next users coming to your platform. For example, we learned things from the first customers. Then we teach these tactics, these competitive intelligence tactics, to all the rest of our customers and it was a great way to educate this market. It's quit hard starting something, you can’t copy anyone or almost anyone, because there is no content out there for this. So what you need to do is talk to all of them as much as you can and of course as soon as you get the fund just start with PR.
1962
1963<strong>Shira:</strong>
1964Wait a second. You need the funds to start with PR?
1965
1966<strong>Pere:</strong>
1967Well not necessarily. If you want to do it yourself, you can do it yourself. But when you are based in Barcelona and you have to do PR in the States you will probably need some help.
1968
1969<strong>Shira:</strong>
1970We can talk about that. I am not sure if I agree with that statement. I actually thing that PR is not impossible to do from Europe and I have coached other companies on it, so I know that is possible, but that's a whole other discussion that we can get into. What would you say it's the biggest challenge for <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong>?
1971
1972<strong>Pere:</strong>
1973They are many challenges we have. I would say that probably the biggest one is making sure that you understand what the desired outcome is and making sure your value proposition fits to this. When companies on board are signing up for trial, for example, they want to know something for the competitors, but it is not that clear what they want. You have to talk with them and make sure that they really understand what is <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong> going to provide them and how can they leverage it. Otherwise what is going to happen is that they are going to turn in a few weeks or in a few months. Let’s say this onboarding process, or to perfect the value proposition, to explain exactly what are they going to have with <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong> and how can they leverage it, is the only way you can make sure that this customer is going to stay there. So the biggest challenge for us right now is explaining this value proposition. I mean you say something like "Hey you can track your competitors!" - this sounds sexy. Everyone wants to track the competition but this is just curiosity. At the end you need to use this. If you are not going to leverage it it's going to worth nothing. You have to make sure that these users can not only see what their competitors are doing, but they can also leverage all this to improve sales conversion rates, to write better content, to change the value proposition, sell more or whatever.
1974
1975<strong>Shira:</strong>
1976Now Kompyte is a tool for companies. What tools do you use, other than <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong>?
1977
1978<strong>Pere:</strong>
1979We use a lot of tools. In every single stage we use many tools. For example for lead generation we use Dux-Soup, FindThatLead, QuickMail, twitterbots, google Apps.
1980
1981<strong>Shira:</strong>
1982Do you make the twitterbots or do you grab it from an outside source?
1983
1984<strong>Pere:</strong>
1985We have awesome developers in Kompyte, which are very busy developing <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong>. We, the founders, who studied computer science and are not the CTO, are no longer allowed to code anything in Kompyte, but we can code our own robots, our own twitterbots and s
1985o on. And this is what we do. So yes, we do it ourselves - "Homemade twitterbots"
1986
1987<strong>Shira:</strong>
1988And to create your lists for the outbound? What are you using for that?
1989
1990<strong>Pere:</strong>
1991The Dux-Soup is working quit good. Dux-Soup's extensions that you add to your Google Chrome and then it is going to show you and download all the names of persons and so on. From here we have another kind of robot which is generating the domain names and with the domain names you can use it for find the lead for example, or you can extract the email of that person and then using tools like Quick Email you can send your cold emails and automate your emailing for all the members of the company which are sending the emails, all the sales people. They don't need to do it manually. You can just automate part of this process until they come back to you and say: "Hey I want to learn more about your technology!"
1992
1993<strong>Shira:</strong>
1994Did you find that the more you send out the harder was to get them through because you started to get put in the spam files?
1995
1996<strong>Pere:</strong>
1997No. They are a lot of ways to avoid this. For example, using multiple domain names. I mean, if you send thousands of emails with the same account, with the same name, in your own domain then this is what probably is going to happen, but they are ways to avoid it.
1998
1999<strong>Shira:</strong>
2000So you are using a different domain name from Kompyte to sell Kompyte?
2001
2002<strong>Pere:</strong>
2003You can just name it for example ".net" or whatever and send emails with this, yes. There are tons of ways to do it. At least at the beginning you need to do this this way.
2004
2005<strong>Shira:</strong>
2006Ok, so you are sending it from Kompyte.net, instead of Kompyte.com?
2007
2008<strong>Pere:</strong>
2009Yes, for example. It works fine. When they reply it is automatically replied to Kompyte.com, so you can then process with the answer and so on. When we start with the sales process the tools we use is Pipedrive and CRM. Then we use some really useful technologies like Calendly and Assistant tool. With Assistant tool you insert that dates that are working for you in the email and when they click one time that works for them it's automatically booking an event in both calendars, which is great.
2010
2011<strong>Shira:</strong>
2012I know so many people who love Calendly and I just absolutely hate it. I think I am probably the only person on the planet who finds Calendly to be like the rudest app on the internet. I just don't like it. And I know it's doing really well. I seem to be the only one who feels this way.
2013
2014<strong>Pere:</strong>
2015Good to know, because then I am going to send you always "Hey Shira, what time works for you?" and that's it. This is why we use assistant tool. The assistant tool is inserting something like "Hey, here are some times that work for me, just click in the time that works for you and we are all set."
2016
2017<strong>Shira:</strong>
2018You said that you are moving up the food chain. How hard it was to move up in the food chain from smaller companies to the bigger ones? How did you do it?
2019
2020<strong>Pere:</strong>
2021We started selling to all kind of companies. Smaller, bigger ones and so on... Then we just decided which once are we going to focus on. That's it. It was nothing like: "Ok. I am going to grow the size of company" No. We didn't know which was the right size. We just realized that smaller companies turned. And they turned because they didn't have the time to spend tracking what the competition were doing. For startups and smaller companies growing and growth hacking tactics are more important than analyzing the competitors.
2022
2023<strong>Shira:</strong>
2024I get that, but when you decided did you decide to go after the larger companies or did it just naturally happened? You just send out a cold email to a larger company and it clicked?
2025
2026<strong>Pere:</strong>
2027They replied and then they decided to buy and this happened again and again and after some months the larger companies are still there using it and the startups are turning, because they don't have the time to use it.
2028
2029<strong>Shira:</strong>
2030So why not just focus on larger companies?
2031
2032<strong>Pere:
2033</strong>The market is going to show you where you have to go. It just needs some questions and get ready to have some turns. That's it.
2034
2035<strong>Shira:</strong>
2036And you have been doing Kompyte for now three years?
2037
2038<strong>Pere:</strong>
2039For two and a little bit more, yes. We incorporated <strong><a href="http://www.kompyte.com/" target="_blank" rel="noopener noreferrer">Kompyte</a></strong> in May 2014 and from here on we started working with a product model. We tried selling to Spain. We had an initial version of Kompyte .Then one and a half year ago we launched this new version and we focused on the US market and from here on we started selling.
2040
2041<strong>Shira:</strong>
2042And your tactics for selling? You call inbound ads or twitterbots to landing pages.
2043
2044<strong>Pere:</strong>
2045Anything that is people registering in the Website - we call it inbound, inbound leads.
2046
2047<strong>Shira:</strong>
2048Ok. Even if that comes in from an Ad? So you are doing ads, you are doing SEM?
2049
2050<strong>Pere:</strong>
2051Yes. Well the only ads we do is search engine ads. We tried display and banners and so on and it's not really working as retargeting. Conversion rates are way low and it's too expensive. But for some concrete keywords, extremely targeted keywords, it's worth it. At least if the market is new, there is almost none advertising for this keywords, so you want to make sure they are going to find it, when they search for it.
2052
2053<strong>Shira:</strong>
2054Fair enough. So SEM primarily inbound, which would be bots going over to landing pages, outbound, outreach (that's cold emailing). And traditional inbound as in blog didn't really work out for you guys mainly because it's just really hard to source good content from Spain. And what about events?
2055
2056<strong>Pere:</strong>
2057We went to some events. For example one event that's working great for us is the "Mobile World Congress", where most of tech companies which are not really start ups well they are startups, but at least not small startups. At least here in Barcelona this is great! Then some other events are interesting, but in terms of lead generation most of the events, let's say Websummit, for example, the companies are too small.
2058
2059<strong>Shira:</strong>
2060They are not your target?
2061
2062<strong>Pere:</strong>
2063Yes. And events where companies are not that small are extremely expensive.
2064
2065<strong>Shira:</strong>
2066How about Salesforce, Saastr?
2067
2068<strong>Pere:</strong>
2069Then you have to fly from here. You have to choose at the beginning what do you want to do and optimize the funds you have as much as you can. Probably sometimes you can achieve the same result with sending emails. You are not going to get this awareness, but you are going to get the customers. Once you got the customers you are going to start thinking of next steps.
2070
2071<strong>Shira:</strong>
2072So you actually think that events are just unnecessary, for your price point at least?
2073
2074<strong>Pere:</strong>
2075It may be extremely useful if the event is for example here in Europe. It's a question of cost benefit. Only flying to the States and spending there several days is going to take you like 10 000 or 15 000, plus the cost of attending the event. With this money you can generate tons of leads.
2076
2077<strong>Shira:</strong>
2078True. Fair enough. Is there anything you would like to tell the audience more than what we have already discussed?
2079
2080<strong>Pere:</strong>
2081No. I think we talked about everything.
2082
2083<strong>Shira:</strong>
2084Pere, thank you so much for coming in to the show! I really appreciate it!
2085
2086<strong>Pere:</strong>
2087Great! Thank you very much, Shira!`,seoTitle:"Pere Codina of Kompyte on Growth & Outbound"},{id:"560",title:"Making content marketing segmentation simple",slug:"making-content-marketing-segmentation-simple",category:"Enterprise Marketing",seoDescription:"Simplify B2B content marketing segmentation. Learn how to match content types to buyer stages for higher enterprise engagement and conversion.",excerpt:"I love mentoring. It gets me up close and personal with issues that startups are having right now, keeps my skills sharp by solving a multitude of problems,...",readTime:5,tldr:"",content:`I love mentoring. It gets me up close and personal with issues that startups are having right now, keeps my skills sharp by solving a multitude of problems, and allows me to give back.
2088
2089This week I mentored at <strong><a href="http://500.co/" target="_blank" rel="noopener noreferrer">500 Startups</a></strong> and worked with two companies on content marketing and segmentation. One was a company that sells to a dozen different verticals. The marketer was trying to sort out how to reach each vertical through content marketing, and he was getting overwhelmed with the idea of designing specific content for each.  Later that day I worked with another company that had one product, and was about to add a second selling to a similar, but not the same, market.
2090
2091This blog post is to explain how to simplify your message and marketing so that you can tell a clear story to 2 groups.
2092<h2>Company One</h2>
2093Of course, with the first startup we didn't know there were 2 groups, so I started by asking questions:
2094<h4>What do all of these verticals have in common?</h4>
2095This didn't get much of a response, as it turned out that the verticals didn't have a lot in common in terms of the markets they were after (some were B2C, others B2B)
2096<h4>How is your product used?</h4>
2097Here we had more success. There were 2 use cases on how the product was being used. With that knowledge we can narrow things down. This product was being used inside organizations to build a community inside the company and it was being used outside (as in literally outside) as a way of advertising. It's bought by 2 different departments for 2 different purposes
2098
2099i.e. Two use cases:
2100<ul>
2101 	<li style="list-style-type: none;">
2102<ul>
2103 	<li style="list-style-type: none;">
2104<ul>
2105 	<li>Building a community inside of an organization, aka company culture</li>
2106 	<li>Marketing and building awareness with people outside</li>
2107</ul>
2108</li>
2109</ul>
2110</li>
2111</ul>
2112&nbsp;
2113<h2>Company Two</h2>
2114At the second company, I already knew 2 groups were being sold to - he needed to know how to divide up his message. His product is group purchasing for sports. This means you can buy a monthly pass to different classes or soccer club matches. The first product is for soccer, and the second is for gym classes. Here the questions were about the demographics of the two groups. I sat with the company and we mapped out the <strong><a href="https://hunterandbard.com/behavior-engineering-canvas-framework/" target="_blank" rel="noopener noreferrer">Behavior Engineering Canvas</a>.</strong> In this case, the benefit for the customer is the same, but the customer is different.
2115<blockquote><em>To recap: Company One had multiple verticals but 2 use cases. They need to simplify things down to 2 themes to work with the 2 use cases and aim their content as helpful information for those needs. Company Two had one vertical but two similar (but not necessarily the same) target market. They need to send one message to both, while showing they understood the needs of both. </em></blockquote>
2116&nbsp;
2117<h2>Simplifying content marketing</h2>
2118<h4>Caveats</h4>
2119I'm assuming in this post that you already understand some of the basics regarding good content. Namely that the content isn't about your company, but instead focuses on delivering valuable information to the market that you are interested in engaging. In other words, don't write about you.
2120
2121CTA stands for Call To Action (a button asking people to do something, typically leading to a landing page.)
2122
2123I had 30 minutes with each company, so the recommendations are limited.
2124<h4>Company One</h4>
2125Segment content into two subjects: 1) Culture and 2) Advertising
2126<ol>
2127 	<li>Above the fold on the homepage they should start with 4 tests:</li>
2128</ol>
2129→  Asking for a demo (this is often like proposing to someone on a first date, but if your prospects come to your site only later in the decision cycle it makes sense - you won't know until you test it)
2130
2131→  Dividing the main slider into 2:
2132<ul>
2133 	<li style="list-style-type: none;">
2134<ul>
2135 	<li> Internal use versus external use - and offer a giveaway for each section</li>
2136 	<li>Those sliders have questions on the form that help segment the users even more</li>
2137 	<li>Each lead generated funnels into a drip campaign that is written especially for the segment</li>
2138</ul>
2139</li>
2140</ul>
2141→  A Culture CTA on the slider
2142
2143→  An Advertising CTA on the slider
2144
21452. Two blogs (they were big enough to handle that): This way they can segment their prospects according to use case and lead them down the funnel with a consistent value add
2146
21473. Segmented email marketing: Why cloud your message by sending one story to both groups? Show your value accordingly, send a clear message by segmenting your email marketing.
2148<h4>Company Two</h4>
2149<div>This company was smaller and had fewer resources. It was also a simpler sale (you could purchase from the site) and a lower price point. They couldn't do a lot of tests on the homepage so I suggested segmenting the homepage to the two products. When I met with them the homepage showed the new product, but you had to scroll to get to the other offer. That could end up leaving people looking for the original offering confused (most people don't scroll - you'll know if it's the wrong thing to do if bounce rates go up after). Putting the original offer in the slider and ignoring the new one would keep people from knowing the new one exists - hence the solution for both in the slider.</div>
2150<ul>
2151 	<li>The pictures on the two main sections should look like the purchaser. One would be guys playing soccer and the other would be women and men taking a class in a nice gym</li>
2152 	<li>Due to the lower price point ads would be the main marketing channel, but they would do some content to get long tail keywords and increase their organic search</li>
2153 	<li>The value proposition is the same for both markets so one blog is enough, however emails should be segmented as the offer</li>
2154</ul>
2155&nbsp;
2156<h2>Things to keep in mind</h2>
2157Having 2 target markets means you may need to work on segmenting the:
2158<ul>
2159 	<li>Homepage</li>
2160 	<li>Newsletter</li>
2161 	<li>Email marketing</li>
2162 	<li>Blog</li>
2163 	<li>Messaging</li>
2164 	<li>Landing pages</li>
2165</ul>
2166<div>The landing pages should also be segmented according to the buying stage your prospect is in, but let's keep that for another blog post.</div>
2167Do you have a question you'd like me to answer in a blog post? Leave me a question below in the comments.`,seoTitle:"Making content marketing segmentation simple | Hunter & Bard"},{id:"562",title:"Marketing agency vs. in house - pros and cons",slug:"marketing-agency-vs-in-house-pros-and-cons",category:"Enterprise Marketing",seoDescription:"Agency vs. in-house marketing: the real trade-offs for B2B companies. When to outsource strategy and when to build an internal enterprise marketing team.",excerpt:"“What’s the benefit to taking an agency? Why not take this in-house?” At some point during nearly every single new client meeting, we get asked this question....",readTime:5,tldr:"",content:`“What’s the benefit to taking an agency? Why not take this in-house?”
2168
2169At some point during nearly every single new client meeting, we get asked this question. Since it is such a popular question, we figured it would make sense to help more companies answer that question by writing this blog post.
2170
2171Before I started Hunter &amp; Bard I thought that working with an agency was more expensive, and when I founded Hunter &amp; Bard I would tell people that what they get with us would be our expertise, no employee issues, and high quality writing. While I was right on the last three points - it turns out that taking <a href="https://hunterandbard.com">an agency for inbound marketing</a> is less expensive as well.
2172
2173Here are the pros and cons of choosing to work with marketing agency:
2174&nbsp;
2175<h2>Cons to working with a marketing agency</h2>
2176<h4>Cost</h4>
2177Agencies seem more expensive than an in-house person. For the price of an agency you might be able to get a junior writer to handle your work inhouse. Recent college graduates are cheap and hungry to get in at the bottom floor of a tech brand, in any capacity.
2178<h4>Location</h4>
2179Agencies don’t have a desk in your office. Which may or may not matter to you. The in-house content writer may be an excellent ping-pong player, which could be an added value to you, especially if you are looking for a lunchtime game.
2180<h4>Ramp-Up Period</h4>
2181Most agencies are not entrenched in your industry, so they may need 4-6 weeks to conduct proper research and planning.
2182<h4>Flexibility</h4>
2183An agency can be flexible, to a point. Your in-house content writer, like every member of your team, tends to wear multiple hats. Pick up Chinese food for a late night at the office? Writers are known to be really proficient at doing food runs.
2184&nbsp;
2185<h2>Pros to working with a marketing agency</h2>
2186<h4>Cost</h4>
2187We know that we already mentioned this under “cons”. But we were talking about the cost of single content writer. The truth is, you can’t just hire one content writer. You need someone to strategize the direction of the content and manage the content calendar. Quite often, this is also the person who approves the content for publication. You’ll also need an editor, as you’ll see below in section called “Quality”. These days, inbound marketing is more than just about words in a blog post. The content writer has to moonlight as a data scientist, in order to not only quantify the reach of his or her audience and measure the effectiveness of the content, but also to perform A/B testing to validate the optimal content and messaging.The cost of hiring a content writer also doesn’t take into account training, for example. HubSpot and other inbound marketing tools take time to learn, as do the tactics of inbound marketing and distribution. <strong>It takes between 6 months to a year to learn HubSpot well and start seeing results - and the team in Hunter &amp; Bard is already certified and ready to go</strong>. We hit the ground running, while your new hire is still learning the ropes. With us, your time to value is faster. In this case, inexpensive in-house talent can be pricey.
2188<h4>Time</h4>
2189When things get hectic at work all hands get pulled on deck in an office, which means there will be times when your content writer should be concentrating on making the most awesome content for you, and instead is working on other things in your office. Then your content starts to slip. And your brand starts to slip. Our only priority is your content and building your brand. That’s it. We won’t get pulled onto anything else and there are no distractions. For that reason, we refuse to purchase a ping pong table.
2190<h4>Turnover</h4>
2191Turnover is expensive. Very expensive. <strong><a href="http://cce.assumption.edu/blog/job-market-digital-marketers">The average content writer stays at his or her job for 1.5 years.</a></strong> That means all of that HubSpot learning goes out the window 6 months to a year after it was learned and you have the expense of hiring and training all over again. Our team is trained. All of our new hires are trained. And if one of our people leaves, we handle it - you won’t feel a difference in your account. There will be no break in content or coverage. In addition, <strong><a href="http://www.outbrain.com/blog/2014/10/how-to-hire-a-rock-star-content-marketer.html">“49% of new hires will fail within their first 18 months of employment, while only 19% will achieve indisputable success.”</a></strong>
2192<h4>Expertise</h4>
2193Our team has written, collectively, millions of words of content on behalf of clients. We have worked with brands of all sizes, in a wide variety of mediums. We have branding and messaging strategists working alongside our content writers to ensure we produce the the most highly compelling content for your customers.
2194<h4>Quality</h4>
2195Our team checks and edits each other’s work. That makes for better writing and fewer mistakes. Did you know that grammar and spelling errors can lower trust by up to 30% in the United States? Everyone makes typos,<strong><a href="http://www.wired.com/2014/08/wuwt-typos/"> it’s actually considered a sign of intelligence</a></strong> - having someone else check the work means most of our errors get caught before being published. But good editors do more than just check grammar and spelling errors. They have a gift of rewriting things to make the writer sound even more brilliant than they already are.
2196
2197In conclusion, if you are absolutely certain that your writer will want to stay a writer forever, and that they will never leave your company - you should make the investment and hire in-house.
2198
2199If you need to hire a team of writers, bring them in-house too.`,seoTitle:"Marketing agency vs. in house - pros and cons"},{id:"571",title:"The drip campaigns you need and when to use them",slug:"the-drip-campaigns-you-need-and-when-to-use-them",category:"Enterprise Marketing",seoDescription:"Master B2B drip email campaigns. Learn which sequences to deploy at each funnel stage to nurture enterprise leads without overwhelming inboxes.",excerpt:"There are two ways to go about gardening. You can leave your garden alone to do its thing and hose it down thoroughly when it’s starting to look a little dry....",readTime:4,tldr:"",content:`There are two ways to go about gardening. You can leave your garden alone to do its thing and hose it down thoroughly when it’s starting to look a little dry. Or you can carefully set up a drip system that delivers water in small quantities at regular, carefully selected times.
2200
2201Which do you think will yield a more lush and appealing yard?
2202
2203There’s a reason email drip campaigns are named for that second gardening technique. But really, what is an email drip campaign and why should you take the time to set at least one up?
2204
2205Well, in short, an email drip campaign (sometimes referred to as an automated mail campaign, autoresponder campaign, or marketing automation) is an automated series of emails that are sent out at carefully scheduled moments, usually in response to an action taken by a potential or existing client. Studies have proven that drip campaigns can radically increase both conversion and revenue. There are many different types and each serves a very specific purpose. Read on to see which might be most useful to you.
2206&nbsp;
2207<h2>Different types of drip campaigns</h2>
2208The type of drip campaign you send out will depend on the type of event that triggers the email series. Here are a couple different sorts that you might want to consider setting up.
2209&nbsp;
2210<h2>Nurturing leads drip campaigns</h2>
2211Nurture campaigns are a very successful tool for slowly feeding a warm lead information that will first help them understand why they might need your product, then show them why they should buy it from you. Nurture campaigns are an important part of a <a href="http://in.reuters.com/article/us-passover-food-idINKCN0XF117" target="_blank" rel="noopener noreferrer"><strong>carefully constructed marketing sales funnel</strong></a>.
2212
2213Studies have shown that nurturing leads through a drip campaign can <strong><a href="http://www.marketingsherpa.com/article/chart/roi-lead-nurturing" target="_blank" rel="noopener noreferrer">increase ROI by 45%</a></strong>. It’s a great way to hold a potential client’s virtual hand as you lead them through the discovery and purchase phases.
2214&nbsp;
2215<h2>Welcome drip</h2>
2216<a href="http://www.experian.com/assets/marketing-services/white-papers/welcome-email-report.pdf" target="_blank" rel="noopener noreferrer"><strong>Research done by Experian</strong></a>
2216 shows that people don’t just expect a welcome email after signing up for a newsletter or after asking to receive information about a service, they actually enjoy them, especially if the welcome email is sent immediately after they submit their email address. Open rates on welcome emails can go all the way up to 88.3% if the timing is just right.
2217
2218Sending a welcome email is ideal for sharing some of your company’s best content and for immediately starting to engage a potential client. Don’t let the next newsletter you send out be the first contact you have with a prospect. Instead, send a welcome email containing some of your most read or most useful articles as well as a testimonial or two so they can instantly get a sense of the value you will deliver over time.
2219&nbsp;
2220<h2>Onboarding drip campaigns</h2>
2221Offering a trial period for your service is a proven way to give potential customers a taste of the benefits that your products deliver, but it won’t do much good if they don’t really roll their sleeves up and give it a try.
2222
2223An onboarding drip campaign allows you to show trial users how your service can best be used. Each email can outline a particular function of your SaaS. Emails in this drip campaign can also showcase the added benefits of your premium products.
2224&nbsp;
2225<h2>Engagement drip campaigns</h2>
2226If your dashboard shows you how your clients are using your services, an engagement drip campaign can be an effective tool designed to help them get the most out of what they’re paying for. A happy, engaged client using your service exactly as it was intended is more likely to renew for another year and even possibly upgrade to your premium products.
2227&nbsp;
2228<h2>Drip courses</h2>
2229Keeping existing clients engaged and motivated is an ongoing challenge many SaaS companies face. Creating drip courses that teach clients how to increase revenue or develop other useful and pertinent skills can make that happen. <strong><a href="http://www.getvero.com/wp-content/uploads/2014/07/email-marketing-cheat-sheet-vero1.pdf" target="_blank" rel="noopener noreferrer">Open rates are reportedly very high for opt in campaigns</a></strong> such as these, ensuring strong engagement and high click through rates.
2230&nbsp;
2231<h2>Unsubscribe drip emails</h2>
2232Just because someone has decided to unsubscribe from your mailing list doesn’t mean they never want to hear from you again, it just means they no longer want to receive an email from you. Sending one last one to say goodbye and to invite them to follow you on your social media channels might mean the difference between losing a potential client forever and retaining a warm lead.
2233
2234Drip campaigns are particularly beneficial because they so perfectly target their audience. Instead of receiving a generic email, the prospect or client is receiving something that will actually be useful or relevant to their needs, meaning there’s a higher chance the email will be opened and read.
2235&nbsp;
2236
2237Take a little time to consider what drip campaigns will help you meet your marketing goals. Our next blog post will discuss <strong><a href="https://hunterandbard.com/setting-effective-drip-marketing-campaign/">getting your drip campaigns set up</a> </strong>and started.`,seoTitle:"The drip campaigns you need and when to use them"},{id:"573",title:"B2B marketing - The decision-making process",slug:"b2b-marketing-the-decision-making-process",category:["Enterprise Marketing","Behavioral Science"],seoDescription:"B2B buying decisions involve multiple stakeholders and complex evaluation. Understand the enterprise decision-making process to align your marketing.",excerpt:"Put yourself in the shoes of your buyers. What concerns his or her daily life? Does she or he have a family? Is he or she afraid of making the wrong decision...",readTime:3,tldr:"",content:`Put yourself in the shoes of your buyers. What concerns his or her daily life? Does she or he have a family? Is he or she afraid of making the wrong decision at work, in fear that it will mean they will lose face - or worse, their job? How many other people rely on the decision they are making?
2238
2239We often think that marketing for B2B (business to business) is simpler than consumer marketing. That employees are more rational and don't care about how something looks, just that it gets the job done. And if your widget is better than Company X's widget by at least 10X then you will have a winning product on the market.
2240&nbsp;
2241<h5>Only that's not completely true.</h5>
2242&nbsp;
2243Because if Company X is the market leader, and the safer bet as far as the market is concerned, your consumer will choose them. If there's even a hint or rumor that your company isn't doing well, even if it's not true, your sales will fall. Bu
2243sinesses need to know that the companies they invest in will be around for the duration. They need to know that the time and effort it takes to implement your process or technology will not be a waste of time. People may not even realize all of the things they consider when they are in the product choosing process.
2244
2245Most companies meet the customer considerably later in the process, as companies are now able to research options online. As such your online branding and presence are more important than ever before. Here are four things you can do to help build trust in your customer base:
2246&nbsp;
2247<h2>Educate your market</h2>
2248The more information you share about your products, services and other <strong><a href="https://hunterandbard.com/build-credibility-audience/">customers the more you build trust</a></strong>. One way to think of it - companies who give away information have nothing bad to hide. This means blogging, webinars, white papers, case studies, speaking at conferences, and any other conceivable way to get your message across. It also means you need to market this content through email marketing, paid promotion, social, and earned media.
2249&nbsp;
2250<h2>Design and brand to build</h2>
2251We trust companies that look huge and stable. We don't trust companies that look small or unstable. This isn't rocket science. While design might not matter to you (or, more likely, you don't realize how much it matters to you), it does matter to most people. That means appearing large, stable, and like an industry leader - even when you're just a 50 person start up. That can only happen through a well-thought out, thorough branding that is executed precisely. It never ceases to amaze me how much design affects peoples decision making process.
2252&nbsp;
2253<h2>Mind your publicity</h2>
2254Your brand isn't what you say it is. Your brand is what your customers think it is. If they don't think you're doing well, or won't be around for the long-term, you won't be. Not all press is good press. If you make a mistake - by all means own up to it, apologize publicly and loudly, and move on. However, if your company is going through hard-times, make sure no one lets that information out. Just the whiff of it can scare away potential customers.
2255&nbsp;
2256<h2>Message to each persona</h2>
2257You most likely have more than one Persona that you are marketing towards. You need to map out what matters to each persona and make sure that their individual concerns are met in your messaging. For example, the Project Manager will care about time and budget, the QA Director cares about quality and the Department Head wants to make sure that your product will help raise the bottom line, cut costs, or both.
2258&nbsp;
2259Are you sending out the image you should be to gain mindshare? If not, why not? What difficulties have you had in execution? Leave a comment below.`,seoTitle:"B2B marketing - The decision-making process | Hunter & Bard"},{id:"576",title:"Croutons were created as a way to reuse and repurpose old bread.",slug:"croutons-were-created-as-a-way-to-reuse-and-repurpose-old-bread",category:"Enterprise Marketing",seoDescription:"Content repurposing is the crouton of B2B marketing. Learn how to multiply the value of every piece of enterprise content you create.",excerpt:"Croutons were created as a way to reuse and repurpose old bread. The term ‘content’ is a catch-all phrase to describe shareable information. It’s about as...",readTime:3,tldr:"",content:`Croutons were created as a way to reuse and repurpose old bread.
2260
2261The term ‘content’ is a catch-all phrase to describe shareable information. It’s about as descriptive as asking someone to bring bread to a potluck dinner. This information can include the latest industry research, a simple explanation of a detailed topic, details about important industry events, or your personal opinion on hot topics within your industry. The only rules for creating content is to make sure the info you’re sharing is accurate and up-to-date, and to make sure the topic is relevant for your target audience.
2262
2263You need to decide how to share this content with your audience.
2264
2265Here’s where the art of repurposing comes in: you can use the same information in multiple formats to produce tons of content in a short amount of time.
2266
2267For example, imagine your industry publishes a 75-page annual report each January. Just take data and repurpose it in several ways, including: writing an executive summary of the major topics within the report, creating an infographic that summarizes the data, writing a blog post on how the research will affect your industry, or creating a long-form document which discusses the key takeaways of each section.
2268
2269By repurposing information into summaries &amp; details, you’ve created value for your audience by sharing the information in various ways and allowing them to choose the format that works best for them. And selfishly, sharing this content gives your team additional touch points with your audience and positions you as a thought leader within the industry.`,seoTitle:"Content Repurposing: The Crouton Method"},{id:"583",title:"My 11 top tech reading resources",slug:"my-11-top-tech-reading-resources",category:"Enterprise Marketing",seoDescription:"11 essential reading resources for B2B marketers and SaaS founders. Stay current on enterprise strategy, growth, and marketing trends.",excerpt:"I love reading and I read prolifically. Every day I read and skim dozens of articles to keep up with 
2269new things in marketing, tech, SaaS specific and...",readTime:4,tldr:"",content:`I love reading and I read prolifically. Every day I read and skim dozens of articles to keep up with new things in marketing, tech, SaaS specific and management. I don't have time to look everywhere, so there are a few places online which are my Go To places for well curated information sharing. E.g. I know if Hiten Shah is sharing something, it's probably really good. You'll note most of these are newsletters because I don't want to be bothered going to a specific site for news on a regular basis. I have 2 exceptions for that, and you'll see them below.
2270
2271Here's my Must Read daily list:
2272&nbsp;
2273<h2>Quibb</h2>
2274My favorite resource for curated content. It's invite only, and the link is my invite link. Sandy, the Founder of Quibb, accepts about 60% of the people who apply. The reason that the content is so good is because spammers are thrown out and it's filled with tech industry veterans who share amazing information. I like Quibb so much it's the only newsletter that I set to be in my Primary Tab in gmail.
2275&nbsp;
2276<h2>Hiten Shah's weekly SaaS newsletter</h2>
2277I interviewed Hiten on this week's <strong><a href="https://hunterandbard.com/saas-insider-podcast/">SaaS Insider</a></strong> (we talked so much it ended up being a 2 parter). He's been in the SaaS business for as long as there's been SaaS businesses and he reads even more than I do. What he reads and likes he shares in his weekly newsletter, which is filled with great stuff every week.
2278&nbsp;
2279<h2>Techmeme</h2>
2280One of my 2 exceptions which is a website. Admittedly I don't read everything here. I just skim the headlines to see if the tech world is doing well, doing meh, or all Hell has broken loose (e.g. Twitter this past weekend with the entire executive team leaving in unison "voluntarily"). I typically check Techmeme in the morning when I wake up.
2281&nbsp;
2282<h2>Hacker News</h2>
2283Hacker News is a curated post list where members vote up helpful posts. You can access it through the website, but if you're a real information junky you use <strong><a href="https://chrome.google.com/webstore/detail/%D0%BF%D0%B0%D0%BD%D0%B4%D0%B0/klhedajfojdkjnffjgciondehdhmjcom?hl=en">Panda</a></strong>, a chrome plugin that shows you Hacker News, Growth Hackers, The Next Web, Techcrunch, HackinGUI and more all in your new tab in Chrome. If you enjoy posts about serious tech, this is a great resource. It doesn't get to the main page if it isn't good.
2284&nbsp;
2285<h2>Mattermark Daily</h2>
2286<a href="https://mattermarkdaily.com/"><strong>Mattermark Daily</strong></a> focuses on gathering the best posts by investors and operators (tech industry thought leaders). The Daily is a misnomer, it goes out fairly regularly, but not actually daily all of the time. I often open and skim to see what the VCs are saying, since typically their advice is relevant to my audience.
2287&nbsp;
2288<h2>First Round Capital</h2>
2289Every single post is bookmarkable advice. Every. Single. Post. Marketing, growth, scaling, management. Every single post will give you something helpful on growing a startup. Even on the posts where I already know the information, the way it's presented is wonderful.
2290<h5>Awesome - but I don't read them regularly</h5>
2291&nbsp;
2292<h2>LaunchTicker</h2>
2293If you need to keep up with every detail of the tech industry then the LaunchTicker makes sense. I need to put my time into learning everything there is new about marketing, product, management, and growth. As such I did read this for awhile, decided my time was better put elsewhere, and stopped. I still get it, but I don't put a lot of my focus on it, checking it from time to time instead of daily.
2294&nbsp;
2295<h2>James Clear</h2>
2296James Clear writes about behavior and habits, so of course I love his work. Most of his examples have been taken from other studies that I've read previously, however, which is what makes him an occasional read instead of a must read. If you're not already aware of the various heuristics we all enjoy, then I highly recommend signing up to James Clear. Even if you are aware, he's a good writer and his posts are wonderful reminders.
2297&nbsp;
2298<h2>Term Sheet</h2>
2299"Fortune's daily email about deals and deal-makers." If you want to know where the money is going - read this.
2300&nbsp;
2301<h2>Benedict Evans Newsletter</h2>
2302I've met him once, and he is as smart as you would imagine. This isn't me bragging. I tried to talk to him at a dinner we were both at and nothing of any worth came out, so I'm sure in my nervousness I made a truly forgetful impression. I've been following Benedict Evans since he started working at a16z. He's an expert on mobile and tech and his industry insights are typically spot on.
2303&nbsp;
2304<h2>a16z</h2>
2305Yet another amazing curated list of content. This time it's what the brilliant minds at a16z are reading.
2306
2307Of course there are so many great places for content online that I haven't mentioned here - Medium curates great posts and LinkedIn is getting into the game as well. But these are my main Go Tos. Medium tends to be more philisophical and not as focused on learning. It's infotainment if you will. LinkedIn is usually self-branding. Since I can't read everything that's out there I rely on great curated resources that go through more than I can on my own - and then I read their choices.
2308
2309How do you handle everything you want to read?`,seoTitle:"My 11 top tech reading resources | Hunter & Bard"},{id:"594",title:"Setting up an effective drip marketing campaign",slug:"setting-up-an-effective-drip-marketing-campaign",category:"Enterprise Marketing",seoDescription:"Set up a drip marketing campaign that converts B2B leads into enterprise customers. Step-by-step guide to email automation that drives pipeline.",excerpt:"An email drip marketing campaign is an important component of an effective marketing sales funnel . In our last blog post we discussed how a well-crafted and...",readTime:4,tldr:"",content:`An email drip marketing campaign is an important component of <strong><a href="https://hunterandbard.com/crafting-marketing-sales-funnel-works/" target="_blank" rel="noopener noreferrer">an effective marketing sales funnel</a></strong>. In our last blog post we discussed how <strong><a href="https://hunterandbard.com/drip-campaigns-need-use/" target="_blank" rel="noopener noreferrer">a well-crafted and well-timed email drip marketing campaign can radically improve the quality of your marketing sales leads and your revenue</a></strong>. We also covered the different types of email drip campaigns and why and when they should be deployed. Now it’s time to take a look at how to get started with the process.
2310
2311If pushed, people will tell you that they wish they got fewer emails. In truth, what they’d like is to get fewer emails that waste their time. Follow the following steps, and you can rest assured that your emails won’t fall into that category.
2312<h2>Step 1 – Getting prepared</h2>
2313<h4>What goals and objectives?</h4>
2314It almost goes without saying that, like everything in marketing, the first step to crafting a smart and useful email drip campaign is to lay the groundwork for the campaign. But what does that mean in this situation?
2315
2316Simply put, before setting up your email drip campaign, you have to choose the goals and objectives for the email series.  That’s going to involve a bit of research and deep thinking.
2317
2318Before getting to step two, can you answer the following questions?
2319<ul>
2320 	<li>What kind of campaign are you going to create?</li>
2321 	<li>Who is the target audience?</li>
2322 	<li>How will you get their contact information?</li>
2323 	<li>What are the objectives of the campaign?</li>
2324 	<li>What do you think the audience will find interesting and relevant?</li>
2325 	<li>What assets will you be sharing via the campaign emails?</li>
2326</ul>
2327<h4>What triggers?</h4>
2328Once you’ve answered the questions above, it’s time to think about what will trigger the start of the email drip campaign and the subsequent emails. The answer depends on the type of campaign you intend to run, but might also depend on the path you want the prospect or client to follow. Either way, knowing the details before you even start crafting the different components of the campaign will make the entire process more smooth.
2329<h2>Step 2 – Check in with sales</h2>
2330No matter what type of email drip campaign you decide to run, there’s little doubt that the be all/end all goal is to drive conversions and sales. With that in mind, it’s important to connect with the sales team to ensure that the series of emails impart the information that they need leads to know and gathers the information that the sales team needs to make the sales.
2331
2332Sitting down with the sales team before crafting the content of the drip campaign will ensure that the campaign objectives align with the sales team goals and that it ends up being an effective use of marketing resources.
2333<h2>Step 3 – Craft great content</h2>
2334One could easily argue that this is the most crucial step to the whole process. If your emails are boring or irrelevant it won’t matter what triggers them, what they look like, or who receives them. Great content will engage your prospects or clients and ensure that your next emails get opened.
2335
2336So, what does great email content look like? Easy.
2337
2338Great emails are:
2339<ul>
2340 	<li>Short and to the point,</li>
2341 	<li>Well written,</li>
2342 	<li>Crafted with the target audience in mind,</li>
2343 	<li>Closed with a clear Call to Action (CTA) that meets the email and campaign objectives.</li>
2344</ul>
2345Write every email with the recipient in mind. Read all emails out loud multiple times. And don’t forget to spend a significant amount of time working on your subject lines. If the recipient never opens the email, then all of the time you spent on the content will be wasted.
2346<h2>Step 4 – Decide on timing and frequency</h2>
2347Again, this is one of those steps that are going to depend on the campaign you decide to run. Will you be sending emails daily? A few times a week? Will subsequent emails be sent only if the recipient opens the previous one or engages with the previous one? The decisions you make should be contingent on both your objectives and your target audience. Keeping in mind who you’re speaking to, will keep you from either over or underwhelming them with your correspondence and rhythm.
2348<h2>Step 5 – Segment your list</h2>
2349OK, we have an objective, a target audience, some well crafted emails, and we know 
2349when we want them to go out to. What’s left? Figuring out who will be receiving them.
2350
2351Your email distribution system will allow you to segment any existing lists, which will in turn allow you to carefully target the correct recipients for each email drip campaign you send out. You may decide to craft different types of campaigns for different segments, or alter the frequency emails get sent out depending on who will be receiving them.
2352<h2>Step 6 – Measure impact and adjust accordingly</h2>
2353The beauty of email drip marketing campaigns is that once they are set up, you don’t have to mess with them too much. They’ll do the hard nurturing work for you.
2354
2355That said, you shouldn’t just set a drip campaign and forget it. Monitoring the open rates, click rates, and unsubscribe rates will give you the change to make slight changes to frequency or even content so that you can make sure your campaigns consistently deliver the best results possible.`,seoTitle:"Setting up an effective drip marketing campaign"},{id:"598",title:"SQL? MQL? What’s the BFD?",slug:"sql-mql-whats-the-bfd",category:"Enterprise Marketing",seoDescription:"MQL vs. SQL: understand the difference and why it matters for B2B pipeline. Align marketing and sales on lead qualification for enterprise deals.",excerpt:"Everyone knows that in order to make sales, you need leads. Without leads you’d have no one to actually sell to. But what most people don’t know is that...",readTime:4,tldr:"",content:`Everyone knows that in order to make sales, you need leads. Without leads you’d have no one to actually sell to. But what most people don’t know is that there’s a world of difference between someone who makes an inquiry and an actual lead that will convert to a sale.
2356<h2>&nbsp;</h2>
2357<h2>Let’s break it down, shall we?</h2>
2358In most companies, the marketing department creates some masterful works of marketing - emails, banner ads, even maybe some billboards to catch people’s attention while they run through an airport or commute down a highway. If well created, these marketing pieces drive people to the company’s website and cause them to peruse the products and information on display.
2359<h2>&nbsp;</h2>
2360<h2>Bam. You have leads. But what kinds of leads are they?</h2>
2361Well, in truth, you don’t have leads quite yet. You have inquiries. As <strong><a href="http://b2bleadblog.com/2009/09/lead-generation-check-list-part-4-clear-and-universal-lead-definition.html">Brian Carroll of the B2B Roundtable Blog explains it</a></strong>, of all the people who show interest in your company and your products, only 5-15% are actually sales ready. It’s up to your people to uncover who can be nurtured and turned into a customer.
2362
2363By analyzing their behavior as they peruse your site, you can identify the Marketing Qualified Leads who are interested enough to be fed into your sales funnel and eventually turned into Sales Qualified Leads who can be passed on to the sales team to convert.
2364
2365If you were to skip the MQL → Sales Funnel  → SQL step, you’d be handing a ton of unqualified leads off to the sales team who then would have to make countless useless calls to potential customers who aren’t ready to buy or were never really all that interested in your product before finding the ones ready to convert.
2366<h2>&nbsp;</h2>
2367<h2>First things First – Defining what leads are to your teams</h2>
2368Once someone who has made an inquiry has been deemed to be a legitimate potential lead, it’s up to the marketing team to nurture them along through a carefully created sales funnel to move them from interested status to ready to convert status. Only then should the lead be passed on to the sales team so they can close the deal.
2369
2370Therein lies the rub. That tipping point isn’t going to be the same for every company. It’s up to your teams to work together to come a consensus about when a lead should officially be passed from one team to the other.
2371
2372Yes, work together. Yes, we went there.
2373
2374Because the collaboration between the sales team and the marketing team is what makes this whole process truly useful.
2375
2376Ideally the marketing team and the sales team would sit down and discuss what a sales person needs to know about a potential customer in order to feel like they’re a qualified lead that they’ll be able to convert and what a potential customer needs to know about the product to be ready to buy.
2377
2378Not all leads being sent from Marketing to Sales are going to meet the desired criteria, but by starting the process by having this discu
2378ssion the leads sent to the sales team are going to be of a higher quality and will convert more consistently.
2379
2380It’s also important to note that this process is not a once-and-done kind of thing. In order to keep the teams operating in each other’s best interest, the teams should meet quarterly to review how the definition is holding up and if the leads are meeting the expectations defined.
2381<h2>&nbsp;</h2>
2382<h2>Moving from Conversation to Converting</h2>
2383Once your sales team and marketing team have come to an agreement about what a qualified lead looks like, it’s time to create a sales funnel or a website experience that, step-by-step, pulls the pertinent information from potential customers all while sharing key selling points.
2384
2385With the use of marketing software like <strong><a href="https://www.hubspot.com/">Hubspot</a></strong>, your marketing team can gather lead qualifying information that can help them determine exactly how ripe the lead is for conversion. Each person moving through the sales funnel is awarded a “lead score” that will help the marketing team know when they’re ready to be bounced over to the sales team.
2386<h2>&nbsp;</h2>
2387<h2>The Be All/End All Goal</h2>
2388The ultimate goal of lead nurturing from MQL to SQL is to hand a lead to the sales team at the ideal time - not so early that the potential customer isn’t quite ready to buy, and not so late that they’ve lost interest and have moved on. It saves the sales team precious time, increases sales and revenue, and equally importantly, ends up being a better customer service experience for the person who, you hope, will grow to be a satisfied customer.`,seoTitle:"SQL? MQL? What’s the BFD? | Hunter & Bard"},{id:"602",title:"Ten things you’ll learn from our behavior engineering canvas",slug:"ten-things-youll-learn-from-our-behavior-engineering-canvas",category:["Frameworks","Behavioral Science"],seoDescription:"The Behavior Engineering Canvas aligns teams on customer motivation. Learn 10 key insights from this B2B enterprise strategy framework.",excerpt:"The first step to solving any problem is to get everybody on the same page. In most companies, that’s easier said than done. Most projects have input from...",readTime:4,tldr:"",content:`<p>The first step to solving any problem is to get everybody on the same page. In most companies, that’s easier said than done. Most projects have input from several departments with different agendas, and sometimes egos get in the way. Hunter &amp; Bard developed a tool for working through these roadblocks based on our 20+ years of experience in leading strategy sessions and coaching our clients around the world. We call it the Behavior Engineering Canvas, and it’s our secret weapon for creating stellar marketing strategies our clients.</p>
2389
2390Our Behavioral Engineering Canvas is a tool to align the goals and objectives of multiple departments, and to define your firm’s target audience to understand them better. Using the core concepts of Behavioral Psychology, you’ll have a better grasp of what drives your customers to make the choices they make, and determine a hierarchy of what’s important to them. Let’s walk through the features of this tool to see what you’ll learn.
2391<h4>1. Define your target customer.</h4>
2392I’m sure your team has a general idea of who uses your product or service, but if they’re not in a Marketing or Sales capacity that information may not seem very relevant to their daily jobs. Nothing could be further from the truth! Once your team has a well-defined profile of your customer, it will influence every decision they make.
2393<h4>2. Clarify your end goals.</h4>
2394In the influential words of Stephen R. Covey, your team needs to begin with the end in mind. Until you gain consensus on the specific goals to accomplish, your team will not be equipped to make any strategic decisions.
2395<h4>3. Analyze your current status.</h4>
2396Once your team defines an end goal, take stock of the current state of your company. This process will help your team understand how many steps are required to accomplish your goals, and these steps will ultimately become your marketing strategy roadmap.
2397<h4>4. Spark creativity.</h4>
2398Populating the BEC requires a deep level of brainstorming and creativity. Taking a deep dive approach allows multiple stakeholders to share their opinions, and these ideas can grow into innovative solutions.
2399<h4>5. Uncover missed opportunities.</h4>
2400Viewing your company through the eyes of the consumer can often uncover potential target markets that were overlooked in the past. Allocating time to these cross-functional discussions also provides a 360-degree view of the problem.
2401<h4>6. Dissect current behaviors.</h4>
2402This section takes a candid look at the patterns currently exhibited by your customers, then defines what needs to happen instead for your team to achieve the defined goals.
2403<h4>7. Check their motivation.</h4>
2404Human behavior is predictable, and there’s a combination of logical and emotional factors that motivate customers towards action. This is further categorized 
2404into their primary and secondary motivations.
2405<h4>8. Sharpen your tools.</h4>
2406The behavioral tools section helps your team understand the implication of using each type of psychological trigger. Once they define the expected reaction for each scenario, it’s easy to select the tool that will have the greatest impact towards reaching their defined goals.
2407<h4>9. Build the roadmap.</h4>
2408Building your marketing strategy may sound overwhelming, but it’s simply the steps your team needs to take to move the needle. By going through this exercise, you’ll have a clear understanding of the gap between where you are and where you’d like to be. Then all that’s left is to define the tactics that will be most effective for your target audience.
2409<h4>10. Replicate the process.</h4>
2410After your team goes through this process once or twice, they’ll get the hang of looking at the project from all angles and will take less time to draw meaningful conclusions. Teams should repeat this process at any major milestones to ensure they’re on track.
2411
2412Our Behavior Engineering Canvas is a great addition to your team’s annual strategy sessions or project kickoff meetings. It’s intended to spark heated discussions and uncover concepts that hadn’t been considered. Many clients like to print the form as a poster and allow their teams to use colored sticky notes to discuss their preferences. For a distributed team, this template is easy to share via Dropbox or Google drive to provide access to multiple contributors.
2413
2414At Hunter &amp; Bard, we’re fascinated with understanding your customer’s behaviors and motivations. We’d love to help your team fill out the Behavior Engineering Canvas and build the roadmap for successfully providing outstanding products and services to your key clients in 2016!`,seoTitle:"10 Lessons From the Behavior Engineering Canvas"},{id:"603",title:"Startups and the importance of WOMM",slug:"startups-and-the-importance-of-womm",category:"Enterprise Marketing",seoDescription:"Word-of-mouth marketing drives the highest-trust B2B referrals. Learn how startups can systematically generate WOMM for enterprise growth.",excerpt:"The startup world is full of stories of previously unheard of apps or services that become all the rage as soon as they ship. The startup Mailbox is one recent...",readTime:3,tldr:"",content:`<p>The startup world is full of stories of previously unheard of apps or services that become all the rage as soon as they ship. The startup Mailbox is one recent case in point. <strong><a href="http://vimeo.com/54553882">Its one-minute trailer video had 1.2 million views and inspired more than 250,000 sign-ups when it launched</a>.</strong> Not to mention a sign-up waiting list a few hundred thousand people deep.
2414</p>
2415
2416The wildly successful startup Dropbox is another good example. A video released to promote a private beta test in 2011 helped the company exceed their goal of 15,000 signups, enticing 75,000 users instead. <strong><a href="http://techcrunch.com/2011/11/01/founder-storie-how-dropbox-got-its-first-10-million-users/">Within 7 months of launch, Dropbox reached one million users.</a></strong>
2417
2418Maybe it’s the tipping point that Malcolm Gladwell speaks of and defined as “the moment of critical mass, the threshold, the boiling point.” When a new solution or service addresses a well-defined unmet need it’s no wonder people want it. Great marketing and branding helps too. Propelled by the excitement of both being “in the know” and getting to spread the good news, people are eager to share it with their friends. So much so that some tech industry pundits believe 70% of new users should come in through invitations or word of mouth marketing by people that are not first time users.
2419
2420That number would seem really high if there wasn’t also a flipside. For startups, there’s a form of WOMM that has to do with what ideally happens before a product ever ships. While startup success depends on delivering a user experience that feeds on itself to inspire continued growth, this form of WOMM has more to do with the back-and-forth with and among users that feeds into the product development process itself.
2421
2422The <strong><a href="http://www.startuplessonslearned.com/">tech entrepreneur and blogger Eric Ries</a></strong>, whose views were popularized in his book “The Lean Startup,” believes the sooner startups engage their customers, the more likely they are to succeed. That’s because the feedback and insight provided by these interactions can help companies arrive at a product that more closely addresses their customers’ actual needs. As Ries puts it, “the customer experience IS the product.”
2423
2424The WOMM that’s generated through these early interactions with customers not only serves to establish proof of concept. They also help companies make a habit of constant improvement through community and user feedback. The company Waze, which recently won the 2012 GSMA “Best App” award, considers input from users a big part of its success. “We’ve built the app, the website, and forums to act as platforms of dialogue between our team and our users,” said <strong><a href="http://gr8marketingideas.com/2013/03/10/how-does-she-do-it-waze-vp-product-marketing-yael-elish-on-app-marketing/">Vice President, Marketing Yael Elish in a recent interview</a></strong>. This approach is built into everything Waze does from crowdsourced information tied to the product itself, to built-in features that promote social sharing – all of which helped Waze double its user base to 20 million in just 6 months.
2425
2426When it comes to startups, the true potential of WOMM lies in knowing how to build and tap into a user community – both before and after a product is launched. Those that do improve the likelihood, they end up with something customers are so excited about that they can’t wait to tell their friends`,seoTitle:"Startups and the importance of WOMM | Hunter & Bard"},{id:"1289",title:"Does Content Come Before Design, Or Design Before Content?",slug:"does-content-come-before-design-or-design-before-content",category:"Enterprise Marketing",seoDescription:"Content-first or design-first? The answer matters for B2B websites. Learn why enterprise messaging architecture should drive visual design decisions.",excerpt:"I had Peep Laja on SaaS Insider , my podcast on SaaS, a few weeks ago. We argued on what comes first - content or design. Decades ago when I started out as a...",readTime:3,tldr:"",content:`I had <a href="https://www.linkedin.com/in/peeplaja/">Peep Laja</a> on <a href="http://saasinsider.libsyn.com/065-peep-laja-at-cxl-on-increasing-your-websites-conversion">SaaS Insider</a>, my podcast on SaaS, a few weeks ago. We argued on what comes first - content or design. Decades ago when I started out as a copywriter design came first. Peep maintains that copy should come first. And not only should copy come first, but the copywriter should be doing the wireframing as well.
2427
2428I suck at wireframing. I don't like to brag about myself, but from what I've been told I'm a pretty great writer. Granted, now I run things and am more of a strategist, but I still enjoy the task of writing when given the opportunity. Does my lack of wireframing skills now mean my writing skills are irrelevant?
2429
2430No.
2431
2432Why? Because most people suck at writing. There are a lot of okay writers. But most are mundane boring as sh#t writers whose stuff you never read to the end.
2433
2434A writer needs to get inside the head of your prospects and customers. Needs to understand their emotional triggers, their pain points.`,seoTitle:"Content First or Design First for B2B Websites?"},{id:"1308",title:"7 Things That Matter When Marketing to Enterprise",slug:"7-things-that-matter-when-marketing-to-enterprise",category:["Enterprise Marketing","Enterprise Strategy"],excerpt:"Enterprise deals involve 6–10 stakeholders, cycles that stretch for months, and decisions shaped more b
2434y fear than features. Here are 7 things that actually move the needle.",readTime:6,author:"Shira Abel",datePublished:"2026-07-26",dateModified:"2026-07-26",seoTitle:"7 Things That Matter When Marketing to Enterprise",seoDescription:"Enterprise buying committees average 6 to 10 stakeholders. Learn the 7 strategic pillars, from emotional positioning to buying-group orchestration.",image:OP,heroGrade:"wasabi",imageAlt:"Overhead view of an empty dark boardroom table ringed by eight chairs, one turned away from the table",tldr:"Enterprise marketing is not louder B2B marketing. You are positioning against fear inside a 5–10 person buying committee, marketing as hard after the sale as before it, and earning trust through owned events, ABM, and thought leadership long before the first call.",faqSchema:[{question:"How many stakeholders are involved in an enterprise B2B deal?",answer:"According to Forrester, the average enterprise deal involves 5 to 10 stakeholders, each with their own KPIs, risk tolerance, and veto power. When the purchase includes AI or cross-functional technology, that buying group can double in size."},{question:"Why do enterprise deals stall?",answer:"Enterprise deals stall because of unresolved fear inside the buying committee. Every stakeholder is asking whether the decision will make them look smart or get them fired, and if any single stakeholder feels uncertain, the deal dies. Trust-based positioning, risk-based messaging, and stakeholder-specific narratives are what reduce that fear."},{question:"Is ABM a campaign or a strategy?",answer:"ABM is not a tactic or a campaign. In enterprise it is the strategic engine that governs how marketing and sales operate together against a defined account list, using shared account plans, buying group intelligence, and signal-based orchestration."}],content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>Enterprise buying committees average <strong>5 to 10 stakeholders</strong>, and that group can double when the purchase involves AI or cross-functional technology.</li><li>Most enterprise deals now start between <strong>$70K and $100K a year</strong>, usually as a proof of concept, with sales cycles running from three months to eighteen months or longer.</li><li>Deals stall on unresolved fear. If any single stakeholder cannot defend the purchase internally, the deal dies.</li><li>The unit of measurement is the <strong>buying group</strong>, not the lead. The bow-tie funnel has become the martini pipeline.</li><li>High-ACV solutions are found in three places: <strong>specialized events, word of mouth in private networks, and LLMs</strong>.</li></ul></div><p>According to <a href="https://www.forrester.com/b2b-marketing/buying-group-roles/">Forrester</a>, the average enterprise deal involves 5 to 10 stakeholders, each with their own KPIs, risk tolerance, and veto power. When the purchase includes AI or cross-functional technology, that buying group can double in size. Marketing to enterprise is a fundamentally different discipline from mid-market or SMB marketing: you are not persuading one person, you're selling a Problem to be Solved to a committee.</p><p>Most enterprise deals now start between $70K and $100K a year, usually as a proof of concept, and grow from there. Sales cycles start at three months and stretch to <a href="/resources/blog/the-18-month-tax" class="text-[#316263] font-bold underline">18 months or longer</a> as the number climbs. For SaaS the model is land-and-expand: you land the pilot, prove it, and grow the account past $250K within two years, with a lifetime value of $1M or higher.</p><p>Companies selling at this level usually know the size of their addressable market (hundreds or low thousands of accounts) and start with 1–3 verticals to build credibility before expanding.</p><h2>Here are 7 things that matter when marketing to enterprise:</h2><h3>1. Emotional positioning wins over feature lists</h3><p>Every stakeholder in an enterprise buying committee is asking the same unspoken question: </p><blockquote class="blog-pull-quote"><p><em>
2434Will this decision make me look smart, or will it get me fired?</em></p></blockquote><p>Multiply that fear across 5–10 people, and you begin to understand why enterprise deals stall.</p><p>If any single stakeholder feels uncertain, the deal dies. Your marketing must reduce that fear systematically. That means:</p><ul><li><strong>Trust-based positioning:</strong> Analyst mentions, peer validation, case studies from recognizable logos, and industry awards that signal “safe bet.”</li><li><strong>Risk-based messaging:</strong> Making the cost of inaction feel more dangerous than the risk of change.</li><li><strong>Stakeholder-specific narratives:</strong> The CFO needs ROI models. The CTO needs architecture confidence. The end-user champion needs proof of adoption success.</li></ul><p>The companies that win enterprise deals are the ones that make every stakeholder feel like they can defend the purchase internally.</p><h3>2. Land-and-expand means marketing never stops</h3><p>In the old on-premises world, Marketing handed off after the deal closed. In high Annual Contract Value (ACV) marketing and sales to enterprise, the real marketing begins post-sale.</p><p>Land-and-expand requires a continuous content engine:</p><ul><li><strong>Success stories</strong> that document wins with the customer, naming the internal champions who made it happen</li><li><strong>Enablement content</strong> (case studies, ROI calculators, best-practice guides) that helps your internal advocates sell the expansion internally</li><li><strong>Executive business reviews</strong> that position your product as a strategic partner, not a line-item vendor</li></ul><p>Every win inside an account is a marketing asset. Track them. Package them. Share them back to the customer, crediting the people who drove the success. You are building internal advocacy, and that advocacy is what turns a $100K pilot into a $500K platform deal.</p><h3>3. A strong brand is non-negotiable</h3><p>In commoditized markets, brand is the tiebreaker. When three products can solve the same problem, the buyer picks the one that <em>feels</em> like the safer, more credible choice.</p><p>Brand in enterprise is not just your logo. It is:</p><ul><li><strong>Message consistency</strong> across every touchpoint: website, sales decks, event booths, emails, social, and analyst briefings</li><li><strong>Visual coherence:</strong> if your look-and-feel is a hot mess, what do you think that says about your product? Do your AEs and SEs use the same deck, or is every meeting a solo improvisation?</li><li><strong>Cultural alignment:</strong> Does your brand reflect the values your buyers care about? Enterprise buyers research your company culture, your leadership, and your Glassdoor reviews before they take a meeting.</li></ul><p>Ask 10 people on your team to list the top 5 benefits of your product. If you get 10 different answers, you have a brand problem. A sales playbook and a design system are equally essential, because inconsistency signals immaturity to enterprise buyers.</p><h3>4. The bow-tie funnel is now a martini pipeline</h3><figure class="blog-figure"><img src="${wP}" alt="Comparison infographic showing the pre-LLM ABM bow-tie funnel next to the post-LLM martini pipeline funnel" loading="lazy" /><figcaption>The funnel is changing shape: from the ABM bow-tie to the post-LLM martini pipeline. Data: 6sense 2025, Forrester 2025.</figcaption></figure><p>The <a href="/resources/blog/martini-pipeline-abm-marketing-funnel-became" class="text-[#316263] font-bold underline">traditional marketing funnel</a>, built around individual leads and MQLs, is dead for enterprise. <a href="https://www.forrester.com/blogs/the-verdict-is-in-its-buying-groups-for-the-win/">Forrester has been clear</a>: the unit of measurement is the <strong>buying group</strong>, not the lead.</p><p>This means your demand strategy must shift from “generate more leads” to “orchestrate engagement across the buying committee.” That requires:</p><ul><li><strong>Positioning and messaging</strong> that are consistent across all channels. Anyone in the company not rowing in the same direction is hurting your potential deal flow. Consistency builds trust.</li><li><strong>Role-based content</strong> mapped to each buying group persona (Champion, Economic Buyer, Technical Evaluator, User Buyer, Ratifier)</li><li><strong>Multi-threaded outreach:</strong> relationships across the committee, not just with your champion.</li></ul>{{block:0}}<p>There are 3 places high-ACV solutions are found: specialized events, word of mouth in private networks, and LLMs. If you're not focused on LLM opportunities, you're only hurting yourself.&nbsp;</p>{{block:1}}<h3>5. Industry conferences and owned events build pipeline</h3><p>Enterprise deals are relationship-driven. Face-to-face matters. Industry conferences are where your buyers go to learn, evaluate, and build trust—and your presence there signals credibility.</p><p>The key is being strategic about which events deserve your investment:</p><ul><li><strong>Speak, don’t just sponsor:</strong> A speaking slot or panel position at the right industry conference builds more authority than any booth</li><li><strong>Executive dinners</strong> hosted alongside major conferences, limited to 15–20 decision-makers, create intimate pipeline moments</li><li><strong>Bar nights</strong> work, with one rule: set a limit at the bar.</li><li><strong>Customer Advisory Boards (CABs)</strong> and Product Advisory Councils deepen relationships with existing accounts</li><li><strong>Your own annual event</strong> can start small (50 attendees) and grow into an industry tentpole that pulls buyers to you</li></ul><p>Pick 2–3 industry conferences where your ideal buyers actually attend, then supplement with your own high-signal gatherings. The combination of third-party credibility from conferences and controlled intimacy from owned events is what fills enterprise pipeline.</p><h3>6. ABM is table stakes, not a campaign</h3><p>Account-Based Marketing has matured beyond “send a gift box.” In enterprise, ABM is how your marketing and sales teams operate together against a defined account list.</p><p>Effective enterprise ABM in 2026 means:</p><ul><li><strong>Shared account plans</strong> between marketing and sales, with coordinated plays across digital, events, and direct outreach</li><li><strong>Buying group intelligence:</strong> Mapping the committee, understanding org-chart dynamics, and tailoring content to each stakeholder’s priorities</li><li><strong>Signal-based orchestration:</strong> Using intent data, engagement scoring, and buying stage to trigger the right plays at the right time</li></ul><p>ABM is not a tactic. It is the strategic engine that drives enterprise marketing.</p><h3>7. Thought leadership earns the right to sell</h3><p>Trust is built through thought leadership long before the first sales conversation.</p><p>This means:</p><ul><li><strong>Original research and frameworks</strong> that demonstrate deep domain expertise</li><li><strong>Executive-authored content</strong> (not ghostwritten listicles) that positions your leadership as credible peers</li><li><strong>Speaking engagements and analyst engagement</strong> that build third-party validation</li><li><strong>Visibility in AI search results:</strong> As buyers increasingly use AI tools to research vendors, your content needs to be structured for <a href="/resources/blog/seo-is-no-longer-enough-b2b-guide-to-aeo">Answer Engine Optimization (AEO)</a>, not just traditional SEO</li></ul><p>The companies that show up with insight, before they show up with a pitch, are the ones that get invited to the table.</p><div class="blog-numbered-step"><span class="blog-step-number">+1</span><h3>Advertising will not close an enterprise deal</h3></div><p>No one signs a $100K contract because they saw an ad. Advertising in enterprise buys familiarity. It makes your name feel safe when the committee finally looks you up. Budget it as brand, measure it as reach, and stop asking it for pipeline.</p><h3>The bottom line</h3><p>Enterprise marketing is not about doing more. It is about doing the right things with precision: positioning for the buying committee, not the individual; building brand trust that reduces fear; orchestrating engagement across stakeholders; and earning credibility through thought leadership.</p><p>If your marketing still operates like a lead-gen machine targeting individuals, you are playing a different game than your enterprise buyers.</p><div class="on-dark bg-teal-700 rounded-lg overflow-hidden not-prose my-12"><div class="flex flex-col items-center justify-center text-center px-8 py-16"><h2 class="font-display font-semibold uppercase leading-[1.1] text-white text-[28px] sm:text-[36px] mb-6">Selling into the enterprise?<span class="block font-serif italic font-normal text-wasabi">Let’s Talk</span></h2><p class="font-sans text-base leading-relaxed mb-8 max-w-xl text-white/90">We help companies that sell into enterprise position, message, and sell to buying committees.</p><a href="/contact" class="inline-flex items-center justify-center rounded-full bg-wasabi px-10 py-5 font-semibold text-base text-obsidian-900 no-underline hover:bg-wasabi-600 transition-colors">Let’s Talk</a></div></div>`,contentBlocks:[{type:"comparison-table",headers:["Lead-Gen Mindset","Buying Group Mindset"],rows:[["Measure MQLs per rep","Measure account-level engagement"],["Score individual leads","Score buying group coverage"],["One message fits all","Role-specific content per persona"],["Hand off after form fill","Orchestrate across the full committee"],["Single-threaded follow-up","Multi-threaded relationship building"],["Success = volume","Success = deal velocity & win rate"]]},{type:"insight",title:"Strategic Insight: Multi-Threading",body:"Multi-threading isn’t just a sales tactic. It’s a marketing imperative. If your only champion leaves mid-deal, an un-threaded opportunity die
2434s with them. Build content and campaigns that engage multiple stakeholders from day one so your deal survives any single departure."}]},{id:"1345",title:"Getting started with Account Based Marketing",slug:"getting-started-with-account-based-marketing",category:"ABM & Pipeline",seoDescription:"ABM multi-threading targets multiple stakeholders in one account. Learn the strategic approach to account-based marketing for complex B2B enterprise deals.",excerpt:"What is Account Based Marketing? ABM, or Account Based Marketing is a new term for an old way of selling. Once upon a time, before the internet, companies...",readTime:8,tldr:"",content:`<h2>What is Account Based Marketing?</h2>
2435<p>ABM, or Account Based Marketing is a new term for an old way of selling. Once upon a time, before the internet, companies selling to enterprise had a list of the top accounts they wanted to reach. Marketing worked with Sales to find different strategies to get to know the key people in that account. Marketing would create personalized materials, write letters, and send packages directly to key people in their target accounts. You knew who the key people were because you met them at a tradeshow or conference, or read about them in trade magazines and who’s who books that listed thought leaders.</p>
2436<p>Today ABM is a lot like it was back in the day. It involves a list of target accounts, and marketing directly to those accounts so that sales can build up relationships and start conversations easier. It could also be used in post sale marketing, for the land and expand bow tie approach I discussed in my previous blog post.</p>
2437<p>The TL;DR version of prepping for ABM is:</p>
2438<ol>
2439<li>Figure out who you are targeting</li>
2440<li>Choose the accounts to target</li>
2441<li>Create the materials or offer for these accounts</li>
2442<li>Follow through directly</li>
2443</ol>
2444<p>Sounds simple, right? Well, it’s a bit more than that.</p>
2445<p> </p>
2446<h2>Why do Account Based Marketing?</h2>
2447<p>If you have a monthly SaaS service that costs $10 - $1000 a month, ABM makes no sense for your company. Account Based Marketing works when your end sale is well above $100k. End sale does not mean initial sale - that might be $15k just to get started, but the plan is to land and expand to over $100k.  This is a model for companies that sell to enterprise and have Account Executives, Customer Success, and possibly Sales Engineers. Account Based Marketing takes time and money. It’s putting a lot of resources towards a single account, so it needs to make fiscal sense. If that account has the potential to grow to over $1M ARR, it’s worth it to put the time and effort into nurturing the account.</p>
2448<p> </p>
2449<h2>How to get started with ABM?</h2>
2450<h4> </h4>
2451<h4>Create your ideal customer profile</h4>
2452<p>Who are you targeting? You probably already have personas created. Ideal Customer Profile (ICP) is similar to personas but it includes the details you’re looking for to better understand a full account, rather than an individual person. Your ICP should cover the following (this is just a general list to get started, your mileage may vary):</p>
2453<ul>
2454<li>Revenue</li>
2455<li>Business objectives</li>
2456<li>Vertical</li>
2457<li>Location</li>
2458<li>Pain point that your solution will help solve</li>
2459<li>Is the company growing or receding</li>
2460</ul>
2461<p>If you already have successful customers who are evangelists for your product and service then it would make sense to go for more companies like that. Listing the similarities of the companies who love you is a great way to pinpoint the traits you’re looking for.</p>
2462<p>There’s a lot more to it than this, but you get the basic idea. You probably already know who your best customers are, and what attributes you’re looking for in similar accounts so that your future accounts are as successful as your current ones.</p>
2463<h4> </h4>
2464<h4>Make a list of accounts to target</h4>
2465<p>Take your ICP list and start mapping accounts for a single vertical. I know many companies aim for up to 3 verticals to start. If you have a small marketing team then I recommend focu
2465sing on one. Account Based Marketing requires creating a lot of original content, which means time and effort for your marketing team. If the team is small, you’ll get more coverage from focused content for one vertical.</p>
2466<p>When that one vertical is chosen, it’s time to start choosing accounts. Ideally you have a business intelligence tool like <a href="https://mattermark.com/"><strong>Mattermark</strong></a> or <strong><a href="http://www.hoovers.com/">Hoovers</a></strong> where you can get information on the company and build a good list of accounts you’re going to aim for. If you don’t have these, I recommend spending the money to get them. Otherwise research companies through Google, their websites, and LinkedIn. Build a list of 20 companies that fit your ICP.</p>
2467<p>You may want to consider starting with companies that are already customers and use this as a way to expand the accounts. Account Based Marketing works really well with post-sale marketing, as you already know most of the players and it’s easier to create personalized content they will find interesting.</p>
2468<p>However, if you want to start with new accounts then you need to do the following:</p>
2469<ol>
2470<li><strong>Map the players in the account</strong>. Enterprise sales now typically have 10 or more decision makers. Use your business intelligence tool to research and map who you think will be the decision makers in each account and build a loose org chart.</li>
2471<li><strong>Research each of the players in each of the accounts.</strong> Get to know anything you can about them, so that you can affiliate yourself with them on a personal level. For example, if someone I’m aiming for has The Humane Society on their LinkedIn, I always mention Layla, my Great Pyrenees dog that we rescued when she was 6 years old. Now, we didn’t get Layla for me to mention her in meetings, but that doesn’t mean I can’t mention her to build affinity. The point is to find what you have in common with the different players in the account so that you can find out what their pain points are, and you can show them how your product or service can heal that pain. But people don’t talk about their pain-points to people they don’t like. And we generally like people that we have things in common with more often than we like people who have nothing in common with us - so map those accounts and research your people. You’re not doing this to manipulate, you’re doing it to help. Also - do not lie here. The point is for you to become a trusted advisor. Large accounts are meant to be long term accounts. Take them seriously.</li>
2472<li style="font-weight: 400;"><strong>
2472Find their pain.</strong> The point of the research above is to not just build relationships, but get the information you need to help them. Once the relationship base has been established, it’s time to start asking helping questions.</li>
2473</ol>
2474<h4>Create the materials for the accounts</h4>
2475<p>You’ve made a list of 20 accounts that you’re aiming for in a single vertical. You’ve found who has what title for at least 10, if not 20, key people in these accounts. Now it’s time to figure out what they will find interesting and make content that is specific to them.</p>
2476<p>Since this is so specific, we won’t go too deep on this one (<a href="/contact">contact us</a> if you’d like a free 20 minute strategy consultation). Here are some of the engaging tactics you could be using:</p>
2477<ol>
2478<li><strong>Email campaigns - but not the general ones.</strong> These are specific. “I’ve been looking at your website and saw XYZ” or “I saw an article about your company and it said you are doing ABC”. This shows you did your research. Make sure all of the information inside of the email is helpful. And keep it short. Do an email cadence of 8 to 10 emails. Make the emails specific to the interests of the individual. The Sales Director is interested in different things than the VP Customer Success is. Make your content appropriate.</li>
2479<li><strong>Private dinners.</strong> If you haven’t read my previous post about <strong><a href="https://hunterandbard.com/marketing-to-enterprise/">marketing to enterprise</a></strong>, now is a good time to go back and check it out. There’s more information on this there.</li>
2480<li><strong>Direct mail.</strong> Yes, what’s old is new again. What’s a great book that you just read and think that everyone else needs to read it too? (For me that book is <strong><a href="https://gettingmore.com/">Getting More</a></strong><strong>.</strong>) Get numerous copies. Design and print a bunch of branded bookmarks and place them in the books. Write a personalized note inside the front cover. Make sure there’s a handwritten letter inside the package on company stationery. Everything you can to marry your brand to the great feeling of receiving and opening a personalized, thoughtful gift.</li>
2481<li><strong>Personalized video.</strong> If you know what a company could be doing, then do a short video of yourself starting an audit. Don’t give away the farm. Just enough to show you know what you’re doing, and get them to ask for more information.</li>
2482</ol>
2483<p>Remember, the purpose of all of this is to start, or continue, the conversation.</p>
2484<h4> </h4>
2485<h4>Follow through directly</h4>
2486<p>Ideally the companies you’re aiming for will come to you after your initial outreach for more information, but ideal rarely happens. Expect it to take several different methods of contact over time before that initial conversation happens.</p>
2487<p>TOPO has created a great account based marketing framework&lt;</p>
2488<p><img class="alignnone wp-image-5406 size-large" title="flow chart of an account-based marketing framework" src="https://hunterandbard.com/wp-content/uploads/2017/10/[email protected]" alt="The Account-Based Marketing Framework Diagram" width="1024" height="724" /></p>
2489<p><strong><a href="https://www.linkedin.com/in/tomscearce/">Tom Scearce</a></strong> wrote a post for TOPO, the sales and marketing analyst firm for high-growth companies, blog about ABM last year: <strong><a href="http://blog.topohq.com/2016-topo-account-based-marketing-framework/">The 2016 Account Based Marketing Framework</a></strong>. Above is the framework he mapped out, and it’s worth a look to get even more ideas how you can move forward on your ABM efforts.</p>
2490<p>Special hat tip and thank you to <a href="https://www.linkedin.com/in/jennifer-carey-m-ed-9122567/"><strong>Jennifer Carey</strong></a> for the Feature Image above.</p>
2491<p> </p>
2492<h4 style="text-align: left;"><strong><a href="/contact">Let’s discuss how we can help you get started with ABM</a></strong></h4>
2493
2494<!-- wp:paragraph -->
2495<p>&nbsp;</p>
2496<!-- /wp:paragraph -->`,seoTitle:"Getting started with Account Based Marketing | Hunter & Bard"},{id:"1422",title:"Marketing SaaS to enterprise means your website is king",slug:"marketing-saas-to-enterprise-means-your-website-is-king",category:"Enterprise Marketing",seoDescription:"Your B2B SaaS website is y
2496our top enterprise salesperson. Learn why website authority beats outbound for converting high-ACV enterprise deals.",excerpt:"Your website is the unsung hero in your marketing mix. Always on, it stands there waiting to be perused by your future customers. Welcoming them in, and giving...",readTime:5,tldr:"",content:`Your website is the unsung hero in your marketing mix. Always on, it stands there waiting to be perused by your future customers. Welcoming them in, and giving them the information they need to know to make the wisest of decisions - to choose you. Are you giving your website the attention it deserves?
2497<blockquote>“57%—that’s how far the average B2B buyer is through the purchase decision before engaging a supplier sales rep.12%—that’s how much of your customer’s total mindshare you as a supplier have across the entire B2B purchase path.”
2498
2499<a href="https://www.gartner.com/en/marketing"><strong>Research by CEB, now owned by Gartner</strong></a></blockquote>
2500<img class="alignnone wp-image-5402 size-large" title="Pie chart depicting the time between first contact and form fill for account based marketing as sourced by Hunter and Bard" src="https://hunterandbard.com/wp-content/uploads/2017/11/[email protected]" alt="Pie chart depicting the time between first contact and form fill for account based marketing as sourced by Hunter and Bard" width="1024" height="713" />
2501<h2>Open 24/7</h2>
2502Your customers are going to your website and your competitors' websites. They are researching everything before they fill out a form. In fact, according to <a href="https://triblio.com/"><strong>Triblio</strong>'</a>s research 45% of buyers have been on your website multiple times over 90 days before filling out a single form. I've seen this with our clients' customers. When you look back at the journey of those who convert, multiple people in their company have gone to the website numerous times over the 3 - 9 months it typically takes to close a deal. Significantly more times than prospects who don't convert.
2503
2504Website visits are a signal. In fact, according to Triblio, accounts with 2 or more unique visitors convert more often than those with just a single visitor, which makes sense considering buying committees in enterprises. Knowing that multiple stakeholders are visiting your website makes it all the more important to pay attention to web messaging. Remember, your website is open for business 24/7, not just to your known leads but also to unknown key decision makers and influencers.
2505
2506That means your website needs to be easy-to-navigate, and have the right, updated information that best reflects your value proposition and benefits while meshing with what your customer is looking for. Sounds simple, right? Then why are so many company websites a hot mess?
2507
2508<img class="alignnone wp-image-5411 size-large" title="Bar chart depicting the B2B buyer journey showing accounts with 2 or more unique visitors converting higher than accounts with just one visitor." src="https://hunterandbard.com/wp-content/uploads/2017/11/[email protected]" alt="Bar chart depicting the B2B buyer journey showing accounts with 2 or more unique visitors converting higher than accounts with just one visitor." width="1024" height="591" />
2509<h2>Get your website messaging right</h2>
2510[bctt tweet="
2511
2512Make sure your writer is working directly with the decision maker - and there is only one decision maker." quote="We've found the main issue in getting the message right is making sure the writer is working with the actual decision maker - and there is only one decision maker."]
2513
2514That individual has to have the authority to make all final decisions on messaging. That means if the CEO assigns someone to review, edit, and approve copy, the CEO can't come later and say it's all wrong. In other words, website messaging typically needs to be led by someone in the C-Suite with the authority to back up the opinion. Our most successful messaging projects have been the writer working directly with the CEO, in collaboration with our content strategist. The strategist makes sure the tone is where it needs to be and the CTAs are focused, the writer gets the messaging right, and the CEO makes sure all key points are hit.
2515<h3>Opinions from thought leaders</h3>
2516<blockquote>“Let’s say that a person can find your website easily, have you optimized the user experience, so they can gather the information they need easily and quickly? Is the content you are providing them relevant and does it enhance the user’s perception of your service? Are you leading them to the conversion end-point with click through actions? If you do not have an active campaign for search engine optimization, search engine marketing, conversion rate optimization and content based marketing, then the answer to these questions maybe a No. Yes, you have a website, but are you utilizing it to its full potential? In today’s information driven world, to edge out the competition and increase your conversion rates, it’s essential to have a well optimized website.”
2517
2518– Arin Adamson, Head of Web Development, <strong><a href="https://www.digitalreachagency.com">Digital Reach Agency</a></strong></blockquote>
2519<blockquote>“Your website is really the only place you can control your buyer’s experience. By getting them there, you’re then able to cultivate their experience and create a clear path to KPI conversions (because we know the path to enterprise sales is a long one). Making the most out of the website visit is critical to both grab their attention and their information to ensure that you can nurture them along their path to purchase.”
2520
2521– <strong><a href="https://www.linkedin.com/in/maureenjann/">Maureen Jann</a></strong></blockquote>
2522<blockquote>“If your website copy is trying to appeal to multiple buyers, you’re doomed to have a confusing, ineffective message. That’s why it’s important to define clear paths for your different audience segments, so you can tailor your copy for each of them, without confusing the other users on your site.”
2523
2524– <strong><a href="https://www.erikaheald.com">Erika Heald</a></strong></blockquote>
2525<blockquote>“On your website, you have the ability to control your message and the buyer’s experience. The first impression they have on your website can make or break the sale, no matter how many emails you send them for a personalized demo of your product. Make the most of your real estate, and check your analytics to tweak performance when necessary.”
2526
2527– Berrak Sarikaya</blockquote>
2528<h2>Clarity of vision</h2>
2529Designing by committee rarely works out well. While writers work better in teams to produce a quality product, designers typically prefer to work alone. The same goes with the group that judges the website. If a single person is executing a vision, then the website has a higher chance of achieving that vision. If the website has to appease all opinions, well, it will likely end up as something that satisfies everyone, while pleasing no one. Bland. Uninspiring. Just as a single decision maker is crucial for copy, it's important for design as well. It doesn't need to be the same individual, and often isn't. Writers who ache over every syllable rarely lose sleep over design, and vice versa. Leave everyone to their strengths, and trust your team to execute.
2530
2531Your future customers visiting your website will thank you.
2532<h4 style="text-align: left;">Looking to turn your website into a more welcoming destination? <a href="/contact">Check out our work</a></h4>`,seoTitle:"Marketing SaaS to Enterprise: Your Website Is King"},{id:"1518",title:"Become a category leader by creating a category",slug:"become-a-category-leader-by-creating-a-category",category:"Enterprise Marketing",seoDescription:"Category creation is the ultimate B2B positioning play. Learn how to define a new market category and position your enterprise company as the leader.",excerpt:`"I want my company to become a category leader, only the category I believe we belong in doesn't exist. How do you create a category?" I was almost finished my...`,readTime:3,tldr:"",content:`<p>"I want my company to become a category leader, only the category I believe we belong in doesn't exist. How do you create a category?"</p>
2533
2534I was almost finished my workshop on Thought Leadership, Creating Category Leaders and one of the students asked me this question.
2535
2536He explained to me that he was the Chief Marketing Officer of a post Series-A scale-up (fast-growing startup) and felt that the best growth for his product was to become a category leader. The company had been placed inside a Gartner Quadrant already, but the Executive Team felt that the placement wasn't quite right. They believed they were leaders in a category that didn't yet exist. They had been working to educate the market. However, even though they were talking about it, no one was listening.
2537
2538Perception is reality. They were not becoming leaders of a new category, because no one else acknowledged the existence of that category.
2539
2540Here's the thing, if you're the only company in that category - it doesn't exist. One does not a trend make.
2541
2542A category consists of several players inside it. This means you have to find another, complementary company, to be in that category with you. Together you create a movement which becomes the category, and you a leader in it. If you can't find a complimentary company, then find a competitor that sells to a slightly different space also works - think Pipedrive and Salesforce. Or the beginning of Marketo (selling to small enterprises) and Hubspot (selling to smaller companies and agencies.)
2543
2544Work with a group of companies on co-promotion. Think:
2545<ul>
2546 	<li>Lounges at major conferences</li>
2547 	<li>Co-hosted event for the new industry</li>
2548 	<li>Group webinars</li>
2549 	<li>Co-branded white papers</li>
2550 	<li>A category blog with multiple players contributing</li>
2551 	<li>All of you pitching the leading analysts about the new category</li>
2552 	<li>Creating an industry organization that is to be separate from all of the companies</li>
2553</ul>
2554Creating a new category is about the group. That means a category consists of more than one. The lone company is ignored, until a group is created. Instead the leader welcomes the first follower, and together they welcome the group. This what makes a category and gives b
2554irth to a movement. This is how category leaders are born.
2555
2556In my workshop I referenced this video - which is from 2010 and still holds true today. 
2557&nbsp;
2558<iframe src="https://www.youtube.com/embed/fW8amMCVAJQ?rel=0" width="560" height="315" frameborder="0" allowfullscreen="allowfullscreen"></iframe>
2559
2560<h4 style="text-align: left;">Want to become a thought leader and a category leader? <a href="/contact">Let's Chat.</a></h4>`,seoTitle:"Become a Category Leader by Creating a Category"},{id:"1534",title:"Steve Tornello on Creative Marketing and Advertising",slug:"steve-tornello-on-creative-marketing-and-advertising",category:"Enterprise Marketing",seoDescription:"Steve Tornello shares insights on creative marketing and advertising. How enterprise B2B brands can make memorable impressions that drive action.",excerpt:"What is it that marketers really want? The ultimate goal for a marketer is to make a meaningful impression on their customers that compels the person to buy,...",readTime:3,tldr:"",content:`<span style="font-weight: 400">What is it that marketers really want? The ultimate goal for a marketer is to make a meaningful impression on their customers that compels the person to buy, stay, or talk about the product. Compelling messages come from revising and transforming many great ideas into a single, brilliant vision. Creativity and innovation are necessary tools for elevating your ideas and coping with</span> <span style="font-weight: 400">any problems you may face on the road to creative success. This week on SaaS Insider Podcast, host Shira Abel spoke with Steve Tornello, a writer and creative marketing/advertising expert, about harnessing creative energy into exceptional ideas and profound messages.  </span>
2561
2562&nbsp;
2563
2564<b>Steve Tornello</b><span style="font-weight: 400"> is currently the Director of Integrated Marketing at SalesForce in San Francisco. He has spent over 14 years designing and developing all aspects of marketing and advertising: His work includes massive ad campaigns for companies like Nike, EA Sports, Ebay, Xbox, and YouTube. Besides creating glorious advertisement campaigns, Steve’s roles over the years have consisted of creative leadership, innovative brand imaging and multidisciplinary writing. Despite the context, Steve’s job has always involved creative problem solving, a skill crucial to success in the world of marketing.  </span>
2565
2566&nbsp;
2567
2568<span style="font-weight: 400">This week’s discussion explored the process of creating a winning idea using patience and innovation.</span> <span style="font-weight: 400">We can all relate to the frustration involved with ideation, but according to Steve, patience and lack of attachment are crucial during the initial creation process.  A winning idea almost always comes from a multitude of failed ideas and countless revisions based on client feedback. </span>
2569
2570&nbsp;
2571
2572<span style="font-weight: 400"> An equally crucial component to creative success is ensuring that your message is cohesive with your company’s brand, and engaging to a dynamic audience. Steve shares a number of valuable tools useful for predicting the behavior of target audiences and emphasizes the importance of equally considering quantitative data, prior experience and personal intuition. </span>
2573
2574&nbsp;
2575
2576<span style="font-weight: 400">Most conversations surrounding creativity in marketing/advertising revolve around fostering creativity in order to meet goals or achieve results, however neither of these things are possible without the proper maintenance and nurturing of your energy and imagination. Steve discusses time management hacks and creative outlets he utilizes to ensure he has the proper motivation and inspiration to do his best work. </span>
2577
2578&nbsp;
2579
2580<span style="font-weight: 400">No matter your field, it is hard to not get inspired by this talk. Creativity is and will always be a crucial tool needed for success across contexts. Tune in here to learn more about innovative tools that will boost your creative success: </span>
2581&lt;iframe style="border: none" src="//html5-player.libsyn.com/embed/episode/id/6066605/height/360/width/640/theme/legacy/autonext/no/thumbnail/yes/autoplay/no/preload/no/no_addthis/no/direction/backward/" height="360" width="640" scrolling="no"  allowfullscreen webkitallowfullscreen mozallowfullscreen oallowfullscreen msallowfullscreen&gt;&lt;/iframe&gt;`,seoTitle:"Steve Tornello on Creative Marketing and Advertising"},{id:"1536",title:"SaaS Insider Podcast: Steve Tornello on Creative marketing and advertising",slug:"saas-insider-podcast-steve-tornello-on-creative-marketing-and-advertising",category:"Enterprise Marketing",seoDescription:"SaaS Insider podcast with Steve Tornello on creative B2B advertising. Learn how to craft memorable enterprise marketing campaigns that cut through noise.",excerpt:"Listen to the podcast here . What is it that marketers really want? The ultimate goal for a marketer is to make a meaningful impression on their customers that...",readTime:3,tldr:"",content:`<h6>Listen to the podcast <a href="http://traffic.libsyn.com/saasinsider/SI_090.mp3">here</a>.</h6>
2582&nbsp;
2583What is it that marketers really want? The ultimate goal for a marketer is to make a meaningful impression on their customers that compels the person to buy, stay, or talk about the product. Compelling messages come from revising and transforming many great ideas into a single, brilliant vision. Creativity and innovation are necessary tools for elevating your ideas and coping with any problems you may face on the road to creative success. This week on SaaS Insider Podcast, host Shira Abel spoke with Steve Tornello, a writer and creative marketing/advertising expert, about harnessing creative energy into exceptional ideas and profound messages. 
2584
2585Steve Tornello is currently the Director of Integrated Marketing at SalesForce in San Francisco. He has spent over 14 years designing and developing all aspects of marketing and advertising: His work includes massive ad campaigns for companies like Nike, EA Sports, Ebay, Xbox, and YouTube. Besides creating glorious advertisement campaigns, Steve’s roles over the years have consisted of creative leadership, innovative brand imaging and multidisciplinary writing. Despite the context, Steve’s job has always involved creative problem solving, a skill crucial to success in the world of marketing.
2586
2587This week’s discussion explored the process of creating a winning idea using patience and innovation. We can all relate to the frustration involved with ideation, but according to Steve, patience and lack of attachment are crucial during the initial creation process.  A winning idea almost always comes from a multitude of failed ideas and countless revisions based on client feedback.
2588
2589An equally crucial component to creative success is ensuring that your message is cohesive with your company’s brand, and engaging to a dynamic audience. Steve shares a number of valuable tools useful for predicting the behavior of target audiences and emphasizes the importance of equally considering quantitative data, prior experience and personal intuition.
2590
2591Most conversations surrounding creativity in marketing/advertising revolve around fostering creativity in order to meet goals or achieve results, however neither of these things are possible without the proper maintenance and nurturing of your energy and imagination. Steve discusses time management hacks and creative outlets he utilizes to ensure he has the proper motivation and inspiration to do his best work.
2592
2593No matter your field, it is hard to not get inspired by this talk. Creativity is and will always be a crucial tool needed for success across contexts. Tune in to learn more about innovative tools that will boost your creative success.
2594&nbsp;
2595<h4><a href="/contact">Curious about how your company can deeply engage its audience? Let's chat</a><em><a href="/contact">. </a></em></h4>`,seoTitle:"Steve Tornello on Creative Marketing (SaaS Insider)"},{id:"1573",title:"SaaS Insider Podcast: Whitney Sales on Growing and selling in new markets",slug:"saas-insider-podcast-whitney-sales-on-growing-and-selling-in-new-markets",category:"Enterprise Strategy",seoDescription:"Whitney Sales shares strategies for B2B companies expanding into new markets. Enterprise growth tactics from the SaaS Insider podcast.",excerpt:"Listen to the podcast here . The world of sales has transformed in many exciting and inspiring ways: Forget the sleazy salesman stereotype you are used to,...",readTime:3,tldr:"",content:`<h6>Listen to the podcast <strong><a href="http://traffic.libsyn.com/saasinsider/SI_091.mp3">here</a></strong>.</h6>
2596&nbsp;
2597
2598The world of sales has transformed in many exciting and inspiring ways: Forget the sleazy salesman stereotype you are used to, today sales success is all about making meaningful connections with clients. Salespeople need to be transparent, and even more importantly, knowledgeable in their field. Staying up-to-date new technology and industry trends is crucial for pushing your product to the top, otherwise you WILL fall behind. However, the art and science of selling involve more than industry expertise. For any product, or person, to be successful they must be backed by an efficient sales team, the right connections, and a perfected process. This week on SaaS Insider podcast, host Shira Abel spoke with Whitney Sale on how to combine these principles to achieve sales success.
2599
2600Whitney Sales is a business leader, General Partner of Acceleprise Ventures, and the founder of <i>The Sales Method</i>, a consultancy which helps startups identify their target markets, establish strong sales teams, and launch their product to market quickly and successfully. Whitney has been helping start-ups grow for 10+ years and is an expert in leading sales organizations, consulting sales teams, and guiding early stage sales. She has lead four companies to Inc’s 500 Fastest Growing Companies list including LoopNet, Joby, Meltwater, and SpringAhead. Whitney’s knowledge and passion make her the perfect person to explain how to master the process of successfully launching a product into a new market.
2601
2602Selling today is easier, and harder than it has ever been in different ways. During the interview, Whitney discusses how the innovations in technology make it easier to introduce your product into a new market and successfully displace any existing competitors. However, the constant novelty in the market makes it crucial for you to always be paying attention and staying up to date on the newest technological advances.
2603
2604Staying current and relevant is crucial, but as Whitney explains, it is only a piece of the successful sales puzzle. When launching a product into an unknown or already established market all salespeople should identify three factors about their target buyers:
2605<ol>
2606 	<li> Whether they are facing a pain and whether your product’s benefit alleviates this pain</li>
2607 	<li>Whether a portion of their budget is being allocated to relieve this pain.</li>
2608 	<li>Whether you have access to the people dealing with the pain and making decisions about the budget.</li>
2609</ol>
2610Identifying these factors provides a solid foundation for any sales and marketing team to begin their product journey.
2611
2612Throughout the talk, Whitney Sales emphasizes the importance of making the right connections and asking the right questions. Relationships are crucial in the world of sales. The key to success is a strong team and a complementary dynamic between sales and marketing departments. Making the right relationships outside your company is also essential: Whitney describes the importance of connecting with champions, who make things happen and avoid talkers, who waste your time. Research and transparency are also crucial mechanisms for developing maintaining valuable relationships in the sales world.
2613
2614This talk makes it clear that, with the right tools, anyone with a desire to sell and willingness to listen can succeed in sales. No matter your field, Whitney Sale’s insight into the process of successful selling is extremely valuable. Tune in to learn more.
2615<h4><a href="/contact">Do you need to build awareness to improve sales? Let's talk PR.</a></h4>`,seoTitle:"Whitney Sales on Selling in New Markets"},{id:"1663",title:"Ferdinand Goetzen on Growth hacking and experimentation",slug:"ferdinand-goetzen-on-growth-hacking-and-experimentation",category:"Enterprise Strategy",seoDescription:"Ferdinand Goetzen explains growth hacking and rapid experimentation for B2B. Learn how enterprise startups can test their way to product-market fit.",excerpt:"Listen to the podcast here . Everyone is talking about growth hacking, but few have a true understanding of what it really means to be a growth hacker. Growth...",readTime:3,tldr:"",content:`<h6>Listen to the podcast <strong><a href="http://traffic.libsyn.com/saasinsider/SI_092.mp3">here</a></strong>.</h6>
2616Everyone is talking about growth hacking, but few have a true understanding of what it really means to be a growth hacker. Growth hackers separate themselves from other marketers by working the full funnel. The goal of a digital marketer is to build awareness of a product and convert users. Growth hackers don’t stop at conversion. They are concerned with the entire customer journey: retention, repurchasing and of course, revenue. Growth hacking requires experimenting with various tools and getting creative with channels. This week on SaaS Insider, host Shira Abel spoke with Ferdinand Goetzen about what being a growth hacker really means and how to implement experimentation and other innovative marketing techniques to grow your company.
2617
2618Ferdinand Goetzen is the head of growth at Recruitee, one of the Netherlands fastest rising startups, which provides customers with an all-in-one tool that allows companies to manage and streamline their entire recruitment process. He has been engaging in different forms of marketing for almost a decade. Ferdinand specializes in full-funnel marketing and growth experimentation. His experience with growth across channels makes him the ideal candidate to share his knowledge and tips on what growth hacking is all about.
2619
2620According to Ferdinand, experimentation is a must for growth hacking. This means testing various approaches in novel channels. It may seem counterintuitive to spend time experimenting in unknown channels when there are channels you know are efficient. However, tunnel-vision marketing usually leads to missed opportunities for even higher levels of growth. Ferdinand explains that growth cannot be achieved without the perfect balance of performance marketing (what you know 
2620works) and experimentation. His theory is that any company trying to grow should be dedicating 60% of their time to performance marketing and 30-40% of their time to experimentation. With patience and scalability in mind, experimentation can be the tool that pushes your company over the edge.
2621
2622Customer satisfaction is also a key factor for growth. It may sound obvious, but solid products lead to happy customers, which leads to high-level buyers and promoters. This land and expand customer strategy will help your company achieve the virality it needs to succeed. Ferdinand also discusses the importance of internal satisfaction within a company. Goals must be aligned across departments and everyone’s voice must carry equal weight. It is impossible to grow without a motivated team, so creating an environment where team members feel excited and inspired is also essential.
2623
2624To sum it up, growth hacking involves out-of-the-box marketing, customer consideration, and a strong team. No matter your industry, this talk will not only inspire you to grow but also provide you with the tools you need to do it. Tune in here.
2625<h4><a href="/contact">Looking for a creative strategy to grow your company? Let's talk.</a></h4>`,seoTitle:"Ferdinand Goetzen on Growth Hacking"},{id:"1895",title:"Craft your messaging to match your audience",slug:"craft-your-messaging-to-match-your-audience",category:"ABM & Pipeline",seoDescription:"Your B2B messaging has to match how your audience already thinks. Learn how to align language, pain points, and proof to the buyer you want.",excerpt:"Messaging is in everything we do, even when we don't realize it. Are you a parent of small children? Do you curse? (And would rather keep cursing than stop?)...",readTime:3,tldr:"",content:`Messaging is in everything we do, even when we don't realize it.
2626
2627Are you a parent of small children?
2628
2629Do you curse? (And would rather keep cursing than stop?)
2630
2631Tell your kids curse words are "Car words.&nbsp;Words you're are not allowed to use until you&nbsp;are old enough to drive a car."
2632
2633Many years ago, when my boys were still small, I had a dilemma. I cursed, but I didn't want them to. I wanted to teach them age appropriateness in a way that they would understand it. I'm also a marketer, and I believe in crafting the message to fit the audience. Hence, <em>car words</em> was born.
2634
2635It worked.
2636
2637You're welcome.
2638
2639&nbsp;`,seoTitle:"Craft your messaging to match your audience | Hunter & Bard"},{id:"2188",title:"Social media KPIs - What matters?",slug:"social-media-kpis-what-matters",category:"Frameworks",seoDescription:"Which social media KPIs actually matter for B2B? Cut through vanity metrics and measure what drives enterprise pipeline and brand authority.",excerpt:"Social media KPIs (Key Performance Indicators), just how do you know when your social media is a hit or a flop? How do you figure out what to fix? Which...",readTime:7,tldr:"",content:`<!-- wp:paragraph -->
2640<p>Social media KPIs (Key Performance Indicators), just how do you know when your social media is a hit or a flop? How do you figure out what to fix? Which channel to invest your time in?</p>
2641<!-- /wp:paragraph -->
2642
2643<!-- wp:paragraph -->
2644<p>As with everything in business, and in life in general, what matters all depends on what your goal is and the reason why you're doing something in the first place. In regards to social media, your goal could be a number of things.</p>
2645<!-- /wp:paragraph -->
2646&nbsp;
2647<!-- wp:heading -->
2648<h2>5 possible goals for social media:</h2>
2649<!-- /wp:heading -->
2650
2651<!-- wp:list {"ordered":true} -->
2652<ol>
2653<li>Build awareness</li>
2654<li>Build loyalty</li>
2655<li>Create a community</li>
2656<li>Increase Sales</li>
2657<li>Build relationships</li>
2658</ol>
2659<h4><!-- /wp:list -->
2660
2661<!-- wp:heading {"level":3} --></h4>
2662<h4>1. Build awareness</h4>
2663<!-- /wp:heading -->
2664
2665<!-- wp:paragraph -->
2666<p>You want the entire world to know about your product - how do you go about making sure that happens? One way is to share helpful information on social. If you can make your content relevant and funny - bonus points.</p>
2667<!-- /wp:paragraph -->
2668
2669<!-- wp:paragraph -->
2670<p>Awareness doesn't have to mean the whole world though: What if there's a pundit in your space, say in Fintech and you wanted to catch their attention? Perhaps there's a journalist that you would love to cover your company? Getting their attention by engaging with them online is a great way to warm up a cold call. Don't just follow them on Twitter, but comment on posts, retweet and engage in a pleasant, conversational way.</p>
2671<!-- /wp:paragraph -->
2672
2673<!-- wp:heading {"level":3} -->
2674<h4>2. Build loyalty</h4>
2675<!-- /wp:heading -->
2676
2677<!-- wp:paragraph -->
2678<p>Offering something special, that is relevant to your product or service (in other words, not an iPad) to your followers at random times is a great way to get people to follow and engage. It's important that the reward be unexpected, to build intrigue and ongoing interest.</p>
2679<!-- /wp:paragraph -->
2680
2681<!-- wp:paragraph -->
2682<p>Think about the brands, companies, and services you are loyal to. Why are you loyal to them? Much of the time it has to do with trust. I am more likely to trust someone if they own up when they have done something wrong, have apologized, and I can see the difference in the ongoing behavior. If someone apologizes with a shallow apology - all trust is lost.</p>
2683<!-- /wp:paragraph -->
2684
2685<!-- wp:paragraph -->
2686<p>Ideally you are never in a situation where you have to ask for forgiveness. Be there, be steady and reliable. Answering back to compliments and complaints. Being forthright and quick with answers - do all of that and you'll slowly build loyalty.</p>
2687<!-- /wp:paragraph -->
2688
2689<!-- wp:paragraph -->
2690<p>
2690Also - don't just say you know something, show it. Articles that teach (like this one) are a great way to help your client base, and show that you know what you're talking about. People respect knowledge and will trust you more when you share yours.</p>
2691<!-- /wp:paragraph -->
2692
2693<!-- wp:heading {"level":3} -->
2694<h4>3. Create a community</h4>
2695<!-- /wp:heading -->
2696
2697<!-- wp:paragraph -->
2698<p>People follow people, not brands. Your community needs to be human to pull others in. This means legal can't be writing your copy if you want people to engage with you. It means you can be extremely funny, or kind, or goofy - but you must be something. People don't follow boring.</p>
2699<!-- /wp:paragraph -->
2700
2701<!-- wp:paragraph -->
2702<p>What is your company, brand, or service passionate about? What do you love and hate? Where are you communicating that? What do you value? A community brings together like minds. If you're not sharing what you think, you can't really pull people in who think like you or love what you love.</p>
2703<!-- /wp:paragraph -->
2704
2705<!-- wp:paragraph -->
2706<p>Community is typically built on some way for people to get together, be it online or off. Mobile Monday is a community interested in everything mobile that would have in-person meet ups monthly on Mondays. Way back in the day I was on #IRC and I frequented #REM, #Israel, #DepecheMode. I know I'm aging myself here, but that was an active community of people who cared. Community takes time. It's slow to build and needs to be actively nurtured, and it creates strong network effects once in place.</p>
2707<!-- /wp:paragraph -->
2708
2709<!-- wp:heading {"level":3} -->
2710<h4>4. Increase sales</h4>
2711<!-- /wp:heading -->
2712
2713<!-- wp:paragraph -->
2714<p>If you have a consumer product, you can increase sales through social through engagement, showing off your product, use cases, celebrity and influencer campaigns (depending on the product of course) and growing your overall numbers.</p>
2715<!-- /wp:paragraph -->
2716
2717<!-- wp:paragraph -->
2718<p>One thing you shouldn't do if you're a consumer brand is have fake reviews. I checked out a brand today on Facebook and read the reviews - all of the real reviews were awful and the good reviews were obviously fake. People can see the profiles of the people leaving the reviews. If you treat your customer like they are stupid - they won't stay your customer for long.</p>
2719<!-- /wp:paragraph -->
2720
2721<!-- wp:paragraph -->
2722<p>For business to business sales, especially enterprise sales, social is more for relationship building, providing helpful information and building yourself up as a thought leader.</p>
2723<!-- /wp:paragraph -->
2724
2725<!-- wp:heading {"level":3} -->
2726<h4>5. Build relationships</h4>
2727<!-- /wp:heading -->
2728
2729<!-- wp:paragraph -->
2730<p>In every industry there are journalists, analysts, and pundits that others listen to. Almost all of these people have some sort of presence on social media. Getting to know them online is a great way to turn a cold pitch email into a warm one. Think about it, are you more likely to read an email from someone you've never met, or someone you've interacted with so many times online you're not sure if you've met them in person or not?</p>
2731<!-- /wp:paragraph -->
2732&nbsp;
2733<!-- wp:heading -->
2734<h2>What channels?</h2>
2735<!-- /wp:heading -->
2736
2737<!-- wp:paragraph -->
2738<p>Your perspective depends on where your customer lives online. If your product is visual in any way, then Instagram and Pinterest are probably a high priority. If you have a SaaS product that sells to marketing departments inside enterprise then LinkedIn, Twitter, and Facebook might be your focus.</p>
2739<!-- /wp:paragraph -->
2740
2741<!-- wp:paragraph -->
2742<p>Why Facebook when it has a 0% organic reach? It's checking an expected box for people when researching your company. Not everyone checks that, but enough do that it should be part of your social media considerations.</p>
2743<!-- /wp:paragraph -->
2744
2745<!-- wp:paragraph -->
2746<p>Whatever channel you decide to put time into, make sure the people you are targeting are there and active on the platform.</p>
2747<!-- /wp:paragraph -->
2748&nbsp;
2749<!-- wp:heading -->
2750<h2>What about those KPIs?</h2>
2751<!-- /wp:heading -->
2752
2753<!-- wp:paragraph -->
2754<p>Now that you know your goals, how do you measure them?</p>
2755<!-- /wp:paragraph -->
2756
2757<!-- wp:heading {"level":3} -->
2758<h4>Followers / following</h4>
2759<!-- /wp:heading -->
2760
2761<!-- wp:paragraph -->
2762<p>Yes, this can be a vanity metric - but if the growth has been organic and the audience is active then this is a great way to show the interest and intent of your audience.</p>
2763<!-- /wp:paragraph -->
2764
2765<!-- wp:heading {"level":3} -->
2766<h4>Impressions</h4>
2767<!-- /wp:heading -->
2768
2769<!-- wp:paragraph -->
2770<p>If people aren't seeing your posts, your posts don't exist.</p>
2771<!-- /wp:paragraph -->
2772
2773<!-- wp:heading {"level":3} -->
2774<h4>Engagement</h4>
2775<!-- /wp:heading -->
2776
2777<!-- wp:paragraph -->
2778<p>This is the true test of community. If people are responding to your posts, then you know the posts are being seen and people like (or dislike) your content. It's a goldmine of information for all brands and companies. You can also research the people engaging and see if you're hitting the right target market with your message.</p>
2779<!-- /wp:paragraph -->
2780
2781<!-- wp:heading {"level":3} -->
2782<h4>Click through rate</h4>
2783<!-- /wp:heading -->
2784
2785<!-- wp:paragraph -->
2786<p>If you don't measure it, you cannot improve it. By using <strong><a href="https://ga-dev-tools.appspot.com/campaign-url-builder/">
2786Google URL Builder</a></strong> or <a href="https://bitly.com/"><strong>Bitly</strong></a> to track all URLs posted on your social you can see what people are clicking on. If you want to track your buyer's journey it's good to see if they are reading your social and then going to your website and having a look around. Yes you can see general numbers by <strong><a href="https://www.similarweb.com/">Similar Web</a></strong> - but you can see exactly what the person is doing when you combine the Google URL Builder with Google Analytics.</p>
2787<!-- /wp:paragraph -->
2788
2789<!-- wp:heading {"level":3} -->
2790<h4>Sentiment analysis</h4>
2791<!-- /wp:heading -->
2792
2793<!-- wp:paragraph -->
2794<p>Sentiment shows just how people feel about your brand online. To track this you need a social media listening tool, like <strong><a href="https://brand24.com/">Brand24</a> </strong>or <a href="https://sysomos.com/"><strong>Sysomos</strong>.</a> This is more for brands and enterprises with a lot of followers and traffic than a small startup that has just gotten started. Whoever is handling your sentiment tracking <em>must</em> have someone who is reviewing each post that is listed, because while these tools are good - they aren't quite there yet and the AI can't always tell if someone is being sarcastic or not.</p>
2795<!-- /wp:paragraph -->
2796&nbsp;
2797<!-- wp:heading -->
2798<h2>What to do if something isn't working</h2>
2799<!-- /wp:heading -->
2800
2801<!-- wp:paragraph -->
2802<p>Figure out why.</p>
2803<!-- /wp:paragraph -->
2804
2805<!-- wp:list {"ordered":true} -->
2806<ol>
2807<li>Is it the channel: i.e. your customers don't hang out there online?</li>
2808<li>Is it the message: are you saying things in a way that no one finds interesting?</li>
2809<li>Are you using the channel correctly? Look at the companies who are getting the most from that channel and what can you learn from them?</li>
2810<li>Are your expectations unrealistic? In the very beginning things can be slow, painfully slow - until they suddenly aren't. It can take awhile to mix the right message with the right content with the right style and the right audience.</li>
2811</ol>
2812<!-- /wp:list -->
2813
2814<!-- wp:paragraph -->
2815<p>The point is to keep testing until you get it right.</p>
2816<!-- /wp:paragraph -->
2817
2818<!-- wp:paragraph -->
2819<p>Thank you to <a style="background-color: black; color: white; text-decoration: none; padding: 4px 6px; font-family: -apple-system, BlinkMacSystemFont, 'San Francisco', 'Helvetica Neue', Helvetica, Ubuntu, Roboto, Noto, 'Segoe UI', Arial, sans-serif; font-size: 12px; font-weight: bold; line-height: 1.2; display: inline-block; border-radius: 3px;" title="Download free do whatever you want high-resolution photos from rawpixel" href="https://unsplash.com/@rawpixel?utm_medium=referral&amp;utm_campaign=photographer-credit&amp;utm_content=creditBadge" target="_blank" rel="noopener noreferrer"><span style="display: inline-block; padding: 2px 3px;">rawpixel</span></a> for the use of the header image.</p>
2820<!-- /wp:paragraph -->`,seoTitle:"Social media KPIs - What matters? | Hunter & Bard"},{id:"2209",title:"Must Read SaaS Resources",slug:"must-read-saas-resources",category:"Enterprise Marketing",seoDescription:"Curated list of essential SaaS reading resources for B2B founders. Stay sharp on enterprise strategy, product-market fit, and growth frameworks.",excerpt:"If you're looking to learn more about SaaS (Software as a Service), or you know a lot but are wondering if there's a wonderful resource you missed? This is for...",readTime:3,tldr:"",content:`<!-- wp:paragraph -->
2821<p>If you're looking to learn more about SaaS (Software as a Service), or you know a lot but are wondering if there's a wonderful resource you missed? This is for you. My recommendations of must-read books, podcasts, people to follow on Twitter, and good blogs.</p>
2822<!-- /wp:paragraph -->
2823
2824<!-- wp:heading -->
2825<h2>My Favorite SaaS Blogs</h2>
2826<!-- /wp:heading -->
2827
2828<!-- wp:list -->
2829<ul><li><a href="https://tomtunguz.com/">Tomasz Tunguz</a>: A VC at Redpoint, he focuses on SaaS products. He writes on everything from <a href="https://tomtunguz.com/when-to-move-up-market/">When to Move Upmarket</a>,&nbsp;as many SaaS companies start out less expensive and aiming for SMBs and then move to enterprise, to <a href="https://tomtunguz.com/how-long-free-trial/">How Long Should Your Free Trial Be?</a> His posts are filled with data and good advice.</li><li><a href="http://predictablerevenue.com/blog">Predictable Revenue Blog</a>: All about SaaS marketing and sales. The book of the same name came out years ago and gives a good breakdown of the enterprise sales process so many companies still use today. </li><li><a href="https://a16z.com/tag/enterprise-startups/">A16z Enterprise Startups</a>: It's not a long list of posts, but each one will help any startup looking to sell to enterprise (and almost all I can think of in this realm are SaaS.)</li><li><a href="https://www.saastr.com/blog/">SaaStr Blog</a>: It's the biggest SaaS event of the year and a co-working SaaS space in San Francisco. The blog </li></ul>
2830<!-- /wp:list -->
2831
2832<!-- wp:heading -->
2833<h2>SaaS Podcasts</h2>
2834<!-- /wp:heading -->
2835
2836<!-- wp:list -->
2837<ul><li>SaaS Insider: Yes, this is my podcast that I did for 2 years. </li></ul>
2838<!-- /wp:list -->
2839
2840<!-- wp:heading -->
2841<h2>SaaS Events</h2>
2842<!-- /wp:heading -->
2843
2844<!-- wp:paragraph -->
2845<p></p>
2846<!-- /wp:paragraph -->
2847
2848<!-- wp:heading -->
2849<h2>SaaS Books</h2>
2850<!-- /wp:heading -->
2851
2852<!-- wp:paragraph -->
2853<p></p>
2854<!-- /wp:paragraph -->
2855
2856<!-- wp:paragraph -->
2857<p></p>
2858<!-- /wp:paragraph -->
2858`,seoTitle:"Must Read SaaS Resources | Hunter & Bard"},{id:"2273",title:"The Bow-Tie Funnel: Land-and-Expand B2B Marketing for Enterprise Sales",slug:"bow-tie-funnel-land-and-expand-b2b-marketing",category:"Enterprise Marketing",seoDescription:"The bow-tie funnel replaces the traditional funnel for enterprise B2B. How land-and-expand marketing drives impact across large, multi-year accounts.",excerpt:"The bow-tie funnel reframes enterprise B2B marketing around land-and-expand: pre-sale acquisition on one side, post-sale expansion on the other. Here's how to use it to drive sales impact.",readTime:11,tldr:"The bow-tie funnel replaces the one-sided traditional funnel with a symmetrical model: pre-sale acquisition on the left, post-sale land-and-expand on the right. It is the right mental model for enterprise B2B because most SaaS revenue is earned after the first contract is signed. Win with emotional positioning, always-on marketing, a strong brand, ABM, owned events, and judicious advertising.",content:`<h2>What is the Bow-Tie Funnel?</h2>
2859<p>The <strong>bow-tie funnel</strong> is a B2B marketing and sales model that mirrors the traditional funnel on both sides: pre-sale acquisition narrows down to a closed deal in the middle, then expands back outward through post-sale onboarding, adoption, expansion, and advocacy. It is the visual representation of a <strong>land-and-expand</strong> motion — the dominant revenue model for enterprise SaaS, where the first contract is just the entry point and most lifetime value is earned after the deal closes.</p>
2860<p>Unlike the one-sided traditional funnel, the bow-tie funnel forces marketing and sales teams to invest equally in customer success, expansion content, and advocacy programs. If your average enterprise deal grows from $14k to $250k+ over two to three years, the right side of the bow tie is where most of your revenue is created.</p>
2861<p>The rest of this article walks through the seven things B2B marketers need to get right to make the bow-tie funnel work in enterprise sales.</p>
2862<h2>Marketing to enterprise is a different beast</h2>
2863Marketing to enterprise is a completely different beast. It’s unlike most other markets where a single person or a few people decide on a purchase. <a href="https://www.demandgenreport.com/features/industry-insights/siriusdecisions-summit-2015-b2b-buying-mythology-debunked">SiriusDecisions</a> says an enterprise sale can have 10 or more buyers. A committee decides whether to purchase your product or service. That’s because most of the deals are over $100k a year. Deal size makes the sales cycle longer – starting at 3 months and moving up as the dollars increase. That's why most enterprise SaaS deals work as a land and expand model.
2864
2865<p>From experience, a company with 8 enterprises as their sales base, an average initial sale of 14k takes 2 to 3 years to grow to over $2M in annual revenue.</p>
2866
2867However, we know that for most SaaS (Software as a Service) companies the model follows a land-and-expand logic – the initial deal could be smaller, as low as $14k, but the seller has products and plans to expand that deal after the trial period to well-over $100k and up, with a customer lifetime value (LTV) of $1M or higher. Companies in this category typically know how large their client base is (in the high hundreds or low thousands) and start by focusing on 1 to 3 verticals for maximum results.
2868
2869We found that there are consistent things that help with sales impact – get them right, and you pull through steady account growth. Some of them are counter-intuitive.
2870&nbsp;
2871<h2></h2>
2872<h2>What marketers need to do right to sell to enterprise</h2>
2873<h2></h2>
2874&nbsp;
2875<img class="alignnone wp-image-3156 size-large" src="https://hunterandbard.com/wp-content/uploads/2019/03/the-land-and-expand-graphic-e1600420117192-1024x677.png" alt="Bow-tie funnel diagram showing land-and-expand B2B marketing" width="1024" height="677" />
2876<h2></h2>
2877<h4></h4>
2878<h4>1. Understand the role of emotion</h4>
2879The enterprise customer has two things in mind:
2880<ul>
2881 	<li>Will this purchase go well and get me a raise/promotion?</li>
2882 	<li>Will this purchase go badly and get me fired?</li>
2883</ul>
2884Multiply that by 10 or more people and you have the risk map. If there's even the slightest amount of fear from any decision maker, your product or service is dead in the water.
2885
2886With that in mind, your marketing needs to inspire. The message must to be on point with a compelling offer that triggers either trust or fear. A trust message is positive and communicates how your product is trustworthy. A fear message motivates product purchase through fear that something bad will happen if you do nothing. This is your first strategic choice. It needs to balance the pros and cons based on long-term effects.
2887
2888Public relations can help you strengthen your position. Top tier-press coverage, trade placements, and analyst mentions move the needle in the risk-averse world of enterprise. Good peer reviews, favorable media and analysts mentions lower the fear that your product will work as advertised.
2889
2890Underestimate the power of emotion is a risk – it may create unnecessary friction, lengthen your sales cycle, and be a drag on resources.
2891&nbsp;
2892<h4>2. Adopt a land and expand mindset</h4>
2893This means marketing happens pre-sale and post-sale. Both are critical to success.
2894
2895When purchasing used to be on premises, the post-sale wasn’t Marketing’s focus. We don’t do deal that way anymore for many reasons. More people are involved. Products and services have become more sophisticated. There are more competitors and alternatives to the job to be done. The new reality calls for an update of our mental models.
2896
2897A land-and-expand approach often is critical to land deal and build momentum. In this model, marketing happens on a continuum. Subject matter experts (SMEs) need a mix of tools – case studies, white-papers, webinars, etc. – to understand all that they can do with your product. They need different kinds of proof for different stakeholders and different tools to use the product.
2898
2899Every customer win could become a Success Story and win over skeptics. This increases the importance of tracking results. A Success Story that mentions each and every person that contributed to it and shared internally compounds good will and decreases risk. It builds up advocacy inside the company and educates your customer on why you're the best solution to reach their goals. The additional content creates opportunity and multiplies results.
2900
2901Sales impact relies on adopting an always-on marketing mindset – inside and outside the company.
2902&nbsp;
2903<h4>3. Build a strong brand</h4>
2904Brand is an investment that pays dividends throughout a sales lifecycle. It’s critical to build a company, to reinvent an industry, and to create a new category. If you're not #1, your brand matters. If there's a strong incumbent going after #1, the brand of #1 matters.
2905
2906Brand is what customers think of a company. It's the sum total of all experiences. Value is in the eyes and opinions of the people who come into contact with your product, service, and teams. It depends on what they say and what they decide to do.
2907
2908Companies can contribute to informing those opinions and experiences.
2909
2910Message consistency and culture inside and outside the company and presentation can make your brand impression stronger or weaken it. Research found that human senses are stronger than logic to drive choices. We use visual cues to orient our decisions. A look-and-feel that is a hot mess sends a certain message about a company. The image a logo portrays trigger an immediate association. The visuals Account Executives (AEs) use when presenting can create a single and cohesive professional impression or confusion.
2911
2912Every single interaction with a member group of your organization should deliver a consistent experience to work. Cohesiveness can do wonders for your brand –  it facilitates sales, events, and online interactions. When Sales Engineers (SEs), AEs, and everyone else are using coordinated materials, they reinforce the brand.
2913
2914Rogue design and messages create confusion of benefits and may open the door to expensive promises to keep. A team that cannot list the top 5 benefits of a product weakens the brand.
2915
2916Sales playbooks, design brand books and templates are supercharging tools. They help everyone get on the same page quickly, feel confident about communicating the product and company benefits, <em>and</em> contribute to building a strong brand.
2917&nbsp;
2918<h4>4. Adapt tactics to drive engagement</h4>
2919There are two theories about how we do marketing that seem to be prevalent in the enterprise world – the bow-tie funnel (also called the bow-tie model), which reflects a land-and-expand mindset, and the new Demand Waterfall introduced by <a href="https://www.siriusdecisions.com/blog/meetthenewestsiriusdecisionsdemandwaterfall">Sirius Decisions</a>. They’re compatible views.
2920
2921The SiriusDecisions Waterfall focuses on the seller's experience, while the bow-tie funnel encompasses seller’s and buyer’s sides. Regardless of which one you use , things have become more complicated than they used to be. Group of buyers alone increase complexity. From the outside, it’s hard to determine who has the power to say “no”, but sometimes it’s hard to tell whether a “yes” depen
2921ds on a few individuals or it’s a consensus decision. What is valid inside a company is even more important outside – with its customers.
2922
2923Hence, the importance of adapting tactics to engage different stakeholders and address their interests. This calls for constant iteration to learn and adopt what works, then adapt it when it’s not working anymore. Sales impact depends on the wisdom of picking the right methods and things to run experiments.
2924&nbsp;
2925<h4>5. Use advertising judiciously</h4>
2926The ROI from advertising isn't as strong. From experience, we know that enterprise buyers don’t make $100k or more purchase decisions from seeing an ad. But you might be able to get them in the top of the funnel through smart content pushed through sponsored posts.
2927
2928Sponsored articles sit at the intersection of editorial thought leadership and native advertising. They work to build audiences and increase exposure when the content resonates, and they’re part of a comprehensive online marketing strategy.
2929
2930Many publications like The New York Times and Forbes Brand Voice run sponsoring articles and have built large audiences. Association with a publication and exposure to its audience can drive awareness, traffic, conversions, and leads.
2931
2932The rise of content marketing helped move the old advertorials up the funnel. Because their role is to promote awareness, the purpose of sponsored articles and posts is to be helpful, entertaining, or both. This non salesy nor brand-centric content helps brands become not just purveyors of goods and services, but producers of ideas and distributors of knowledge.
2933
2934The content needs to be exactly what your future customer is looking for, it needs to be timely and to inspire. Meet these conditions, and your sales cycle becomes smoother and faster. By definition, thought leadership is when something you read or watch has an impact and you change the way you do things.
2935&nbsp;
2936<h4>6. Go direct to buyer with account based marketing</h4>
2937While it's still a brilliant way to market, email doesn't convert the way it used to. It's easy to ignore and it's hard to stand out in crowded inboxes.
2938
2939Direct mail has gone out of fashion and many companies stopped using it. This creates an opportunity to deliver something that feels personal and thoughtful in a different format – what’s old is new again.
2940
2941Account based marketing (ABM) is a new term for an old way of selling. Before the internet, companies selling to enterprise had a list of the top accounts they wanted to reach. Marketing worked with Sales to find different strategies to get to know the key people in that account. Marketing would create personalized materials, write letters, and send packages directly to key people in their target accounts. Key people were at trade shows or conferences, or features in trade magazines and who’s who books.
2942
2943Today, we have more tools to research key people to send them something they will find interesting – an industry book or a personalized t-shirt. The package should include something to remember your company, like a branded bookmarker or the logo on a personalized mug. Send this to everyone on your target list.
2944
2945Production drives higher costs, and it takes some planning to do, but research has shown that direct marketing has a higher ROI. It also gets the attention of your future-customer in a way that email alone can’t anymore.
2946
2947In our experience, a combination of direct mail with more information and a follow up email that uses the same creative reinforce the message.
2948&nbsp;
2949<h4>7. Create your own events</h4>
2950Nothing beats face-to-face in the enterprise sales world. People want to look the person they buy from in the eye. This is why so many companies spend so much on high-end events. It's why the high-end events can charge so much – the decision makers still go, and it makes a huge difference to meet people there.
2951
2952But that doesn't mean you need to be at every single event. Choose 3 or 4 top events for you market or industry, and skip the trade shows. Instead, start creating your own events. Owned events deliver a higher ROI than attending every conference.
2953
2954With your own events you can get creative, based on what would make the most sense for your business. Some ideas:
2955<ul>
2956 	<li>CABs – Customer Advisory Boards</li>
2957 	<li>PACs – Product Advisory Boards</li>
2958 	<li>Private Dinners/ Breakfasts / Lunches – Have a speaker(s) come and give a talk, or have a panel, about something relevant to your target customers. Invite thought leaders to mingle.</li>
2959 	<li>
2959Bar Nights – Propose a topic and hang out in a cool swanky bar for a night for industry networking. (Make sure you make a limit at the bar)</li>
2960 	<li>Create your own conference – It could start as a small user conference and then grow into an industry event. INBOUND by Hubspot started as a small gathering and now hosts more than 10,000 people every year. Dreamforce by Salesforce is another example.</li>
2961</ul>
2962A mix of top industry events works well for many companies. It’s still possible to use personalized pre- and post-event marketing to reach out to people ahead of the event and follow up later. With owned events, it’s a little easier to make customers and prospects feel like VIPs and invite entire teams or groups of decision makers.
2963&nbsp;
2964<h2>Decisions happen in the middle</h2>
2965Selling software-as-a-service products to enterprise often means selling a product that is commoditized, or will be commoditized quickly. It's crucial to build a strong brand and a holistic marketing engine to create sales impact at every step of the customer journey.
2966
2967Enterprise brands put most focus on “top of the funnel” (brand awareness) and “bottom of the funnel” (direct-to-offers and promotions).
2968
2969Beautiful homepage and conversion optimization matter, but it's the content in between where the selling happens, because that's where you build trust – inform, educate, inspire, persuade, motivate etc. When selling to enterprise, it’s the compounding effects of the connection you build with different stakeholders that moves the needle. That’s why you need to build a marketing flywheel to create sales impact. This is where brands are built in 2019.
2970
2971The most successful and iconic brands today were built by bringing together marketing, product, sales, development and business so that everyone is looking at the customer through the same viewpoint.`,seoTitle:"The Bow-Tie Funnel: Land-and-Expand B2B Marketing"},{id:"2389",title:"SaaStock SF 2019 takeaways",slug:"saastock-sf-2019-takeaways",category:"Enterprise Marketing",seoDescription:"Key takeaways from SaaStock SF 2019. Insights on B2B SaaS hyper-growth, enterprise scaling challenges, and go-to-market strategy.",excerpt:"The hyper growth of SaaS companies comes with some exciting, but tough challenges. Last week at SaaStock West Coast a community of over 400 founders,...",readTime:3,tldr:"",content:`<!-- wp:image {"id":2393} /-->
2972<p>The hyper growth of SaaS companies comes with some exciting, but tough challenges. Last week at SaaStock West Coast a community of over 400 founders, executives, and investors came together in San Francisco, CA to address some common challenges. While our CEO Shira Abel took the stage as master of ceremony, the Hunter &amp; Bard team collected key quotes from speakers and takeaways from attendees. Here’s what we found:</p>
2973&nbsp;
2974<blockquote>
2975<p><em>“There’s a step or action in your product that translates into the ‘aha moment’ when a customer starts to see value that leads to long-term retention. Focus on finding that moment and tailor your onboarding to help more customers get there.”</em></p>
2976<p><em>— </em>Shane Murphy-Reuter, SVP Marketing at <strong><a href="https://www.intercom.com/">Intercom</a></strong></p>
2977</blockquote>
2978<p>&nbsp;</p>
2979<blockquote>
2980<p><em>“If we’re honest with ourselves, what we know about our customers comes from conversations with them or exit survey that sit in silos. You need to build a systematic approach to understand why customers leaving, so you can act.”</em></p>
2981<p><em>— </em>Guy Marion, CEO &amp; co-founder of <a href="https://brightback.com/"><strong>Brightback</strong></a></p>
2982</blockquote>
2983<p>&nbsp;</p>
2984<blockquote>
2985<p><em>“For us, churn occurs on the inflection point where customers want to get back to old habits.”</em></p>
2986<p><em>— </em>Jason Reichl, Co-founder of <strong><a href="https://gonimbly.com/">Go Nimbly</a></strong></p>
2987</blockquote>
2988<p>&nbsp;</p>
2989<blockquote>
2990<p><em>“Revenue streams should be included as a metric for marketing. Don’t wait for it to go to sales. Right now the focus is on clicks and conversion, but revenue needs to be included. Revenue matters.”</em></p>
2991<p><em>— </em>Ziad Tleimat, CEO &amp; Founder of <strong><a href="https://www.teamrunner.com/">TeamRunner</a></strong></p>
2992</blockquote>
2993<p>&nbsp;</p>
2994<blockquote>
2995<p><em>“First time founders are always obsessed with their product, but the biggest problem is how do you get the product to people? Founders need to focus on distribution: How do you reach the people who need this product? How do you let people know you exist? It’s so easy to fall into being completely product focused, but we need to al
2995so think seriously about distribution.” </em></p>
2996<p><em>— </em>Arjuna Del Toso, COO and VP of Engineering at <strong><a href="https://www.evensi.us/">Evensi</a></strong></p>
2997</blockquote>
2998<p>&nbsp;</p>
2999<blockquote>
3000<p><em>“It’s been great to hear from companies on what challenges they are facing: for example, how do they scale effectively? How do they increase their revenue? It’s been really interesting to see everyone come together as a community and address these challenges.”</em></p>
3001<p>— Monica Jacob, Marketing Communications Manager at <strong><a href="https://www.chargify.com/">Chargify</a></strong></p>
3002</blockquote>
3003<p>&nbsp;</p>
3004<p>Thank you again to SaaStock West Coast for a great experience jam-packed with actionable insights. Can’t wait for next year!</p>
3005<p>&nbsp;</p>`,seoTitle:"SaaStock SF 2019 takeaways | Hunter & Bard"},{id:"2739",title:"Enterprise marketing during COVID-19",slug:"enterprise-marketing-during-covid-19",category:"Enterprise Marketing",seoDescription:"Enterprise marketing changed fast during COVID-19. How B2B teams adapted positioning and demand generation when budgets suddenly tightened.",excerpt:"Yes, enterprise marketing still needs to market and sell. Without it businesses will die, and then we’ll have people out of work on top of dealing with a...",readTime:6,tldr:"",content:`<!-- wp:paragraph -->
3006<p>&nbsp;</p>
3007<!-- /wp:paragraph -->
3008
3009<!-- wp:paragraph -->
3010<p>Yes, enterprise marketing still needs to market and sell. Without it businesses will die, and then we’ll have people out of work on top of dealing with a pandemic and self-isolation. So let’s talk about work, shall we? (Adapted from my post on <a href="https://www.linkedin.com/pulse/how-market-sell-when-events-stop-theres-pandemic-world-shira-abel/">LinkedIn</a>)</p>
3011<!-- /wp:paragraph -->
3012
3013<!-- wp:paragraph -->
3014<p>The markets are in Bear Market territory for the past few weeks. The new question isn't whether we'll be in a recession at the end of all of this - but instead, 'How bad will this recession be?" I know many of my friends in Marketing are nervous. This has been frightening for many.</p>
3015<!-- /wp:paragraph -->
3016
3017<!-- wp:paragraph -->
3018<p>This is ‘…the <strong><a href="https://en.wikipedia.org/wiki/Black_swan_theory" target="_blank" rel="noreferrer noopener">black swan event</a> </strong>of 2020’, according to <strong><a href="https://medium.com/sequoia-capital/coronavirus-the-black-swan-of-2020-7c72bdeb9753" target="_blank" rel="noreferrer noopener">Sequoia Capital</a></strong>. Nassim Taleb insists it's a <strong><a href="https://medium.com/incerto/corporate-socialism-the-government-is-bailing-out-investors-managers-not-you-3b31a67bff4a">white swan event</a></strong>. Regardless of what you call it, there <strong><a href="https://www.visualcapitalist.com/history-of-pandemics-deadliest/" target="_blank" rel="noreferrer noopener">have been several viruses</a></strong> that have gone global previously, none that have affected the markets so quickly, and to this extent. I had expected a recession this year, but I was expecting a blip like 2000, and not 30% down markets in a matter of weeks.</p>
3019<!-- /wp:paragraph -->
3020
3021<!-- wp:paragraph -->
3022<p>Having lived through several downturns I’m obsessed with what brings value. With value comes more work. So what brings value in a down market? What kind of marketing works when we have to all work from home?</p>
3023<!-- /wp:paragraph -->
3024
3025<!-- wp:heading -->
3026&nbsp;
3027<h2>What companies last through recessions?</h2>
3028<!-- /wp:heading -->
3029
3030<!-- wp:paragraph -->
3031<p>The Great Recession saw a bit of sales shrinkage for most SaaS companies, but not the mass wipe-out of the dotcom bubble bursting.</p>
3032<!-- /wp:paragraph -->
3033
3034<!-- wp:quote -->
3035<blockquote class="wp-block-quote">
3036<p>According to research done by <a href="https://www.saas-capital.com/blog-posts/how-do-saas-companies-perform-in-a-recession/" target="_blank" rel="noreferrer noopener">SaaS Capital</a>, “There were 17 public SaaS companies prior to the start of the Great Recession. One of those companies, Omniture, was acquired by Adobe in 2009, but the other 16 all remained in business and independent through the downtur
3036n and into the recovery.” To be fair, SaaS Capital focuses on SaaS. So this article <a href="https://self-made.io/recession-proof-seven-businesses-thrive-recessions/1766/6/" target="_blank" rel="noreferrer noopener">offers some alternatives.</a></p>
3037</blockquote>
3038<!-- /wp:quote -->
3039
3040<!-- wp:paragraph -->
3041<p>For marketers wondering what skills they should be focusing on, <a href="https://www.linkedin.com/in/jowyang/" target="_blank" rel="noreferrer noopener">Jeremiah Owyang</a> from <a href="https://www.kaleidoinsights.com/" target="_blank" rel="noreferrer noopener">Kaleido Insights</a> recommends, “Automation will become a business requirement as companies need to reduce costs and also become more productive. Become an expert on marketing automation, advertising automation and data analysis. This is classic recession strategy for marketing.”</p>
3042<!-- /wp:paragraph -->
3043
3044<!-- wp:paragraph -->
3045<p>I know lives are at stake, and I’m not lowering the importance of that, but livelihoods are important as well. <a href="https://www.washingtonpost.com/business/2020/03/11/layoffs-coronavirus/" target="_blank" rel="noreferrer noopener">And the layoffs have only just started.</a> That’s why Product and Sales are the most important departments of any business. Product, because without a good product there’s nothing to sell. Sales, because without them nothing is being sold. Without revenue there are no jobs.</p>
3046<!-- /wp:paragraph -->
3047
3048<!-- wp:paragraph -->
3049<p>It’s safe to assume that this crisis hasn’t affected product development much. As such this post is focusing on Sales. Marketing and sales, to be specific, as in most Tech companies Marketing supports Sales.</p>
3050<!-- /wp:paragraph -->
3051
3052<!-- wp:heading -->
3053&nbsp;
3054<h2>Technology sales</h2>
3055<!-- /wp:heading -->
3056
3057<!-- wp:paragraph -->
3058<p>Selling technology to enterprise is generally a complex sale, meaning it takes a long time, has many people involved, and goes through multiple stages before it’s finished. The average software sale takes a <a href="/resources/blog/bow-tie-funnel-land-and-expand-b2b-marketing" target="_blank" rel="noreferrer noopener">land-and-expand approach</a>, aiming to close the first deal as a proof of concept and then expanding the account throughout the enterprise. This means both pre-sale and post-sale marketing. Pre-sale is typically done with an Account Executive, a Sales Engineer, and the Marketing Team. Post-sale expansion is usually handled by the Account Executive, Customer Success, and the Marketing Team.</p>
3059<!-- /wp:paragraph -->
3060
3061<!-- wp:heading -->
3062&nbsp;
3063<h2>Initial deals will change</h2>
3064<!-- /wp:heading -->
3065
3066<!-- wp:paragraph -->
3067<p>Leads happen through direct outreach, but many become solid through face-to-face meetings at events.</p>
3068<!-- /wp:paragraph -->
3069
3070<!-- wp:paragraph -->
3071<p>As events go down, online will go up. Marketing will need alternative ways to find the leads to build and convert. I see online research, SEO, content, LinkedIn, Twitter, and webinars increasing. Video and non-video calls will help as people start to go stir crazy at home.</p>
3072<!-- /wp:paragraph -->
3073
3074<!-- wp:paragraph -->
3075<p>Making marketing personal will increase, as people will desire an increase in human connections. Sales will take longer, as companies look to see what is happening in the world and how that will affect their bottom line. We’ve seen some budgets being cut due to the industry being affected, and heard about others being expanded as companies see this as an opportunity to gain market share. Either way, marketing and sales will need to show direct results to all efforts made.</p>
3076<!-- /wp:paragraph -->
3077
3078<!-- wp:heading -->
3079&nbsp;
3080<h2>Sales will need more support</h2>
3081<!-- /wp:heading -->
3082
3083<!-- wp:paragraph -->
3084<p>When sales take longer, Account Executives need more reasons to reach out and have touch points with the prospect. Inbound will be even more important than it already has been. We’re all working from home. It’s Saturday as I type this. I’m going to be home with my husband and sons for the foreseeable future (they are out of school for the next 23 days at least, heaven help us all) I’m online more than I would normally be on a weekend, and I’m working, because what else is there to do? We’re not going out. Neither are most other people we know. Some of our friends are going to their weekend homes in Tahoe, but most of the adults are working while their kids go ski. If anything, people are working more as everyone is wondering if there will be work in a few more months.</p>
3085<!-- /wp:paragraph -->
3086
3087<!-- wp:paragraph -->
3088<p>This is an opportunity.</p>
3089<!-- /wp:paragraph -->
3090
3091<!-- wp:paragraph -->
3092<p>Don’t look at this as a way to sell. Look at it as a chance to be helpful. And there is a <em>huge</em> difference. I was in a webinar this past week where I expected helpful information. Instead it was a sales pitch and I gained zero insights. How likely do you think I am to use that product now? Not very.</p>
3093<!-- /wp:paragraph -->
3094
3095<!-- wp:heading -->
3096&nbsp;
3097<h2>How to be helpful?</h2>
3098<!-- /wp:heading -->
3099
3100<!-- wp:paragraph -->
3101<p>Sales needs touchpoints to build mindshare. If marketing is doing an account-based marketing campaign, these touchpoints could be: email, social outreach, social ads, webinars, direct mail, and more. The email campaigns will need helpful content — so think blog posts, white papers, case studies, ebooks that are industry related, videos, and podcasts. The webinars should not have 5 minutes of selling in the beginning. Keep the credits to a minute or less and get straight to the helpful information. People will generally want less conceptual information, and more instructional. Action helps us feel like we’re being productive, and productive feels good.</p>
3102<!-- /wp:paragraph -->
3103
3104<!-- wp:heading -->
3105&nbsp;
3106<h2>Remember</h2>
3107<!-- /wp:heading -->
3108
3109<!-- wp:paragraph -->
3110<p>
3110Marketing budgets die during downturns, which means having to work smarter with less. Inbound marketing will become a main focus and sales will work even closer with marketing to help get qualified leads in the door. Delivering work that fills a requirement won’t be enough. What value are you providing to your customer? How are you helping their success? Focus on that. #behelpful</p>
3111<!-- /wp:paragraph -->
3112
3113<!-- wp:heading -->
3114&nbsp;
3115<h2>Special thank you &amp; <br>be in touch</h2>
3116<!-- /wp:heading -->
3117
3118<!-- wp:paragraph -->
3119<p>Thank you to <strong><a href="https://www.linkedin.com/in/erik-anderson-090a352b/" target="_blank" rel="noreferrer noopener">Erik Andersen</a></strong>, <a href="https://www.linkedin.com/in/paulakiger/" target="_blank" rel="noreferrer noopener"><strong>Paula Kiger</strong></a>, and <strong><a href="https://www.linkedin.com/in/suzicarragher/" target="_blank" rel="noreferrer noopener">Suze Carragher</a></strong> for reading the post and offering advice and edits.</p>
3120<!-- /wp:paragraph -->
3121
3122<!-- wp:paragraph -->
3123<p>I’m doing a series on marketing and sales to enterprise and am looking for people and articles to interview, quote, and reference. <strong><a href="/contact">Feel free to reach out to me</a>.</strong></p>
3124<!-- /wp:paragraph -->`,seoTitle:"Enterprise marketing during COVID-19 | Hunter & Bard"},{id:"2751",title:"How sales enablement powers growth",slug:"how-sales-enablement-powers-growth",category:"Enterprise Marketing",seoDescription:"Sales enablement bridges the gap between B2B marketing and revenue. Learn how to arm your enterprise sales team with content that closes deals.",excerpt:"Events are gone for now. You’re looking to increase sales, bring better leads into your funnel, and have the sales team love you - we’re here to help with your...",readTime:7,tldr:"",content:`Events are gone for now. You’re looking to increase sales, bring better leads into your funnel, and have the sales team love you - we’re here to help with your sales enablement.
3125
3126<!-- /wp:paragraph -->
3127
3128<!-- wp:paragraph {"hasCustomCSS":true} -->
3129
3130There’s been a lot written about content marketing. Some say there’s too much noise, others say that it’s all about the distribution. They are both right. But there’s more - there’s the importance of quality. If you don’t grab someone by the first line of your email, ebook, case study, blog post, white paper or social post - you’ve lost them. It doesn’t matter how much money you put into your sponsored content social campaign.
3131
3132<!-- /wp:paragraph -->
3133
3134<!-- wp:heading -->
3135<h2></h2>
3136<h2>Why building content isn’t enough</h2>
3137<!-- /wp:heading -->
3138
3139<!-- wp:paragraph -->
3140
3141Building content isn’t enough. So many people and companies are writing, and often the work produced is meh. It checks the box that keeps their job, but it just stays there, molding on the shelf. To produce amazing results you need to create amazing content. You also need a distribution plan for that content.
3142
3143<!-- /wp:paragraph -->
3144
3145<!-- wp:paragraph -->
3146<h6>There are multiple reasons to build content:</h6>
3147<!-- /wp:paragraph -->
3148
3149<!-- wp:list {"ordered":true} -->
3150<ol>
3151 	<li>Great content leads prospects down the funnel into the waiting arms of the sales team.</li>
3152 	<li>Watching who opens and reads your content sends a signal to who is interested in your product and helps the sales team focus their efforts.</li>
3153 	<li>Specializing your content shows you what features, aspects, or pain points (depending on what your content is about) that your prospect is interested in.</li>
3154 	<li>It gives the Sales Team a reason to reach out to leads, “Hi XYZ, I just wanted to keep in touch and send you our latest eBook on CYA.”</li>
3155 	<li>You need to show that you’re influencing sales.</li>
3156</ol>
3157<!-- /wp:list -->
3158
3159<!-- wp:paragraph -->
3160
3161And if your content rocks - it’s working. You can go work on something else now, you don’t need this post. (<strong><a href="/contact">Let us know if you need a marketing agency</a></strong> to help supplement the awesome content you’re already producing.)
3162
3163<!-- /wp:paragraph -->
3164
3165<!-- wp:paragraph -->
3166
3167If analytics show people jumping off the content pretty quick, and the content isn’t pushing prospects down the funnel or turning into leads, there’s an issue to be solved. The content is not hitting its mark. Let’s figure out why.
3168
3169<!-- /wp:paragraph -->
3170
3171<!-- wp:heading -->
3172<h2></h2>
3173<h2>Talk to your sales team</h2>
3174<!-- /wp:heading -->
3175
3176<!-- wp:paragraph -->
3177
3178The lack of communication between marketing and the customer in various organizations never ceases to amaze me. Sales, however, always has access to the customer and loves to talk about how wonderful the prospects and customers are. Sales people generally love to talk, period. And they are fun to talk to. Especially when they know you have their best interest in mind and are there to make them more successful.
3179
3180<!-- /wp:paragraph -->
3181
3182<!-- wp:paragraph -->
3183<h6>Sit with your sales team and learn about:</h6>
3184<!-- /wp:paragraph -->
3185
3186<!-- wp:list -->
3187<ul>
3188 	<li>Their typical sales process (is it the same with all AEs? Different? Why?)</li>
3189 	<li>What materials they use in their sales process</li>
3190 	<li>Who they talk to during the sale</li>
3191 	<li>Where do the Sales Engineers come in (and talk to the SE as well)</li>
3192 	<li>How long does it take from SQL (Sales Qualified Lead, otherwise known as an SAL or Sales Accepted Lead) to become an Opportunity (get into the contract cycle)?</li>
3193 	<li>What content do they think they need?</li>
3194 	<li>
3194If the sale is lost - how is it lost? What % of SQLs versus Opportunities end up being lost?</li>
3195</ul>
3196<!-- /wp:list -->
3197
3198<!-- wp:paragraph -->
3199
3200You can’t fix something unless you know it’s broken. To find out what isn’t working as well as it could, you need to ask questions in a nice, non threatening way. You’re a team, and you’re there to make the whole group stronger.
3201
3202<!-- /wp:paragraph -->
3203
3204<!-- wp:heading -->
3205<h2></h2>
3206<h2>Who are you writing for?</h2>
3207<!-- /wp:heading -->
3208
3209<!-- wp:paragraph -->
3210
3211Using Hunter &amp; Bard as an example - our expertise is in tech enterprise, business-to-business, land-and-expand sales model, and an investment of at least 100k and up annually after the account is expanded. This type of sale typically has multiple people in the decision making process. For most software or services, there are anywhere from 10 to 17 people deciding on any single product or service. Some of that group includes:
3212
3213<!-- /wp:paragraph -->
3214
3215<!-- wp:list -->
3216<ul>
3217 	<li>The SME (Subject Matter Expert) who is using the product or taking the service</li>
3218 	<li>The boss of the SME who needs things done and has to show results to whoever is above them</li>
3219 	<li>The Key Decision Maker who often holds the purse strings</li>
3220 	<li>The VP who cares about numbers and The Board</li>
3221 	<li>The person who is afraid of change and will fight your product or service</li>
3222</ul>
3223<!-- /wp:list -->
3224
3225<!-- wp:paragraph -->
3226
3227Each person needs a different type of content. The SME will want the most technical content with the most detail. This makes sense, as they will be using the content. The VP doesn’t have the time to dive deep - they need a short overview. Each position has its own pain points and politics. What do you know about your typical customer? Have you written that down and addressed each benefit and issue?
3228
3229<!-- /wp:paragraph -->
3230
3231<!-- wp:heading -->
3232<h2></h2>
3233<h2>Sales enablement turbo charges sales</h2>
3234<!-- /wp:heading -->
3235
3236<!-- wp:paragraph -->
3237
3238If you’ve followed the outline above you’ll have a good idea on what part of the funnel, or <a href="/resources/blog/bow-tie-funnel-land-and-expand-b2b-marketing">bow tie</a>, you should be focusing on for optimization. Below you can see which content works at that stage.
3239
3240<!-- /wp:paragraph -->
3241
3242<!-- wp:image -->
3243<figure></figure>
3244<!-- /wp:image -->
3245
3246<!-- wp:paragraph -->
3247<h6>By now you should know:</h6>
3248<!-- /wp:paragraph -->
3249
3250<!-- wp:list {"ordered":true} -->
3251<ol>
3252 	<li>Who you are writing for (Who is your customer? What vertical? Geography?)</li>
3253 	<li>What their pain points are</li>
3254 	<li>What type content you need to be producing</li>
3255</ol>
3256<!-- /wp:list -->
3257
3258<!-- wp:paragraph -->
3259
3260Use the content funnel to create your content calendar.
3261
3262<!-- /wp:paragraph -->
3263
3264<!-- wp:heading -->
3265<h2>Distribution of content</h2>
3266<!-- /wp:heading -->
3267
3268<!-- wp:paragraph -->
3269
3270Here are a few main methods of distribution for B2B companies:
3271
3272<!-- /wp:paragraph -->
3273
3274<!-- wp:list -->
3275<h6>Email</h6>
3276<ul>
3277 	<li style="list-style-type: none;">
3278<ul>
3279 	<li>Newsletters: typically higher level content that has a broad appeal and is helpful. This is meant to educate the customer and provide value. It is not meant to sell.</li>
3280 	<li>Direct email: Sent by Account Executives directly to the prospect. This is used to keep in touch with the prospect, provide value, and answer questions that the prospect may have, but might not have asked.</li>
3281</ul>
3282</li>
3283</ul>
3284<h6></h6>
3285<h6>Sponsored Content</h6>
3286<ul>
3287 	<li style="list-style-type: none;">
3288<ul>
3289 	<li>Sponsored content could be on social media, such as LinkedIn, or on a vertical blog that is focused on your industry - like <a href="https://marketingprofs.com/">MarketingProfs</a>. Make sure you target efficiently, wherever you spend your budget.</li>
3290</ul>
3291</li>
3292</ul>
3293<h6></h6>
3294<h6>Social Media</h6>
3295<ul>
3296 	<li style="list-style-type: none;">
3297<ul>
3298 	<li>Share the content, or the landing page the content can be requested from, on your social media profiles. But don’t just have it be your company profile sharing - if you have quotes from influencers in the piece you should send it to them to share as well. And ask people in your company with an appropriate social media presence if they would like to post about it.</li>
3299 	<li>Blogs can also be cross posted to accounts on LinkedIn. The person in the company with the largest reach can post blogs on their LinkedIn even if it wasn’t written by them. Just add attribution inside the copy in the beginning and end of the article.</li>
3300</ul>
3301</li>
3302</ul>
3303<h6></h6>
3304<h6>Blogs</h6>
3305<ul>
3306 	<li style="list-style-type: none;">
3307<ul>
3308 	<li>The company blog is an obvious place to share blog content.</li>
3309 	<li>Medium is another place to cross-post company content. Many of the magazines inside Medium allow for c
3309ontributed content. If the piece fits a Medium Magazine, submit it.</li>
3310</ul>
3311</li>
3312</ul>
3313<h6></h6>
3314<h6>Virtual Events</h6>
3315<ul>
3316 	<li style="list-style-type: none;">
3317<ul>
3318 	<li>People sign up for webinars because they are interested in the content in the webinar - it’s a self segregating audience that is telling you what they want. If they weren’t interested in the subject, they wouldn’t sign up. You can now market to them via the webinar other things on that subject via email, or inside the webinar.</li>
3319 	<li>Speaking in online conferences gives you the opportunity to provide even more value by giving away high level funnel content to those who go to the landing page you provide. I typically make that the last slide of the deck when I say Thank You.</li>
3320</ul>
3321</li>
3322</ul>
3323<!-- /wp:list -->
3324
3325<!-- wp:paragraph -->
3326
3327<img class="alignnone wp-image-2860 size-large" title="B2B content funnel by Hunter and Bard" src="https://hunterandbard.com/wp-content/uploads/2020/04/[email protected]" alt="B2B content funnel by Hunter and Bard" width="1024" height="702" />
3328
3329Writing content isn’t enough to support your sales team. It has to be good, relevant content that provides real value to the customer or prospect. No one likes to be sold to. Great content helps the company you want to work with, and that’s a much nicer way to start a partnership, don’t you think?
3330
3331<!-- /wp:paragraph -->
3332
3333<!-- wp:paragraph -->
3334
3335Special thanks to <a href="https://twitter.com/biggreenpen"><strong>Paula Kiger</strong></a> for reviewing this post before it went live.
3336
3337<!-- /wp:paragraph -->`,seoTitle:"How sales enablement powers growth | Hunter & Bard"},{id:"2864",title:"Get in front of your target market",slug:"get-in-front-of-your-target-market",category:"Enterprise Marketing",seoDescription:"Getting in front of your B2B target market requires strategic visibility. Learn how to position your enterprise brand where decision-makers are looking.",excerpt:"Each time you share anything online, potential accounts are evaluating your value. In order to take advantage of the momentary attention, it’s essential to...",readTime:3,tldr:"",content:`Each time you share anything online, potential accounts are evaluating your value. In order to take advantage of the momentary attention, it’s essential to understand your Ideal Customer Profile (ICP). Every aspect of the buyer's journey should be based around your ICP. As B2B buyers’ expectations constantly evolve, the necessity of a seamless experience complemented with empathetic, deep relationships is increasingly important. Pinpointing your target audience and guiding them through a tailored, informative journey hitting each touchpoint increases your credibility and your chances of securing that account.
3338
3339Follow these three steps to get in front of the right people at the right accounts:
3340<h2>Know your audience</h2>
3341First things first, you need to know your audience. In order to fully benefit from your marketing strategy, every aspect of the B2B buyer's journey must be precisely aligned with the key decision-makers’ motivations and pain points. You need to know them on a few levels: basic demographics of the key decision-makers, expectations throughout the buyer’s journey, and also their core motivations.
3342
3343Ask yourself questions like these:
3344<h4></h4>
3345<h4>Basic demographic:</h4>
3346<ul>
3347 	<li>Who are the key decision-makers? Titles? Job roles?</li>
3348 	<li>What is their seniority? Level of responsibility?</li>
3349 	<li>Who is your ideal target company?</li>
3350 	<li>What size is the target company? (revenue, employees)</li>
3351 	<li>What is the location of your target company?</li>
3352 	<li>Who is their end customer?</li>
3353 	<li>What verticals are they targeting?</li>
3354</ul>
3355<h4>Buyer journey:</h4>
3356<ul>
3357 	<li>What are the most critical touchpoints throughout your journey?</li>
3358 	<li>How do you want the buyer to feel throughout the process?</li>
3359 	<li>How do the decision-makers get their information?</li>
3360 	<li>What information is the buyer looking for before the sale? Are you providing it to them?</li>
3361 	<li>How and when will the company use your service/product?</li>
3362 	<li>What features are appealing to the people at this company?</li>
3363 	<li>What is important to your buyer?</li>
3364</ul>
3365<h4>Core motivations:</h4>
3366<ul>
3367 	<li>What do the key decision-makers value?</li>
3368 	<li>How do the key decision-makers picture success?</li>
3369 	<li>What is important to the end customer?</li>
3370 	<li>What are the challenges of the buyers? Of the end customer?</li>
3371 	<li>What are the goals of the buyers? Of the end customer?</li>
3372 	<li>Why does the company have a need for change?</li>
3373 	<li>What drives the decision-makers’ purchasing decisions?</li>
3374 	<li>What value do you specifically provide to your customer?</li>
3375</ul>
3376&nbsp;
3377<h2>Create relevant content</h2>
3378If you don’t educate your audience with relevant information at every step of the journey, they’ll get their answers from someone else. So, everything from your landing page to eBooks and whitepapers is the compass navigating buyers to the final sale. Don’t lose a lead because you didn’t have the answers they were looking for. Instead, use the insights from your research to make informed decisions on what type of content is meaningful to your audience. (Check out this article to make sure you're including <a href="https://hunterandbard.com/content-marketing-plan-cover-4-core-content-types/" rel="noreferrer noopener"><strong>these four types of content</strong>.</a>)
3379
3380[bctt tweet="
3381
3382If you don’t educate your audience with relevant information at every step of the journey, they’ll get their answers from someone else. #b2bmarketing #contentmarketing" quote="“If you don’t educate your audience with relevant information at every step of the journey, they’ll get their answers from someone else,” says @hunterandbard"]
3383<h2>Optimize discoverability</h2>
3384Google receives 40,000 searches each second. In order to cut through the vast amount of data that your customer is consuming, your content must implement SEO practices for prospects to discover your existence and increase growth. For example, keywords, backlinks, and great user experience are all essential components of optimizing your content to be visible. Content and SEO go hand-in-hand. Content is a necessity for SEO, but your content won’t be seen unless your audience can find it.
3385
3386[bctt tweet="
3387
3388Google receives 40,000 searches every second. It’s essential that your content implements SEO practices in order to cut through the vast amount of data. Learn about how #content and #SEO go hand-in-hand #b2bmarketing " quote="Google receives 40,000 searches every second. It’s essential that your content implements SEO practices in order to cut through the vast amount of data."]
3389
3390Follow these three steps to see an increase in organic traffic, more leads, and overall revenue. Want to chat about your content and SEO strategy?<strong> Reach out <a href="/contact" rel="noreferrer noopener">here</a>.</strong>`,seoTitle:"Get in front of your target market | Hunter & Bard"},{id:"3040",title:"Content that converts checklist",slug:"content-that-converts-checklist",category:"Enterprise Marketing",seoDescription:"A B2B content conversion checklist for enterprise marketers. Ensure every piece of content has the elements needed to drive leads and pipeline.",excerpt:"Nurtured leads make 47 percent larger purchases compared to non-nurtured leads . So that means, to convert your leads into better customers you must provide...",readTime:3,tldr:"",content:`<!-- wp:paragraph -->
3391<p>Nurtured leads make <strong><a href="http://b.link/vvlty" target="_blank" rel="noreferrer noopener">47 percent larger purchases compared to non-nurtured leads</a></strong>. So that means, to convert your leads into better customers you must provide your audience with the information and content needed to make a buying decision and develop deep, trustworthy relationships. In order to start a relationship, your customer first needs to be interested in what you’re saying. </p>
3392<!-- /wp:paragraph -->
3393
3394<!-- wp:paragraph -->
3395<p>Implement these best practices into each blog post, email, and social media post to ensure that your content leads to higher conversions:</p>
3396<!-- /wp:paragraph -->
3397
3398<!-- wp:heading {"level":3} -->
3399<h3> </h3>
3400<h2>Relevant messaging</h2>
3401<!-- /wp:heading -->
3402
3403<!-- wp:paragraph -->
3404<p>Your tone and voice must be relevant to your audience. Through interviews with your customer, you can gain customer insights, and use the words that they use. Most importantly, tie these customer insights together and create content that they <em>want</em> to read. Don’t know what that is? Figure it out by checking out <a href="http://b.link/rpn9b"><strong>this blog post breaking down your customers’ core motivations.</strong></a></p>
3405<!-- /wp:paragraph -->
3406
3407<!-- wp:heading {"level":3} -->
3408<h3> </h3>
3409<h2>Easy on the eyes</h2>
3410<!-- /wp:heading -->
3411
3412<!-- wp:paragraph -->
3413<p>A big block of text is daunting, people simply don’t read it. Your content must be scannable, easily broken down, and bold where necessary. Since nearly ⅓ of B2B content being consumed 
3413is through a phone, your website must be mobile-friendly, or else you’re losing a significant portion of your audience.</p>
3414<div class="wp-block-social-warfare-click-to-tweet social-warfare-admin-block">
3415<p>[bctt tweet="</p>
3416"Nurtured leads make 47% larger purchases compared to non-nurtured leads (via @marketo). Give your audience the answers they need to convert leads into loyal customers." quote="Nurtured leads make 47% larger purchases compared to non-nurtured leads (via @marketo). Give your audience the answers they need to convert leads into loyal customers. ""]</div>
3417<!-- /wp:social-warfare/click-to-tweet -->
3418
3419<!-- wp:heading {"level":3} -->
3420<h3> </h3>
3421<h2>Social proof</h2>
3422<!-- /wp:heading -->
3423
3424<!-- wp:paragraph -->
3425<p>Social proof increases your credibility and is more likely to convince a lead that you are the right choice. It's the heuristic that people are more likely to follow the actions of others like themselves. In the B2B realm, examples of social proof are testimonials, case studies, thought leadership, and guest posting. Testimonials and case studies from past customers show that other people had a positive experience and saw success with your help. Similarly, thought leadership and guest posting give a stamp of approval from Subject Matter Experts (SMEs) and platforms that your customer already trusts.  </p>
3426<!-- /wp:paragraph -->
3427
3428<!-- wp:heading {"level":3} -->
3429<h3> </h3>
3430<h2>Clear &amp; concise call-to-action (CTA)</h2>
3431<!-- /wp:heading -->
3432
3433<!-- wp:paragraph -->
3434<p>More options are not always better. A single, concise call-to-action is a necessity in each and every piece of content you have. Remember that you’re the compass guiding your audience to the sale. With this in mind, tell them exactly what action you want at the end of your email, blog, or tweet. Otherwise too many CTAs can confuse and overwhelm your reader. Stick to one. A solid CTA will lead to higher engagement and more people who will “LEARN MORE” and “DOWNLOAD NOW.” <strong><a href="http://b.link/842wf">Read more about CTAs that convert here.</a></strong></p>
3435<!-- /wp:paragraph -->
3436
3437<!-- wp:heading {"level":3} -->
3438<h3> </h3>
3439<h2>Optimize for algorithms </h2>
3440<!-- /wp:heading -->
3441
3442<!-- wp:paragraph -->
3443<p>Social media algorithms like content that the audience likes -- literally. LinkedIn, Facebook, and Twitter all favor content with high engagement, so we recommend having colleagues Like and comment soon after you post to raise you up to the first in the feed. Get your marketing teams, colleagues, and friends to engage with your posts immediately after hitting publish. Also, actively listen to your customers tell you what they want to consume. Utilize the analytics feature in your social media to see what topics are getting the highest engagement and adjust your strategy from there.</p>
3444<!-- /wp:paragraph -->
3445
3446<!-- wp:social-warfare/click-to-tweet {"hasFocus":true,"tweetText":"Social media algorithms like #content that your audience likes (literally). That's why it's essential to have early engagement if you want to be seen in your customer's feed. #socialmediamarketing","displayText":"Social media algorithms like #content that your audience likes (literally). That's why it's essential to have early engagement if you want to be seen in your customer's feed."} -->
3447<div class="wp-block-social-warfare-click-to-tweet social-warfare-admin-block">
3448<p>[bctt tweet="</p>
3449"Social media algorithms like #content that your audience likes (literally). That's why it's essential to have early engagement if you want to be seen in your customer's feed. #socialmediamarketing" quote="Social media algorithms like #content that your audience likes (literally). That's why it's essential to have early engagement if you want to be seen in your customer's feed." "]</div>
3450<!-- /wp:social-warfare/click-to-tweet -->
3451
3452<!-- wp:heading {"level":3} -->
3453<h3> </h3>
3454<h2>Visuals</h2>
3455<!-- /wp:heading -->
3456
3457<!-- wp:paragraph -->
3458<p><strong><a href="http://b.link/t5wvu" target="_blank" rel="noreferrer noopener">Ninety percent of information transmitted to the brain is visual, and visuals are processed 60,000x faster in the brain than text</a>.</strong> For this reason, it's crucial to use infographics in your content to transform complex data into understandable, digestible stories. Since we're in an increasingly visual, virtual realm, high-quality infographics provide higher social engagement, lead generation, and brand awareness. </p>
3459<!-- /wp:paragraph -->
3460
3461<!-- wp:image {"id":3042,"sizeSlug":"large"} -->
3462<figure class="wp-block-image size-large"></figure>
3463<!-- /wp:image -->
3464<p>&nbsp;</p>
3465<!-- wp:paragraph -->
3466<p>Stand out from the sea of content with these effective content tips. <br />Want to chat about your content?<strong> <a href="/contact">Reach out here.</a></strong></p>
3467<!-- /wp:paragraph -->`,seoTitle:"Content that converts checklist | Hunter & Bard"},{id:"3160",title:"Content that’s worth your time",slug:"content-thats-worth-your-time",category:"Enterprise Marketing",seoDescription:"Not all B2B content is 
3467worth creating. Learn how to focus enterprise content marketing on high-impact assets that generate pipeline, not just traffic.",excerpt:"According to Salesforce Pardot’s study, 77 percent of people want different content at each stage of their research . You don’t want to send someone who’s...",readTime:7,tldr:"",content:`<!-- wp:paragraph -->
3468<p><p>According to Salesforce Pardot’s study, <strong><a href="https://www.pardot.com/content-marketing/why-you-should-care-about-stage-based-marketing/" target="_blank" rel="noreferrer noopener">77 percent of people want different content at each stage of their research</a></strong>. You don’t want to send someone who’s already reached the bottom of the funnel an “Industry 101” blog post. Curating the right type of content for each stage of a sale is crucial. We broke down the eight most important types of content, why they’re important, and how to use them. Investing in engaging, well-written, and designed content will help ensure that your sales team has its bases covered, keeps your costs for content creation low, and provides value longer.&nbsp;</p>
3469<p><img class="alignnone wp-image-2860 size-large" src="https://hunterandbard.com/wp-content/uploads/2020/04/[email protected]" alt="the B2B content funnel by Hunter and Bard" width="1024" height="702"></p></p>
3470<!-- /wp:paragraph -->
3471
3472<!-- wp:paragraph -->
3473<p>These are the eight essential types of content that will boost your marketing efforts:</p>
3474<!-- /wp:paragraph -->
3475
3476<p>&nbsp;</p>
3477
3478<!-- wp:heading -->
3479<h2 class="wp-block-heading" id="h-ebooks-and-even-hardcover-or-physical-books">eBooks (and even hardcover or physical books!)</h2>
3480<!-- /wp:heading -->
3481
3482<!-- wp:paragraph -->
3483<p><p>eBooks are the number one most requested type of content from B2B consumers according to <a href="https://customerthink.com/how-b2b-buyers-actually-consume-content/" target="_blank" rel="noreferrer noopener"><strong>CustomerThink</strong></a>. They are digital, long-form books that feature a topic that your company wants to showcase. They’re less dense than traditional books but much more informative than a blog post. At the start of the funnel, eBooks are essential to spotlight all the key points that your audience needs to know. First, it’s necessary to conduct keyword research to understand what’s important to your audience to choose a relevant topic. From there, you can demonstrate that you’re a leader in the industry and have a full grasp of the subject.&nbsp;</p>
3484<p>Sending the right physical book to a prospect account sets you apart from the competition and is guaranteed to get their attention. They can be used in direct mail engagement to turn a cold-prospect into a warm one, as gifts are a great way to build relationships with closed-won accounts.&nbsp;Accompany a thank you or post-meeting follow-up with a physical book instead of a generic email.</p></p>
3485<!-- /wp:paragraph -->
3486
3487<!-- wp:paragraph -->
3488<p></p>
3489<!-- /wp:paragraph -->
3490
3491<!-- wp:social-warfare/click-to-tweet {"hasFocus":true,"tweetText":"Investing in engaging, well-written and designed #content will help ensure that your #sales team has its bases covered, keeps your costs for content creation low, and provides value longer. ","displayText":"Investing in engaging, well-written and designed #content will help ensure that your #sales team has its bases covered, keeps your costs for content creation low, and provides value longer."} -->
3492<div class="wp-block-social-warfare-click-to-tweet social-warfare-admin-block">
3493<p>[bctt tweet="</p>
3494Investing in engaging, well-written and designed #content will help ensure that your #sales team has its bases covered, keeps your costs for content creation low, and provides value longer. " quote="Investing in engaging, well-written and designed #content will help ensure that your #sales team has its bases covered, keeps your costs for content creation low, and provides value longer." "]</div>
3495<!-- /wp:social-warfare/click-to-tweet -->
3496
3497<p>&nbsp;</p>
3498
3499<!-- wp:heading -->
3500<h2 class="wp-block-heading" id="h-white-papers-nbsp">White Papers&nbsp;</h2>
3501<!-- /wp:heading -->
3502
3503<!-- wp:paragraph -->
3504<p>White Papers are data-driven, technical, and focus on advanced deep subject expertise. They directly present first and third-party data tailored to decision-makers. While the tone of eBooks is more casual, White Papers are significantly more dense and professional. They increase your credibility, give your sales team the numbers, and inform potential customers that you are an expert in the field. This helps build the trust necessary to close that high-value customer.&nbsp;</p>
3505<!-- /wp:paragraph -->
3506
3507<p>&nbsp;</p>
3508
3509<!-- wp:heading -->
3510<h2 class="wp-block-heading" id="h-explainer-videos">Explainer videos</h2>
3511<!-- /wp:heading -->
3512
3513<!-- wp:paragraph -->
3514<p>According to HubSpot, <strong><a href="https://blog.hubspot.com/marketing/state-of-video-marketing-ne
3514w-data?__hstc=144543722.d4c50fb2e486063c6d6ce94e744a7aca.1596660534187.1596660534187.1596660534187.1&amp;__hssc=144543722.1.1596660534188&amp;__hsfp=1209389062" target="_blank" rel="noreferrer noopener">88 percent of marketers that use video in their marketing strategy reported that video gives them a positive ROI</a></strong>. Well-edited videos help you stay competitive due to their ability to form an emotional connection with the audience. Visual communication makes explanations of your product benefits more engaging. Utilize video to educate your audience on your product features, solutions, and benefits. You can also create engagement with how-to’s and guides.&nbsp;</p>
3515<!-- /wp:paragraph -->
3516
3517<!-- wp:paragraph -->
3518<p>There’s power in explaining how others have benefitted from your solution. Don’t forget to put all your happy customers in front of a camera and create a video testimonial or case study. Testimonials are effective because <strong><a href="https://contentmarketinginstitute.com/2017/06/strategies-customer-testimonials-content/" target="_blank" rel="noreferrer noopener">92 percent of people trust a recommendation from a peer</a></strong>.&nbsp;</p>
3519<!-- /wp:paragraph -->
3520
3521<!-- wp:paragraph -->
3522<p><em>Here’s a bonus</em>: Videos benefit your website’s SEO since the user stays on your page for a longer amount of time.&nbsp;</p>
3523<!-- /wp:paragraph -->
3524
3525<p>&nbsp;</p>
3526
3527<!-- wp:heading -->
3528<h2 class="wp-block-heading" id="h-industry-relevant-podcast">Industry-relevant podcast</h2>
3529<!-- /wp:heading -->
3530
3531<!-- wp:paragraph -->
3532<p>Podcasts are another way to establish yourself as a thought leader in your industry by sharing your extensive knowledge with a greater audience. When well-produced, podcasts are powerful and personal. The convenient format allows for attention penetration in situations where listeners can't read a blog post or take their eyes off the road. The auditory ability of both podcasts and explainer videos sets these types of content apart from others. Interviewing B2B influencer Subject Matter Experts (SMEs) in your podcast (<strong><a href="https://www.marketingprofs.com/articles/2020/42958/five-best-practices-for-b2b-social-media-influencer-marketing" target="_blank" rel="noreferrer noopener">yes, B2B influencers are a real thing</a></strong>) can increase your engagement and widen your reach past your existing network.&nbsp;</p>
3533<!-- /wp:paragraph -->
3534
3535<!-- wp:social-warfare/click-to-tweet {"hasFocus":true,"tweetText":"88% of marketers that use video in their marketing strategy reported that video gives them a positive #ROI (@HubSpot). Explainer videos and testimonials help create deep, trustworthy relationships with customers while boosting #SEO.","displayText":"88% of marketers that use video in their marketing strategy reported that video gives them a positive #ROI. Explainer videos and testimonials help create deep, trustworthy relationships with customers while boosting #SEO."} -->
3536<div class="wp-block-social-warfare-click-to-tweet social-warfare-admin-block">[bctt tweet="88% of marketers that use video in their marketing strategy reported that video gives them a positive #ROI (@HubSpot). Explainer videos and testimonials help create deep, trustworthy relationships with customers while boosting #SEO." quote="88% of marketers that use video in their marketing strategy reported that video gives them a positive #ROI. Explainer videos and testimonials help create deep, trustworthy relationships with customers while boosting #SEO." "]</div>
3537<!-- /wp:social-warfare/click-to-tweet -->
3538
3539<p>&nbsp;</p>
3540
3541<!-- wp:heading -->
3542<h2 class="wp-block-heading" id="h-blog-posts">Blog posts</h2>
3543<!-- /wp:heading -->
3544
3545<!-- wp:paragraph -->
3546<p>Blog posts are a staple of inbound marketing. A blog on your website is necessary for healthy SEO. A well-done blog has you regularly publishing content on relevant topics. Publishing opinion pieces in your blog humanizes your content strategy. Thought leadership is when industry experts and leaders share their insight and unique opinions on an industry or topic. In blog posts, thought leadership can be posted on your native blog or as a guest post on another publication. Either way, they must provide high value to what the audience wants (some other places you can use thought leadership are in videos, social media, webinars, and podcasts). Pinpointing exactly what your audience is looking for is the secret to crafting great blog posts. In educating your ideal customer, you’ll drive traffic to your website, build credibility, and evergreen posts will generate higher lifelong value.&nbsp;</p>
3547<!-- /wp:paragraph -->
3548
3549<p>&nbsp;</p>
3550
3551<!-- wp:heading -->
3552<h2 class="wp-block-heading" id="h-infographics">Infographics</h2>
3553<!-- /wp:heading -->
3554
3555<!-- wp:paragraph -->
3556<p>Infographics visualize the key insights from data aesthetically and concisely. <strong><a href="https://blog.hubspot.com/blog/tabid/6307/bid/33423/19-reasons-you-should-include-visual-content-in-your-marketing-d
3556ata.aspx" target="_blank" rel="noreferrer noopener">Forty percent of people respond better to visual information</a></strong> than to text. They are incredibly effective because of the ease to share them on a multitude of platforms. Infographics keep it short and sweet with digestible insights. Our infographic below breaks down when to use each of these content types in your content marketing strategy.</p>
3557<!-- /wp:paragraph -->
3558
3559<!-- wp:image {"id":2860,"sizeSlug":"large"} -->
3560<figure class="wp-block-image size-large"></figure>
3561<!-- /wp:image -->
3562
3563<!-- wp:heading -->
3564<h2> </h2>
3565<h2>Webinars</h2>
3566<!-- /wp:heading -->
3567
3568<!-- wp:paragraph -->
3569<p>Webinars are the perfect, interactive opportunity to break everything down to its core for your customer. People love to know all the steps to complete or understand a topic. That’s why there are so many lists and posts on “The Ultimate Guide to…” or “X Made Simple: A Step-by-Step Guide.” A webinar takes those posts one step further giving you the opportunity to talk directly to your audience about how to work a new software feature. You can also spotlight an industry expert for a Q&amp;A. Not only is your audience completely engaged, but you are also able to repurpose the recordings from these virtual events to video content for your website, blog, and/or social media.&nbsp;</p>
3570<!-- /wp:paragraph -->
3571
3572<!-- wp:heading -->
3573<h2> </h2>
3574<h2>Social media</h2>
3575<!-- /wp:heading -->
3576
3577<!-- wp:paragraph -->
3578<p>Now that you have a wide variety of content in your marketing strategy, social media is your best friend to get everyone to look at it. Over <a href="https://www.demandgenreport.com/industry-topics/demand-generation-strategies/2456-2013-b2b-buyer-behavior-survey-buyers-happier-but-still-waiting-to-engage-with-sales.html" target="_blank" rel="noreferrer noopener"><strong>70 percent of B2B buyers use social media as a research tool</strong></a> making it necessary to be present on the same platforms as your audience. Make your content ready for social media with a quick caption, hashtags, and mentions to relevant people (without spamming them).&nbsp;</p>
3579<!-- /wp:paragraph -->
3580
3581<!-- wp:heading -->
3582<h2> </h2>
3583<h2>Expand your content</h2>
3584<!-- /wp:heading -->
3585
3586<!-- wp:paragraph -->
3587<p>Once you’ve established a foundation for your content strategy with these types of content, you can expand into more niches and repurpose existing material into different formats. Remember those testimonials you got on video? Use that audio during a transition in your podcast or pull a quote and promote it in a social media graphic. Break down your long-form ebook into chunks of evergreen blog posts. Another form of testimonial is an in-depth case study. This can be presented in the form of an aesthetically-pleasing report using infographics to communicate the results and process of past solutions. You can round up numerous types of content in a nifty email newsletter or share it as educational material in email marketing campaigns.</p>
3588<!-- /wp:paragraph -->
3589
3590<!-- wp:paragraph -->
3591<p>With the versatile nature of content, it’s no surprise that <strong><a href="https://contentmarketinginstitute.com/wp-content/uploads/2018/10/Brief_GenerateDemandCreatAudience-1.pdf" target="_blank" rel="noreferrer noopener">90 percent of marketers say that they use content marketing to generate demand</a></strong> from buyers throughout the buying funnel.</p>
3592<!-- /wp:paragraph -->
3593
3594<!-- wp:paragraph -->
3595<p>Curious about how to make these types of content work for you? <a href="/contact"><strong>Reach out here for a quick chat.</strong></a></p>
3596<!-- /wp:paragraph -->`,seoTitle:"Content that’s worth your time | Hunter & Bard"},{id:"5044",title:"Green is the new black: Four reasons why cheapium is smarter than freemium",slug:"green-is-the-new-black-four-reasons-why-cheapium-is-smarter-than-freemium",category:"Enterprise Marketing",seoDescription:"Cheapium beats freemium for B2B SaaS monetization. Four reasons why low-cost paid tiers convert better than free plans for enterprise products.",excerpt:"As a consumer, I love Freemium. You are giving me something for free. I like free a lot. As a businessperson, I hate it. I would (almost) never advise any...",readTime:6,tldr:"",content:`<p>As a consumer, I love Freemium. You are giving me something for free. I like free a lot. As a businessperson, I hate it. I would (almost) never advise any company to offer a Freemium model. Instead I suggest Cheapium, a smaller payment that gets the customer to open her pocketbook and become invested in using your service.</p>
3597&nbsp;
3598<h2>Freemium is hard to convert</h2>
3599First off, a caveat. As a consumer I love Freemium. You’re giving me something for free - how can I not love that? If you disappear I’ll find something else to replace you. As a consumer I can’t think of a single service I pay for. Wait. I pay for Apple Music. That’s it. And that’s because I don’t have to buy singles anymore, and I was spending more on singles a months than I am now on Apple Music - so it made sense. If you’re not Apple, you’ll find me hard to convert to a paying customer on Freemium. And that's a free trial, not Freemium.
3600<blockquote><span class="_Tgc"><strong>"Freemium</strong> is a pricing strategy by which a product or service (typically a digital offering or application such as software, media, games or web services) is provided free of charge, but money (premium) is charged for proprietary features, functionality, or virtual goods." - <a href="https://en.wikipedia.org/wiki/Freemium" target="_blank" rel="noopener noreferrer">Wikipedia</a>
3601</span></blockquote>
3602As a business owner I prefer to pay for products. I value my time and the time of my clients. I need to know whatever I use for business will be around for awhile. I can’t guarantee that with some Freemium products. I pay for Dropbox because it holds all of our files and if it disappeared tomorrow we would be, well, okay because I also pay for iCloud and Google Drive to back everything up. But if they all disappeared at once I’d be in a panic. I also pay for HubSpot, Boomerang, Buffer, and a few other services. I want these companies to do well, and I’m happy to support them - they help me succeed at what I do.
3603
3604I don’t want to fall in love with something and then boom! It’s gone thanks to bad management and no money.
3605
3606However the numbers show plenty of people don't agree with me. Freemium has a conversion rate average of 2% - 4% to paid. That sucks. That also means you need some serious numbers to make money.
3607&nbsp;
3608<h2>Freemium sends the wrong signal</h2>
3609As a company you should also hate freemium. Why? People who don’t pay still expect the same level of service as those that do. And you won’t get the same feedback from people who pay as you will from those who don’t. It’s a different mindset. People who pay are thinking from a practical work mindset of what could help them at work that moment. Those who are getting things for free are thinking wistfully, as in “gosh this would be nice to have for free too”. Whose feedback do you want from these two scenarios? I know who I’d rather get.
3610
3611Ever hear the phrase, “Why buy the cow when you can get the milk for free?” Backwards connotations on dating aside, people generally (yes, I’m qualifying here) don’t value what they haven’t had to earn or pay for. By giving your product away for free you’re saying that part of your product has no value. And while that might be true - we’re sure it’s not, but it might - you don’t actually know what part of your product has no value. And giving it away for free doesn’t help you figure that out.
3612
3613Plus there’s no way to keep a business afloat if you aren’t actually selling anything. Saying you’ll make up for the free in volume doesn’t change the fact that free doesn’t pay.
3614&nbsp;
3615<h2>Cheapium gets you what you need</h2>
3616You need real feedback from people who are willing to pay. You need to find out who is actually willing to pay, as opposed to your friends who will all say they will because they love you and don't want to hurt their feelings - but will disappear when the actual bill arrives. You need to know who needs your product. And you need to know what other pains the paying people have, because you want to be able to make them more products and sell them more things.
3617
3618You can do that if everyone is using your product for free. That's why so many companies today are scrapping their Freemium model. Did you know that MailChimp added Freemium after 9 years? They didn't start with it. You can afford to give things away once you know what people are and aren't willing to pay for. Get there first. Start with Cheapium.
3619&nbsp;
3620<h2>Cheapium makes you feel good</h2>
3621You start getting real feedback. And you get this amazing dopamine rush every time someone purchases (unless no one does - and then you have a very clear signal about either how you market your product, or the product itself).
3622
3623Colin from <a href="http://www.equitydirectory.co/" target="_blank" rel="noopener noreferrer">EquityDirectory</a> pinged me to get me to sign up to his service. It’s a marketplace for startups to find people willing to work for equity. He wanted me as a service provider inside the service. I’m always into checking out new things so I accept his request to have a quick Skype call to better understand the service. In our call I asked him about his business model - he was planning on Freemium. I told him to switch it to Cheapium, and explained what Cheapium is.
3624
3625He did it. And got immediate results.
3626<blockquote>Hi Shira,
3627
3628It was nice to finally connect on the phone yesterday. Thanks for your time and the suggestion to go cheapium.
3629
3630I added a $1.99 ask as a question/offer toward the end of the application and the 2nd person through paid!
3631
3632So that made my day and wanted to share it with you.
3633
3634Hope you are having a great weekend!
3635Colin</blockquote>
3636The emails became more often.
3637<blockquote>... I think it's a really important lesson for founders who think freemium is the only way to go.
3638
3639I know it's going to make a big difference for me, even if it's just not spending any time with people who with never ever pay.</blockquote>
3640...and then <strong>BOOM!</strong>
3641<blockquote>Wow Shira!
3642
3643See screen shot
3644
3645I should have done this a month ago!
3646
3647Using Typeform and PayPal, I was able to introduce that into my automated workflow within a couple hours.
3648
3649THANK YOU!!!</blockquote>
3650And then he reached his first personal milestone
3651<blockquote>XXth paying customer just came in.
3652
3653Thank you so much for that suggestion. The psychological boost that comes from people paying (even $1.99) is invaluable...
3654
3655Then this came out of nowhere yesterday.
3656http://theamericangenius.com/entrepreneur/equity-directory-pairs-startups-with-talent-willing-to-work-for-equity/</blockquote>
3657Of course he still has to deliver on his promise of a good product. At least he’ll know the feedback he’s getting now will actually be helpful to bringing in more money.
3658
3659I still don't have you convinced? Here’s 3 more posts that agree with me:
3660<ol>
3661 	<li><a href="http://wistia.com/blog/monetizing-backwards" target="_blank" rel="noopener noreferrer">"Monetize Backwards" to Build a SaaS Business That Lasts</a></li>
3662 	<li><a href="http://blog.hubstaff.com/saas-pricing-free-plan-mistake" target="_blank" rel="noopener noreferrer">SaaS Pricing: Our Big Free Plan Mistake</a>/</li>
3663 	<li><a href="http://tigertiger.co/blog/ultimate-growth-hacking-sourcebook/#Scrap_Your_Free_Plan" target="_blank" rel="noopener noreferrer">Scrap Your Free Plan</a></li>
3664</ol>
3665Are you ready to make the change?
3666<div class="hs-blog-social-share"></div>`,seoTitle:"Cheapium vs. Freemium: 4 Reasons Cheapium Wins"},{id:"5055",title:"Calls to actions that actually convert",slug:"calls-to-actions-that-actually-convert",category:"Enterprise Marketing",seoDescription:"Most B2B CTAs fail because they ask for too much too soon. Learn how to write calls to action that match buyer intent and actually convert.",excerpt:"The objective of a Call to Action (CTA) is pretty self-evident. We’ve all been around the Internet a few times. We’re all familiar with the fact that when we...",readTime:5,tldr:"",content:`The objective of a <strong><a href="https://www.digitalreachagency.com/blog/cta-placement-a-big-piece-of-the-puzzle/">Call to Action (CTA)</a></strong> is pretty self-evident. We’ve all been around the Internet a few times. We’re all familiar with the fact that when we visit a website, pretty much any website, at some point or another, we’re going to be asked to take some sort of action. Buy something. Sign up for a newsletter. Give our prominent social endorsement through a like or a pin. So why, when it comes time to design CTAs for our own sites, do we draw a complete blank and all too often stick with the bland and ineffective “Click Here” or “Download This?”
3667
3668Fact is, most people don’t really think too hard about the CTAs on their sites or in their emails. They have their web designers set up whatever makes the most sense and is the easiest to create and then they move on. But with a little thought and consideration, you can craft CTAs that truly speak to your prospective clients and will radically increase your conversion rates.
3669<h2>CTA goals аnd objectives</h2>
3670First of all, let’s think long and hard about the goals and objectives for your CTAs. What exactly are you asking your readers to do?  Why do you want them to take that action? Depending on where your reader happens to be in your <strong><a href="https://hunterandbard.com/crafting-marketing-sales-funnel-works/">marketing sales funnel</a></strong>, the objectives of your CTAs are going to vary. Are you looking to gather email addresses? Trying to turn them into warm leads? Do you just want to inform them? Keep the goal in mind as you craft your CTA to make sure that it makes sense and that you’re driving the action you need. Having a “Sign Up Today” CTA at the very start of your marketing sales path doesn’t make any sense and won’t drive any conversions. Instead a “Learn more” CTA might tease your prospect in the right direction.
3671
3672Second, let’s consider what the benefit will be to the person clicking on your CTA. These days, people are constantly being asked for information so they’re getting more savvy about when it’s really worth giving it away. The wrong CTA at the wrong time is easy to pass up. The right CTA with something compelling in the offing is much harder to ignore.
3673<h2>CTA best practices</h2>
3674A great CTA is actionable in a clear and concise way. Bonus points if your brand personality shines through. You only get a few words, so you really have to make the best of them.
3675<h4>Start with an action word</h4>
3676People don’t always read everything you give them to read and they like to be told what to do. Or, rather, they like to know what’s expected of them. So, “We just published a brilliant white paper that will change your life” doesn’t let the reader know that they’re supposed to do something. “Download our new Whitepaper” does.
3677
3678Consider what you’re asking your visitors or readers to do, and then ask them to do just that. Make sure the action word you choose invokes some sort of emotional response like excitement, urgency, or fear of missing out.
3679<h4>Don't beat around the bush</h4>
3680It might feel a little crass to be bold by ordering prospective clients to take action, but, trust us, they’ll thank you. First, it makes you seem confident about what you’re offering, and second, it saves everyone time.
3681
3682Avoid “We’d be grateful if you’d consider downloading our infographic” and choose “Download our infographic now.” Concrete demand that motivates a concrete response.
3683<h4>Make it informative</h4>
3684Quick question for you. How many tabs do you currently have open? How many tabs do you think your readers have open? Probably quite a few, which means that you’re competing hard to keep their attention. What do you have to offer that will ensure they click on your CTA rather than clicking on the next tab they have open in their browser? Not only does any CTA you craft need to be actionable, but it really needs to clearly showcase what will happen when the reader takes that action.
3685
3686“Start saving money today” leaves little doubt as to what will happen when the prospects clicks through. “Plans and Pricing” is a whole lot more vague.
3687<h4>Be clever and personable</h4>
3688Is your SaaS company relaxed and fun? Formal and businesslike? Are you speaking to farmers? Engineers? Rocket scientists? Just because a CTA has to be concise doesn’t mean that it can’t reflect your company’s core personality. In fact, it really truly should. Pick colors that speak to your particular audience and words that will resonate and your CTA will convince more of them that the invitation to act really is meant for them.
3689<h4>Be time sensitive</h4>
3690Yes, it seems almost too clichéd to even consider, but there’s a reason many people use words that <strong><a href="https://www.wordstream.com/blog/ws/2015/02/20/call-to-action-buttons">infer a sense of urgency</a></strong> when crafting CTAs. People need to be moved to act and to act sooner rather than later. If not, they’ll happily put off until tomorrow what can be avoided today. “Now” “Today” “Before it’s too late” are all good incentives to get people clicking.
3691<h4>Get them to engage</h4>
3692There’s a new trend popping up that we highly encourage you to try. Instead of a simple CTA button that people need to click in order to get to a form that will then get them to what you’ve offered, consider having a form field embedded in the CTA. But don’t just use the form field to ask for their email (unless the goal is to sign up for your newsletter), instead, use the form field to start a conversation with them. Ask about their biggest pain point. Ask them to answer a question that you will then answer or address when they click. People can rarely resist answering an easy question (why else would Facebook quizzes do s
3692o well?) and they’re more likely to keep a conversation going than to start a fresh one on a new page.
3693
3694If your SaaS offers an email organization solution, maybe consider asking how many emails they receive in a day and then take them to a page that explains how you reduce that number to something manageable. If your service is all about simplifying scheduling, ask how many times they’ve double-booked themselves. Etc. Whatever you do, think of a simple to answer question that kicks off the conversation. You’ll be amazed at the response.`,seoTitle:"Calls to actions that actually convert | Hunter & Bard"},{id:"5056",title:"10 things you must know about content distribution",slug:"10-things-you-must-know-about-content-distribution",category:"Enterprise Marketing",seoDescription:"Creating B2B content is half the battle. Learn 10 content distribution tactics that get your enterprise marketing in front of the right decision-makers.",excerpt:"You’ve heard it before, from us and from countless others, content is a critical component of good marketing. You need a blog and you need marketing assets...",readTime:6,tldr:"",content:`<p>You’ve heard it before, from us and from countless others, content is a critical component of good marketing. You need a blog and you need marketing assets like whitepapers and case studies, but more importantly, you need someone to read all the great content you create, because, sadly, it’s not enough to just write it. For your content to have the impact you desire, you need to get it in front of the eyes of the people who will appreciate its value.</p>
3695
3696Why, again, is content all that important? Well, it’s important because <a href="http://contentmarketinginstitute.com/wp-content/uploads/2015/09/2016_B2B_Report_Final.pdf" target="_blank" rel="noopener noreferrer"><strong>a recent study by the Content Marketing Institute</strong></a> showed that 70% of consumers prefer getting to know a company through its content rather than through its ads. Sharing opinions, information, and company values through content is an amazing way to let prospects get to know everything you stand for long before they ever get on the phone with someone from your sales team.
3697
3698But first, they have to read it and it’s not enough to rely on SEO to drive them to your site. Let’s dig in to a few key things all B2B SaaS marketers need to know about content distribution.
3699<h3>Content distribution starts before content creation</h3>
3700Sure, you could write a few blog posts and throw the links up on Facebook and LinkedIn and hope for the best, but you probably wouldn’t get the results you need. Instead, you have to remember that all good things take time and conscious thought. Great content distribution starts long before the first word hits the page. Who’s your audience? What do they like to read? Where do they find the things they read? Answer these questions and you’ll be leaps and bounds ahead of the game.
3701<h3>Research goes beyond the topic at hand</h3>
3702Of course you need to research the topic you want to write about so you don’t come off sounding like a hack, but before you even get to that point, you need to be doing some digging. What’s the hot topic of the day in your field? What’s trending? What are people talking about and wondering about? It’s easier to get instant traction on timely posts than on evergreen content. Visit the sites and forums your audience gravitates to for content and see what’s being discussed. Then, don’t just parrot what’s already being said, add to the conversation in an engaging and useful way.
3703
3704By taking a look at your website analytics you can get key information about which sites are driving traffic to your content. Use that information to shape your content and your distribution strategy.
3705<h3>Content distribution is about more than just writing and sharing content</h3>
3706In #2 we recommended you take a look at traffic referral sources. If some of your traffic is coming from professional forums or networking sites geared towards your ideal audience, that’s great! Join the forums and networking sites, not to simply promote more content, but to become an active member of the community. When you take time to build these key relationships, you become a respected and valued resource to people who might eventually become your clients and who, in the meantime, will definitely enjoy consuming and help you promote your content.
3707<h3>There are three types of distribution channels: Owned, earned, and purchased</h3>
3708There’s no shortage of ways for you to distribute the content you create. Owned channels are the ones you control directly: your newsletter, Twitter stream, Facebook page, LinkedIn page, and your RSS feed. Earned channels (also known as “not-owned”) are the ones out of your control that allow you to share your content for free: sites where you read posts relevant to your industry, SlideShare, YouTube, Quora, etc. (Take a look at this post for <strong><a href="https://blog.kissmetrics.com/overcome-content-distribution/" target="_blank" rel="noopener noreferrer">a great breakdown of some earned channels</a> </strong>interesting for B2B marketers.) Paid channels are any channels where you can promote your content through paid ads. LinkedIn and Facebook ads do an impressive job of driving eyeballs to blog posts when well targeted and implemented. A great content distribution plan should contain an assortment of options from all three channels.
3709<h3>Your subscriber list is an important distribution tool</h3>
3710What could be better than a person who has indicated that they’re interested in reading what you have to share? A slew of people who have asked to receive your content. Whenever possible, do your best to capture email addresses from prospects so you can send them regular servings of highly relevant and engaging content through your newsletter. Make your newsletter easily shareable to increase the likelihood that people will share what you’re serving up.
3711<h3>External distribution equals greater reach</h3>
3712Your subscribers are a captive and valuable audience, but there are many other fish in the sea who don’t even know you have great things to say. Exter
3712nal distribution, whether through earned or payed channels often delivers quicker results and grants you access to a much bigger audience. It’s also a great way to grow your internal audience pool.
3713<h3>You can’t wing content distribution</h3>
3714Building an effective content distribution strategy takes lots of research, time, and effort. If you wing it every time you sit down to write something and promote it, you’d doing yourself and your company a huge disservice. Track the topics that resonate most with your audience. Monitor the sites that generate the most traffic. Explore new, interesting distribution channels and see how they perform for you. Promote your content systematically and purposefully and you’ll be rewarded with increased consumption.
3715<h3>Know your goals and objectives</h3>
3716The critical precursor to systematic and purposeful content distribution is that you must absolutely know the goals and objectives for your content strategy. Are you growing brand awareness? Driving traffic to your sales materials? Increasing your subscriber numbers? Trying to establish yourself as a leader in your field? Knowing the end result you’re aiming for allows you to hone both the content creation and the distribution of what you write so you can reach the goal you have in mind.
3717<h3>Reuse, recycle, repurpose</h3>
3718A great piece of content can take any number of hours to research and write. What a shame to settle for having it be seen by just a handful of people. Many blog posts can be promoted long after they’ve first been written. Whitepapers can be used as lead magnets or as promotional materials in email drip campaigns. A great article can be repurposed into a SlideShare slideshow or even turned into an infographic. For each piece of content that you write, you should always ask yourself how it could be repurposed or repackaged to extend its reach and shelf-life.
3719<h3>Always make your content easy to share</h3>
3720When something resonates with a reader, their first reaction, often before leaving a comment, is to share it with their audience. Make it easy for your content to take flight by making sure that social sharing solutions are readily available and simple to use. There are countless great plugins like <strong><a href="http://www.sharethis.com/" target="_blank" rel="noopener noreferrer">ShareThis</a></strong> or <strong><a href="https://sumome.com/" target="_blank" rel="noopener noreferrer">SumoMe</a></strong> that make sharing as easy as clicking a link. You can even craft tweets that can be shared with the click of a button with <a href="http://tweetthis.jtmorris.net/" target="_blank" rel="noopener noreferrer"><strong>TweetThis</strong></a>. And, don’t forget, sometimes the simplest thing to do is to ask people to share. Add a well worded CTA at the bottom of each post to remind people to share. You’d be amazed at how much it can influence readers.`,seoTitle:"10 things you must know about content distribution"},{id:"5057",title:"Does your content marketing plan cover the 4 core content types?",slug:"does-your-content-marketing-plan-cover-the-4-core-content-types",category:"Enterprise Marketing",seoDescription:"A complete B2B content plan requires four content types. Learn the framework for enterprise content marketing that covers awareness through decision.",excerpt:"Every month, when you sit down to start planning your editorial calendar for your online content, suddenly all those amazing ideas that you had have...",readTime:5,tldr:"",content:`Every month, when you sit down to start planning your <strong><a href="http://contentmarketinginstitute.com/2016/04/editorial-calendar-tips-tools-templates/">editorial calendar</a></strong> for your online content, suddenly all those amazing ideas that you had have disappeared. Typical right? Well I’m going to tell let you in on a trade secret. There is an unspoken rule about core content types that will help you simplify your editorial planning and help you maintain a healthy balance on your website.
3721
3722Your online content is the information that you are interested in sharing with your customers. It acts like pieces of a puzzle that come together to create a complete picture of your brand. Your content attributes comb
3722ine your product offerings, your branding style, and industry knowledge in order to make an impression on your audience, a potential lead, customers, decision makers and the influencers.
3723
3724You can analyze the success of your content through the data you gather and build upon the successes and learn from the failures. It is vital to track which content type works well with each audience type so that you can forward plan and reach your company’s goals.
3725
3726Too much of one type of content will eventually lose you visitors, so you need to vary the different styles on a regular basis. There are four core content styles that you should be including on a regular basis. These content types are developed to work together to build awareness, increase engagement, and produce results.
3727<h2>What are the four content types?</h2>
3728Mix up the following 4 core content types. Together they should meet your target audiences’ information needs. In the process, they’ll generate awareness and the type of engagement that should produce quality leads and sales.
3729<h3>Foundational content</h3>
3730The foundation of your business are your products and services, so it’s vital that the core part of your content be based upon your business. This content gives your visitors the information required to know more about your products/services and will be the foundation to inter-site links. As your services change this content should be updated to remain relevant.
3731
3732Foundation content answers all questions related to your business, your goals, and your targets.  Posts should be short and relevant separated into easy to read sections and updated on a frequent basis. One key benefit is that once foundation content has been written, repurposing it for different channels should be simple. This content is <a href="https://hunterandbard.com/beginners-guide-seo/">vital to your SEO</a>. These are pages that you hope will show up when people are searching for products or services such as those that you provide.
3733<h3>Customer-focused content</h3>
3734Customers always come first and their questions need to be answered. This is the easiest type of content to create as it simply refers to relevant questions that are asked on frequent basis. The goal here is to be able to point customers to a detailed answer and show them immediately that you are listening to their needs.
3735
3736While frequently asked questions are often a page on their own on a website, customer-focused content takes that a step further. You should not refrain from answering the negative questions that are posed by customers, in fact the opposite, the more transparent you are the more trust you will build with a customer.
3737
3738This content targets each customer persona and helps guide them through the buyer’s journey. Relevant topics should come directly from your customers and can be relayed to you directly or via the sales/customer service teams who experience the questions first-hand.
3739<h3>Industry news content</h3>
3740Your prospects and clients might find it to be a bit of a turn-off if you only focus on your business. It’s smart to show your audience that you understand the industry in which you are active by creating industry news content. Share your opinions on the latest news from your industry in a way that adds to the conversation and makes your site a worthwhile destination even to people not quite ready to buy into your business.
3741<h3>Top list content</h3>
3742Don’t we all love those posts that list the top 25 most interesting points about…? These posts are often crowd pleasers because they bring together a whole array of data and information into one large post. These posts should not be written on a daily, or even weekly basis, these should appear monthly to be able to collate enough industry information.
3743
3744These collation of data styled posts are often a huge hit with readers and are often the most shared posts. The reason they are shared so much is because they contain so much information, there is something for everyone. You should also be referencing influencers in the data which will help to give the post some validity and make it share-worthy.
3745
3746In the end, the goal is to create content that helps you build a fulfilling relationship with your prospective and existing clients. You want to be providing your audience with product related information and personalized content that meets their needs while aiming to attract new audience members through the creation of industry related news worthy content pieces. The mix of the content types will each capture the attention of your different audience types at different stages of the buyer’s journey.
3747
3748Quality content can be curated in various different styles saving you from creating numerous new pieces of content from scratch.  Recycling content will keep the content topic relevant and your costs for content creation down. Having the core content types available will mean that creating your editorial calendar never needs to be that dreaded moment of the month again.`,seoTitle:"The 4 Core Content Types Your Plan Needs"},{id:"5058",title:"The to-do list of an agile content writer",slug:"the-to-do-list-of-an-agile-content-writer",category:"Enterprise Marketing",seoDescription:"Agile content writing keeps B2B marketing responsive. Learn the daily workflow and priorities of an effective enterprise content marketer.",excerpt:"I’m most creative when I’m organized and when it comes to content writing creativity and organization are an absolute must. This means a trusty to-do list is...",readTime:4,tldr:"",content:`I’m most creative when I’m organized and when it comes to <strong><a href="https://hunterandbard.com/hb-insiders-guide-developing-personal-writing-style/">content writing creativity</a></strong> and organization are an absolute must.  This means a trusty to-do list is written at the beginning of every week and deadlines are notated.
3749
3750But by mid-week the posts are only ¾ written and since the work is in progress the to-do list hasn’t changed. Getting discouraged is not an option but it was time for a new tactic and Agile Development was exactly the change I needed.
3751
3752I know a bit about how Agile works, the stand up scrum meetings, sprint plannings, and iterative development, and I 
3752joke how my stand up scrums involve my talking to myself in my favorite chair. But I needed to learn more. I looked up the agile manifesto and I agreed with the principles I was reading.
3753
3754The <a href="http://agilemanifesto.org/" target="_blank" rel="noopener noreferrer"><strong>manifesto</strong></a> states:
3755
3756<em>We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:</em>
3757<ul>
3758 	<li><em><strong>Individuals and interactions</strong> over processes and tools</em></li>
3759</ul>
3760<ul>
3761 	<li><strong><em>Working software</em></strong><em> over comprehensive documentation</em></li>
3762</ul>
3763<ul>
3764 	<li><strong><em>Customer collaboration</em></strong><em> over contract negotiation</em></li>
3765</ul>
3766<ul>
3767 	<li><strong><em>Responding to change</em></strong><em> over following a plan</em></li>
3768</ul>
3769<em>That is, while there is value in the items on the right, we value the items on the left more.</em>
3770
3771My agile method is based on the last value, “responding to change over following a plan”. When writing it’s very easy to get stuck in the trap of “I chose <em>this</em> topic and I need to deliver it even though it’s totally not coming together.” I’ve been there. I’ve sat at my desk becoming more and more frustrated as my article sounded worse and worse. I took breaks and slept on it and it was still not working. I was following a plan when I should have been responding to change. Taking a step back to reevaluate the angle can suddenly clear your mind. So can scrapping the topic for the time being and coming back to it in a week or two. Sticking to the plan doesn’t work. It results in terrible work and dissatisfaction all around.
3772
3773My to-do list is based on making small quantifiable goals. My board is filled with colorful post-it notes and it seems daunting until you look closer. Here’s an example:
3774
3775These three notes each have a goal to combine for one ultimate task. Previously I would add to a to-do list “write agile to-do post” and then feel guilty as I sat there tapping my pen not knowing where to start. I would write, stop, research, write, stop, edit, research, you get the point. It would jumble in my brain and take so much time. My deadline would approach and I would be in that place where I start to mildly panic. One day my husband, who works in an Agile Development environment creating software, brought home the post-its and I got started.
3776
3777What I love about this is that when I choose a post-it and put it in the “In Progress” section, I can focus solely on that task. Because the task is small it goes quickly and before I know it my “Done” column has a post-it! By the time I’ve finished writing and editing I have 3 post-its done and I feel accomplished. Every time I get stuck because a job is too large I take a moment to break it down further.
3778
3779Agile to-do lists are not just limited to software and content writing. They work everywhere. Try this out when planning your next marketing campaign. There are so many details to work out; the campaign goal, where it will run, how long will it run for, etc. Breaking down the campaign into sections and the sections into tasks will create an organized system. Furthermore with everything broken down concisely and neatly it is easier to assign tasks. If one goal is separated into five tasks, five people can each take a part. Or one person can take three parts and another can take two. No matter how you divide it the work will get done. With the convenient “in progress” and “done” sections it is very clear what has been finished, what still needs work, and what has not yet been started.
3780
3781The beauty of an agile to-do list is how manageable it is. You always know where you stand with the work at hand. If a project has become too big for the divided sections then more can be added. An agile to do list is not stagnant, there is constant movement, constant change. Implement this methodology and you will increase your productivity. You will be agile.`,seoTitle:"The to-do list of an agile content writer | Hunter & Bard"},{id:"5059",title:"Facts, figures, quotes & statistics: Your secret 
3781content marketing weapon",slug:"facts-figures-quotes-statistics-your-secret-content-marketing-weapon",category:"Enterprise Marketing",seoDescription:"Facts and statistics make B2B content persuasive. Learn how to use data-driven proof points as your enterprise content marketing secret weapon.",excerpt:"Benjamin Franklin once observed , “Tell me and I forget, teach me and I may remember, involve me and I learn.” As an inbound marketer, it’s my responsibility...",readTime:3,tldr:"",content:`<p>Benjamin Franklin once <strong><a href="http://www.goodreads.com/quotes/tag/learning">observed</a></strong>, “Tell me and I forget, teach me and I may remember, involve me and I learn.” As an inbound marketer, it’s my responsibility to make sure my audience receives information in a way that they can use it, especially when the subject matter is complicated or highly technical. One surefire way to make sure your information is relatable is to compare or contrast it with a more familiar subject. I’ve heard it said that learning takes place the moment you link a new concept with an existing competency. By backing up your opinions with historical facts or interesting quotes, it makes the subject easier to comprehend. These touches also add richness to the narrative and provide an opinion other than the author’s point of view. Here are some great sources for finding facts, quotes, or visual infographics to enhance your writing.</p>
3782&nbsp;
3783<h2><a href="https://en.wikipedia.org/wiki/Main_Page">Wikipedia</a></h2>
3784<a href="https://en.wikipedia.org/wiki/Wikipedia"><strong>Wikipedia</strong></a> is a crowd-sourced modern encyclopedia that cover every topic you could imagine. The platform formally launched in January of 2001, and it rapidly grew to a grand total of over 37 million articles in over 250 different languages. Wikipedia is your go-to source for gathering data or the comprehensive history of any subject. Their site was once criticized for being too open and allowing errors to appear, so the site moderators instilled review practices and added requirements for citations to improve the integrity of the data.
3785&nbsp;
3786<h2><a href="https://scholar.google.com/">Google Scholar</a></h2>
3787According to <strong><a href="http://www.internetlivestats.com/google-search-statistics/">Internet Live Stats</a></strong>, "Google now processes over 40,000 search queries every second on average, which translates to over 3.5 billion searches per day." But many users are not aware of the specialty site Google created to support the academic community, aptly named Google Scholar. This specialty site allows users to specifically search for data and research studies, and tracks the number of times the data was cited to demonstrate credibility. Filtering the results by time range ensures you always have the latest research available.
3788&nbsp;
3789<h2><a href="http://www.brainyquote.com/">BrainyQuote</a></h2>
3790There are several sites that track famous or impactful quotes, but BrainyQuote is my favorite because it’s designed so well. The quotes are arranged on visual tiles that allow for quick scanning and comparisons. Their database is comprehensive and the search features let users browse by people, subjects, and even partial quotes. Several times I’ve set out to find a familiar quote and located one that I liked better. Sign up for the quote of the day to get funny, inspirational, or artistic quotes sent right to your phone.
3791&nbsp;
3792<h2><a href="http://www.nielsen.com/us/en/insights.html">Nielsen Company</a></h2>
3793Since the <a href="https://en.wikipedia.org/wiki/Nielsen_Media_Research"><strong>1950’s</strong></a>
3793, Nielsen set the standard in the marketing research field. Their original research method asked families to keep a written diary of their household’s TV watching patterns four time per year, which because known in the media industry as <strong>“<a href="https://en.wikipedia.org/wiki/Nielsen_ratings#Sweeps">sweeps</a>”</strong> weeks. As technology improved, Nielsen was able to offer automatic monitoring tools and cover a wider range of research categories. Nielsen is still considered the industry standard in consumer insights.`,seoTitle:"Facts & Stats: Your Secret Content Weapon"},{id:"5060",title:"The secret to sexy, clickable subject lines",slug:"the-secret-to-sexy-clickable-subject-lines",category:"Enterprise Marketing",seoDescription:"B2B email subject lines determine open rates. Learn the psychology behind clickable subject lines that get enterprise buyers to read your emails.",excerpt:"Writing great content is one thing, getting people to read it is a whole other kettle of fish. It truly doesn’t matter how well written and engaging your email...",readTime:4,tldr:"",content:`<p>Writing great content is one thing, getting people to read it is a whole other kettle of fish. It truly doesn’t matter how well written and engaging your email might be, if no one ever opens it, no one will ever get to enjoy the prose or be moved by the perfect call to action. It’s critical to spend almost as much time crafting engaging subject lines as you do crafting great emails.</p>
3794
3795Sorry to have misled you, but the secret to writing sexy, clickable subject lines is that sadly, there’s no specific secret. There are just a whole bunch of useful guidelines. We recommend you read them over and then give them a try. See what combinations work best for you. Test a few options. Test a few more. In the end you’ll figure out your own personal subject line secret sauce.
3796&nbsp;
3797<h2>Structure</h2>
3798<h4>1) 50 characters or less. (That's between 4 and 7 words)</h4>
3799No, it’s not a hard and fast rule. Yes, email services will deliver emails that have subject lines with more than 50 characters. Still, you should follow it, if only because most recipients won’t see anything beyond the 50<sup>th</sup> character.  The general rule of thumb is that the shorter the subject line, the higher the open rate.
3800<h4>2) Strong and relevant keywords</h4>
3801You only get a handful of words to move someone to open your email so you’d better make those words matter. Carefully choose keywords that will mean something to your reader all while remaining relevant to what the email contains.  It’s a fine balance, but one that often pays off. Place the keywords at the start of the subject line to ensure they get read even on the smallest of cell phone screens.
3802<h4>3) Watch your spelling and punctuation</h4>
3803The subject line for an email is the first line of contact for most potential customers. Just because it has to be brief and catchy doesn’t mean it shouldn’t also be classy. Spelling, grammatical, and punctuation mistakes will stand out like sore thumbs and might turn off more than one prospect.
3804&nbsp;
3805<h2>Content</h2>
3806<h4>4) Skip the spam</h4>
3807Your consumers are savvy and they can smell empty hyperboles from a mile away. So can Spam filters. Do yourself a favor and don’t fall into the clickbait spam trap or your email risks never arriving or being sent straight to the trash if it does. Andrea O’Neill of Mail Chimp put together <strong><a href="http://www.mequoda.com/articles/audience-development/subject-line-spam-trigger-words/">a helpful list of words to never ever use in a subject line</a></strong>. Take a look to see what words you should avoid like the plague.
3808<h4>5) Drive your readers to action</h4>
3809It helps if you consider the subject line as a call to action, the action being the act of opening the email. What subject line can you craft that will make the reader want to see what else you have to say?
3810<ul>
3811 	<li> Use verbs to create a feeling of urgency and excitement.</li>
3812 	<li>Ask questions to get people thinking and wondering.</li>
3813 	<li>Offer up a solution to a particular pain point.</li>
3814 	<li>Incite curiosity.</li>
3815</ul>
3816<h4>6) Be timely</h4>
3817By all counts, the average business person receives around 200 emails a day. If you want someone to do something right away, you’d better mention it in the subject line.
3818
3819Deadlines, timely information, urgent news… all of that should figure in the subject line if you don’t want to re
3819ceive a slew of “I’m so sorry I missed the deadline” emails three days later.
3820<h4>7) Be reliable</h4>
3821In order to build trust with your audience you have to consistently deliver. If your subject line promises something, your email had better deliver it. Clickbait subject lines only ever work once and do nothing for either your bottom line or your reputation.
3822&nbsp;
3823<h2>Test and other tips</h2>
3824<h4>8) Test your subject lines</h4>
3825Not sure what’s going to work best with your audience? Test a few options with a small segment of your list.
3826
3827It’s also helpful to see how your past open rates performed. What sorts of subject lines have done the best job of engaging your audience? Keep tabs of what works to help increase your open rate and engagement in the future.
3828<h4>9) Remember your audience is unique</h4>
3829We said it earlier, but it merits being said again, <strong><a href="https://hunterandbard.com/importance-knowing-audience/">no two audiences are alike</a></strong><a href="https://hunterandbard.com/importance-knowing-audience/">.</a> What works for one, might not work for another. So keep your people in mind. See what they like, and then consistently work to deliver that. It’s all part of relationship building, which, really, is what marketing is all about.`,seoTitle:"The secret to sexy, clickable subject lines | Hunter & Bard"},{id:"5061",title:"The secret strength of content marketing",slug:"the-secret-strength-of-content-marketing",category:"Enterprise Marketing",seoDescription:"Content marketing compounds trust and search authority over time. Why it outperforms paid channels for building B2B enterprise pipeline.",excerpt:"I went to a Superbowl party today where there were a bunch of start up people guys, and as often happens in situations like this, someone asked me what I did...",readTime:5,tldr:"",content:`I went to a Superbowl party today where there were a bunch of start up people guys, and as often happens in situations like this, someone asked me what I did for a living. Typically there will be some questions and the person will either <strong><a href="https://hunterandbard.com/content-marketing-plan-cover-4-core-content-types/">understand content marketing</a>,</strong> or they won't. This post is for those who don't really get what content marketing is, why companies do it, or how it's helpful in growing leads for companies. I'm going to use H&amp;B as an example so you can see how we eat our own food.
3830<h2>Pull marketing and the SERPs</h2>
3831SERPs stands for Search Engine Result Pages - in other words, where does your website rank when someone is searching for a term. For example, if you Google, "Shira Abel" you'll see Hunter &amp; Bard (the site you're reading this on) on the first page of results. It probably won't be first, as LinkedIn, Twitter, TNW, and General Assembly have my profile on them and have more content and as such higher rankings - but it will be on the page. Content marketing done well over time gets you to the top of the SERPs for the keywords (keywords are the search terms mentioned earlier) that your potential customers are searching for.  From there you funnel them to sales.
3832<h2>The path through the funnel starts with SEO</h2>
3833Your prospective customer searches for something. Typically it's a pain that your product will fix. If you have researched what they are searching for and understand your market you'll be able to easily come up with a list of keywords to work on ranking for. This list will be used later when you build out an editorial calendar and start creating content. By using these keywords in the Title, tags, and text of your post (preferably the first sentence) - along with writing interesting, well written content you're helping your prospects find the article that helps solve their itch when they search for it.
3834
3835We recommend at least 2 articles a week of great content. The more you blog, the higher the quality of content, the longer you keep it up consistently - the better.
3836<h2>Your article is found</h2>
3837Your prospect has searched for a phrase that's on your keyword list. It's a phrase that you've written multiple articles about and have even guest blogged about on other sites. They go to read it, it has the information they are looking for and they get to the bottom of the article. Hopefully, you'll have two important things on this page to engage your prospect:
3838<ol>
3839 	<li>Newsletter sign up</li>
3840 	<li>A CTA (Call to Action) at the bottom of the post that leads to a 
3840Landing Page</li>
3841</ol>
3842If they really like you they may want more information and will either go for the low commitment newsletter or the higher commitment CTA. A prospect that gives you permission to market to them is a prospect that should be cherished and respected. Please don't spam them with crap. If they signed up for the newsletter you can build mindshare by giving great content in your newsletter on a weekly, bi weekly, or monthly basis and offering various ebooks, case studies, or white papers via gated content on landing pages.
3843
3844If you're wondering what a CTA looks like, you can check one out at the bottom of this post. That will lead you to a landing page where we'll give you the promised content offered in the CTA, for the price of your personal information so that we can contact you later.
3845<h2>Let's say the CTA was chosen</h2>
3846This will take readers over to a Landing Page where the interested prospect will fill out some information, and for that information, they will get whatever content was promised. For example, we offer prospects:
3847<ul>
3848 	<li><strong><a href="../../../../com/hunterandbard/blog/relationship-marketing-workbook-hunterbard.html">The Relationship Marketing Workbook</a> </strong>(a guide to social media)</li>
3849 	<li><strong><a href="https://hunterandbard.com/behavior-engineering-canvas-framework/">The Behavior Engineering Canvas</a></strong> (taking personas to the next level)</li>
3850 	<li><strong><a href="../../../../com/hunterandbard/blog/hunter-bard-logo-look-book.html">Our Logo Look Book</a></strong> (in case you want to see our design)</li>
3851 	<li><strong><a href="../../../../com/hunterandbard/blog/rebranding-launch-list.html">The Rebranding Launch checklist</a> </strong>(for companies that might be searching about rebranding - hopefully, we'll get them before, and not after)</li>
3852</ul>
3853We have a bunch of ideas in the pipeline, but these are our landing pages so far. Each goes to gated content that asks for information and when that page is filled out I get a notification on my phone. If I'm awake - I'm calling. And it works, I've called someone immediately after to have them answer the phone laughing. Note - you can't call someone if you don't require a phone number on your form. Always require a phone number on the form.
3854<h2>We've been given information - now what?</h2>
3855Email steps up to the bat. Either through the newsletter already mentioned or through an automated drip campaign that's designed to deliver maximum value for the prospect. Keep in mind, this isn't spam. The email address has been given. With all of the noise and distractions out there it takes more than just filling out a form to close a deal. If you can't get them on the phone - email works.
3856<h2>How long does content marketing take to work?</h2>
3857This all depends. We've found an uptake on traffic from the first month of typically 20%. The leads increase as well. I do think that content is better for either high value sales or sales that rely on search engines to be found. One because thought leadership and good content are great for lead nurturing through the funnel and Two because content marketing pushes you up the SERPs.
3858<h2>The secret strength of content</h2>
3859Here's the thing though - the strength of content isn't just in the increased SERPs or the reciprocity it helps grow. It's not just about the social proof of your thought leadership. While all of those are awesome, the real strength of content is the fact that it <strong>grows in strength over time</strong>. If you blog consistently for 5 years it will be hard to take you out of the first page of the SERPs. You can stop all paid ads, and content marketing will still be a wall so insurmountable your competition will never be able to scale it. That's what we've found with our client <strong><a href="http://www.appsgeyser.com/blog/" target="_blank" rel="noopener noreferrer">AppsGeyser</a> </strong>who had some serious big guns after it in the past five years, and I'm sure it will work for you.`,seoTitle:"The secret strength of content marketing | Hunter & Bard"},{id:"5062",title:"The psychology of marketing",slug:"the-psychology-of-marketing",category:["Enterprise Marketing","Behavioral Science"],seoDescription:"Marketing psychology drives B2B buyer behavior. Learn the cognitive biases and emotional triggers that influence enterprise purchasing decisions.",excerpt:"There is a social science to marketing. We try to get inside the mind of our target market and using that information along with statistical research create a...",readTime:3,tldr:"",content:`There is a social science to marketing. We try to get inside the mind of our target market and using that information along with statistical research create a persona based on our results. The only way for people to remember us is by capturing their attention. We use catchy titles and eye grabbing pictures just to even get them to notice us. This all happens with quality marketing. It is followed by superior content. With great content you can achieve a positive and successful viral status. If you don’t have the content then you will not be able to make the impact you are working towards.
3860<h3></h3>
3861<h2>What is quality marketing?</h2>
3862Think about the last book you read. What made    you pick up that book from the shelf? If you are like me the picture caught your   eye and made you read the summary. They say “don’t judge a book by it’s cover” but let’s be honest, so often we put down books because of their cover, or don’t even pick them up. Now you’ve found your book, read the cover flap, and have decided you want to read this book. But the book doesn’t live up to its expectations and you put it down. That’s bad content hidden in quality marketing. But who would recommend a book they couldn’t even finish? For the whole package you need a great cover, a captivating summary, and a book you can’t put down. You need a good product that is worthy of marketing.
3863
3864But we haven’t mentioned one point. When the reader was browsing the book titles they were already in the genre of their choice. So let’s say you are marketing baby products, your content will be relevant to new parents, friends looking to buy baby gifts, or proud grandparents. If you’re selling high fas
3864hion business attire, you would expect a company’s CEO to be browsing your site, not a stay at home mom. This is why we create a persona of the customer. Your product chooses your target demographic and your mind gives them a personality. We delve into who they are and how they got there. We learn what they like and dislike and how they show that. Once we know that we can effectively create content. Our CEO, Shira Abel developed the <a href="https://hunterandbard.com/behavior-engineering-canvas-framework/">Behavioral Engineering Canvas</a>, BEC, to help us answers these questions.
3865
3866Getting into people’s heads is more than just personifying your customer, it’s about making your content interesting, readable, and attention grabbing. Think about pictures and how they capture the eye. Titles to make you laugh and want to know more. And even how to express your personality while maintaining a professional stance.
3867
3868Ask yourself why are people reading what you write? How are you making yourself relevant? Because relevance is what content is all about. If you did your homework correctly you would know that you are hitting your target market and your product is what they want. So what is it about your product that draws them in? There’s the relevance. There’s the moment where you grab your audience and you don’t let them go. There are different tools we use to capture their attention such as catchy titles, eye-grabbing pictures, and bullet points. But you need to have excellent content before we can begin.
3869
3870Psychology is the study of the human mind, especially in how it affects our behavior. Without psychology, marketing would not exist. It is a powerful tool that we need to understand. Understanding the psychology of marketing is the first to step to <a href="https://hunterandbard.com/marketing-debt-care/">top quality marketing</a>.`,seoTitle:"The psychology of marketing | Hunter & Bard"},{id:"5063",title:"The process of branding",slug:"the-process-of-branding",category:"Enterprise Marketing",seoDescription:"Branding is a strategic process, not a logo exercise. Learn the step-by-step framework for building a B2B enterprise brand that commands premium pricing.",excerpt:"The first thing you need to realize, is that you don't own your brand, your customers and employees do. Every interaction you have with a customer at any time,...",readTime:3,tldr:"",content:`<p>The first thing you need to realize, is that you don't own your brand, your customers and employees do. Every interaction you have with a customer at any time, and the feeling your customer is left with after that interaction,<strong><a href="https://hunterandbard.com/internal-branding-plus-five-ways-get-started/"> is your brand.</a></p></strong>.
3871<h2>How do you create the brand you want?</h2>
3872The most simple things are often the most complex. What do you want to be known for, in 5 words or less. Preferably in 3 words. Hunter &amp; Bard - we develop <a href="https://hunterandbard.com/">mindshare</a>. That's our tagline. It's what we do. We do it by helping companies clear out their marketing debt through inbound marketing, building up their branding and design.`,seoTitle:"The process of branding | Hunter & Bard"},{id:"5064",title:"The intrigue of a peculiar word choice",slug:"the-intrigue-of-a-peculiar-word-choice",category:"Enterprise Marketing",seoDescription:"Word choice shapes B2B brand perception. Learn how unconventional language and distinctive vocabulary make enterprise messaging memorable.",excerpt:"The joy of being a dreamer is that I see the world as a complex and colorful place where every moment is brimming with excitement and my next adventure is just...",readTime:4,tldr:"",content:`The joy of being a dreamer is that I see the world as a complex and colorful place where every moment is brimming with excitement and my next adventure is just around the bend. Or at least that’s what I tell myself. I’m not secretly Indiana Jones or anything, I just understand the power of the words I use to describe my reality.
3873
3874As I writer, I use this technique in my everyday world, as well as in my projects at the office. It’s my secret weapon against every writer’s nemesis – the dreaded writer’s block. I get stumped and meander off task, then get anxious and overthink the assignment. Time speeds up and the day slips away from me. It helps me to remember that I’m in control of the words I select, and I steer the course like a captain at the helm of a mighty yacht.
3875<blockquote>Simply stated, the art of writing boils down <i>to the words you choose to deliver your message.</i></blockquote>
3876One of my favorite movies is <strong><a href="https://en.wikiquote.org/wiki/Big_Fish">Big Fish</a></strong>, directed by the exceptional Tim Burton. The main character and hero of the movie, played by Albert Finney, is a world-class storyteller that recounts the key milestone in his life through whimsical, larger-than-life tales. His son is embarrassed and resentful of these stories, until a wise friend pointed out the flaw of being overly logical by <strong><a href="https://en.wikiquote.org/wiki/Big_Fish">saying</a> </strong>“Y'see, most men, they'll tell a story straight through— it won't be complicated, but it won't be interesting either. All the facts and none of the flavor."
3877
3878The element of flair needs to shine through in your writing. The words you incorporate are your paintbrush for filling the reader’s mind with awe and wonder. The words you select become the puppet master that deliberately leads the reader through a series of emotions, reactions, and personal reflections.  The words you include control whether the reader is inspired or deflated, motivated or over
3878whelmed, and even optimistic or hopeless. It seems like people innately get this in social circles. No one wants to be the dull person who has nothing new to talk about, we want to be the cool guy from sales who scored the big contract and then took the whole team out to celebrate. The facts are the facts, but the words you choose are the difference between the story being mind-numbingly dull or incredibly fascinating.
3879
3880The first question of any given Monday morning is “How was your weekend?” If I’m being honest, the ratio of time spent on chores versus leisure time is at least 70-to-30 on any given weekend. However, there’s no chance I’m leading with the reality of my ordinary moments. Working out, grocery shopping, and popping into Home Depot for a garden hose will not make the cut of my personal highlights reel. My socially appropriate update would sound more like this, “Thanks for asking, my weekend was fantastic! I caught a comedy show on Friday night, took my cousins to the theme parks on Saturday, and then met the girls for a champagne brunch on Sunday. How about you?” I’m convinced that half of the reason people take up hobbies or watch the latest movie is to tell others about it.
3881
3882Through the magic of editing, expand your basic thoughts into powerful, descriptive statements. Make announcements, declarations, and bold predictions. For example, consider the evolution of this sentence:
3883<ol>
3884 	<li>The chef prepared our meal tableside, and it was very tasty.</li>
3885 	<li>Our chef prepared a healthy meal for us tableside, and I enjoyed the flavor of the fresh herbs in the sauce.</li>
3886 	<li>Our award-winning chef wowed us by preparing our meal tableside, and the combination of the fresh-cut basil and balsamic reduction was the perfect complement to the roasted pork tenderloin served atop fingerling potatoes.</li>
3887</ol>
3888Which meal would you rather eat? Skim through your drafts and look for places to exchange the ordinary words for extraordinary phrases. Dynamic writing almost becomes a game of age appropriate Mad Libs. Was your chicken dish excellent, or was it mouthwateringly tender? Was your hotel fancy, or was it a 5-star resort with a luxurious spa? Was your vacation fun, or was it an experience of a lifetime?  You’ll be surprised how easy it is to spot the ineffective words once you start to look for them.
3889
3890Writing isn’t a skill that’s reserved for the uber creative among us. With a little practice and a thesaurus at your fingertips, anyone can become an accomplished writer. Don’t be afraid to do a brain dump, then polish up your adjectives on the next edit. When in doubt, just start typing. One of two things will happen- either you’ll practice your brainstorming and storytelling skills on an completely unusable piece, or more likely your research will spark an idea that leads to a fascinating, dynamic post.
3891
3892At Hunter &amp; Bard, we continually challenge ourselves to expand our stylistic writing skills and carefully select the most relevant words for your brand’s voice. If you’d like us to take a crack at writing for your audience, <a href="/contact">we’d love the opportunity to deliver a masterpiece.</a>  Until then, I’ll keep my head in the clouds.`,seoTitle:"The intrigue of a peculiar word choice | Hunter & Bard"},{id:"5065",title:"The importance of setting goals in marketing",slug:"the-importance-of-setting-goals-in-marketing",category:"Enterprise Marketing",seoDescription:"B2B marketing without goals is guesswork. Learn how to set measurable enterprise marketing objectives that align with revenue and pipeline targets.",excerpt:"When building a doghouse, do you need a hammer or a saw? You probably need both, but it’s likely that you need to use the saw first and the hammer second. The...",readTime:5,tldr:"",content:`<p>When building a doghouse, do you need a hammer or a saw? You probably need both, but it’s likely that you need to use the saw first and the hammer second. The modern business era is paradoxically plagued with both immense opportunity and the overwhelming distraction of having too many options to get there.</p>
3893
3894It is crucial to first identify your end goal, and only then evaluate which sequence of tools will get you there. This is true whether you are building a home for your four-legged pal or planning a digital marketing campaign. How do you know 
3894what’s right for your business? The answer of what tactics to choose and where to focus your time depends on what you’re trying to accomplish.
3895
3896In other words, the end goals of your project dictate the correct tools to get you there.
3897
3898One strategy for setting goals is the S.M.A.R.T. goals method, which is an acronym for specific, measurable, attainable, realistic and time-bound. The concept of setting S.M.A.R.T. goals dates back to the mid-1960’s, when <strong><a href="https://edwinlocke.com/">Edwin A. Locke</a></strong> and his research team studied the impact goals have on human activity. Locke’s research indicated, “Goals that are deemed difficult to achieve and specific tend to increase performance more than goals that are not, and people are more likely to be persistent and work through setbacks while pursuing a goal.”
3899
3900Another key tactic for setting goals is to write them down and review them regularly. A 10-year study of the graduates of Harvard’s prestigious MBA program were asked one simple question – “Have you set clear, written goals for your future and made plans to accomplish them?”
3901
3902The survey produced these surprising results:
3903<ul>
3904 	<li>84% had no specific goals at all</li>
3905 	<li>13% had goals but they were not committed to paper</li>
3906 	<li>3% had clear, written goals and plans to accomplish them</li>
3907</ul>
3908The research team followed up 10 years later, and learned the 3% of students that wrote down their goals and tracked their progress were earning 10x more than their classmates. Money isn’t the only motivation to write down your goals; athletes and Olympic champions also keep careful records of their efforts and progress towards a goal. By analyzing their actions and watching videos of their results, they look for ways to make minor adjustments that will improve their future performance.
3909
3910Here are a few ways that setting goals will impact your digital marketing campaigns:
3911&nbsp;
3912<h2>Set priorities and manage time</h2>
3913The first benefit of writing down and measuring goals is that it helps you set priorities and manage your time. It’s tempting to use a shotgun approach to marketing and do everything under the sun, or jump on the latest trend that catches your eye. Having a written plan helps you set priorities as it provides the benchmark to evaluate the best way to use your time and limited resources. Every activity is either making progress towards your goals, moving away from your goals, or spinning your wheels.
3914
3915Knowing your desired outcomes makes it a whole lot easier to decide which bucket you’re in, and it helps you say “No” to tasks and commitments which don’t support your goals. Another key benefit to stated goals is improving your time management, which includes both the practice of accepting or declining tasks followed by blocking out focused time on your schedule to complete them.
3916
3917If writing goals is good, scheduling goals is better. The act of scheduling forces you to examine the task, determine the resources, and estimate the time needed to complete it.
3918&nbsp;
3919<h2>The power of consistency</h2>
3920The easiest example that demonstrates the power of consistency is physical fitness. If your goal is to get in shape, it’s vital to set an intention, determine your course of action, gather any equipment or materials needed, and commit to a training schedule. Many people start out their exercise program strong, but the efforts taper off after a few weeks when the new practice becomes inconvenient. A fitness program doesn’t work if you skip a few weeks then try to cram several hours into one day. A fitness program also doesn’t work if you planned to do it, and then got busy and let it slide.
3921
3922The same theory works for your digital marketing campaigns. Communicating with your audience on a consistent basis makes the message feel natural and relevant, while hammering them with messages out of the blue feels disjointed and desperate. Just like physical fitness, the benefit of inbound marketing efforts builds over time so the work you’re producing today is an investment in the future success of your company.
3923&nbsp;
3924<h2>Uncover inefficiencies and outdated practices</h2>
3925Another way setting goals benefits your digital marketing campaigns is that measuring your progress will ignite creative thinking and lead to better solutions. It’s easy to get into a rut and conduct your marketing campaigns the same way year after year, but the reality is the digital market is constantly evolving and firms that don’t keep pace with these changes will find themselves missing opportunities or becoming obsolete. Setting time-bound goals provides the milestones to evaluate your team’s efforts throughout the year, and evaluate if there are any new techniques or technologies that would provide more impact.
3926
3927I hope these ideas put you on the path to setting impactful goals to grow your business, and here’s a link to <a href="https://www.hubspot.com/"><strong>HubSpot</strong>’s</a> goal-setting template to help you get started. Opportunity is abundant in the digital age, and there are countless ways to reach your target audience and form a meaningful bond with them through digital campaigns and social media platforms. Setting S.M.A.R.T. goals is an impactful way to manage your time, set priorities, make consistent effort, and make adjustments along the way.
3928
3929At Hunter &amp; Bard, we’re experts at setting digital marketing strategies that help your business thrive. Our agency helps you set goals and monitor to progress and achieve rapid results, and we also offer full branding services and visual identity design.<strong><a href="/contact"> Contact us today</a></strong> to speak with our digital marketing specialists and learn how the inbound marketing methodology can benefit your company today!`,seoTitle:"The importance of setting goals in marketing | Hunter & Bard"},{id:"5066",title:"Five reasons why blog list posts work",slug:"five-reasons-why-blog-list-posts-work",category:"Enterprise Marketing",seoDescription:"List posts drive engagement in B2B content marketing. Five reasons why numbered articles outperform other formats for enterprise audience attention.",excerpt:"Blogging is full of questions: Should I write this post? Is the title catchy enough? Do I have enough supporting material? How is the readability? Is the...",readTime:3,tldr:"",content:`Blogging is full of questions: Should I write this post? Is the title catchy enough? Do I have enough supporting material? How is the readability? Is the subject interesting? And many questions means many answers, a lot of which contradict each other. One such question is should I use lists when writing a blog post? It comes as no surprise that there is a camp that says No, numbered posts are <strong><a href="https://www.theatlantic.com/entertainment/archive/2014/11/clickbait-what-is/382545/">clickbait</a></strong> and as such bad copy. In this way clickbait and their eye grabbing promises have hurt numbered titles. Others feel the eye jumps around and content is not internalized. Some say the lists are shallow and repetitive. I say, numbered posts are great. Numbered lists work and here’s why.
3930
3931A post with lists is organized, making it easier to hold a discourse. This encourages sharing and creates greater opportunity to<a href="https://hunterandbard.com/marketing-and-sales-enablement-materials/"><strong> build your brand</strong></a>.
3932<h2>Organized</h2>
3933A list keeps your material orderly. Let’s be honest, we all skim posts before we decide if they’re worth our time reading. Our eyes jump around the page looking for interesting information before we make our decision. Lists attract attention. That’s where you want your readers to look since that’s where your key points are. The thing you need to remember is that a list on its own is not enough. A list is only as good as its content. So if the content isn’t engaging and informative the eye won’t settle and the post will not be read in its entirety. Quality wins over quantity.
3934<h2>Engaging</h2>
3935Lists broaden the discussion. Since a list is broken down into concise points readers can choose to disagree with the whole thing, agree with it all, or pick the points they like. Of course a reader can always choose to argue against an article in its entirety when it’s not laid out in points, but with a numbered system it is easier to explain which portion they do not agree with. Communication is clear when one reader argues a point and a second reader can see exactly where they have found this information. Readers do not need to count lines to confirm they are discussing the same thing.
3936<h2>Sharing</h2>
3937Because a sectioned post is easier to read it’s easier to connect and this translates into shares. When readers connect, either positively or negatively, they want to share with others. We all value our own voices and want to give over our opinions to the public. A post that’s created to promote dialogue encourages readers to pass it on to continue the discussion 
3937with a greater crowd.
3938<h2>SEO keywords</h2>
3939With each number comes a header. Each header can contain keywords since they are capturing the section subject in just a few words. And since search engine optimization is all about helping search engines find your work, keywords are always helpful.
3940<h2>People read listicles</h2>
3941Let’s face it, there’s a reason why so many sites have lists on them. People like them, so why be snobby and ignore what people like? Give the people the content they want. Lists it is!
3942
3943List posts are not the end all and be all of blogging. They are great for driving in traffic but are not necessarily as comprehensive as a post on a single subject. Use your numbers wisely. Readers are not coming for lists they are coming for content. Grab their attention with a list and keep their attention with quality blog posts.`,seoTitle:"Five reasons why blog list posts work | Hunter & Bard"},{id:"5067",title:"Framing matters – use your words well",slug:"framing-matters-use-your-words-well",category:["Frameworks","Behavioral Science"],seoDescription:"Framing shapes how B2B buyers perceive value. Learn how word choice and context influence enterprise purchasing decisions and brand positioning.",excerpt:"You’ve probably heard the saying “nothing happens in a vacuum,” but you’ve probably never considered it in the context of content marketing, and yet, you’d be...",readTime:4,tldr:"",content:`You’ve probably heard the saying “nothing happens in a vacuum,” but you’ve probably never considered it in the context of content marketing, and yet, you’d be surprised at how aptly it applies.
3944
3945When we explored <strong><a href="https://hunterandbard.com/heuristics-secret-sales-weapon-might-already-using/">heuristics</a></strong> we discussed the fact that people’s preconceived notions and past experiences color the way they interpret everything they see or hear. This is just as much true when it comes to content marketing as it does anywhere else. How you frame the message you are sharing makes all the difference in how people hear it.
3946
3947Framing is the act of putting the message you want to convey in a context that allows the intended audience to absorb and interpret what you’re saying exactly the way you want them to hear it. It’s what enables you to control the heuristics of your message. In short, getting your message across isn’t just about the words you choose, it’s about the way you say them.
3948
3949There are four core framing elements that, when mastered, allow you to control every aspect of how your message is transmitted – tone, placement, design, and, last but not least, the words you choose. Before you delve into the details of each of these parameters, we highly recommend you take the time to <strong><a href="https://hunterandbard.com/creating-useful-buyer-personas/">establish your buyer personas</a></strong> so you know how each of these elements can be tweaked to apply to your ideal client.
3950
3951Before you start crafting the marketing message you’d like to convey, it’s important to identify the audience you’ll be targeting and the frame you’d like to create for them. Will you be going with a value based proposition? Focusing on a financial benefit? Are you trying to convey a sense of urgency? Or establishing your expertise in the field? The following elements will make it possible for you to communicate exactly what you intend to infer.
3952<h2>1. Tone</h2>
3953Studies have shown that the tone used in a sentence can radically alter how a person reacts to the information they’re receiving. A patient told that a surgery has a 55% rate of success will be more likely to feel good about going under the knife than if he’s told that it has a 45% rate of failure. The facts are the same, but the perception changes drastically.
3954
3955When you’re crafting your messages, make sure to use the tone that resonates best with your ideal client while guiding them to the desired end result.
3956<h2>2. Placement</h2>
3957When and where a message is seen makes a world of difference in how it’s integrated. Even if an email is offering the best deal imaginable, if it’s delivered at 4:59pm on a Frid
3957ay, odds are high it’s going to get ignored.
3958
3959Optimizing the placement of all of your owned, earned, and paid content distribution based on what your particular audience expects can dramatically improve the way your message is seen and acted on.
3960
3961Note, time isn’t the only key factor when it comes to placement, which is why having established buyer personas is critical. If you know where your audience hangs out, you’ll be able to deliver messages in truly relevant locations. The more relevant the location, the better the message will be heard.
3962<h2>3. Design and images</h2>
3963You know that thing when you grab your phone to go look at a website and it opens insanely slowly and the font is teeny-tiny because the company never optimized for mobile and by the time the last flash image is done loading you’ve already decided that it doesn’t matter what they’re selling, you’re not buying it from them anyway because they still haven’t left 2005 and you need your item today, not in the past?
3964
3965You don’t even need to read the words on the homepage to know that the company behind them isn’t modern and sophisticated enough to meet your needs.
3966
3967That’s because design is one of the elements that guide people’s perception without them even realizing that they’re being influenced. Font size, image choice, color, and layout influence how people see your company and interpret your core messaging. <strong><a href="https://www.helpscout.net/blog/psychology-of-color/">Colors can subtly influence a person’s emotions</a></strong>. Layout draws a prospect’s focus to key elements while illustrating brand identity. And the right photo can put a person in the ideal frame of mind by evoking just the right emotion for the intended message.
3968
3969A professional graphic designer knows how to make design elements complement the<strong><a href="https://hunterandbard.com/marketing-and-sales-enablement-materials/"> brand messaging</a> </strong>to help drive the intended results.
3970<h2>4. Words. Words.</h2>
3971Finally, we come to the meat of any good piece of content: the words! As any good content marketer will tell you, words matter and you definitely can choose the wrong ones.
3972
3973Words carry a lot more baggage than people might think and many of them come with specific connotations that you might want to avoid. Some come loaded with double <em>entendres</em>, cultural nuances, or unnecessary formality. Whatever you write must contain words that mesh with your brand voice and tone while enhancing your message. Choose carefully and read aloud everything you write to make sure you catch anything that might sound off brand or strange.
3974
3975Take a look at the marketing materials you come across in the coming days. Can you identify the framing elements bolstering the core message?`,seoTitle:"Framing matters – use your words well | Hunter & Bard"},{id:"5068",title:"H&B Insider’s guide: Developing your personal writing style",slug:"hb-insiders-guide-developing-your-personal-writing-style",category:"Enterprise Marketing",seoDescription:"Develop a distinctive B2B writing voice. A practical guide to finding your style, tightening your prose, and sounding like a person, not a brand.",excerpt:"Today’s consumers are caught in the undertow of information overload. Business intelligence firm Domo reported, “Every minute, Google receives 4M search...",readTime:4,tldr:"",content:`Today’s consumers are caught in the undertow of information overload. Business intelligence firm <strong><a href="http://aci.info/2014/07/12/the-data-explosion-in-2014-minute-by-minute-infographic/">Domo</a></strong> reported, “Every minute, Google receives 4M search queries, Facebook users share 2.4M pieces of content, and Twitter fans send 277,000 tweets.” If you’re feeling overwhelmed, you’re not alone. The world is currently in a state of digital overload and data fatigue, leading readers to be extra selective with which articles they’re willing to read. How do you expect to get noticed? The secret for building a strong audience is by developing your personal writing style. If you write the same fluff that everyone else writes, there’s no incentive for readers to pay any attention. Think of the radio shock jocks of the past. They didn’t become popular by focusing on middle of the road topics that appeal to a the majority. They had brash, unpopular opinions and they focu
3975sed on controversial topics to create a media firestorm. They In other words, they took a risk and put themselves out there. Now, there’s no need to go to that extreme in your writing. The point is to avoid over-censoring yourself and turning your writing into a bland article of unimpressive filler space. Here’s how to find your true voice and develop your personal writing style.
3976<h2>Choose a content muse</h2>
3977A key to creating amazing content is to model your writing after other authors that you enjoy reading their work. This is particularly helpful if you’re new to writing, or if you’re assigned to write about an unfamiliar topics. Notice how they arranged their ideas and provided concrete examples. Are you drawn to their humor and wit, or did they have a clever way of jazzing up an otherwise boring topic?  Pay attention to the words they use. Do they use flowery adjectives to paint a picture, or do they use evocative words to elicit an emotional response? Does the author speak directly to their audience or write in the 3rd person? All of these stylistic choices impact the reader, regardless of the subject of the content piece. Just like public speaking, a writer must grab the reader’s attention immediately and entice them to read on. Another popular option is to conduct interviews of influential people or invite guest authors to share their ideas on your site.
3978<h2>Read as much as possible</h2>
3979I’ve heard several times that the key to becoming a better writer is to be an avid reader. Reading helps improve your writing by expanding your knowledge and making you more aware of your own writing styles. Reading also expands your vocabulary and reminds you to use a wider variety of words than you would in your daily life. In his novel Outliers: the Story Of Success, <strong><a href="https://www.goodreads.com/work/quotes/3364437-outliers-the-story-of-success">Malcolm Gladwell</a></strong> indicated, “Researchers have settled on what they believe is the magic number for true expertise: ten thousand hours.” This equates to about 10 years to build a proper expertise. A popular trend for 2016 New Year’s resolutions is to read a book per week, with the goal of being a much better informed person by the end of the challenge.
3980<h2>Hit the virtual classroom</h2>
3981The final way to develop your personal writing style is to brush up on your Journalism 101 skills. There are countless articles, online courses, and discussion forums devoted to writers. As much as writing is a personal process, there are definitely tips and formats that help you along the way. Strong writing has a distinct framework of how the topics are organized and how the information flows together. Add this to your unique voice and you’ve found the sweet spot of your writing style. It’s also important to make sure your work is free of grammatical errors because this is distracting to the reader and reduces your credibility instantly. Bookmark any sites that focus on grammar tips and reference them often when you’re unsure about the usage. Don’t forget to check the Thesaurus to find unexpected alternatives to <strong><a href="https://hunterandbard.com/intrigue-peculiar-word-choice/">common words</a></strong>.
3982
3983Developing your personal writing style is the strongest way to break through the clutter of the digital overload. Learning to write is a process and it takes time to develop your unique voice. The most important thing is to commit to spending the time to develop your craft. Some say it’s best to write at the same time every day, but the mechanics of the writing process are up to you. When did your writing skills come into their own? Comment below and let us know your best tips for becoming an amazing writer.`,seoTitle:"Developing Your Personal Writing Style"},{id:"5069",title:"Heuristics: The secret sales weapon you might already be using",slug:"heuristics-the-secret-sales-weapon-you-might-already-be-using",category:["Frameworks","Behavioral Science"],seoDescription:"Heuristics are the mental shortcuts B2B buyers use to make decisions fast. Learn the five that shape enterprise sales, and how to design for them.",excerpt:"People are not blank slates. Every buyer arrives with emotions, experiences, and shortcuts baked in. Heuristics are how you design for that.",readTime:6,image:vP,imageAlt:"Black-and-white archival-style portrait of psychologists Daniel Kahneman and Amos Tversky in conversation at a paper-covered desk, evoking their decades of collaborative work on heuristics and decision-making",editorialGrade:!0,tldr:"Enterprise buyers do not weigh every variable. They use cognitive shortcuts, heuristics, to decide who makes the shortlist and who gets cut. Five of them (Representative, Availability, Anchoring and Adjustment, Risk and Loss Aversion, and Affect) do most of the work in B2B. The marketing teams that win are not the ones with the loudest claims. They are the ones that design for the shortcut the buyer is already going to take.",faqSchema:[{question:"What are heuristics in marketing?",answer:"Heuristics are the cognitive shortcuts buyers use to make decisions quickly when they cannot (or do not want to) process every variable. In marketing, that means the images, copy, prices, testimonials, and design choices you put in front of a buyer are doing most of the persuasion work before the buyer ever weighs your features."},{question:"Which heuristic matters most in B2B?",answer:"In B2B, the Availability and Representative heuristics carry the most weight, because enterprise buyers operate on incomplete information and time pressure. They pattern-match to what they have recently seen (testimonials, awards, founder content) and to what looks like a company built for someone like them. If you are not in their head when the buying window opens, you are not on the shortlist."},{question:"How do I use heuristics without being manipulative?",answer:"The same heuristics that move buyers also protect them. Use them to make a real product easier to recognize, trust, and choose, not to disguise a weak one. If the thing you are selling does not actually solve the buyer's problem, every heuristic you trigger eventually backfires as churn, refund, or a bad reference call."}],content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>Buyers are not blank slates. Every prospect arrives carrying emotions, experiences, and preconceptions that shape the decision before your marketing ever speaks.</li><li>The <strong>Judgment Heuristic</strong> is the engine. Its four sub-types (Representative, Availability, Anchoring and Adjustment, and Risk and Loss Aversion) are the levers you actually have to pull.</li><li>The <strong>Affect Heuristic</strong> means mood eats logic. The same pitch lands differently depending on what the buyer is feeling when it arrives.</li><li>In B2B, Availability and Representative do the heaviest lifting: buyers shortlist the vendors they remember and that look like a fit for someone like them.</li><li>Heuristics are not a trick to dress up a weak product. They are how you make a real one easier to recognize, trust, and choose.</li></ul></div>
3984There’s a simple truth that philosophers have been waxing poetic about since the advent of philosophy. <em>People are not blank slates</em>. Everyone has a collection of emotions, experiences, and preconceived notions that they bring to the table no matter what they’re doing. That means that anyone who receives your marketing materials or comes to your website arrives already carrying a whole lot of baggage. The trick lies in putting it to work for you by using heuristics to craft the customer experience.
3985<h2>What are heuristics?</h2>
3986<strong>
3986<a href="https://www.psychologytoday.com/us/basics/heuristics" target="_blank" rel="noopener noreferrer">Psychology Today</a></strong> describes heuristics as the <a href="/resources/blog/cognitive-science-b2b-buying-why-your-company-needs-a-face" class="text-[#316263] font-bold underline">mental shortcuts</a> that allow people to solve problems and make judgments quickly and efficiently.
3987
3988Simply put, when you go into a store to make a purchase, you walk in with preconceived ideas that will help shape your decision. You know what colors you like, what you’ve tried before and how it turned out, what a certain price point means. Basically, unless you’re the mermaid in the ‘80s movie <em>Splash</em> who literally just crawled out of the ocean and finds herself in Manhattan’s shopping district baffled by everything on display <em>(Did we just age ourselves? Possibly.)</em> your collective life experience shapes any purchase you’re likely to make.
3989<h2>How can heuristics improve your SaaS marketing efforts?</h2>
3990People like to think that they’re more in control of their emotions and decisions than they really are, but, really, everyone is constantly being subtly manipulated into making choices. Images, colors, words, even fonts influence both mood and action. Carefully selecting your <a href="/services/marketing-strategy">marketing and website elements</a> allows you to prime potential customers into making the selection you want them to make. Think of using heuristics as marketing to your customers’ subconscious.
3991<h2>Different kinds of heuristics and how you can manipulate them to your advantage</h2>
3992<h3>The Judgment Heuristics</h3>
3993The heuristic that will most impact your marketing efforts is the <em><a href="https://sites.socsci.uci.edu/~bskyrms/bio/readings/tversky_k_heuristics_biases.pdf" target="_blank" rel="noopener noreferrer">Judgment Heuristic</a></em>, which is the subconscious way humans use the information they glean from their everyday lives and surroundings to solve the problem at hand. By manipulating the information at your potential customer’s disposal you can guide them to the end result you desire.
3994
3995Judgment Heuristics come in four different types, each equally useful in marketing situations.
3996<h3>Representative heuristics</h3>
3997Representative heuristics is the assumption that people make that a small sample will be representative of a larger population. Basically, people have the tendency to compare and attach what they’re seeing to what they know and then assume that probable outcomes will be similar to what they’ve seen in the past in similar situations. Using representative heuristics allows you to lull people into feeling like they “belong” or like you understand their needs without having to actually say so.
3998
3999If your target audience is farmers who need software to organize the distribution and sale of their crops, you want to show them images of farmers hard at work so they’ll instantly assume your product is tailor-made for farmers.
4000<h3>Availability heuristics</h3>
4001Availability heuristics is the assumption that people will make decisions and judgements based on what they remember rather than complete data. The more recent the information received, the more likely it will affect decision making.
4002
4003By displaying awards logos and testimonials on your website or in your emails, you can sway a potential customer into assuming that you do award-winning work worthy of lavish praise. Even though, on some level they know that past successes don’t necessarily lead to positive future outcomes, the information on hand will influence their thought process more than something they might have heard in the past.
4004<h3>Anchoring and adjustment heuristics</h3>
4005Humans are, in general, better at relative thinking than absolute thinking. That means that we make assumptions and choices by using a nearby starting point. That starting point is known as an anchor.
4006
4007So, if you have a product to offer, but feel like the high price point might be off-putting, offering a higher priced product, the anch
4007or, will make the one you really want to sell seem reasonable in comparison.
4008
4009Without realizing it, anchoring and adjustment heuristics affect you every time you go to a restaurant and take a look at the wine list. It’s a well-known fact among restaurateurs that no one ever buys the most expensive wine on the list, instead, they opt to buy the second most expensive so they don’t feel like a chump. Savvy restaurant owners know this and make sure they have a bottle that is priced just above the one they really want diners to choose.
4010
4011SaaS marketers might not be selling wine, but they can still use this principle to their advantage by bundling products, offering lifetime upgrades, or playing around with prices and experiences until they find the one that makes their star product the most attractive to customers.
4012<h3>Risk and loss aversion</h3>
4013While it’s been proven that the average consumer hates taking risks, it’s been equally proven that they’d rather take a risk than suffer a loss.
4014
4015Think of the Costco Effect. No one really ever needs a jumbo bag of microfiber car cleaning cloths or an incredible pair of leather sheepskin lined gloves. But when you’re standing there and know, without a doubt, that they won’t be there the next time you come, you find yourself unable to resist putting them in your cart.
4016
4017Marketers can play on this fear of losing out by offering limited deals, one-time offers for upgrades, or even products that are only be available for a short amount of time.
4018
4019Just before writing this post, I received an email offering me lifetime membership to a stock photo site for the low, low, low price of $49 instead of the usual $999, but the deal was only available to the first 100 people who nabbed it. You can bet that I was tempted. I’ve never, not once, purchased an image from this site, and yet, what a deal! Hard to hit delete on an email like that.
4020<h3>The Affect Heuristic</h3>
4021The other heuristic that should fuel your marketing and branding efforts is the <em><a href="https://bear.warrington.ufl.edu/brenner/mar7588/Papers/slovic-affect-heuristic-2002.pdf" target="_blank" rel="noopener noreferrer">Affect Heuristic</a></em>, which is the way humans use their current emotion to inform their decisions and actions.
4022
4023Someone who is annoyed is less likely to take the time to listen to a sales pitch, while someone who is feeling relaxed and happy might find a little more wiggle room in their schedule to hear out your sales guy.
4024
4025We’re not saying you should preface every customer interaction with pictures of cute kittens, but by taking the affect heuristic into account when <a href="/services/website-design">designing your site</a>, your email campaigns, even your sales pitches, can make a huge difference to your bottom line. With the right colors, images, design, and messaging you can manipulate your potential customer’s mood and feelings to craft an experience that will get them into the ideal frame of mind to entertain your offerings.
4026
4027Take a look at your site and your marketing materials. How will they affect your prospects on a subconscious level? How can you put heuristics to work for you?
4028
4029<strong>Heuristics are one facet of behavior engineering. Explore the full <a href="/resources/scale-framework">S.C.A.L.E. Framework</a> to see how the pieces fit together.</strong>`,seoTitle:"Heuristics: The Secret B2B Sales Weapon"},{id:"5070",title:"How to ask... and get what you want",slug:"how-to-ask-and-get-what-you-want",category:"Enterprise Marketing",seoDescription:"Asking effectively is a B2B marketing and sales skill. Learn persuasion frameworks that help enterprise professionals get buy-in and close deals.",excerpt:"Have you ever noticed how there are companies, and people, who just have a knack for getting everyone to say yes to whatever they’re asking? Well, good news,...",readTime:5,tldr:"",content:`Have you ever noticed how there are companies, and people, who just have a knack for getting everyone to say yes to whatever they’re asking? Well, good news, it’s not an innate gift, it’s actually, whether the person doing the asking knows it or not, simply the science of persuasion being put into effect.
4030
4031Yes, you read that right, just by understanding the mechanism of persuasion, you too can get clients to say “Yes, please!” instead of “No, thank you.”
4032
4033All 6 of Dr Robert Cialdini’s Principles of Persuasion are outlined in his book entitled <strong><a href="https://www.amazon.com/Influence-Psychology-Persuasion-Robert-Cialdini/dp/006124189X">“Influence: The Psychology of Persuasion”</a></strong> and are neatly summarized <strong><a href="http://www.influenceatwork.com/wp-content/uploads/2012/02/E_Brand_principles.pdf">here</a></strong>, but let’s take a look at how you can directly apply some of his principles to how you ask your clients to buy into what you’re offering.
4034&nbsp;
4035<h2>Before the science, three basic tenets</h2>
4036Before we get to the science of persuasion, let’s start with some basics. Learning how to ask for something is useless until you know exactly what you’re going to ask for. That might seem rudimentary, but you’d be amazed at how often people miss out on making a sale because their ask is inexistent or so wishy-washy or unclear that the client genuinely doesn’t know what they’re supposed to do.
4037<h4>So, first things first, you have to know what you want.</h4>
4038What’s the goal of your ask? What do you want people to say yes to? What are your long term and short term objectives?
4039
4040Figuring out this piece of the puzzle will make guiding your client there that much easier.
4041<h4>Second, you actually have to ask.</h4>
4042We’ll get to the how of this in a second, but we still have to cover the fact that you actually do need to ask if you want people to say yes. It almost goes without saying that if you never ask, the answer is always going to be no, but, all too often, people feel that asking for anything is an imposition, so they don’t. It’s a crucial rookie mistake.
4043
4044You’re offering a <strong><a href="https://hunterandbard.com">unique SaaS service</a></strong> that is designed to help someone reach their goals. Don’t ever feel bad about asking them to give it a try. <em>Not</em> asking is actually doing them a disservice.
4045<h4>Third, you have to ask well.</h4>
4046It’s simple, when you ask for something well, you get what you want more quickly. So let’s take a look at how to do just that, shall we?
4047&nbsp;
4048<h2>The science</h2>
4049<h4>Start with something huge, then ask for what you really want.</h4>
4050One of Robert Cialdini’s 6 Principles of Persuasion is called Reciprocation. It basically outlines the way someone feels indebted to someone else after they’ve received a gift. You give someone a freebie, and they’ll feel like they owe you something back, helping them feel more comfortable with buying something from you.
4051
4052Reciprocation also occurs when you ask for something and the person says no. They then feel like, having turned you down, they owe you a positive interaction, and often feel the need to say yes to the second thing you ask for.
4053
4054How do you work that to your advantage? You ask for something massive, like say, that the potential client purchase your entire suite of services at an outrageous price. Almost inevitably they’ll say no, and then will feel obligated to you to say yes when you offer something a little more reasonable.
4055
4056This works outside of work too. Shira uses this to her advantage when she travels and she knows her luggage might be a hair heavier than the allowed limit. She starts her interaction with the gate agent by offering them a mint or a piece of gum. By law, they have to say no, just in case someone might be trying to poison them. Then, when the subject of the luggage weight comes up, the gate agent waves it off, feeling the need to rectify the imbalance by offering a positive exchange.
4057<h4>Start with something tiny, and build up to what you really want.</h4>
4058The alternative technique is the polar opposite of the first. Instead of starting with something absurdly massive, you start with something so small, the person can’t possibly object.  This plays into the Commitment and Consistency principle. People don’t like to back out of deals and they’re significantly more likely to go through with something after they’ve agreed to it.
4059
4060So you start small, get their buy-in, and then you slowly increase the ask.
4061
4062At first, it’s a free trial. Who could possibly say no to that? Then you entice them with a slightly better version of the service, for just a little bit more money. And then you introduce another element to what your Sa
4062aS can do that they really should consider. Before long, you’re so far away from the free trial that you can’t even see its shadow, and they’re so far into having agreed to work with you that they can no longer back out.
4063
4064This concept works even better if it’s tied into a third of Cialdini’s principles, <strong><a href="https://www.investopedia.com/terms/s/scarcity-principle.asp">the Principle of Scarcity</a></strong>. Humans can’t resist a good deal, especially if they know the deal is about to expire. So, if one of your minor price increments is an “only if you sign up today” option, you increase the likelihood of receiving that positive response you’re asking for.
4065
4066Remember the last time you bought a cell phone or tried to sign up for cable? Odds are high you were exposed to all of these elements. Odds are just as high that you fell for each and every one of them. Now it’s your turn to put them to work for you and your SaaS company. And next time you need to renew your cable contract, you can smile knowingly as the sales person walks you through your options and you stand firm.`,seoTitle:"How to ask... and get what you want | Hunter & Bard"},{id:"5071",title:"How to avoid spam filters and get your emails delivered",slug:"how-to-avoid-spam-filters-and-get-your-emails-delivered",category:"Enterprise Marketing",seoDescription:"B2B emails that hit spam folders waste pipeline. Learn deliverability best practices to ensure your enterprise outreach reaches decision-makers.",excerpt:"As we outlined in earlier posts, effective e-mail marketing, such as drip campaigns , are an essential marketing tool for your B2B SaaS business, but if your...",readTime:3,tldr:"",content:`As we outlined in earlier posts, effective e-mail marketing, such as <a href="https://hunterandbard.com/drip-campaigns-need-use/"><strong>drip campaigns</strong></a>, are an essential marketing tool for your B2B SaaS business, but if your intended audience’s spam filter blocks your e-mail, then all of your efforts are for naught.  Since spam filters become increasingly complex as they evolve, it is of the utmost importance for you to know how to keep your messages from being “spammed” before you send them.  Follow the following tips to help ensure that your email makes it to its intended inbox.
4067<h1>1. Watch your subject line</h1>
4068We’ve discussed before how <a href="https://hunterandbard.com/secret-sexy-clickable-subject-lines/"><strong>a great subject line can be the determining factor in whether or not your e-mail gets opened</strong></a>. Great marketing campaigns grab and hold their audience’s attention, but is your subject line also garnering the attention of the spam filter?  When crafting your subject line, avoid the following:
4069<ul>
4070 	<li><a href="http://blog.hubspot.com/blog/tabid/6307/bid/30684/The-Ultimate-List-of-Email-SPAM-Trigger-Words.aspx#sm.0001vmd7f1106eplsze1uvrlqbdev"><strong>Trigger words</strong></a>: Spam filters block emails that contain words like “free”, “opportunity”, or “open”.  Carefully select your text to avoid being spammed.</li>
4071 	<li>Yelling: Don’t unintentionally yell at your recipients by using all capital letters in your subject line. It’s not professional and make your emails easily flagged as spam.</li>
4072 	<li>Excessive Excitement: Do not use exclamation points in your subject line.  Spam filters are designed to block symbols, not just words.</li>
4073</ul>
4074&nbsp;
4075<h2>2. Minimize and clean your links</h2>
4076While it is important to include links that drive your clients to your website, spam filters often block emails containing an overabundance of links. The same is true of email that contains the sloppy HTML code that occurs when copying and pasting a link from Microsoft Word, or emails that contain shortened URLs. Keep the number of links to a minimum and take the time to make sure that they are complete.
4077<h2>3. Formatting and spelling matters</h2>
4078Spam filters scan for inconsistencies in formatting. Avoid using too many colors in your text, background colors, and large and unusual fonts so you don’t trigger an overzealous filter. While you’re at it, be sure to check your spelling. Not only will a potential client find these errors to be unprofessional, spam filters may use spelling errors as a reason to block your email.
4079<h2>4. Image choice counts</h2>
4080Having great images in emails is important, but spam filters don’t always agree. Spam filters can’t read images, so if your e-mail contains large images with very little text, your e-mail might be detected as spam. Avoid this by limiting the image file size and the number of images that you are sending to your target audience.
4081<h2>5. Keep it legal</h2>
4082According to the <a href="https://www.ftc.gov/tips-advice/business-center/guidance/can-spam-act-compliance-guide-business"><strong>CAN-SPAM Act</strong></a> you are legally obligated to provide your physical address and to always include a way for your e-mail recipient to unsubscribe from your list. Not only will a spam filter block your e-mail if it does not contain this information, but you could face a hefty fine. Each individual email in violation of the CAN-SPAM Act may incur a penalty of up to $16,000.`,seoTitle:"How to Avoid Spam Filters and Get Emails Delivered"},{id:"10686",title:"What data-backed results to expect from ABM",slug:"what-data-backed-results-to-expect-from-abm",category:"ABM & Pipeline",seoDescription:"ABM delivers measurable B2B results. Learn what data-backed outcomes to expect from account-based marketing in enterprise sales pipelines.",excerpt:"Top-tier accounts expect superior service. Broad outreach and generic messaging doesn’t really speak to anyone and rarely hits home. Account-based marketing...",readTime:3,tldr:"",content:`Top-tier accounts expect superior service. Broad outreach and generic messaging doesn’t really speak to anyone and rarely hits home. Account-based marketing (ABM) targets the right people, at the right companies, with the right communication approach. ABM helps companies prioritize their marketing efforts by focusing on accounts that matter. This approach drives more closed wins and generates larger deals.
4083
4084ABM is a purpose-built strategy to help enterprises land high-value accounts. It optimizes and personalizes each touchpoint along your customer’s journey and produces significantly higher returns on investment than other marketing strategies. Successful ABM programs require working closely with your sales team and a grounded understanding of your target accounts.
4085
4086With ABM, you tailor your outreach to each prospect, increasing the likelihood of generating interest in your offering. In turn, this maximizes conversions and sales accepted accounts.
4087<h2>The ABM Process</h2>
4088Creating a list of high-value accounts demands a strategic approach. Launching a one-to-few email campaign requires expertise of your target audience. This means ABM marketers must know the demographics, communication preferences, most-used platforms, and other characteristics of each prospect. A successful ABM campaign includes the following:
4089<ul>
4090 	<li>Precise customer research</li>
4091 	<li>Strategic targeting</li>
4092 	<li>Personalized outreach</li>
4093 	<li>Sales and marketing alignment</li>
4094</ul>
4095The goal is to design a customer journey that is informative and helpful by targeting qualified leads who need your product or service and are most likely to buy it.
4096<blockquote><i> “Start thinking of ABM in terms of people and not accounts. If you manage people well, then half the game is already won.” </i>
4097<i></i>
4098
4099<i>– </i><a href="https://www.itsma.com/abm-experts-offer-advice-for-new-abm-ers/" target="_blank" rel="noopener"><i>Navin Rammohan</i></a><i>, Infosys.</i></blockquote>
4100<h2><span style="font-family: inherit; font-size: inherit; font-style: inherit; font-variant-caps: inherit;">Putting ABM data into context</span></h2>
4101Successful ABM requires increasing the cooperation between marketing and sales teams. This symbiosis improves overall business function and productivity, using collaboration and cooperation to meet mutually agreed-upon objectives. In fact, <a href="https://www.martechalliance.com/stories/account-based-marketing-stats-and-trends-for-2021">82% of B2B marketers say ABM greatly improves sales and marketing alignment</a>. Connected teams drive a shared, focused vision.
4102
4103According to a report by ITSMA and the ABM Leadership Alliance, <a href="https://abm.report/trending-news/b2b-brands-say-abm-produces-higher-roi">76% of marketers saw higher ROI with ABM</a> than with any other marketing strategy in 2020. This trend highlights the potential that ABM can bring to organizations that employ it correctly and validates why so many enterprises have adopted the strategy in recent years. In 2020, 91% of companies with 1,000+ employees either had a full ABM program in place (48%), a pilot program (23%) or plans to initiate one in the following six months (20%).
4104
4105In addition to growing adoption rates, there has also been a growth in budgeting for ABM programs. <a href="https://business.linkedin.com/content/dam/me/business/en-us/marketing-solutions/cx/2019/pdfs/b2b-marketing-jumpstart-guide-v2.pdf">According to LinkedIn</a>, 80% of marketers report increasing their ABM budgets. Those account on average for 36% of overall marketing spend and are growing 9% annually. This increase in investment in ABM is leading directly to higher ROI. In 2020, organizations saw notable business improvements with ABM in the following areas:
4106<ul>
4107 	<li data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1">Relationships (71%)</li>
4108 	<li data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="2" data-aria-level="1">Revenue (55%)</li>
4109 	<li data-leveltext="" data-font="Symbol" data-listid="2" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1">Reputation/brand (34%)</li>
4110</ul>
4111Furthermore,  research from  <strong><a style="letter-spacing: 0px;" href="https://abminaction.com/abm-in-the-news/study-80-of-marketers-say-abm-improves-customer-lifetime-value/" target="_blank" rel="noopener">TOPO</a></strong> shows that 80% of marketers reported improved  customer lifetime values, supported by <a style="letter-spacing: 0px;" href="https://blog.marketo.com/2017/03/introducing-the-definitive-guide-to-account-based-marketing.html" target="_blank" rel="noopener"><strong>Alterra Group’s findings</strong></a> that 84% of marketers believe ABM is a significant factor in retaining and expanding existing client relationships.
4112
4113ABM generates a plethora of opportunities for better business.
4114<h2>Create your ABM program</h2>
4115It’s never too late for B2B marketers to start thinking about designing and launching an ABM strategy. All successful, mature ABM programs had to start somewhere. Wider-reaching “spray and pray” marketing techniques are not effective for high annual contract value accounts, and prospects are more likely to ignore them. With the right data and approach, your organization can effectively target the companies that need your specific products and services. Start making the most of your marketing activities and <strong><a href="https://hunterandbard.folloze.com/accountbasedmarketingexperts?token=898ec8e6d8" target="_blank" rel="noopener">learn more about successful account-based marketing</a>.</strong>
4116
4117<img class="alignnone" title="Account based marketing strategy infographic from Hunter and Bard" src="https://hunterandbard.com/wp-content/uploads/2021/11/ABM-infographic-3-scaled.jpg" alt="Account based marketing strategy infographic from Hunter and Bard" width="746" height="2560" />`,seoTitle:"What data-backed results to expect from ABM | Hunter & Bard"},{id:"13446",title:"Thank you, Siemens!",slug:"thank-you-siemens",category:"Enterprise Marketing",seoDescription:"A thank-you to Siemens, one of the enterprise clients that trusted Hunter & Bard with their B2B positioning and go-to-market work.",excerpt:"Hunter & Bard was honored to be named one of Siemens’ Small & Diverse Supplier of the Year for 2021 . As an account-based marketing firm, our team has...",readTime:3,tldr:"",content:`<span data-contrast="auto">Hunter &amp; Bard was honored to be named one of </span><strong><a href="https://new.siemens.com/us/en/company/press/press-releases/usa/siemens-honors-2021-small-and-diverse-business-suppliers.html">Siemens’ Small &amp; Diverse Supplier of the Year for 2021</a></strong><span data-contrast="auto">. As an account-based marketing firm, our team has partnered with several divisions of Siemens to tackle one of the most important issues of our day: cybersecurity in industrial spaces, traffic, and software.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335551550&quot;:1,&quot;335551620&quot;:1,&quot;335559739&quot;:160,&quot;335559740&quot;:259}"> </span>
4118
4119<span data-contrast="auto">Being recognized for our hard work as well as our commitment to diversity means a great deal to our whole team. As a company, we’ve found that diversity brings a wider range of experience, which delivers better results. It fits with our personal ethos, and it is smart business. We are proud to work with clients who share this vision.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}"> </span>
4120
4121<span data-contrast="auto">Thank you, Siemens, for recognizing Hunter &amp; Bard. We value our relationship and look forward to our continued partnership.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}"> </span>`,seoTitle:"Thank you, Siemens! | Hunter & Bard"},{id:"16748",title:"Learn the S.C.A.L.E. framework for ABM - Start by securing goals",slug:"learn-the-scale-framework-for-abm-start-by-securing-goals",category:"ABM & Pipeline",seoDescription:"Step one of the S.C.A.L.E. ABM framework: securing goals. Learn how to set strategic objectives for your enterprise account-based marketing program.",excerpt:"Account-based marketing (ABM) can reap huge dividends for high contract value (ACV) deals, from increased engagement, to higher ROI, improved win rates, and...",readTime:5,tldr:"The S.C.A.L.E. framework gives ABM teams a repeatable structure for account-based marketing. Start by securing executive alignment on goals before building your program.",content:`<p class="reader-text-block__paragraph">Account-based marketing (ABM) can reap huge dividends for high contract value (ACV) deals, from increased engagement, to higher ROI, improved win rates, and high potential for cross-selling. It can also build trust and reduce friction and frustration in the sales cycle. With that said, ABM is not effortless —  it requires a lot of time to build relationships and trust. The investment required to design and build a strong ABM program means it isn’t the right solution for every product or market. As a marketer, it’s crucial to discern whether the likely payoff will justify the investment of your time, energy and focus.</p>
4122
4123<h2></h2>
4124<h2 class="reader-text-block__heading1">A framework that helps  — S.C.A.L.E.</h2>
4125<p class="reader-text-block__paragraph">We developed the S.C.A.L.E. framework to help companies grasp a fundamental understanding of the strategic ABM process. S.C.A.L.E. stands for:</p>
4126
4127<ul>
4128 	<li>Secure ABM program goals</li>
4129 	<li>Choose strategic accounts</li>
4130 	<li>Advance targeting tactics</li>
4131 	<li>Lead a seamless campaign</li>
4132 	<li>Evaluate progress, measure results</li>
4133</ul>
4134<p class="reader-text-block__paragraph">This blog post will focus on the S of S.C.A.L.E.: securing your program goals. This is the first in a series of posts that will further explain our framework.</p>
4135
4136<h2></h2>
4137<h2 class="reader-text-block__heading1">What kind of product fits the ABM paradigm?</h2>
4138<p class="reader-text-block__paragraph">ABM’s biggest strength lies in heightened focus and specificity of targeted materials and messaging. Putting that level of effort out only makes sense when you’re working with a limited, addressable customer base. It works well in situations with high annual contract value products, long and complex sales cycles, and with accounts that have expansion potential to over $1M in annual revenue. If you have a land-and-expand strategy, a large buying committee, and an account executive and sales engineer, the odds are ABM would be a great marketing strategy for you.</p>
4139
4140<h2></h2>
4141<h2 class="reader-text-block__heading1">What do I need to start an ABM campaign?</h2>
4142<p class="reader-text-block__paragraph">First, you need to <strong>secure your program goals</strong>. This is pretty straightforward: In addition to understanding your target, you need to define your own objectives before you lau
4142nch an account-based marketing campaign. You can’t improve what you don’t measure!</p>
4143
4144<h3></h3>
4145<h3 class="reader-text-block__heading2">What type of ABM works for your product?</h3>
4146<p class="reader-text-block__paragraph">Start out with a clear understanding of what <em>kind</em> of ABM relationship you’re pursuing.</p>
4147
4148<h3></h3>
4149<h3 class="reader-text-block__heading2">Strategic Account-based Marketing</h3>
4150<p class="reader-text-block__paragraph">This is outreach at a one-on-one level. Generally the list is targeting 1-10 companies and devising a marketing plan for each of them. This process is personalized, manual, and labor intensive, but the results are more than worth it under the right circumstances. You might select this tier of account-based marketing in situations when the objective is to change a perception, secure a larger deal, build relationships or identify opportunities — and when contract values are at least $1M per year.</p>
4151
4152<h3></h3>
4153<h3 class="reader-text-block__heading2">ABM Lite</h3>
4154<p class="reader-text-block__paragraph">Think less hyper-specific, with highly niche segmentation and account-targeted engagement. ABM Lite is useful for larger deals, increased deal velocity, and relationship building.</p>
4155
4156<h3></h3>
4157<h3 class="reader-text-block__heading2">Programmatic ABM</h3>
4158<p class="reader-text-block__paragraph">Perfect for identifying opportunities and generating marketing qualified accounts (MQAs). It’s also a great way to determine interest before investing deeper effort into an account. Depending on how much potential opportunity you identify in a programmatic campaign, you might discover it’s worth upgrading the approach to Strategic or Lite ABM.</p>
4159<img class="alignnone wp-image-3156 size-full" title="Programmatic ABM land and expand model by Hunter and Bard" src="https://hunterandbard.com/wp-content/uploads/2019/03/the-land-and-expand-graphic-e1600420117192.png" alt="Programmatic ABM land and expand model by Hunter and Bard" width="2243" height="1483" />
4160<div class="reader-image-block reader-image-block--full-width">
4161<div class="ivm-image-view-model ">
4162<div class="ivm-view-attr__img-wrapper ivm-view-attr__img-wrapper--use-img-tag display-flex ">
4163<h2>Account-based marketing metrics</h2>
4164<p class="reader-text-block__paragraph">Securing your program goals means establishing the right metrics.</p>
4165<p class="reader-text-block__paragraph">Align your desired outcomes and KPIs as you hone your strategy. Think about what actions show movement of accounts through the funnel from awareness to conversion.</p>
4166<p class="reader-text-block__paragraph">The metrics that matter to you depend on the type of campaign you’re running. You might be focused on creating net-new accounts or expanding existing ones. Some of our recommendations for program KPIs are as follows:</p>
4167
4168<ul>
4169 	<li> Email open rate</li>
4170 	<li>Click-through rate</li>
4171 	<li><a href="http://www.folloze.com/">Folloze</a> board visits</li>
4172 	<li>Content engagement</li>
4173 	<li>Accounts engaged</li>
4174 	<li>Accounts influenced</li>
4175 	<li>Deal velocity</li>
4176 	<li>Sales Accepted Accounts</li>
4177 	<li>Opportunities</li>
4178 	<li>Closed wins</li>
4179</ul>
4180<h3 class="reader-text-block__heading2">Benchmarks for net-new account campaigns</h3>
4181<p class="reader-text-block__paragraph">Realize, net-new means cold. The benchmark for a net-new email campaign open rate for a non-ABM campaign is just 1-2%. With more targeted lists and content, that benchmark is 5% for an account-based marketing campaign.</p>
4182
4183<h3></h3>
4184<h3 class="reader-text-block__heading2">Benchmarks for expanding-accounts campaigns</h3>
4185<p class="reader-text-block__paragraph">This could be a cold list, if you’re aiming for new people inside the account who don’t work with your company yet, or it could be a warm list if you’re sending emails to people you already sell to. The rate for a cold list is the same as net-new above.</p>
4186<p class="reader-text-block__paragraph">Selling more things to current customers takes less time and effort — and has a higher success rate — than selling new things to prospective customers. The benchmark for opens on current clients is higher, as it’s a warm email. Expect the open rate to be 10-20%, depending on the industry.</p>
4187<p class="reader-text-block__paragraph">Engagement is generally a particularly productive focus area, since the more relationship connections you forge within an account, the more potential opportunities you have to move a prospect into an opportunity. Pay attention to things like expanded reach within a key account, increase in meetings booked, or faster journeys through the pipeline. Whatever your focus, getting clarity on your own desired outcome is key to crafting your approach to an ABM campaign.</p>
4188
4189<h2></h2>
4190<h2 class="reader-text-block__heading1">Quality becomes quantity</h2>
4191<p class="reader-text-block__paragraph">People are busy. Enterprise prospects receive upward of 60 emails per week from suppliers. They’re much likelier to engage with messaging that speaks intelligently and directly to their needs. Emotional connections matter and are worth cultivating. A well-crafted ABM campaign enables exactly that: more lasting sales relationships, a smoother sales cycle, and revenue growth, via both increased conversion rate and increased average deal size. Ensuring sales, marketing, and customer success teams work synergistically through the entire process can massively impact revenue growth and cultivate trust.</p>
4192
4193</div>
4194</div>
4195</div>`,seoTitle:"S.C.A.L.E. Framework Step 1: Securing Goals"},{id:"16755",image:rP,imageAlt:"Strategic account selection framework for B2B account-based marketing",title:"Cho
4195osing strategic accounts - The S.C.A.L.E. ABM framework",slug:"choosing-strategic-accounts-the-scale-abm-framework",seoTitle:"Choosing Strategic Accounts: S.C.A.L.E. for ABM",seoDescription:"Select high-value target accounts with the S.C.A.L.E. framework. Align sales, customer success, and persona data to focus ABM on accounts that close.",category:"ABM & Pipeline",excerpt:"Once you've identified and secured your program goals , your next step in the SCALE framework is choosing strategic accounts . Because account-based marketing...",readTime:4,tldr:"Strategic account selection is the most important decision in any ABM program. This post covers how to choose accounts that are actually winnable — and worth winning.",content:`<div class="blog-key-takeaways"><h3>Account Selection Checklist</h3><ul><li>Have you aligned with Sales on target account criteria?</li><li>Have you filtered accounts through Customer Success for CLV signals?</li><li>Have you built ~10 personas per strategic account?</li><li>Have you segmented accounts by industry, size, and location?</li><li>Have you chosen the right ABM tier (Programmatic / Lite / Strategic)?</li></ul></div>
4196
4197<p class="reader-text-block__paragraph">Once you've identified and secured your <a href="/resources/blog/learn-the-scale-framework-for-abm-start-by-securing-goals">program goals</a>, your next step in the SCALE framework is <strong>choosing strategic accounts</strong>. Because account-based marketing (ABM) is highly customized, and as such, more labor-intensive (hint: higher people/agency budget), you should be deliberately strategic when using it.</p>
4198
4199<h2 class="reader-text-block__heading1">A framework that helps - S.C.A.L.E.</h2>
4200<p class="reader-text-block__paragraph">We developed the <a href="/resources/scale-framework">S.C.A.L.E. framework</a> to help companies get a fundamental understanding of the strategic ABM process. S.C.A.L.E. stands for:</p>
4201
4202<ul>
4203<li><strong>S</strong>ecure ABM program goals</li>
4204<li><strong>C</strong>hoose strategic accounts</li>
4205<li><strong>A</strong>dvance targeting tactics</li>
4206<li><strong>L</strong>ead a seamless campaign</li>
4207<li><strong>E</strong>valuate progress, measure results</li>
4208</ul>
4209
4210<p class="reader-text-block__paragraph">This blog post will focus on the C of Scale – Choosing strategic accounts. This is the second in a <a href="/resources/scale-framework">series of posts</a> that will further explain our framework.</p>
4211
4212<h2 class="reader-text-block__heading1">Size matters</h2>
4213<h3 class="reader-text-block__heading2">Programmatic ABM</h3>
4214<p class="reader-text-block__paragraph">Programmatic ABM campaigns reach a larger list of targets because accounts are targeted at the company size (large-enterprise versus mid-market, for example). Expect lists in the few hundreds to low single-thousands if you're emailing, and advertising size would be an audience of around 80-100k.</p>
4215
4216<h3 class="reader-text-block__heading2">ABM Lite</h3>
4217<p class="reader-text-block__paragraph">ABM Lite generates a narrower, more focused list than programmatic ABM because targeting starts at an industry level. Expects lists in the low hundreds if you're emailing, and advertising size would be 20-80k.</p>
4218
4219<h3 class="reader-text-block__heading2">Strategic ABM</h3>
4220<p class="reader-text-block__paragraph">Strategic ABM narrows the field even more by targeting the level of exact account(s) and/or specific job title(s). This could mean a list of as low as 10 and advertising could be incredibly focused. LinkedIn states, &#8220;The minimum audience size required to run an advertising campaign is 300 members.&#8221; &#8211; you'll be around there, depending on what your goal is for the campaign.</p>
4221
4222<h2 class="reader-text-block__heading1">Talk to Sales</h2>
4223<p class="reader-text-block__paragraph">Start by talking to sales. This team has the most immediate need of your services and will get the most benefit from a successful ABM program. Find the salesperson who is the friendliest to marketing and ask them to walk you through their life in sales. For example:</p>
4224
4225<ul>
4226<li>How is your work assessed?</li>
4227<li>What's your quota?</li>
4228<li>How long does it typically take you to close a deal?</li>
4229<li>How long is the process on average?</li>
4230<li>Who's in the buying committee?</li>
4231<li>What are the typical touch points?</li>
4232<li>What's needed to keep the process moving?</li>
4233<li>What &#8220;No's&#8221; do you see happening in the sales cycle?</li>
4234<li>How can marketing best help you?</li>
4235</ul>
4236
4237<p class="reader-text-block__paragraph">This will give you a broad list of accounts you should be aiming for. You can also search for look-alike companies.</p>
4238
4239<h2 class="reader-text-block__heading1">Talk to Customer Success</h2>
4240<p class="reader-text-block__paragraph">Take the list you got from sales and filter that through your customer success team.</p>
4241
4242<ul>
4243<li>Who are our highest and lowest value accounts?</li>
4244<li>Which ones have grown the most?</li>
4245<li>Who takes advantage of all we can offer?</li>
4246<li>Which accounts don't seem to &#8220;get it?&#8221;</li>
4247<li>Which traits should rule out an account?</li>
4248<li>Where do we already have an advantage?</li>
4249</ul>
4250
4251<p class="reader-text-block__paragraph">This information will help you narrow your list. Sales will prioritize who is the easiest to close. Customer success understands which clients get the most value from your offered solutions. It's the combination of the two that brings the highest customer lifetime value (CLV). Target the accounts that are identified by both groups.</p>
4252
4253<h2 class="reader-text-block__heading1">Build your personas</h2>
4254<p class="reader-text-block__paragraph">You should plan approximately ten target personas per account. At the one-to-one level, you can use not only firmographic data like company size and revenue, but psych
4254ographic data: values, interests, personality traits, and preferred communication style. Research individuals in your target range for granular data and insights:</p>
4255
4256<ul>
4257<li>What do they post on LinkedIn?</li>
4258<li>Do they have an Instagram feed? What's in it?</li>
4259<li>Are they on Twitter?</li>
4260<li>Overall, what is this individual truly interested in?</li>
4261</ul>
4262
4263<p class="reader-text-block__paragraph">Applications like <a href="https://www.crystalknows.com/">Crystal</a> can give you a lot of insights on how to sell to specific people based on their personality styles and traits. This allows you to craft your pitch accordingly:</p>
4264
4265<ul>
4266<li>Does your target seem to like storytelling or compelling visuals?</li>
4267<li>Do they prefer humor?</li>
4268<li>Do they appreciate directness?</li>
4269</ul>
4270
4271<p class="reader-text-block__paragraph">Based on psychographic insights, you can hone your messaging and deliver it in a tone that's likely to appeal to the recipient.</p>
4272
4273<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Recommended Next Step</p><h3>Enterprise Strategy</h3><p>Our Enterprise Strategy service aligns sales, marketing, and customer success around the accounts that matter most &#8212; so your ABM program targets the right accounts from day one.</p><a href="/services/enterprise-strategy" class="blog-inline-cta-link">Explore Enterprise Strategy &#8594;</a></div>
4274
4275<h2 class="reader-text-block__heading1">Segment your list</h2>
4276<p class="reader-text-block__paragraph">Once you've got a focused account list, start dividing it further so you can tailor your message as closely and specifically as possible to what a given company (and/or job title) is looking for.</p>
4277
4278<ul>
4279<li>What is its industry or vertical?</li>
4280<li>How big is the company?</li>
4281<li>How many employees does it have?</li>
4282<li>What's the size of its customer base?</li>
4283<li>Where is it located?</li>
4284</ul>
4285
4286<p class="reader-text-block__paragraph">This level of breakdown will enable you to segment and deliver customized messaging and visuals.</p>
4287
4288<h2 class="reader-text-block__heading1">No data, but you need a starting point?</h2>
4289<p class="reader-text-block__paragraph">Let's say you're launching a brand-new product and you don't have a historical knowledge base. The process is basically the same, but you'll be doing it with more guesswork and imagination. (It'll still help!)</p>
4290<p class="reader-text-block__paragraph">Make a broad list of your dream accounts. Make some educated guesses about who's likely in the buying committee. Create your ideal list. Segment your targets. And make a careful list of baseline assumptions. As you move through the process, you'll gauge responses and adjust accordingly.</p>
4291
4292<h2 class="reader-text-block__heading1">Continuous improvement</h2>
4293<p class="reader-text-block__paragraph">This is about incremental improvements. Getting better each time you try that compounds over time.</p>
4294<p class="reader-text-block__paragraph">Test and iterate. You'll get there.</p>
4295
4296<div class="blog-expert-verdict"><h3>Expert Verdict</h3><p>Account selection is the highest-leverage decision in any ABM program. Most teams over-invest in campaign execution and under-invest in choosing the right accounts. If you get this step wrong, no amount of personalization or ad spend will compensate. Align Sales and Customer Success early, build deep personas, and segment ruthlessly. The compounding returns start here.</p><p><strong>&#8212; Hunter &amp; Bard</strong></p></div>
4297
4298<h2>Strategic Summary</h2>
4299<ul>
4300<li><strong>Start with Sales alignment</strong> &#8212; understand quotas, deal cycles, and buying committees before selecting accounts.</li>
4301<li><strong>Filter through Customer Success</strong> &#8212; prioritize accounts with the highest lifetime value, not just the easiest to close.</li>
4302<li><strong>Build ~10 personas per account</strong> &#8212; use firmographic and psychographic data for hyper-relevant messaging.</li>
4303<li><strong>Segment by industry, size, and location</strong> &#8212; enable tailored content at every tier of ABM.</li>
4304<li><strong>Choose the right ABM tier</strong> &#8212; match your investment level (Programmatic, Lite, or Strategic) to the account's potential value.</li>
4305<li><strong>Iterate continuously</strong> &#8212; treat account selection as a living process that improves with each campaign cycle.</li>
4306</ul>`},{id:"16842",image:iP,title:"Advance targeting tactics - The S.C.A.L.E. framework for ABM",slug:"advance-targeting-tactics-the-scale-framework-for-abm",seoTitle:"Advanced ABM Targeting: The S.C.A.L.E. Framework",seoDescription:"Layer intent data, technographics, and engagement signals with the S.C.A.L.E. framework to target the B2B accounts most likely to buy.",imageAlt:"Advanced ABM targeting strategy and S.C.A.L.E. framework diagram",category:"ABM & Pipeline",excerpt:"You’ve identified your goals. You’ve developed your list of strategic accounts . The next step of your next step in the SCALE framework is advance targeting...",readTime:4,tldr:"Advanced targeting in ABM goes beyond firmographics. Learn how to layer intent data, technographics, and engagement signals to reach the right contacts at the right time.",content:`<div>
4307<div class="reader-article-content reader-article-content--content-blocks" dir="ltr">
4308<p class="reader-text-block__paragraph"><a href="https://hunterandbard.com/learn-the-s-c-a-l-e-framework-for-abm-start-by-securing-goals/">You’ve identified your goals.</a> You’ve developed your list of <a href="https://hunterandbard.com/choosing-strategic-accounts-the-s-c-a-l-e-abm-framework/">strategic accounts</a>. The next step of your next step in the SCALE framework is <strong>advance targeting tactics</strong>. This is the journey design phase of your program.</p>
4309
4310<h2 class="reader-text-block__heading1">A Framework that Helps - S.C.A.L.E.</h2>
4311<p class="reader-text-block__paragraph">We developed the S.C.A.L.E. framework to help companies get a fundamental understanding of the strategic ABM process. S.C.A.L.E. stands for:</p>
4312
4313<ul>
4314 	<li><strong><span class="tvm__text--legacy-publishing-emphasis">S</span></strong>ecure ABM program goals</li>
4315 	<li><strong><span class="tvm__text--legacy-publishing-emphasis">C</span></strong>hoose strategic accounts</li>
4316 	<li><strong><span class="tvm__text--legacy-publishing-emphasis">A</span></strong>dvance targeting tactics</li>
4317 	<li><strong><span class="tvm__text--legacy-publishing-emphasis">L</span></strong>ead a seamless campaign</li>
4318 	<li><strong><span class="tvm__text--legacy-publishing-emphasis">E</span></strong>valuate progress, measure results</li>
4319</ul>
4320<p class="reader-text-block__paragraph">This blog post will focus on the A of Scale – <strong><span class="tvm__text--legacy-publishing-emphasis">A</span></strong>dvance targeting tactics. This is the third in a series of posts that will further explain our framework.</p>
4321
4322<h2 class="reader-text-block__heading1">How to start designing your tactics</h2>
4323<p class="reader-text-block__paragraph">The ideal first step is to reverse-engineer your platinum closed-wins by using your analytics platforms to review the path your top accounts took before closing.</p>
4324<strong>1.Which parts of your website did they visit?</strong>
4325
4326<strong>2.What emails did they receive, and which ones did they open?</strong>
4327
4328<strong>3.How many meetings did you have, and what was the focus of those meetings?</strong>
4329
4330<strong>
43304.How long was the sales cycle end-to-end?</strong>
4331
4332<strong>5.Was the process easy or difficult?</strong>
4333
4334<img class="alignnone size-full wp-image-16863" src="https://hunterandbard.com/wp-content/uploads/2022/05/[email protected]" alt="" width="2400" height="1600" />
4335<p class="reader-text-block__paragraph">Once you’ve mapped this out for some of your best closed-wins, you’ll see patterns emerge. You can use these patterns to craft the buyer’s journey. Do a flow-chart of the ideal journey and watch to see which accounts take that journey verses another route. By tracking the steps each targeted account takes you know where to put more effort in the future. Keep in mind, this journey can change. We’ve had 2 years of no events, but events are now coming back – so that should be re-introduced to the journey. Always be testing different tactics to see what is working best at what time, and go back to test old tactics to see if they are working again after a lull.</p>
4336<p class="reader-text-block__paragraph">Mapping and tracking also helps generate ideas for future sales enablement materials, to develop new tactics to encourage engagement, and to craft future messaging utilizing emotional tone and trigger-words.</p>
4337
4338<h2 class="reader-text-block__heading1">Focus Your Messaging</h2>
4339<p class="reader-text-block__paragraph">Consider creating a messaging brief for each persona. In this brief, consider:</p>
4340
4341<ul>
4342 	<li>Who are you targeting?</li>
4343 	<li>What problems do they need solved?</li>
4344 	<li>What approach is most likely to get their attention?</li>
4345 	<li>How do you want them to feel?</li>
4346 	<li>What action do you want them to take next?</li>
4347 	<li>What trigger words will move them to action?</li>
4348</ul>
4349<img class="alignnone size-full wp-image-16871" src="https://hunterandbard.com/wp-content/uploads/2022/05/[email protected]" alt="" width="2400" height="1601" />
4350<p class="reader-text-block__paragraph">This brief should be shared with the rest of your marketing team as well as your sales team. Your sales team is a valuable source of insight in this phase as they have direct exposure to customers, and they may have personal insights your analytics tools might not capture. Getting feedback also helps with alignment and buy-in from the various teams.</p>
4351<p class="reader-text-block__paragraph">Your approach will vary according to the level of ABM you’re using. For example, in a strategic ABM campaign, you’ll create completely custom copy for sales enablement tools such as an eBook or an infographic or webinar. A strategic ABM campaign speaks as specifically as possible to the needs of an individual or a small group within your target company.</p>
4352<p class="reader-text-block__paragraph">In an ABM Lite campaign, you’re targeting an industry, sector, or job title, and you can craft focused materials that speak to their needs without getting into the granularity of a one-to-one situation. Your eBook won’t be custom written for each specific target account (other than at the address level), but for companies / industries / titles with similar needs.</p>
4353<p class="reader-text-block__paragraph">At a programmatic ABM level, you still focus the messaging, but is less targeted than the two previous campaigns. At the programmatic level, your sales enablement materials might address solving a specific business problem for enterprise of a given size.</p>
4354
4355<h2 class="reader-text-block__heading1">Energy goes where there's clarity</h2>
4356<p class="reader-text-block__paragraph">Make sure there’s alignment between marketing and sales on definitions. There should be an agreement on terms such as Marketing Qualified Accounts, Sales Qualified Accounts, and Opportunities. There is a form of “handover” in most organizations from MQA to SQA – but with ABM programs there should be a regular meeting to discuss the accounts in the SQA and Opportunity stage so that marketing can supply materials that smooth and speed the sale and help Sales either win over or neutralize the opposition in the target account.</p>
4357
4358<h2 class="reader-text-block__heading1">Marketing never stops</h2>
4359<p class="reader-text-block__paragraph">Feedback doesn’t end with the closed-win. Marketing should work with Customer Success post-sale to help the account expand. People want to work with those who are there for them even after the sale closes, and they remember those who drop-off after the paperwork is done. Those accounts are less likely to renew. As such, marketing should never stop. By looking at each account as a marathon, instead of a sprint, you'll raise trust, reciprocity, and ultimately - Customer Lifetime Value.</p>
4360
4361</div>
4362</div>
4363<div class="reader-flag-content__wrapper mb4 clear-both"></div>`},{id:"17178",title:"SWAG appeal",slug:"swag-appeal",category:"Enterprise Marketing",seoDescription:"Branded swag drives B2B engagement when done strategically. Learn how enterprise companies use promotional merchandise to build lasting impressions.",excerpt:"Almost every marketer I know has a thing for good SWAG. Even if they don't ever touch events, great branding holds a magical appeal to us. The bright and shiny...",readTime:3,tldr:"",content:`Almost every marketer I know has a thing for good SWAG. Even if they don't ever touch events, great branding holds a magical appeal to us. The bright and shiny thing done well.
4364
4365<img class="size-medium wp-image-17185 aligncenter" src="https://hunterandbard.com/w
4365p-content/uploads/2022/08/D334DCD3-64CD-414E-BFED-97E790959FC1_1_105_c-300x225.jpeg" alt="" width="300" height="225" />`,seoTitle:"SWAG appeal | Hunter & Bard"},{id:"17227",title:"Lead a seamless campaign - The S.C.A.L.E. framework for ABM",slug:"lead-a-seamless-campaign-the-scale-framework-for-abm",category:"ABM & Pipeline",seoDescription:"Step four of the S.C.A.L.E. ABM framework: leading seamless campaigns. Orchestrate multi-channel enterprise ABM campaigns that engage buying committees.",excerpt:"Now that we have covered the strategic planning , preparation and tactic creation portions of the S.C.A.L.E framework, it’s time for the “L” — launching and...",readTime:4,tldr:"A seamless ABM campaign requires tight alignment between sales, marketing, and the account team. This post covers the operational mechanics that make multi-touch campaigns work.",content:`<p class="reader-text-block__paragraph">Now that we have covered the <a href="https://hunterandbard.com/learn-the-s-c-a-l-e-framework-for-abm-start-by-securing-goals/">strategic planning</a>, <a href="https://hunterandbard.com/choosing-strategic-accounts-the-s-c-a-l-e-abm-framework/">preparation</a> and <a href="https://hunterandbard.com/advance-targeting-tactics-the-s-c-a-l-e-framework-for-abm/">tactic creation </a>portions of the S.C.A.L.E framework, it’s time for the “L” — launching and leading your ABM campaign.</p>
4366<p class="reader-text-block__paragraph"> At this stage, having a close relationship with the sales team pays dividends. To ensure a seamless campaign, it’s essential that sales and marketing are working closely together. This may seem obvious, but the right hand needs to know what the left hand is doing. If your sales and marketing teams aren’t aligned, they could undermine the others' efforts, making the company look like a hot mess and potentially losing a deal. It’s essential for marketing and sales to take the time to understand the other’s efforts and expectations during the campaign to make sure that your strategy, tactics and goals are all aligned.</p>
4367
4368<h2 class="reader-text-block__heading1">A Framework that Helps - S.C.A.L.E.</h2>
4369<p class="reader-text-block__paragraph">We developed the S.C.A.L.E. framework to help companies get a fundamental understanding of the strategic ABM process. S.C.A.L.E. stands for:</p>
4370
4371<ul>
4372 	<li><strong><span class="tvm__text--legacy-publishing-emphasis">S</span></strong>ecure ABM program goals</li>
4373 	<li><strong><span class="tvm__text--legacy-publishing-emphasis">C</span></strong>hoose strategic accounts</li>
4374 	<li><strong><span class="tvm__text--legacy-publishing-emphasis">A</span></strong>dvance targeting tactics</li>
4375 	<li><strong><span class="tvm__text--legacy-publishing-emphasis">L</span></strong>ead a seamless campaign</li>
4376 	<li><strong><span class="tvm__text--legacy-publishing-emphasis">E</span></strong>valuate progress, measure results</li>
4377</ul>
4378&nbsp;
4379<p class="reader-text-block__paragraph">This blog post will focus on the L of S.C.A.L.E. – Leading a seamless campaign. This is the fourth in a series of posts that explain our framework.</p>
4380
4381<h2 class="reader-text-block__heading1">Find your people</h2>
4382<p class="reader-text-block__paragraph">Getting started in ABM requires a level of change management in your organization. It’s hard conceptually to go from thousands of (often crappy) leads to a few dozen strategic ones. This shift can make a sales team nervous, especially now that we’re heading into an economic downturn.</p>
4383<p class="reader-text-block__paragraph">This means you need to find the right partners to be successful with ABM on your sales team. It’s typically obvious who the friendly salespeople are, and the ones most likely to be a real partner in an organization’s first ABM test run.</p>
4384<p class="reader-text-block__paragraph">Change management is only successful when it goes both top-down (the executives give a directive) and bottom-up (the team chooses to execute that directive instead of sabotaging or ignoring it). Finding your first follower makes getting buy-in from the rest of the team significantly easier, so find your leader in sales to team up with in the beginning. Then look for someone who shows interest, the first follower, and invite them to the weekly review meetings to see the results of the program.</p>
4385Below is my favorite video explanation of change management in less than 3 minutes.
4386
4387<iframe width="744" height="419" src="https://www.youtube.com/embed/fW8amMCVAJQ" title="First Follower: Leadership Lessons from Dancing Guy" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
4388
4389<p class="reader-text-block__paragraph">Even if the results aren't immediate or stellar at first, the learnings will be important to sales. Knowing who isn't interested can occasionally be as important as knowing who is. It can help sales from wasting their time.
4390
4391Don’t worry, once you start seeing signs of success, everyone will get on board.</p>
4392
4393<h2 class="reader-text-block__heading1">How to get Sales involved</h2>
4394<p class="reader-text-block__paragraph">Since collaboration with sales is so critical for ABM to succeed, make sure the sales team feels comfortable with the process. This can be achieved by planning together, drawing on their expert market knowledge from a sales perspective, and by actively encouraging their participation. Doing this will help the sales team buy into and fully understand the marketing messaging/strategy. In addition, it will reinfor
4394ce the notion that you are not only simplifying their jobs, but also helping to build their network and their brand.</p>
4395<p class="reader-text-block__paragraph">While it’s important to involve your salespeople early in the process, be careful not to overdo it. They’re busy too, and it can be counterproductive to overwhelm them. Having a weekly accountability check-in is useful. During these meetings, you can offer your salespeople touch point materials, such as scripts for follow-up emails, or relevant case studies, if necessary. Also review the accounts showing high intent signals, as that's a great time for sales to pick up the phone.</p>
4396<p class="reader-text-block__paragraph">After every campaign, it’s useful to conduct a post-mortem with your salespeople, and discuss what went well, what could have been better, and how to improve the process going forward.</p>
4397Even with a good partner, it’s hard for the sales team to know what information is important and what isn’t, so don’t be concerned if the first go-around of an ABM program doesn’t bring exemplary results. This is where the lessons come from so that can make the next campaign a raging success. As always, test and iterate.
4398<h2 class="reader-text-block__heading1">Think like your customer</h2>
4399<p class="reader-text-block__paragraph">Tapping into your salespeople’s insights into the purchasing journey from the customer side, then incorporating what you learn into your approach, is an excellent strategy. Customers are looking for solutions to problems. Having an awareness of how they go through the discernment process in selecting those solutions can help you be strategic in how you approach them. Software such as Bombora or 6Sense are an excellent way to uncover customers who are actively researching intent topics that are relevant to your business. Drawing on the strategies outlined in the advanced targeting tactics stage means you can tailor your approach and close the deal.</p>
4400<p class="reader-text-block__paragraph">Reverse-engineer your best and worst closed win’s. Seeing the path your customers take can help you spot who really is interested, and who is just kicking the tires. You’ll discover patterns that show who is interested in what, which will inform future collateral and engagement strategies.</p>`,seoTitle:"Lead Seamless Campaigns: S.C.A.L.E. for ABM"},{id:"17237",title:"Evaluate progress and measure results - The S.C.A.L.E. ABM framework",slug:"evaluate-progress-and-measure-results-the-scale-abm-framework",category:"ABM & Pipeline",seoDescription:"Step five of the S.C.A.L.E. ABM framework: evaluating progress. Learn which metrics matter most for measuring enterprise ABM campaign effectiveness.",excerpt:"The final stage in the S.C.A.L.E framework is to evaluate the campaign’s process, measure what has been working, and more crucially, what hasn’t. You want to...",readTime:4,tldr:"Measuring ABM is different from measuring demand gen. Learn which leading and lagging indicators actually reflect account health and pipeline progress.",content:`<p class="reader-text-block__paragraph">The final stage in the S.C.A.L.E framework is to evaluate the campaign’s process, measure what has been working, and more crucially, what hasn’t. You want to be able to replicate successful results and learn from unsuccessful ones. Here are the steps that can be used to evaluate, measure, and clarify results.</p>
4401
4402<h2 class="reader-text-block__heading1">A framework that helps <strong>—</strong> S.C.A.L.E.</h2>
4403<p class="reader-text-block__paragraph">We developed the S.C.A.L.E. framework to help companies get a fundamental understanding of the strategic ABM process. S.C.A.L.E. stands for:</p>
4404
4405<ul>
4406 	<li><a href="https://hunterandbard.com/learn-the-s-c-a-l-e-framework-for-abm-start-by-securing-goals/"><strong>Secure ABM program goals</strong></a></li>
4407 	<li><a href="https://hunterandbard.com/choosing-strategic-accounts-the-s-c-a-l-e-abm-framework/"><strong>Choose strategic accounts</strong></a></li>
4408 	<li><a href="https://hunterandbard.com/advance-targeting-tactics-the-s-c-a-l-e-framework-for-abm/"><strong>Advance targeting tactics</strong></a></li>
4409 	<li><a href="https://hunterandbard.com/lead-a-seamless-campaign-the-s-c-a-l-e-framework-for-abm/"><strong>Lead a seamless campaign</strong></a></li>
4410 	<li><strong><span class="tvm__text--legacy-publishing-emphasis">E</span></strong>valuate progress, measure results</li>
4411</ul>
4412<p class="reader-text-block__paragraph">This blog post will focus on the "E" of S.C.A.L.E.: Evaluate progress, measure results. This is the fifth and final in a series of posts that explain our framework. Previous posts are linked in the list above.</p>
4413
4414<h2 class="reader-text-block__heading1">Evaluate progress</h2>
4415<p class="reader-text-block__paragraph">In the preparation phase we explained how to set your goals. While they should be top of mind throughout the project, now is the time to bring them front and center.</p>
4416
4417<h3 class="reader-text-block__heading2">The postmortem meeting</h3>
4418<p class="reader-text-block__paragraph">While you should keep your goals in mind throughout the monitoring process, now is the time to hold a postmortem meeting, which should cover:</p>
4419
4420<ul>
4421 	<li>A review of the whole program</li>
4422 	<li>A performance assessment for those goals</li>
4423</ul>
4424<pre class="reader-text-block__code">If you exceeded your goals by a wide margin, were the goals ambitious enough?
4425
4426If you didn’t make your goals by a wide margin, were the goals too ambitious? What went wrong?
4427
4428Were they the right goals?</pre>
4429<p class="reader-text-block__paragraph">Also cover questions that arose during the program:</p>
4430
4431<ul>
4432 	<li>Could anything have been better? (e.g. communications with sales)</li>
4433 	<li>Could the process have been smoother?</li>
4434 	<li>Anything else that should be considered in future programs</li>
4435</ul>
4436<p class="reader-text-block__paragraph">The results from this meeting should dictate process and playbook changes going forward. We’re looking at both big and minor updates. Even small updates become big improvements when done continually over time.</p>
4437<p class="reader-text-block__paragraph">If a tactic didn’t work, was the tactic itself the issue, or was the implementation to blame? One way to solve for that is to try the same tactic three different ways in order to rule out the actual tactic, rather than missing out because it was implemented badly.</p>
4438<p class="reader-text-block__paragraph">Reporting here is critical to disperse what you've learned across your teams. While you may 
4438not want to do a full presentation documenting your wins and losses, a deck with that information can help keep knowledge in-house even when there’s turnover ("What did we do on XYZ campaign? Go look at the postmortem deck.")</p>
4439
4440<h2 class="reader-text-block__heading1">Measure results</h2>
4441<p class="reader-text-block__paragraph">The simplest way to determine a campaign's success is to track and report metrics. The most obvious area to analyze is revenue growth. If your closed wins exceeded your goal, review the points mentioned above, then start looking at expanding your campaign. If not, then ask yourself:</p>
4442
4443<ul>
4444 	<li>Was your campaign personalized enough?</li>
4445 	<li>Was your targeting too general?</li>
4446 	<li>Did you communicate your services clearly enough?</li>
4447 	<li>Was the tone and content of your messaging appropriate for your target audience?</li>
4448</ul>
4449<p class="reader-text-block__paragraph">The second way to test your campaign’s success is to track pipeline growth. The pipeline provides a detailed overview of where leads are within the sales funnel and shows you whether your sales-marketing cadence was effective.</p>
4450<p class="reader-text-block__paragraph">A third indicator of a campaign’s performance is engagement. For example, with an email campaign, you can see how the target interacted with the email.</p>
4451
4452<ul>
4453 	<li>Did they open it?</li>
4454 	<li>What was the click-through rate?</li>
4455 	<li>Did they respond to the email?</li>
4456 	<li>Was the response positive or negative?</li>
4457</ul>
4458<p class="reader-text-block__paragraph">With <a href="https://www.folloze.com/?utm_source=linkedin&amp;utm_medium=blog&amp;utm_campaign=shira&amp;utm_content=SCALE">Folloze boards</a>, you can see how many views your page received, where the traffic came from, how long they stayed on a particular page, the number of opt-ins, downloads, and so on.</p>
4459<p class="reader-text-block__paragraph">One more way to evaluate progress is the ROI on ABM investment. The total revenue tied to ABM initiatives, the win rate/closed-wins, and the deal velocity are all key areas to measure when tracking success. As ABM is highly targeted and specialized, you should see results in the number of closes. If your ROI shows that your ABM strategy has been successful, you can use that data to design future campaigns.</p>
4460
4461<h2 class="reader-text-block__heading1">Improve by iterations</h2>
4462<p class="reader-text-block__paragraph">Marketing performance is iterative by nature, and what you learn from one campaign is transferrable to future campaigns. By noting the things that did and didn’t work you can pinpoint the areas that need more testing.</p>
4463<p class="reader-text-block__paragraph">Take email, for example. B2B buyers receive upward of 60 emails per week from suppliers. They’re much likelier to engage with messaging that speaks directly to their needs. Language and tone are important. You’ll know after the first email goes out if the subject line works by the opens. From the responses you could infer if the email created a connection and hit the mark with your prospects. Should you have a lower-than-expected open rate, change the subject line of your second email. If there are no responses to the email, ask whether the email subject connected enough with the copy, or if you baited and switched (don’t bait-and-switch, no one likes that).</p>
4464
4465<h2 class="reader-text-block__heading1">Celebrate</h2>
4466<p class="reader-text-block__paragraph">You’ve finished your cadence. If it worked out well, celebrate!</p>
4467<p class="reader-text-block__paragraph">If it didn’t work out well, still celebrate. It's not that you haven't won, you just haven't won YET. Now you know what needs to be fixed, and you can fix it on your next campaign.</p>`,seoTitle:"Evaluate & Measure: The S.C.A.L.E. ABM Framework"},{id:"18281",title:"Webinar | How to S.C.A.L.E. Your Account-Based Marketing",slug:"webinar-how-to-scale-your-account-based-marketing",category:"ABM & Pipeline",seoDescription:"Watch the Hunter & Bard webinar on running account-based marketing with the S.C.A.L.E. framework, from securing goals to measuring results.",excerpt:"How to S.C.A.L.E. Your Account-Based Marketing from Folloze on Vimeo .",readTime:3,tldr:"",content:`<iframe src="https://player.vimeo.com/video/760026482?h=82d301494c&amp;title=0&amp;byline=0&amp;portrait=0" width="640" height="360" frameborder="0" allowfullscreen="allowfullscreen"></iframe>
4468<a href="https://vimeo.com/760026482">How to S.C.A.L.E. Your Account-Based Marketing</a> from <a href="https://vimeo.com/user108024395">
4468Folloze</a> on <a href="https://vimeo.com">Vimeo</a>.`,seoTitle:"Webinar: How to S.C.A.L.E. Your ABM"},{id:"22223",title:"ABM Insider Podcast Ep.1: Mastering the long game in ABM with Seagate's Dan Cafiero",slug:"abm-insider-podcast-ep1-mastering-the-long-game-in-abm-with-seagates-dan-cafiero",category:"ABM & Pipeline",seoDescription:"ABM Insider Ep.1: Dan Cafiero of Seagate shares how patience and persistence drive long-term ABM success in enterprise technology sales.",excerpt:"PODCAST ABM Insider Ep.1: Mastering the long game in ABM with Seagate's Dan Cafiero .cls-1{fill:url(#linear-gradient);fill-rule:evenodd;}.cls-2{fill:#fff;}...",readTime:3,tldr:"",content:`<h5 data-style="style-3" data-delay="0" data-duration="normal">PODCAST</h5>		
4469			<h1>ABM Insider</h1>		
4470			<h2>Ep.1:  Mastering the long game in ABM with Seagate's Dan Cafiero</h2>		
4471			<a href="#arm-insider-ep-1">
4472			<svg xmlns="http://www.w3.org/2000/svg" width="344" height="345" viewBox="0 0 344 345" fill="none"><g clip-path="url(#clip0_71_47)"><path d="M324 0H20C8.9543 0 0 8.9543 0 20V325C0 336.046 8.95432 345 20 345H324C335.046 345 344 336.046 344 325V20C344 8.95431 335.046 0 324 0Z" fill="#FEBE98"></path><path d="M238.193 182.301H217.596H196.999C193.801 182.301 190.904 181.004 188.807 178.905C186.711 176.806 185.416 173.905 185.416 170.703C185.416 167.5 186.711 164.599 188.807 162.5C190.904 160.401 193.801 159.104 196.999 159.104H211.802H226.604C237.268 159.104 246.927 154.777 253.915 147.774C260.902 140.777 265.229 131.106 265.229 120.427C265.229 109.749 260.908 100.077 253.915 93.0803C246.927 86.0834 237.268 81.7507 226.604 81.7507H208.582H190.56C188.78 81.7507 187.173 82.4719 186.007 83.6399C184.841 84.8078 184.12 86.4171 184.12 88.1986V146.208C184.12 149.411 182.825 152.312 180.729 154.411C178.632 156.51 175.735 157.807 172.537 157.807C169.339 157.807 166.442 156.51 164.346 154.411C162.249 152.312 160.954 149.411 160.954 146.208V109.469V72.7301C160.954 70.9486 160.234 69.3393 159.067 68.1714C157.901 67.0034 156.294 66.2822 154.515 66.2822H74.6961C72.917 66.2822 71.3098 67.0034 70.1435 68.1714C68.9771 69.3393 68.2568 70.9486 68.2568 72.7301V152.656C68.2568 154.438 68.9771 156.047 70.1435 157.215C71.3098 158.383 72.917 159.104 74.6961 159.104H148.076C151.274 159.104 154.171 160.401 156.267 162.5C158.363 164.599 159.659 167.5 159.659 170.703C159.659 173.905 158.363 176.806 156.267 178.905C154.171 181.004 151.274 182.301 148.076 182.301H111.386H74.6961C72.917 182.301 71.3098 183.022 70.1435 184.19C68.9771 185.358 68.2568 186.968 68.2568 188.749V268.675C68.2568 270.457 68.9771 272.066 70.1435 273.234C71.3098 274.402 72.917 275.123 74.6961 275.123H154.515C156.294 275.123 157.901 274.402 159.067 273.234C160.234 272.066 160.954 270.457 160.954 268.675V195.197C160.954 191.995 162.249 189.094 164.346 186.995C166.442 184.895 169.339 183.598 172.537 183.598C175.735 183.598 178.632 184.895 180.729 186.995C182.825 189.094 184.12 191.995 184.12 195.197V224.202V253.207C184.12 254.988 184.841 256.597 186.007 257.765C187.173 258.933 188.78 259.654 190.56 259.654H238.193C248.857 259.654 258.516 255.327 265.503 248.325C272.491 241.328 276.818 231.656 276.818 220.978C276.818 210.3 272.496 200.628 265.503 193.631C258.516 186.634 248.857 182.301 238.193 182.301Z" fill="#120049"></path></g><defs><clipPath id="clip0_71_47"><rect width="344" height="345" fill="white"></rect></clipPath></defs></svg>			</a>
4473			<a href="https://open.spotify.com/episode/4uep9HOEsdrTdHlKO3XvGt?si=1iZrMi5yQLSzXsUbMEd2hA">
4474			<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="#1ed760" d="M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8Z"></path><path d="M406.6 231.1c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3zm-31 76.2c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm-26.9 65.6c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4z"></path></svg>			</a>
4475			<a href="https://podcasts.apple.com/bg/podcast/episode-1-dan-cafiero/id1715919774?i=1000634302861">
4476			<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" viewBox="0 0 70 70"><defs><style>.cls-1{fill:url(#linear-gradient);fill-rule:evenodd;}.cls-2{fill:#fff;}</style><linearGradient id="linear-gradient" x1="35" y1="72" x2="35" y2="2" gradientTransform="translate(0 72) scale(1 -1)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f452ff"></stop><stop offset="1" stop-color="#832bc1"></stop></linearGradient></defs><path d="m68.62,60.67c-.68,1.73-2.24,4.15-4.48,5.88-1.28.98-2.82,1.94-4.92,2.57-2.24.68-5.02.89-8.47.89h-31.5c-3.45,0-6.21-.23-8.47-.89-2.1-.63-3.64-1.56-4.92-2.57-2.22-1.7-3.8-4.15-4.48-5.88-1.35-3.48-1.38-7.42-1.38-9.92h0v-31.5h0c0-2.5.02-6.44,1.38-9.92.68-1.73,2.24-4.15,4.48-5.88,1.28-.98,2.82-1.94,4.92-2.57,2.26-.65,5.02-.89,8.47-.89h31.5c3.45,0,6.21.23,8.47.89,2.1.63,3.64,1.56,4.92,2.57,2.22,1.7,3.8,4.15,4.48,5.88,1.38,3.48,1.38,7.44,1.38,9.92v31.5c0,2.5-.02,6.44-1.38,9.92Z"></path><path d="m41,42.26c-.09-.84-.37-1.45-.93-2.01-1.05-1.1-2.89-1.82-5.06-1.82s-4.01.7-5.06,1.82c-.54.58-.84,1.17-.93,2.01-.19,1.63-.07,3.03.12,5.3.19,2.15.54,5.02.98,7.91.33,2.08.58,3.2.82,3.99.4,1.31,1.82,2.43,4.08,2.43s3.71-1.14,4.08-2.43c.23-.79.49-1.91.82-3.99.44-2.92.79-5.76.98-7.91.21-2.26.3-3.66.12-5.3Z"></path><path d="m40.74,30.36c0,3.17-2.57,5.74-5.74,5.74s-5.74-2.57-5.74-5.74,2.57-5.74,5.74-5.74,5.74,2.59,5.74,5.74Z"></path>
4476<path d="m34.93,7.75c-13.39.05-24.36,10.92-24.55,24.31-.14,10.85,6.79,20.14,16.47,23.54.23.09.47-.12.44-.35-.12-.84-.26-1.68-.35-2.52-.05-.3-.23-.54-.49-.68-7.65-3.34-13-11.01-12.9-19.9.12-11.67,9.64-21.16,21.28-21.26,11.92-.09,21.65,9.57,21.65,21.47,0,8.8-5.32,16.36-12.9,19.69-.28.12-.47.37-.49.68-.12.84-.23,1.68-.35,2.52-.05.26.21.44.44.35,9.59-3.36,16.47-12.51,16.47-23.24-.05-13.58-11.13-24.64-24.73-24.62Z"></path><path d="m34.37,15.91c-8.73.33-15.73,7.54-15.84,16.26-.07,5.74,2.8,10.83,7.21,13.84.21.14.51-.02.51-.28-.07-1-.07-1.89-.02-2.82.02-.3-.09-.58-.33-.79-2.68-2.52-4.32-6.11-4.22-10.08.19-7,5.81-12.69,12.81-12.97,7.61-.3,13.86,5.81,13.86,13.32,0,3.83-1.63,7.28-4.22,9.73-.21.21-.33.49-.33.79.05.91.02,1.8-.02,2.8-.02.26.28.44.51.28,4.34-2.96,7.21-7.98,7.21-13.63.02-9.29-7.75-16.82-17.13-16.45Z"></path></svg>			</a>
4477			<img width="1794" height="1794" src="https://hunterandbard.com/wp-content/uploads/2023/11/Ep-1-2.png" alt="ABM Insider podcast one cover with Dan Cafiero" srcset="https://hunterandbard.com/wp-content/uploads/2023/11/Ep-1-2.png 1x,https://hunterandbard.com/wp-content/uploads/2023/11/Ep-1-2.png 2x" data-column-space="auto" data-lazyload="" data-grve-filter="yes" decoding="async" />		
4478		<p>What's the best way to get ahead in your career? In the inaugural episode of ABM Insider, Shira talks with <a href="https://www.linkedin.com/in/danielcafiero/">Seagate Technology Senior Program Manager Dan Cafiero</a>. They chat about his wide range of marketing and advertising experience, as well as some of the biggest lessons he’s learned about how to be successful implementing account-based marketing for enterprises. We hope you enjoy our new podcast, ABM Insider, hosted by Hunter &amp; Bard CEO Shira Abel.</p><p><em><strong>Podcast sneak peek: </strong>Catch a glimpse of our engaging discussion in this quick highlight video. For an in-depth exploration, be sure to listen to the full podcast episode below.</em></p>		
4479			<video controls poster=""><source src="https://hunterandbard.com/wp-content/uploads/2023/11/ABM-Insider-Promo-ep1-v2.mp4" type="video/mp4"></video>		
4480		<h3>On the journey to ABM and what best-in-class account-based marketing looks like</h3>
4481Dan is now in charge of ABM, paid media, and MarTech for Seagate. But he’s taken a long and winding road to get there, including stops in both event planning, and advertising for the healthcare industry. As a result, he’s a big proponent of learning by experience and believes strongly in the importance of producing best-in-class work, no matter what you’re doing.
4482When it comes to ABM, Dan believes in the importance of finding an internal champion who help influence from within, as well as <a href="https://hunterandbard.com/b2b-key-decision-makers/">targeted messaging</a>, the right personas, and <a href="https://hunterandbard.com/craft-your-messaging-to-match-your-audience/">tailoring the message to fit the client</a>. He stresses the importance of both overcommunicating as a strategy and being patient with results, <a href="https://hunterandbard.com/account-based-marketing-services/">especially with ABM</a>, which is generally a longer sales cycle. While he’s found that ABM has been defined differently in different jobs he’s worked, for a large, enterprise software like Seagate, that sales cycle can be an entire year.<p>While he currently oversees a small group, Dan has a good idea of what his dream ABM team would look like.</p>		
4483		<p>“I'd love someone to run digital activation, someone to run marketing automation, someone to run sales. That would be like the ABM trifecta for me.”</p>		
4484													<img width="1794" height="1794" src="https://hunterandbard.com/wp-content/uploads/2023/11/Ep-1-2.png" alt="ABM Insider podcast one cover with Dan Cafiero" srcset="https://hunterandbard.com/wp-content/uploads/2023/11/Ep-1-2.png 1794w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep-1-2-300x300.png 300w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep-1-2-1024x1024.png 1024w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep-1-2-150x150.png 150w, https://hunterandbard.com/w
4484p-content/uploads/2023/11/Ep-1-2-768x768.png 768w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep-1-2-1536x1536.png 1536w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep-1-2-560x560.png 560w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep-1-2-900x900.png 900w" sizes="(max-width: 1794px) 100vw, 1794px" />													
4485		<p>Listen to the whole episode below to hear Shira’s and Dan’s entire conversation, and be sure to check out future episodes of ABM Insider dropping every two weeks wherever you listen to your podcasts. In Episode 2, Shira is joined by Kristen Ditsch, Director of Product Marketing at SGNL.</p>		
4486			<iframe title="Embed Player" src="https://play.libsyn.com/embed/episode/id/28562900/height/192/theme/modern/size/large/thumbnail/no/cu..." height="192" width="100%" scrolling="no" allowfullscreen="" webkitallowfullscreen="true" mozallowfullscreen="true" oallowfullscreen="true" msallowfullscreen="true" style="border: none; " ></iframe>		
4487													<img width="765" height="765" src="https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast.png" alt="Shira Abel, CEO of Hunter and Bard award-winning ABM agency" srcset="https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast.png 765w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-300x300.png 300w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-150x150.png 150w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-560x560.png 560w, https://hunterandbard.com/wp-content/uploads/2023/11/elementor/thumbs/Shira_ABM-insider-podcast-qf43fmx5kfqj5mir2ydu0nmtmn87915huhe1edaukg.png 160w" sizes="(max-width: 765px) 100vw, 765px" />													
4488		<p>Tap into a wealth of marketing insights and direct dialogue with industry experts. Join the ABM conversation and connect with our podcast host, Shira Abel, on LinkedIn. </p>		
4489			<a href="https://www.linkedin.com/in/shiraabel" target="_blank" rel="noopener">
4490		Connect with Shira
4491	</a>`,seoTitle:"ABM Insider Ep.1: The Long Game in ABM (Seagate)"},{id:"22626",title:"ABM Insider Podcast Ep.2:  How to grow and scale SaaS products in new markets with SGNL’s Kristen Ditsch",slug:"abm-insider-podcast-ep2-how-to-grow-and-scale-saas-products-in-new-markets-with-",category:"ABM & Pipeline",seoDescription:"ABM Insider Ep.2: Kristen Ditsch of Snowflake shares her playbook for building ABM programs from scratch at fast-growing B2B enterprise companies.",excerpt:"PODCAST ABM Insider Ep.2: How to grow and scale SaaS products in new markets with SGNL’s Kristen Ditsch...",readTime:3,tldr:"",content:`<h5 data-style="style-3" data-delay="0" data-duration="normal">PODCAST</h5>		
4492			<h1>ABM Insider</h1>		
4493			<h2>Ep.2: How to grow and scale SaaS products in new markets with SGNL’s Kristen Ditsch </h2>		
4494			<a href="#arm-insider-ep-2">
4495			<svg xmlns="http://www.w3.org/2000/svg" width="344" height="345" viewBox="0 0 344 345" fill="none"><g clip-path="url(#clip0_71_47)"><path d="M324 0H20C8.9543 0 0 8.9543 0 20V325C0 336.046 8.95432 345 20 345H324C335.046 345 344 336.046 344 325V20C344 8.95431 335.046 0 324 0Z" fill="#FEBE98"></path><path d="M238.193 182.301H217.596H196.999C193.801 182.301 190.904 181.004 188.807 178.905C186.711 176.806 185.416 173.905 185.416 170.703C185.416 167.5 186.711 164.599 188.807 162.5C190.904 160.401 193.801 159.104 196.999 159.104H211.802H226.604C237.268 159.104 246.927 154.777 253.915 147.774C260.902 140.777 265.229 131.106 265.229 120.427C265.229 109.749 260.908 100.077 253.915 93.0803C246.927 86.0834 237.268 81.7507 226.604 81.7507H208.582H190.56C188.78 81.7507 187.173 82.4719 186.007 83.6399C184.841 84.8078 184.12 86.4171 184.12 88.1986V146.208C184.12 149.411 182.825 152.312 180.729 154.411C178.632 156.51 175.735 157.807 172.537 157.807C169.339 157.807 166.442 156.51 164.346 154.411C162.249 152.312 160.954 149.411 160.954 146.208V109.469V72.7301C160.954 70.9486 160.234 69.3393 159.067 68.1714C157.901 67.0034 156.294 66.2822 154.515 66.2822H74.6961C72.917 66.2822 71.3098 67.0034 70.1435 68.1714C68.9771 69.3393 68.2568 70.9486 68.2568 72.7301V152.656C68.2568 154.438 68.9771 156.047 70.1435 157.215C71.3098 158.383 72.917 159.104 74.6961 159.104H148.076C151.274 159.104 154.171 160.401 156.267 162.5C158.363 164.599 159.659 167.5 159.659 170.703C159.659 173.905 158.363 176.806 156.267 178.905C154.171 181.004 151.274 182.301 148.076 182.301H111.386H74.6961C72.917 182.301 71.3098 183.022 70.1435 184.19C68.97
449571 185.358 68.2568 186.968 68.2568 188.749V268.675C68.2568 270.457 68.9771 272.066 70.1435 273.234C71.3098 274.402 72.917 275.123 74.6961 275.123H154.515C156.294 275.123 157.901 274.402 159.067 273.234C160.234 272.066 160.954 270.457 160.954 268.675V195.197C160.954 191.995 162.249 189.094 164.346 186.995C166.442 184.895 169.339 183.598 172.537 183.598C175.735 183.598 178.632 184.895 180.729 186.995C182.825 189.094 184.12 191.995 184.12 195.197V224.202V253.207C184.12 254.988 184.841 256.597 186.007 257.765C187.173 258.933 188.78 259.654 190.56 259.654H238.193C248.857 259.654 258.516 255.327 265.503 248.325C272.491 241.328 276.818 231.656 276.818 220.978C276.818 210.3 272.496 200.628 265.503 193.631C258.516 186.634 248.857 182.301 238.193 182.301Z" fill="#120049"></path></g><defs><clipPath id="clip0_71_47"><rect width="344" height="345" fill="white"></rect></clipPath></defs></svg>			</a>
4496			<a href="https://open.spotify.com/episode/38EShbtEP989zwzq6iBkX6?si=c6c03e4a9caa4e62">
4497			<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="#1ed760" d="M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8Z"></path><path d="M406.6 231.1c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3zm-31 76.2c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm-26.9 65.6c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4z"></path></svg>			</a>
4498			<a href="https://podcasts.apple.com/bg/podcast/episode-2-kristen-ditsch/id1715919774?i=1000637469338">
4499			<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" viewBox="0 0 70 70"><defs><style>.cls-1{fill:url(#linear-gradient);fill-rule:evenodd;}.cls-2{fill:#fff;}</style><linearGradient id="linear-gradient" x1="35" y1="72" x2="35" y2="2" gradientTransform="translate(0 72) scale(1 -1)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f452ff"></stop><stop offset="1" stop-color="#832bc1"></stop></linearGradient></defs><path d="m68.62,60.67c-.68,1.73-2.24,4.15-4.48,5.88-1.28.98-2.82,1.94-4.92,2.57-2.24.68-5.02.89-8.47.89h-31.5c-3.45,0-6.21-.23-8.47-.89-2.1-.63-3.64-1.56-4.92-2.57-2.22-1.7-3.8-4.15-4.48-5.88-1.35-3.48-1.38-7.42-1.38-9.92h0v-31.5h0c0-2.5.02-6.44,1.38-9.92.68-1.73,2.24-4.15,4.48-5.88,1.28-.98,2.82-1.94,4.92-2.57,2.26-.65,5.02-.89,8.47-.89h31.5c3.45,0,6.21.23,8.47.89,2.1.63,3.64,1.56,4.92,2.57,2.22,1.7,3.8,4.15,4.48,5.88,1.38,3.48,1.38,7.44,1.38,9.92v31.5c0,2.5-.02,6.44-1.38,9.92Z"></path><path d="m41,42.26c-.09-.84-.37-1.45-.93-2.01-1.05-1.1-2.89-1.82-5.06-1.82s-4.01.7-5.06,1.82c-.54.58-.84,1.17-.93,2.01-.19,1.63-.07,3.03.12,5.3.19,2.15.54,5.02.98,7.91.33,2.08.58,3.2.82,3.99.4,1.31,1.82,2.43,4.08,2.43s3.71-1.14,4.08-2.43c.23-.79.49-1.91.82-3.99.44-2.92.79-5.76.98-7.91.21-2.26.3-3.66.12-5.3Z"></path><path d="m40.74,30.36c0,3.17-2.57,5.74-5.74,5.74s-5.74-2.57-5.74-5.74,2.57-5.74,5.74-5.74,5.74,2.59,5.74,5.74Z"></path><path d="m34.93,7.75c-13.39.05-24.36,10.92-24.55,24.31-.14,10.85,6.79,20.14,16.47,23.54.23.09.47-.12.44-.35-.12-.84-.26-1.68-.35-2.52-.05-.3-.23-.54-.49-.68-7.65-3.34-13-11.01-12.9-19.9.12-11.67,9.64-21.16,21.28-21.26,11.92-.09,21.65,9.57,21.65,21.47,0,8.8-5.32,16.36-12.9,19.69-.28.12-.47.37-.49.68-.12.84-.23,1.68-.35,2.52-.05.26.21.44.44.35,9.59-3.36,16.47-12.51,16.47-23.24-.05-13.58-11.13-24.64-24.73-24.62Z"></path><path d="m34.37,15.91c-8.73.33-15.73,7.54-15.84,16.26-.07,5.74,2.8,10.83,7.21,13.84.21.14.51-.02.51-.28-.07-1-.07-1.89-.02-2.82.02-.3-.09-.58-.33-.79-2.68-2.52-4.32-6.11-4.22-10.08.19-7,5.81-12.69,12.81-12.97,7.61-.3,13.86,5.81,13.86,13.32,0,3.83-1.63,7.28-4.22,9.73-.21.21-.33.49-.33.79.05.91.02,1.8-.02,2.8-.02.26.28.44.51.28,4.34-2.96,7.21-7.98,7.21-13.63.02-9.29-7.75-16.82-17.13-16.45Z"></path></svg>			</a>
4500			<img width="1794" height="1794" src="https://hunterandbard.com/w
4500p-content/uploads/2023/11/Ep2-KristenDitsch.png" alt="ABM Insider podcast cover Kristen Ditsch episode 2" srcset="https://hunterandbard.com/wp-content/uploads/2023/11/Ep2-KristenDitsch.png 1x,https://hunterandbard.com/wp-content/uploads/2023/11/Ep2-KristenDitsch.png 2x" data-column-space="auto" data-lazyload="" data-grve-filter="yes" decoding="async" />		
4501		<p>How do you grow and scale products effectively in new markets? In our second episode ABM Insider, Shira talks with <a href="https://www.linkedin.com/in/kristenditsch">SGNL’s Director of Product Marketing, </a><a href="https://www.linkedin.com/in/kristenditsch">Kristen Ditsch</a>. They chat about Kristen’s experience and why she chose to specialize in product marketing for emerging technologies, in addition to the importance of developing an ideal customer profile strategy and her background in MarTech. We hope you enjoy our latest podcast in the ABM Insider series, hosted by Hunter &amp; Bard CEO Shira Abel. </p><p> </p><p><em><strong>Podcast sneak peek: </strong>Catch a glimpse of our engaging discussion in this quick highlight video. For an in-depth exploration, be sure to listen to the full podcast episode below.</em></p>		
4502			<video controls poster=""><source src="https://hunterandbard.com/wp-content/uploads/2023/11/ABM-Insider-Promo-ep2.mp4" type="video/mp4"></video>		
4503		<h3>Key strategies for customer profile development in new markets</h3><p>Kristen is the Director of Product Marketing at SGNL. She is passionate about product marketing and emerging technologies with years of experience growing and scaling SaaS products. Kristen talks about the value of an ideal customer profile strategy when evolving a product during challenging economic markets, or when growing into new and emerging markets. </p><p>When it comes to ABM, Kristen believes that a healthy pipeline of prospective customers can only be developed with a clear understanding of your ICP and pairing it with a content strategy and buyer guide that addresses the pain-points they’re experiencing.</p>		
4504		<p>“...if you map all of your content to your ideal customer’s decisioning process as well as their buying process...do you have content that would be easy for them to find?” </p>		
4505													<img width="1794" height="1794" src="https://hunterandbard.com/wp-content/uploads/2023/11/Ep2-KristenDitsch.png" alt="ABM Insider podcast cover Kristen Ditsch episode 2" srcset="https://hunterandbard.com/wp-content/uploads/2023/11/Ep2-KristenDitsch.png 1794w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep2-KristenDitsch-300x300.png 300w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep2-KristenDitsch-1024x1024.png 1024w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep2-KristenDitsch-150x150.png 150w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep2-KristenDitsch-768x768.png 768w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep2-KristenDitsch-1536x1536.png 1536w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep2-KristenDitsch-560x560.png 560w, https://hunterandbard.com/wp-content/uploads/2023/11/Ep2-KristenDitsch-900x900.png 900w" sizes="(max-width: 1794px) 100vw, 1794px" />													
4506		<p>Listen to the whole episode below to hear Shira’s and Kristen’s entire conversation, and be sure to check out future episodes of ABM Insider dropping every two weeks wherever you listen to your podcasts. In Episode 3, Shira is joined by Bill Odell, founder of Odell Marketing.</p>		
4507			<iframe title="Embed Player" style="border:none" src="https://play.libsyn.com/embed/episode/id/28923658/height/192/theme/modern/size/large/thumbnail/no/cu..." height="192" width="100%" scrolling="no" allowfullscreen="" webkitallowfullscreen="true" mozallowfullscreen="true" oallowfullscreen="true" msallowfullscreen="true"></iframe>		
4508													<img width="765" height="765" src="https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast.png" alt="Shira Abel, CEO of Hunter and Bard award-winning ABM agency" srcset="https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast.png 765w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-300x300.png 300w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-150x150.png 150w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-560x560.png 560w, https://hunterandbard.com/wp-content/uploads/2023/11/elementor/thumbs/Shira_ABM-insider-podcast-qf43fmx5kfqj5mir2ydu0nmtmn87915huhe1edaukg.png 160w" sizes="(max-width: 765px) 100vw, 765px" />													
4509		<p>Tap into a wealth of marketing insights and direct dialogue with industry experts. Join the ABM conversation and connect with our podcast host, Shira Abel, on LinkedIn. </p>		
4510			<a href="https://www.linkedin.com/in/shiraabel" target="_blank" rel="noopener">
4511		Connect with Shira
4512	</a>`,seoTitle:"ABM Insider Ep.2: Scaling SaaS in New Markets"},{id:"22980",title:"ABM Insider Podcast Ep.3: Why choosing an experienced fractional CMO can help your organization grow with thought leadership",slug:"abm-insider-podcast-ep3-why-choosing-an-experienced-fractional-cmo-can-help-your",category:"ABM & Pipeline",seoDescription:"ABM Insider Ep.3: Bill Odell shares decades of marketing leadership insights and why experienced fractional CMOs accelerate B2B enterprise growth.",excerpt:"PODCAST ABM Insider Ep.3: Why choosing an experienced fractional CMO can help your organization grow with thought leadership...",readTime:3,tldr:"",content:`<h5 data-style="style-3" data-delay="0" data-duration="normal">PODCAST</h5>		
4513			<h1>ABM Insider</h1>		
4514			<h2>Ep.3: Why choosing an experienced fractional CMO can help your organization grow with thought leadership </h2>		
4515			<a href="#arm-insider-ep-3">
4516			<svg xmlns="http://www.w3.org/2000/svg" width="344" height="345" viewBox="0 0 344 345" fill="none"><g clip-path="url(#clip0_71_47)"><path d="M324 0H20C8.9543 0 0 8.9543 0 20V325C0 336.046 8.95432 345 20 345H324C335.046 345 344 336.046 344 325V20C344 8.95431 335.046 0 324 0Z" fill="#FEBE98"></path><path d="M238.193 182.301H217.596H196.999C193.801 182.301 190.904 181.004 188.807 178.905C186.711 176.806 185.416 173.905 185.416 170.703C185.416 167.5 186.711 164.599 188.807 162.5C190.904 160.401 193.801 159.104 196.999 159.104H211.802H226.604C237.268 159.104 246.927 154.777 253.915 147.774C260.902 140.777 265.229 131.106 265.229 120.427C265.229 109.749 260.908 100.077 253.915 93.0803C246.927 86.0834 237.268 81.7507 226.604 81.7507H208.582H190.56C188.78 81.7507 187.173 82.4719 186.007 83.6399C184.841 84.8078 184.12 86.4171 184.12 88.1986V146.208C184.12 149.411 182.825 152.312 180.729 154.411C178.632 156.51 175.735 157.807 172.537 157.807C169.339 157.807 166.442 156.51 164.346 154.411C162.249 152.312 160.954 149.411 160.954 146.208V109.469V72.7301C160.954 70.9486 160.234 69.3393 159.067 68.1714C157.901 67.0034 156.294 66.2822 154.515 66.2822H74.6961C72.917 66.2822 71.3098 67.0034 70.1435 68.1714C68.9771 69.3393 68.2568 70.9486 68.2568 72.7301V152.656C68.2568 154.438 68.9771 156.047 70.1435 157.215C71.3098 158.383 72.917 159.104 74.6961 159.104H148.076C151.274 159.104 154.171 160.401 156.267 162.5C158.363 164.599 159.659 167.5 159.659 170.703C159.659 173.905 158.363 176.806 156.267 178.905C154.171 181.004 151.274 182.301 148.076 182.301H111.386H74.6961C72.917 182.301 71.3098 183.022 70.1435 184.19C68.9771 185.358 68.2568 186.968 68.2568 188.749V268.675C68.2568 270.457 68.9771 272.066 70.1435 273.234C71.3098 274.402 72.917 275.123 74.6961 275.123H154.515C156.294 27
45165.123 157.901 274.402 159.067 273.234C160.234 272.066 160.954 270.457 160.954 268.675V195.197C160.954 191.995 162.249 189.094 164.346 186.995C166.442 184.895 169.339 183.598 172.537 183.598C175.735 183.598 178.632 184.895 180.729 186.995C182.825 189.094 184.12 191.995 184.12 195.197V224.202V253.207C184.12 254.988 184.841 256.597 186.007 257.765C187.173 258.933 188.78 259.654 190.56 259.654H238.193C248.857 259.654 258.516 255.327 265.503 248.325C272.491 241.328 276.818 231.656 276.818 220.978C276.818 210.3 272.496 200.628 265.503 193.631C258.516 186.634 248.857 182.301 238.193 182.301Z" fill="#120049"></path></g><defs><clipPath id="clip0_71_47"><rect width="344" height="345" fill="white"></rect></clipPath></defs></svg>			</a>
4517			<a href="https://open.spotify.com/episode/0Hiscddf5Js8XGpj4qd5dX?si=saYLu3lJStCR_Vrw0WHooA">
4518			<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="#1ed760" d="M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8Z"></path><path d="M406.6 231.1c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3zm-31 76.2c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm-26.9 65.6c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4z"></path></svg>			</a>
4519			<a href="https://podcasts.apple.com/bg/podcast/episode-3-bill-odell/id1715919774?i=1000641198177">
4520			<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" viewBox="0 0 70 70"><defs><style>.cls-1{fill:url(#linear-gradient);fill-rule:evenodd;}.cls-2{fill:#fff;}</style><linearGradient id="linear-gradient" x1="35" y1="72" x2="35" y2="2" gradientTransform="translate(0 72) scale(1 -1)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f452ff"></stop><stop offset="1" stop-color="#832bc1"></stop></linearGradient></defs><path d="m68.62,60.67c-.68,1.73-2.24,4.15-4.48,5.88-1.28.98-2.82,1.94-4.92,2.57-2.24.68-5.02.89-8.47.89h-31.5c-3.45,0-6.21-.23-8.47-.89-2.1-.63-3.64-1.56-4.92-2.57-2.22-1.7-3.8-4.15-4.48-5.88-1.35-3.48-1.38-7.42-1.38-9.92h0v-31.5h0c0-2.5.02-6.44,1.38-9.92.68-1.73,2.24-4.15,4.48-5.88,1.28-.98,2.82-1.94,4.92-2.57,2.26-.65,5.02-.89,8.47-.89h31.5c3.45,0,6.21.23,8.47.89,2.1.63,3.64,1.56,4.92,2.57,2.22,1.7,3.8,4.15,4.48,5.88,1.38,3.48,1.38,7.44,1.38,9.92v31.5c0,2.5-.02,6.44-1.38,9.92Z"></path><path d="m41,42.26c-.09-.84-.37-1.45-.93-2.01-1.05-1.1-2.89-1.82-5.06-1.82s-4.01.7-5.06,1.82c-.54.58-.84,1.17-.93,2.01-.19,1.63-.07,3.03.12,5.3.19,2.15.54,5.02.98,7.91.33,2.08.58,3.2.82,3.99.4,1.31,1.82,2.43,4.08,2.43s3.71-1.14,4.08-2.43c.23-.79.49-1.91.82-3.99.44-2.92.79-5.76.98-7.91.21-2.26.3-3.66.12-5.3Z"></path><path d="m40.74,30.36c0,3.17-2.57,5.74-5.74,5.74s-5.74-2.57-5.74-5.74,2.57-5.74,5.74-5.74,5.74,2.59,5.74,5.74Z"></path><path d="m34.93,7.75c-13.39.05-24.36,10.92-24.55,24.31-.14,10.85,6.79,20.14,16.47,23.54.23.09.47-.12.44-.35-.12-.84-.26-1.68-.35-2.52-.05-.3-.23-.54-.49-.68-7.65-3.34-13-11.01-12.9-19.9.12-11.67,9.64-21.16,21.28-21.26,11.92-.09,21.65,9.57,21.65,21.47,0,8.8-5.32,16.36-12.9,19.69-.28.12-.47.37-.49.68-.12.84-.23,1.68-.35,2.52-.05.26.21.44.44.35,9.59-3.36,16.47-12.51,16.47-23.24-.05-13.58-11.13-24.64-24.73-24.62Z"></path><path d="m34.37,15.91c-8.73.33-15.73,7.54-15.84,16.26-.07,5.74,2.8,10.83,7.21,13.84.21.14.51-.02.51-.28-.07-1-.07-1.89-.02-2.82.02-.3-.09-.58-.33-.79-2.68-2.52-4.32-6.11-4.22-10.08.19-7,5.81-12.69,12.81-12.97,7.61-.3,13.86,5.81,13.86,13.32,0,3.83-1.63,7.28-4.22,9.73-.21.21-.33.49-.33.79.05.91.02,1.8-.02,2.8-.02.26.28.44.51.28,4.34-2.96,7.21-7.98,7.21-13.63.02-9.29-7.75-16.82-17.13-16.45Z"></path></svg>			</a>
4521			<img width="1196" height="1196" src="https://hunterandbard.com/w
4521p-content/uploads/2024/01/Ep3-BillOdell.png" alt="" srcset="https://hunterandbard.com/wp-content/uploads/2024/01/Ep3-BillOdell.png 1x,https://hunterandbard.com/wp-content/uploads/2024/01/Ep3-BillOdell.png 2x" data-column-space="auto" data-lazyload="" data-grve-filter="yes" decoding="async" />		
4522		<p>Have you ever wondered why some leaders are more effective at marketing than others? It really boils down to two things: experience and thought leadership. In our third episode of ABM Insider, Shira talks with <a href="https://www.linkedin.com/company/odell-marketing?trk=public_profile_topcard-current-company" target="_blank" rel="noreferrer noopener">Odell Marketing</a>’s founder, <a href="https://www.linkedin.com/in/billodell" target="_blank" rel="noreferrer noopener">Bill Odell</a>. They chat about Bill’s considerable experience working for numerous organizations in leadership roles and how it helped him develop an agency specializing in Fractional CMO offerings. Bill talks about the importance of patience when marketing, testing your campaigns and measuring every event and goal that supports your objectives.  We hope you enjoy our latest podcast in the ABM Insider series, hosted by Hunter &amp; Bard CEO Shira Abel. </p><p><em><strong>Podcast sneak peek: </strong>Catch a glimpse of our engaging discussion in this quick highlight video. For an in-depth exploration, be sure to listen to the full podcast episode below.</em></p>		
4523			<video controls poster=""><source src="https://hunterandbard.com/wp-content/uploads/2024/01/ABM-Insider-Promo-BillOdell-ep3.mp4" type="video/mp4"></video>		
4524		<h3>Understanding the importance of thought leadership and a focused marketing strategy </h3><p>Bill is the founder of Odell Marketing, a marketing agency offering fractional CMO services, advisory services and managing strategic projects for B2B startups and enterprise clients. With decades of experience in marketing strategy and leadership, Bill strongly believes in the importance of defining marketing objectives, developing foundational strategies and tactics that will help to accomplish the defined strategies. </p><p>Bill stresses the importance of executing with a sense of urgency while patiently working toward your marketing goals. He also talks about the importance of testing marketing campaigns and making data-driven decisions to help you pivot where needed to achieve your marketing goals. Bill also discusses the importance of a strategic content strategy focused on targeting the verticals associated with your account-based marketing campaigns. </p>		
4525		<p>“...what is it that you’re trying to achieve, what’s your goal? What does a homerun look like?...What are the strategies that you think allow you hit that objective? And what are the tactics that support the strategy?” </p>		
4526													<img width="1196" height="1196" src="https://hunterandbard.com/wp-content/uploads/2024/01/Ep3-BillOdell.png" alt="" srcset="https://hunterandbard.com/wp-content/uploads/2024/01/Ep3-BillOdell.png 1196w, https://hunterandbard.com/wp-content/uploads/2024/01/Ep3-BillOdell-300x300.png 300w, https://hunterandbard.com/wp-content/uploads/2024/01/Ep3-BillOdell-1024x1024.png 1024w, https://hunterandbard.com/wp-content/uploads/2024/01/Ep3-BillOdell-150x150.png 150w, https://hunterandbard.com/wp-content/uploads/2024/01/Ep3-BillOdell-768x768.png 768w, https://hunterandbard.com/wp-content/uploads/2024/01/Ep3-BillOdell-560x560.png 560w, https://hunterandbard.com/wp-content/uploads/2024/01/Ep3-BillOdell-900x900.png 900w" sizes="(max-width: 1196px) 100vw, 1196px" />													
4527		<p>Listen to the whole episode below to hear Bill and Shira’s entire conversation, and be sure to check out future episodes of ABM Insider wherever you listen to your podcasts. In Episode 4, Shira is joined by Brandon Young, Chief Marketing Officer at WeSpire.</p>		
4528			<iframe title="Embed Player" style="border:none" src="https://play.libsyn.com/embed/episode/id/29428468/height/192/theme/modern/size/large/thumbn
4528ail/no/cu..." height="192" width="100%" scrolling="no" allowfullscreen="" webkitallowfullscreen="true" mozallowfullscreen="true" oallowfullscreen="true" msallowfullscreen="true"></iframe>		
4529													<img width="765" height="765" src="https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast.png" alt="Shira Abel, CEO of Hunter and Bard award-winning ABM agency" srcset="https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast.png 765w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-300x300.png 300w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-150x150.png 150w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-560x560.png 560w, https://hunterandbard.com/wp-content/uploads/2023/11/elementor/thumbs/Shira_ABM-insider-podcast-qf43fmx5kfqj5mir2ydu0nmtmn87915huhe1edaukg.png 160w" sizes="(max-width: 765px) 100vw, 765px" />													
4530		<p>Tap into a wealth of marketing insights and direct dialogue with industry experts. Join the ABM conversation and connect with our podcast host, Shira Abel, on LinkedIn. </p>		
4531			<a href="https://www.linkedin.com/in/shiraabel" target="_blank" rel="noopener">
4532		Connect with Shira
4533	</a>`,seoTitle:"ABM Insider Ep.3: The Case for a Fractional CMO"},{id:"23107",title:"ABM Insider Podcast Ep.4: Discover common challenges when leading marketing teams",slug:"abm-insider-podcast-ep4-discover-common-challenges-when-leading-marketing-teams",category:"ABM & Pipeline",seoDescription:"ABM Insider Ep.4: Brandon Young of WeSpire discusses leadership vs. management and the core competencies for effective B2B marketing team leadership.",excerpt:"PODCAST ABM Insider Ep.4: Discover common challenges when leading marketing teams and the core competencies needed to be an effective manager...",readTime:3,tldr:"",content:`<h5 data-style="style-3" data-delay="0" data-duration="normal">PODCAST</h5>		
4534			<h1>ABM Insider</h1>		
4535			<h2>Ep.4: Discover common challenges when leading marketing teams and the core competencies needed to be an effective manager</h2>		
4536			<a href="#abm-insider-ep4">
4537			<svg xmlns="http://www.w3.org/2000/svg" width="344" height="345" viewBox="0 0 344 345" fill="none"><g clip-path="url(#clip0_71_47)"><path d="M324 0H20C8.9543 0 0 8.9543 0 20V325C0 336.046 8.95432 345 20 345H324C335.046 345 344 336.046 344 325V20C344 8.95431 335.046 0 324 0Z" fill="#FEBE98"></path><path d="M238.193 182.301H217.596H196.999C193.801 182.301 190.904 181.004 188.807 178.905C186.711 176.806 185.416 173.905 185.416 170.703C185.416 167.5 186.711 164.599 188.807 162.5C190.904 160.401 193.801 159.104 196.999 159.104H211.802H226.604C237.268 159.104 246.927 154.777 253.915 147.774C260.902 140.777 265.229 131.106 265.229 120.427C265.229 109.749 260.908 100.077 253.915 93.0803C246.927 86.0834 237.268 81.7507 226.604 81.7507H208.582H190.56C188.78 81.7507 187.173 82.4719 186.007 83.6399C184.841 84.8078 184.12 86.4171 184.12 88.1986V146.208C184.12 149.411 182.825 152.312 180.729 154.411C178.632 156.51 175.735 157.807 172.537 157.807C169.339 157.807 166.442 156.51 164.346 154.411C162.249 152.312 160.954 149.411 160.954 146.208V109.469V72.7301C160.954 70.9486 160.234 69.3393 159.067 68.1714C157.901 67.0034 156.294 66.2822 154.515 66.2822H74.6961C72.917 66.2822 71.3098 67.0034 70.1435 68.1714C68.9771 69.3393 68.2568 70.9486 68.2568 72.7301V152.656C68.2568 154.438 68.9771 156.047 70.1435 157.215C71.3098 158.383 72.917 159.104 74.6961 159.104H148.076C151.274 159.104 154.171 160.401 156.267 162.5C158.363 164.599 159.659 167.5 159.659 170.703C159.659 173.905 158.363 176.806 156.267 178.905C154.171 181.004 151.274 182.301 148.076 182.301H111.386H74.6961C72.917 182.301 71.3098 183.022 70.1435 184.19C68.9771 185.358 68.2568 186.968 68.2568 188.749V268.675C68.2568 270.457 68.9771 272.066 70.1435 273.234C71.3098 274.402 72.917 275.123 74.6961 275.123H154.515C156.294 275.123 157.901 274.402 159.067 273.234C160.234 272.066 160.954 270.457 160.954 268.675V195.197C160.954 191.995 162.249 189.094 164.346 186.995C166.442 184.895 169.339 183.598 172.537 183.598C175.735 183.598 178.632 184.895 180.729 186.995C182.825 189.094 184.12 191.995 184.12 195.197V224.202V253.207C184.12 254.988 184.841 256.597 186.007 257.765C187.173 258.933 188.78 259.654 190.56 259.654H238.193C248.857 259.654 258.516 255.327 265.503 248.325C272.491 241.328 276.818 231.656 276.818 220.978C276.818 210.3 272.496 200.628 265.503 193.631C258.516 186.634 248.857 182.301 238.193 182.301Z" fill="#120049"></path></g><defs><clipPath id="clip0_71_47"><rect width="344" height="345" fill="white"></rect></clipPath></defs></svg>			</a>
4538			<a href="https://open.spotify.com/episode/6DclrLssAgD1u5RY0laxLL?si=6fMaQEuCR92HCzeD8YZx7w">
4539			<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="#1ed760" d="M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8Z"></path><path d="M406.6 231.1c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3zm-31 76.2c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm-26.9 65.6c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4z"></path></svg>			</a>
4540			<a href="https://podcasts.apple.com/bg/podcast/episode-3-brandon-young/id1715919774?i=1000643980372">
4541			<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" viewBox="0 0 70 70"><defs><style>.cls-1{fill:url(#linear-gradient);fill-rule:evenodd;}.cls-2{fill:#fff;}</style><linearGradient id="linear-gradient" x1="35" y1="72" x2="35" y2="2" gradientTransform="translate(0 72) scale(1 -1)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f452ff"></stop><stop offset="1" stop-color="#832bc1"></stop></linearGradient></defs><path d="m68.62,60.67c-.68,1.73-2.24,4.15-4.48,5.88-1.28.98-2.82,1.94-4.92,2.57-2.24.68-5.02.89-8.47.89h-31.5c-3.45,0-6.21-.23-8.47-.89-2.1-.63-3.64-1.56-4.92-2.57-2.22-1.7-3.8-4.15-4.48-5.88-1.35-3.48-1.38-7.42-1.38-9.92h0v-31.5h0c0-2.5.02-6.44,1.38-9.92.68-1.73,2.24-4.15,4.48-5.88,1.28-.98,2.82-1.94,4.92-2.57,2.26-.65,5.02-.89,8.47-.89h31.5c3.45,0,6.21.23,8.47.89,2.1.63,3.64,1.56,4.92,2.57,2.22,1.7,3.8,4.15,4.48,5.88,1.38,3.48,1.38,7.44,1.38,9.92v31.5c0,2.5-.02,6.44-1.38,9.92Z"></path><path d="m41,42.26c-.09-.84-.37-1.45-.93-2.01-1.05-1.1-2.89-1.82-5.06-1.82s-4.01.7-5.06,1.82c-.54.58-.84,1.17-.93,2.01-.19,1.63-.07,3.03.12,5.3.19,2.15.54,5.02.98,7.91.33,2.08.58,3.2.82,3.99.4,1.31,1.82,2.43,4.08,2.43s3.71-1.14,4.08-2.43c.23-.79.49-1.91.82-3.99.44-2.92.79-5.76.98-7.91.21-2.26.3-3.66.12-5.3Z"></path><path d="m40.74,30.36c0,3.17-2.57,5.74-5.74,5.74s-5.74-2.57-5.74-5.74,2.57-5.74,5.74-5.74,5.74,2.59,5.74,5.74Z"></path>
4541<path d="m34.93,7.75c-13.39.05-24.36,10.92-24.55,24.31-.14,10.85,6.79,20.14,16.47,23.54.23.09.47-.12.44-.35-.12-.84-.26-1.68-.35-2.52-.05-.3-.23-.54-.49-.68-7.65-3.34-13-11.01-12.9-19.9.12-11.67,9.64-21.16,21.28-21.26,11.92-.09,21.65,9.57,21.65,21.47,0,8.8-5.32,16.36-12.9,19.69-.28.12-.47.37-.49.68-.12.84-.23,1.68-.35,2.52-.05.26.21.44.44.35,9.59-3.36,16.47-12.51,16.47-23.24-.05-13.58-11.13-24.64-24.73-24.62Z"></path><path d="m34.37,15.91c-8.73.33-15.73,7.54-15.84,16.26-.07,5.74,2.8,10.83,7.21,13.84.21.14.51-.02.51-.28-.07-1-.07-1.89-.02-2.82.02-.3-.09-.58-.33-.79-2.68-2.52-4.32-6.11-4.22-10.08.19-7,5.81-12.69,12.81-12.97,7.61-.3,13.86,5.81,13.86,13.32,0,3.83-1.63,7.28-4.22,9.73-.21.21-.33.49-.33.79.05.91.02,1.8-.02,2.8-.02.26.28.44.51.28,4.34-2.96,7.21-7.98,7.21-13.63.02-9.29-7.75-16.82-17.13-16.45Z"></path></svg>			</a>
4542			<img width="1196" height="1196" src="https://hunterandbard.com/wp-content/uploads/2024/01/ABM-Insider-BrandonYoung-ep4.png" alt="" srcset="https://hunterandbard.com/wp-content/uploads/2024/01/ABM-Insider-BrandonYoung-ep4.png 1x,https://hunterandbard.com/wp-content/uploads/2024/01/ABM-Insider-BrandonYoung-ep4.png 2x" data-column-space="auto" data-lazyload="" data-grve-filter="yes" decoding="async" />		
4543		<p>What’s the difference between leadership and management? How do you manage and grow a successful marketing team? In our fourth episode of ABM Insider, Shira talks with <a href="https://www.linkedin.com/in/brandonayoung" target="_blank" rel="noreferrer noopener">Brandon Young</a>, CMO of <a href="https://www.wespire.com/" target="_blank" rel="noreferrer noopener">WeSpire</a> about his experience in marketing leadership, team growth, effective management and the tools he prefers to help keep his team organized and productive. Brandon also discusses what backgrounds have produced some of the strongest marketers and why empathizing with your sales team can help you develop a better marketing strategy. We hope you enjoy our latest podcast in the ABM Insider series, hosted by Hunter and Bard CEO Shira Abel. </p><p><em><strong>Podcast sneak peek: </strong>Catch a glimpse of our engaging discussion in this quick highlight video. For an in-depth exploration, be sure to listen to the full podcast episode below.</em></p>		
4544			<video controls poster=""><source src="https://hunterandbard.com/wp-content/uploads/2024/01/ABM-Insider-BrandonYoung-ep4.mp4" type="video/mp4"></video>		
4545		<h3>Discover the key competencies in being an effective leader, and how to get your team up-to-speed on new processes</h3><p>Brandon is the CMO of WeSpire, a software company that focuses on helping other companies design, run and measure employee experience programs to improve social, environmental, and business outcomes. With decades of experience in marketing, leadership and people management, Brandon joins Shira to discuss the core competencies an effective leader needs to manage their team and the processes that help keep them on track to meeting their objectives. </p><p>Brandon shares his thoughts on the state of product marketing in technology and the traits that are commonly sought after by the tech industry. He delves into keys of strong management principles and technology marketing tech-stack he prefers to use when managing teams. Brandon also shares his thoughts on some of the core competencies and skills that any marketer needs to have in their arsenal to set them apart from the competition and help them stand out as a leader in their team. </p>		
4546		<p>“If you don't care about people, you probably don’t have the desirous skill set to be a manager...even if you are successful in your own eyes because you get the promotions you want, you have to really measure yourself by the people you supported along the way...” </p>		
4547													<img width="1196" height="1196" src="https://hunterandbard.com/wp-content/uploads/2024/01/ABM-Insider-BrandonYoung-ep4.png" alt="" srcset="https://hunterandbard.com/wp-content/uploads/2024/01/ABM-Insider-BrandonYoung-ep4.png 1196w, https://hunterandbard.com/wp-content/uploads/2024/01/ABM-Insider-BrandonYoung-ep4-300x300.png 300w, https://hunterandbard.com/w
4547p-content/uploads/2024/01/ABM-Insider-BrandonYoung-ep4-1024x1024.png 1024w, https://hunterandbard.com/wp-content/uploads/2024/01/ABM-Insider-BrandonYoung-ep4-150x150.png 150w, https://hunterandbard.com/wp-content/uploads/2024/01/ABM-Insider-BrandonYoung-ep4-768x768.png 768w, https://hunterandbard.com/wp-content/uploads/2024/01/ABM-Insider-BrandonYoung-ep4-560x560.png 560w, https://hunterandbard.com/wp-content/uploads/2024/01/ABM-Insider-BrandonYoung-ep4-900x900.png 900w" sizes="(max-width: 1196px) 100vw, 1196px" />													
4548		<p>Listen to the whole episode below to hear Brandon and Shira’s entire conversation, and be sure to check out future episodes of ABM Insider wherever you listen to your podcasts. In Episode 5, Shira is joined by Craig Conlee, Growth Strategist with Siemens.</p>		
4549			<iframe title="Embed Player" style="border:none" src="https://play.libsyn.com/embed/episode/id/29757233/height/192/theme/modern/size/large/thumbnail/no/cu..." height="192" width="100%" scrolling="no" allowfullscreen="" webkitallowfullscreen="true" mozallowfullscreen="true" oallowfullscreen="true" msallowfullscreen="true"></iframe>		
4550													<img width="765" height="765" src="https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast.png" alt="Shira Abel, CEO of Hunter and Bard award-winning ABM agency" srcset="https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast.png 765w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-300x300.png 300w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-150x150.png 150w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-560x560.png 560w, https://hunterandbard.com/wp-content/uploads/2023/11/elementor/thumbs/Shira_ABM-insider-podcast-qf43fmx5kfqj5mir2ydu0nmtmn87915huhe1edaukg.png 160w" sizes="(max-width: 765px) 100vw, 765px" />													
4551		<p>Tap into a wealth of marketing insights and direct dialogue with industry experts. Join the ABM conversation and connect with our podcast host, Shira Abel, on LinkedIn. </p>		
4552			<a href="https://www.linkedin.com/in/shiraabel" target="_blank" rel="noopener">
4553		Connect with Shira
4554	</a>`,seoTitle:"ABM Insider Ep.4: Leading Marketing Teams"},{id:"23662",title:"Our Favorite 5 AI Marketing Tools Right Now and Why",slug:"our-favorite-5-ai-marketing-tools-right-now-and-why",category:"Enterprise Marketing",seoDescription:"Five AI marketing tools B2B teams are using right now. From content to analytics, enterprise-ready AI tools that actually improve marketing output.",excerpt:"Every day another 3756 AI tools are launched to the market, give or take 73. Yes, we're in an AI bubble, but that doesn't mean that AI is irrelevant or hype....",readTime:5,tldr:"",image:cP,content:`<p>Every day another 3756 AI tools are launched to the market, give or take 73. Yes, we're in an AI bubble, but that doesn't mean that AI is irrelevant or hype. It just means that too many businesses are being started that are simply wrappers of the real technology and don't have enough value to stand the course of time. Those companies will eventually die off, and when that happens it will feel like the dotcom bubble burst of 2000 all over again.</p><p>In my opinion AI will completely change the way organizations are run. Just like machinery in a factory automating tasks, AI will make strategy, research, and writing faster. It will be the editor and the colleague helping us brainstorm. Just as ChatGPT 4 is a world of difference from Chat GPT3.5, Chat GPT 5 will be an insane improvement on GPT4.</p><blockquote><p>The key about all of the generative AI platforms is that the results you get are directly related to your level of expertise and the prompt you put in. Being a "prompt engineer" isn't as helpful as being an expert and learning how to craft a prompt, which is a relatively simple process if you're an expert in a subject. </p></blockquote><p>My favorite prompt framework comes from <a href="https://www.trustinsights.ai/insights/instant-insights/instant-insights-how-to-write-an-effective-chatgpt-prompt/">Trust Insights Chris Penn</a>:</p><ul><li>
4554Role</li><li>Action</li><li>Context</li><li>Execute</li></ul><p>Here's a real example of a prompt I've used recently in Perplexity.ai: "You're a senior events designer. Look up <a href="https://www.linkedin.com/in/stessacohen/">Stessa Cohen</a> who worked at Gartner and is a Fintech expert and Shira Abel and suggest workshops they could create and sell together." (I don't have to qualify myself as I am the only person with my name.)</p><p>We're using AI daily at Hunter &amp; Bard. Mainly for internal process mapping, data analysis, and image creation. These are the tools we use the most right now:</p><h2>1. Marketing: <a href="https://chat.openai.com/">Chat GPT 4</a> (Paid)</h2><p>I use ChatGPT4 almost daily. It's written a grad school recommendation letter for one of my Marketing for Technology Startups students, mapped out a process that I had in my head and wanted organized, and even helped me put together an outline of a plan I am working on. </p><h3>Things to Know</h3><ul><li>Get the paid version for $20 a month. </li><li>It's great at asking questions to help you find holes in things. Throw your documents in and ask it what's missing.</li><li>Check everything. Never trust any information given. All things must be fact checked. Hallucinations are real.</li><li>ChatGPT doesn't learn new things after its latest update. If you're looking for trends, there are better platforms. </li><li>Not great at reading PDFs. </li><li>Can make your own GPTs and it's relatively simple to do. I've created an internal one for Hunter &amp; Bard to help level up our team decision making. </li></ul><h2>2. Marketing: <a href="https://gemini.google.com/advanced">Gemini Advanced</a> (2 months free)</h2><p>This is new and already worth it. Want a spreadsheet made so you can import it into Google Spreadsheets? Yup, you can do that here. </p><h3 style="font-variant-ligatures: normal; font-variant-caps: normal; color: #120049; letter-spacing: normal;">Things to Know</h3><ul><li>Get the paid version for $20 a month (first 2 months free). </li><li>Google search integration, which is insanely powerful and up to date.</li><li>Is constantly evolving - this with the Google integration are two key differentiators from Chat GPT4. </li><li>Multi-modal expertise.</li><li>Aims for speed and efficiency with a wider range of outputs.</li><li>Not available for business accounts yet.</li></ul><img src="https://hunterandbard.com/wp-content/uploads/2024/02/Google_Gemini_Search_Shira_Abel.webp" alt="" width="999" height="306" /><h2>3. Design: Adobe Firefly </h2><p>The only ethical solution on the market as its trained the engine through public domain work and Adobe's stock image library. This means it's not the best solution, as it has a smaller dataset to train from. We use this occasionally to create images for decks. AI images are obvious, so our design team uses it sparingly. </p><h3>Things to know</h3><ul><li>Part of the Adobe Creative Cloud, subscription required.</li><li>Can edit images as well as create. For the purposes of this post we're focusing on the creation aspect.</li><li>Can learn your preferences and stay true to your look and feel.</li><li>Commercial use allowed.</li><li>Images are generated with metadata to indicate their AI-assisted origin.</li></ul><h2>4. Marketing: <a href="https://www.perplexity.ai/">Perplexity.ai</a></h2><p>We use Perplexity.ai for research of all types. It's different from Google as it's not limited to a single search engine. I've been using for research since it gives attribution to each fact (significantly easier to check and the information is up-to-date).</p><ul><li>Haven't had the need for the paid version as of yet.</li><li>Fantastic for research, the best I've used by far. I love the integration with Co-Pilot.</li><li>Prioritizes in-depth explanations. providing summaries and citations to back up its research. It is meant to be an enterprise platform, so its research and data analysis are top notch.</li><li>Gives clear terms for business use, so IP is less of a concern (there's a reason why Gemini will not allow a Google Suite email to purchase yet.)</li><li>Content research, content research, content research.</li><li>A lot of the information on the search is old, and some of it is 
4554wrong (I was a consultant for AXA Tech, spoke at the SKO for Allianz, consultant for eToro, journalist for TNW...) but it at least gave me something.</li></ul><h2><img src="https://hunterandbard.com/wp-content/uploads/2024/02/Perplexity_Search_Shira_Abel-1024x791.png" alt="" width="1024" height="791" /></h2><h2>   5. Copywriters: <a href="https://claude.ai/">Claude.ai</a> (Paid)</h2><p>I've been told by too many people that they use Claude.ai to augment their writing to not mention it here. That's a double negative and I'm keeping it. You get my point.</p><ul><li>$20 a month.</li><li>Augments your copywriting and content marketing.</li><li>Was able to confirm that the first sentence above contained a double negative, while Gemini told me it didn't know who Claude was.</li><li>This was what I used to write the grad school recommendation letter for my student.</li><li>If you write, I personally recommend Claude.ai</li></ul><h1>Things to Know About AI</h1><p>They hallucinate. You cannot just plug things in and assume all of the information is 100% correct, period. From what I understand this will remain. As such, we don't have to worry about them replacing humans, even if they are making things significantly faster.  <br />AI really is the gamechanger that marketers are saying it will be. Don't wait to learn how to harness the power of generative AI. To become an expert at using something you need to spend time on it. The longer you wait, the further behind you will be.</p><p>Note: The image above was created by <a href="https://www.midjourney.com/home">Midjourney</a>, a personal favorite.</p>`,seoTitle:"Our Favorite 5 AI Marketing Tools Right Now"},{id:"23717",title:"ABM Insider Podcast Ep.5: Discover strategic PLG best-practices",slug:"abm-insider-podcast-ep5-discover-strategic-plg-best-practices",category:"ABM & Pipeline",seoDescription:"ABM Insider Ep.5: Craig Conlee of Siemens shares PLG best practices and how to scale product-led growth with strategic ABM principles.",excerpt:"PODCAST ABM Insider Ep.5: Discover how you can scale your PLG business with strategic ABM principles...",readTime:3,tldr:"",content:`<h5 data-style="style-3" data-delay="0" data-duration="normal">PODCAST</h5>		
4555			<h1>ABM Insider</h1>		
4556			<h2>Ep.5: Discover how you can scale your PLG business with strategic ABM principles</h2>		
4557			<a href="#abm-insider-ep4">
4558			<svg xmlns="http://www.w3.org/2000/svg" width="344" height="345" viewBox="0 0 344 345" fill="none"><g clip-path="url(#clip0_71_47)"><path d="M324 0H20C8.9543 0 0 8.9543 0 20V325C0 336.046 8.95432 345 20 345H324C335.046 345 344 336.046 344 325V20C344 8.95431 335.046 0 324 0Z" fill="#FEBE98"></path><path d="M238.193 182.301H217.596H196.999C193.801 182.301 190.904 181.004 188.807 178.905C186.711 176.806 185.416 173.905 185.416 170.703C185.416 167.5 186.711 164.599 188.807 162.5C190.904 160.401 193.801 159.104 196.999 159.104H211.802H226.604C237.268 159.104 246.927 154.777 253.915 147.774C260.902 140.777 265.229 131.106 265.229 120.427C265.229 109.749 260.908 100.077 253.915 93.0803C246.927 86.0834 237.268 81.7507 226.604 81.7507H208.582H190.56C188.78 81.7507 187.173 82.4719 186.007 83.6399C184.841 84.8078 184.12 86.4171 184.12 88.1986V146.208C184.12 149.411 182.825 152.312 180.729 154.411C178.632 156.51 175.735 157.807 172.537 157.807C169.339 157.807 166.442 156.51 164.346 154.411C162.249 152.312 160.954 149.411 160.954 146.208V109.469V72.7301C160.954 70.9486 160.234 69.3393 159.067 68.1714C157.901 67.0034 156.294 66.2822 154.515 66.2822H74.6961C72.917 66.2822 71.3098 67.0034 70.1435 68.1714C68.9771 69.3393 68.2568 70.9486 68.2568 72.7301V152.656C68.2568 154.438 68.9771 156.047 70.1435 157.215C71.3098 158.383 72.917 159.104 74.6961 159.104H148.076C151.274 159.104 154.171 160.401 156.267 162.5C158.363 164.599 159.659 167.5 159.659 170.703C159.659 173.905 158.363 176.806 156.267 178.905C154.171 181.004 151.274 182.301 148.076 182.301H111.386H74.6961C72.917 182.301 71.3098 183.022 70.1435 184.19C68.9771 185.358 68.2568 186.968 68.2568 188.749V268.675C68.2568 270.457 68.9771 272.066 70.1435 273.234C71.3098 274.402 72.917 275.123 74.6961 275.123H154.515C156.294 27
45585.123 157.901 274.402 159.067 273.234C160.234 272.066 160.954 270.457 160.954 268.675V195.197C160.954 191.995 162.249 189.094 164.346 186.995C166.442 184.895 169.339 183.598 172.537 183.598C175.735 183.598 178.632 184.895 180.729 186.995C182.825 189.094 184.12 191.995 184.12 195.197V224.202V253.207C184.12 254.988 184.841 256.597 186.007 257.765C187.173 258.933 188.78 259.654 190.56 259.654H238.193C248.857 259.654 258.516 255.327 265.503 248.325C272.491 241.328 276.818 231.656 276.818 220.978C276.818 210.3 272.496 200.628 265.503 193.631C258.516 186.634 248.857 182.301 238.193 182.301Z" fill="#120049"></path></g><defs><clipPath id="clip0_71_47"><rect width="344" height="345" fill="white"></rect></clipPath></defs></svg>			</a>
4559			<a href="https://open.spotify.com/episode/09VC8EfhlGXBvDmQxXBVS0?si=ef340124636342ab">
4560			<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="#1ed760" d="M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8Z"></path><path d="M406.6 231.1c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3zm-31 76.2c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm-26.9 65.6c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4z"></path></svg>			</a>
4561			<a href="https://podcasts.apple.com/bg/podcast/episode-5-craig-conlee/id1715919774?i=1000646650129">
4562			<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" viewBox="0 0 70 70"><defs><style>.cls-1{fill:url(#linear-gradient);fill-rule:evenodd;}.cls-2{fill:#fff;}</style><linearGradient id="linear-gradient" x1="35" y1="72" x2="35" y2="2" gradientTransform="translate(0 72) scale(1 -1)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f452ff"></stop><stop offset="1" stop-color="#832bc1"></stop></linearGradient></defs><path d="m68.62,60.67c-.68,1.73-2.24,4.15-4.48,5.88-1.28.98-2.82,1.94-4.92,2.57-2.24.68-5.02.89-8.47.89h-31.5c-3.45,0-6.21-.23-8.47-.89-2.1-.63-3.64-1.56-4.92-2.57-2.22-1.7-3.8-4.15-4.48-5.88-1.35-3.48-1.38-7.42-1.38-9.92h0v-31.5h0c0-2.5.02-6.44,1.38-9.92.68-1.73,2.24-4.15,4.48-5.88,1.28-.98,2.82-1.94,4.92-2.57,2.26-.65,5.02-.89,8.47-.89h31.5c3.45,0,6.21.23,8.47.89,2.1.63,3.64,1.56,4.92,2.57,2.22,1.7,3.8,4.15,4.48,5.88,1.38,3.48,1.38,7.44,1.38,9.92v31.5c0,2.5-.02,6.44-1.38,9.92Z"></path><path d="m41,42.26c-.09-.84-.37-1.45-.93-2.01-1.05-1.1-2.89-1.82-5.06-1.82s-4.01.7-5.06,1.82c-.54.58-.84,1.17-.93,2.01-.19,1.63-.07,3.03.12,5.3.19,2.15.54,5.02.98,7.91.33,2.08.58,3.2.82,3.99.4,1.31,1.82,2.43,4.08,2.43s3.71-1.14,4.08-2.43c.23-.79.49-1.91.82-3.99.44-2.92.79-5.76.98-7.91.21-2.26.3-3.66.12-5.3Z"></path><path d="m40.74,30.36c0,3.17-2.57,5.74-5.74,5.74s-5.74-2.57-5.74-5.74,2.57-5.74,5.74-5.74,5.74,2.59,5.74,5.74Z"></path><path d="m34.93,7.75c-13.39.05-24.36,10.92-24.55,24.31-.14,10.85,6.79,20.14,16.47,23.54.23.09.47-.12.44-.35-.12-.84-.26-1.68-.35-2.52-.05-.3-.23-.54-.49-.68-7.65-3.34-13-11.01-12.9-19.9.12-11.67,9.64-21.16,21.28-21.26,11.92-.09,21.65,9.57,21.65,21.47,0,8.8-5.32,16.36-12.9,19.69-.28.12-.47.37-.49.68-.12.84-.23,1.68-.35,2.52-.05.26.21.44.44.35,9.59-3.36,16.47-12.51,16.47-23.24-.05-13.58-11.13-24.64-24.73-24.62Z"></path><path d="m34.37,15.91c-8.73.33-15.73,7.54-15.84,16.26-.07,5.74,2.8,10.83,7.21,13.84.21.14.51-.02.51-.28-.07-1-.07-1.89-.02-2.82.02-.3-.09-.58-.33-.79-2.68-2.52-4.32-6.11-4.22-10.08.19-7,5.81-12.69,12.81-12.97,7.61-.3,13.86,5.81,13.86,13.32,0,3.83-1.63,7.28-4.22,9.73-.21.21-.33.49-.33.79.05.91.02,1.8-.02,2.8-.02.26.28.44.51.28,4.34-2.96,7.21-7.98,7.21-13.63.02-9.29-7.75-16.82-17.13-16.45Z"></path></svg>			</a>
4563			<img width="1196" height="1196" src="https://hunterandbard.com/w
4563p-content/uploads/2024/02/Ep5-CraigConlee-thumbnail.webp" alt="" srcset="https://hunterandbard.com/wp-content/uploads/2024/02/Ep5-CraigConlee-thumbnail.webp 1x,https://hunterandbard.com/wp-content/uploads/2024/02/Ep5-CraigConlee-thumbnail.webp 2x" data-column-space="auto" data-lazyload="" data-grve-filter="yes" decoding="async" />		
4564		<p>What is a persona and how do you define a persona in an industry or how it relates to users for your PLG? In our fifth episode of ABM Insider, Shira talks with <a href="https://www.linkedin.com/in/craigconlee" target="_blank" rel="noreferrer noopener">Craig Conlee</a>, Growth Strategist at <a href="https://www.linkedin.com/company/siemenssoftware" target="_blank" rel="noreferrer noopener">Siemens</a> about his experience with PLG and startup growth, and why an account-based marketing strategy can help fuel and propel growth for your PLG to help you scale your product in new markets. Craig also discusses his background in sales and how personalization in marketing can help optimize your marketing qualified leads.  We hope you enjoy our latest podcast in the ABM Insider series, hosted by Hunter and Bard CEO Shira Abel. </p><p><em><strong>Podcast sneak peek: </strong>Catch a glimpse of our engaging discussion in this quick highlight video. For an in-depth exploration, be sure to listen to the full podcast episode below.</em></p>		
4565			<video controls poster=""><source src="https://hunterandbard.com/wp-content/uploads/2024/02/ABM-Insider-Promo-ep5-CraigConlee.mp4" type="video/mp4"></video>		
4566		<h3>Discover how to optimize your PLG growth with account-based marketing strategies</h3><p>Craig is the Growth Strategist at Siemens, with decades of experience in PLG and scaling startups and he joins Shira to discuss the importance of understanding your target audience and developing personas to help your go to market strategies. Whether you’re starting your PLG startup, or you’re scaling, Craig underlines the importance of developing your ideal customer profile and curating your account-based marketing strategy to personalize content toward your ICP.  </p><p>Craig also discusses the tech marketing stack you need today to help you scale your PLG. With a keen focus on understanding the user’s journey, Craig shares his knowledge on which tools will help you understand your customer funnel and how those tools can help your PLG, and startup optimize the conversion funnel. </p>		
4567		<p>“The idea is to close and expand, cross-sell, based upon product usage. Understanding your personas and target market are very important. To learn and loop your findings into marketing and leverage account-based marketing and to feed upon this whole loop.... the NorthStar metric for product led sales is expansion.” </p>		
4568													<img width="1196" height="1196" src="https://hunterandbard.com/wp-content/uploads/2024/02/Ep5-CraigConlee-thumbnail.webp" alt="" srcset="https://hunterandbard.com/wp-content/uploads/2024/02/Ep5-CraigConlee-thumbnail.webp 1196w, https://hunterandbard.com/wp-content/uploads/2024/02/Ep5-CraigConlee-thumbnail-300x300.webp 300w, https://hunterandbard.com/wp-content/uploads/2024/02/Ep5-CraigConlee-thumbnail-1024x1024.webp 1024w, https://hunterandbard.com/wp-content/uploads/2024/02/Ep5-CraigConlee-thumbnail-150x150.webp 150w, https://hunterandbard.com/wp-content/uploads/2024/02/Ep5-CraigConlee-thumbnail-768x768.webp 768w, https://hunterandbard.com/wp-content/uploads/2024/02/Ep5-CraigConlee-thumbnail-560x560.webp 560w, https://hunterandbard.com/wp-content/uploads/2024/02/Ep5-CraigConlee-thumbnail-900x900.webp 900w" sizes="(max-width: 1196px) 100vw, 1196px" />													
4569		<p>Listen to the whole episode below to hear Craig and Shira’s entire conversation, and be sure to check out future episodes of ABM Insider wherever you listen to your podcasts. In Episode 6, Shira is joined by Randy Brasche, founder of Adaptive B2B Solutions. </p>		
4570			<iframe title="Embed Player" src="https://play.libsyn.com/embed/episode/id/30085193/height/192/theme/modern/size/large/thumbn
4570ail/no/cu..." height="192" width="100%" scrolling="no" allowfullscreen="" webkitallowfullscreen="true" mozallowfullscreen="true" oallowfullscreen="true" msallowfullscreen="true" style="border: none;"></iframe>		
4571													<img width="765" height="765" src="https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast.png" alt="Shira Abel, CEO of Hunter and Bard award-winning ABM agency" srcset="https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast.png 765w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-300x300.png 300w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-150x150.png 150w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-560x560.png 560w, https://hunterandbard.com/wp-content/uploads/2023/11/elementor/thumbs/Shira_ABM-insider-podcast-qf43fmx5kfqj5mir2ydu0nmtmn87915huhe1edaukg.png 160w" sizes="(max-width: 765px) 100vw, 765px" />													
4572		<p>Tap into a wealth of marketing insights and direct dialogue with industry experts. Join the ABM conversation and connect with our podcast host, Shira Abel, on LinkedIn. </p>		
4573			<a href="https://www.linkedin.com/in/shiraabel" target="_blank" rel="noopener">
4574		Connect with Shira
4575	</a>`,seoTitle:"ABM Insider Ep.5: Strategic PLG Best Practices"},{id:"23897",image:MP,imageAlt:"AI generated editorial photograph of a fintech networking reception in a Manhattan corner conference room, produced from a detailed art-director brief",heroGrade:"wasabi",title:"Testing AI Image Generation Again: What Changed By 2026",slug:"testing-3-different-ai-platforms-to-generate-images",category:"Enterprise Marketing",author:"Shira Abel",datePublished:"2026-07-27",dateModified:"2026-07-27",seoTitle:"AI Image Generation Tested Again: 2026 Results",faqSchema:[{question:"Which AI image model is best in 2026?",answer:"It depends on the job. GPT Image follows a detailed cast list most reliably and produces the most shippable frame. Nano Banana handles set dressing and props best, though it lights faces too kindly. Flux 2 has the most photographic color and grain, and it ignores numeric instructions like aspect ratio."},{question:"Does the prompt or the model matter more for AI image quality?",answer:"The brief. We ran the same three models minutes apart on an ordinary 2024-style prompt and on a full art-director brief. The models were identical. The results were not. Anatomy, text rendering, and ph
4575otorealism are solved, so the remaining variable is how specifically you direct casting, lens behavior, lighting, and color."},{question:"Why do AI images still look like AI?",answer:"Symmetry, evenly lit faces, and a hero skyline. Models default to prettiness when the brief leaves room for it. Naming the cast, the crop, the practical lights, and an explicit list of negatives removes most of the tells."},{question:"Should B2B companies use AI generated images on enterprise landing pages?",answer:"For supporting imagery, decks, and blog headers, generate it. For hero images and campaign anchors, write a full art-director brief or hire a photographer. For anything showing your team, product, or customers, never generate. One fake face makes an enterprise buyer re-audit every claim on the page."}],seoDescription:"Two rounds, three models. We ran GPT Image, Nano Banana, and Flux 2 on a thin prompt, then on a full art-director brief. In 2026 the brief decides the image.",excerpt:"We ran the same AI image test twice: once with an ordinary prompt, once with a real art-director brief. Same three models, minutes apart, very different results. In 2026 the brief decides the image.",readTime:8,tldr:"Round one used a normal prompt and produced normal AI images: competent, polished, and quietly wrong on casting. Round two used a full art-director brief with named cast, lens behavior, practical lighting, and explicit negatives, and the same three models produced photographs. In 2026 the brief decides the image.",content:`<p>You need one photograph for the landing page. The stock library options all look like a 2014 SaaS brochure, and the AI version comes out looking like an AI version. That is where most marketing teams sit with generated imagery right now.</p><p>The last time we tested AI image generation, the question was whether these tools could produce a single usable photo at all. That question is closed. So we ran the test differently: two rounds, three models, one scene. Round one uses the same prompt we used in 2024. Round two uses a prompt built for what these models can do today. Both rounds ran today, on the same models, so the comparison is fair.</p><p>The models are OpenAI's GPT Image, Google's Nano Banana (Gemini's image model), and Flux 2. The standard is unchanged: would I put this on a landing page for an event we are selling tickets to?</p><h2>Round one: the ordinary brief</h2><blockquote><p>Editorial press photograph of a fintech networking reception: men and women in tailored suits standing in small groups talking, holding drinks, inside a glass-walled boardroom high in a Manhattan skyscraper, late afternoon light, mixed ages and ethnicities, candid documentary realism, shot on a full-frame camera at 35mm, natural color.</p></blockquote><p>That is a fine prompt by 2024 standards. It names a subject, a place, a time of day, a camera, and a mood. One shot per model, no retries, and no cherry-picking.</p><h3>OpenAI GPT Image</h3><figure><img src="/__l5e/assets-v1/9029d3af-bb7e-478f-a2aa-d34072014486/ai-2026-gpt.webp" alt="AI generated photo of a fintech networking reception, OpenAI GPT Image, round one" width="1280" height="853" loading="lazy" /><figcaption>Round one, GPT Image: correct hands, real name badges, believable light.</figcaption></figure><p>The most shippable of the three. Hands are correct for the most part, the badges read as badges instead of smeared text, and the light behaves like light coming through glass at 5pm. People are cropped, backs are turned, nobody is posing. The remaining tell is the grade, flat and cool in the way stock photography is flat. The skyline looks more like watercolor than a photo.</p><h3>Google Nano Banana</h3><figure><img src="/__l5e/assets-v1/b747e481-070e-434a-b47a-a004deecf345/ai-2026-gemini.webp" alt="AI generated photo of a fintech networking reception, Google Nano Banana, round one" width="1280" height="853" loading="lazy" /><figcaption>Round one, Nano Banana: symmetrical, the outline of the people is an AI tell, and slightly too perfect to be a real photo.</figcaption></figure><p>Technically the most beautiful image thanks to the skyline. The skyline is pretty without being detailed, the room is perfectly symmetrical, and every single face is lit. Real photographers do not get that lucky.</p><h3>Flux 2</h3><figure><img src="/__l5e/assets-v1/a72fe465-cfa4-401b-8220-fbafce16572c/ai-2026-flux.webp" alt="AI generated photo of a fintech networking reception, Flux 2, round one" width="1280" height="853" loading="lazy" /><figcaption>Round one, Flux 2: photographically convincing, and it quietly ignored half the brief.</figcaption></figure><p>The least convincing grade of the three in terms of AI faces. The image itself is warm and slightly hazy, exactly like a room shot into backlight. Then look at who is in the room. The brief said men and women. Flux delivered a wall of men in suits with two women pushed to the edge of frame and out of focus. Ask for a demographic in the abstract and the model gives you the demographic it saw most in training.</p><h2>Why the brief has to change</h2>{{block:0}}<p>
4575Anatomy, text rendering, and photorealism used to consume the model's entire attention budget, so extra brief detail was wasted effort. Everything the model has stopped struggling with is capacity you can now spend on what still fails: casting, art direction, lens behavior, and grade.</p><p>Round one failed on exactly those axes, because nobody told the models what to do. The prompt needs details, such as a Black woman in her late 40s in a charcoal double-breasted suit, mid-sentence, gesturing with a wine glass. That sentence is a casting call. <em>Mixed ages and ethnicities</em> is a wish.</p><h2>Round two: the art-director brief</h2><blockquote><p>Editorial documentary press photograph, candid, of a fintech networking reception in progress. Cast, exactly as described: a Black woman in her late 40s in a charcoal double-breasted suit, mid-sentence, gesturing with a wine glass; a South Asian man in his early 30s in a rumpled blue oxford shirt with no jacket, listening, head tilted; a white woman in her 60s with short silver hair in a burgundy knit dress, laughing with her eyes closed; an East Asian man in his 20s in a black turtleneck, half out of frame at the right edge, checking his phone. Two blurred people in the near foreground, backs of heads only, cropped by the frame edge. Location: a corner conference room on the 41st floor of an older Manhattan office tower, west-facing windows, a scuffed walnut credenza with abandoned glassware and a crumpled napkin, one ceiling downlight burned out. Time: 5:40pm in late September, low raking sun from camera left, warm practical light from a table lamp mixing with cool daylight. Camera: full-frame, 35mm, f/2, 1/60s, ISO 1600, handheld, slight motion blur on the gesturing hand, focus on the woman's face. Grade: Kodak Portra 400 push, warm skin, muted greens, visible fine grain. Negatives: no symmetry, no centered composition, no hero skyline, nobody looking at the camera, no stock-photo polish, no evenly lit faces.</p></blockquote><p>Same three models, same rule: one prompt, one shot, no retries.</p><h3>OpenAI GPT Image, round two</h3><figure><img src="/__l5e/assets-v1/7ebd6208-3604-4a7c-a672-699a336df356/ai-2026-gpt-v2.webp" alt="AI generated photo of a fintech networking reception from a detailed art-director brief, OpenAI GPT Image" width="1280" height="853" loading="lazy" /><figcaption>Round two, GPT Image: the cast arrived exactly as written, including the man cropped at the right edge.</figcaption></figure><p>Every named person is present, in the right wardrobe, doing the right thing. The foreground heads are there. The credenza is there. The burned-out downlight is there. What the detail bought is control. This is the first frame that looks directed rather than sampled. The color is still slightly cooler and bluer than the warm film look the brief asked for, the composition is off-center, and the eyelines are correct.</p><h3>Google Nano Banana, round two</h3><figure><img src="/__l5e/assets-v1/e094d8a8-b2b9-41d1-8ee6-7422581f4d47/ai-2026-gemini-v2.webp" alt="AI generated photo of a fintech networking reception from a detailed art-director brief, Google Nano Banana" width="1280" height="853" loading="lazy" /><figcaption>Round two, Nano Banana: the most set-dressed frame, with the brass lamp and glassware exactly as briefed.</figcaption></figure><p>Nano Banana is the best listener of the three. It picked up the props nobody else bothered with: the brass table lamp, the coupe glasses, the folded napkin, and the patterned rug. It also added background people the brief did not ask for, which reads as a room rather than a scene. The lingering weakness is the same one from round one. It still lights everything a little too kindly. Left to its instincts it wants to make the picture pretty, and it will fight the negatives to get there.</p><h3>Flux 2, round two</h3><figure><img src="/__l5e/assets-v1/3fec1abb-e2e6-481d-8808-9316baba454c/ai-2026-flux-v2.webp" alt="AI generated photo of a fintech networking reception from a detailed art-director brief, Flux 2" width="1280" height="853" loading="lazy" /><figcaption>Round two, Flux 2: named casting fixed the demographic default, and the film grade is still the best of the three.</figcaption></figure><p>The interesting result. Round one's biggest failure, a room full of men, disappeared once the cast was named person by person. Flux has a defaults problem, and specificity solves it. The grade remains the most photographic of the three: the haze, the bloom off the window, and the grain in the shadows. Flux also ignored the requested aspect ratio and returned a square frame (it will follow every instruction except the one with a number in it), which keeps it the least controllable of the three.</p><h2>What this means if you need AI photos for your marketing</h2><p>In 2024 the question was whether AI imagery was usable at all. It is. The question now is what the image is doing for you, and how hard y
4575ou are willing to direct it.</p><ul><li>Supporting imagery, decks, and blog headers: generate it. The quality is past the threshold where anyone notices, and you save hours of stock library hunting.</li><li>Hero images, campaign anchors, and anything a buyer will spend more than three seconds on: write the round-two brief, or hire a photographer. Enterprise buyers pattern-match on credibility, and the polished-AI look is now a recognizable pattern.</li><li>Anything showing your team, product, or customers: never generate. The moment a buyer catches one fake face, every other claim on the page gets re-audited.</li></ul><p>The same three models produced both rounds, minutes apart. What changed between them is how much of the work the person writing the prompt was willing to do. Your output is a function of your expertise, and the expertise is art direction.</p><p>If you want help with your messaging and positioning, talk to us.</p>`,contentBlocks:[{type:"comparison-table",headers:["2024","2026"],rows:[["Hands, feet and faces broke constantly","Anatomy is a solved problem in all three models"],["Text and badges rendered as gibberish","Badges and signage render cleanly"],["Took 10+ attempts to get one usable frame","One prompt, one shot, two of three usable"],["Photorealism was the hard part","Photorealism is easy, casting and grade are the tells"],["Models refused or mangled people","Models render people well but still default to men in suits"]]}]},{id:"24124",title:"ABM Insider Podcast Ep.6: Discover how ABM can help your company attain hyper growth",slug:"abm-insider-podcast-ep6-discover-how-abm-can-help-your-company-attain-hyper-grow",category:"ABM & Pipeline",seoDescription:"ABM Insider Ep.6: Randy Brasche discusses post-pandemic ABM evolution and how B2B SaaS startups can achieve hyper-growth through enterprise ABM.",excerpt:"PODCAST ABM Insider Ep.6: Discover how ABM can help your company attain hyper growth .cls-1{fill:url(#linear-gradient);fill-rule:evenodd;}.cls-2{fill:#fff;}...",readTime:3,tldr:"",content:`<h5 data-style="style-3" data-delay="0" data-duration="normal">PODCAST</h5>		
4576			<h1>ABM Insider</h1>		
4577			<h2>Ep.6: Discover how ABM can help your company attain hyper growth </h2>		
4578			<a href="#abm-insider-ep6">
4579			<svg xmlns="http://www.w3.org/2000/svg" width="344" height="345" viewBox="0 0 344 345" fill="none"><g clip-path="url(#clip0_71_47)"><path d="M324 0H20C8.9543 0 0 8.9543 0 20V325C0 336.046 8.95432 345 20 345H324C335.046 345 344 336.046 344 325V20C344 8.95431 335.046 0 324 0Z" fill="#FEBE98"></path><path d="M238.193 182.301H217.596H196.999C193.801 182.301 190.904 181.004 188.807 178.905C186.711 176.806 185.416 173.905 185.416 170.703C185.416 167.5 186.711 164.599 188.807 162.5C190.904 160.401 193.801 159.104 196.999 159.104H211.802H226.604C237.268 159.104 246.927 154.777 253.915 147.774C260.902 140.777 265.229 131.106 265.229 120.427C265.229 109.749 260.908 100.077 253.915 93.0803C246.927 86.0834 237.268 81.7507 226.604 81.7507H208.582H190.56C188.78 81.7507 187.173 82.4719 186.007 83.6399C184.841 84.8078 184.12 86.4171 184.12 88.1986V146.208C184.12 149.411 182.825 152.312 180.729 154.411C178.632 156.51 175.735 157.807 172.537 157.807C169.339 157.807 166.442 156.51 164.346 154.411C162.249 152.312 160.954 149.411 160.954 146.208V109.469V72.7301C160.954 70.9486 160.234 69.3393 159.067 68.1714C157.901 67.0034 156.294 66.2822 154.515 66.2822H74.6961C72.917 66.2822 71.3098 67.0034 70.1435 68.1714C68.9771 69.3393 68.2568 70.9486 68.2568 72.7301V152.656C68.2568 154.438 68.9771 156.047 70.1435 157.215C71.3098 158.383 72.917 159.104 74.6961 159.104H148.076C151.274 159.104 154.171 160.401 156.267 162.5C158.363 164.599 159.659 167.5 159.659 170.703C159.659 173.905 158.363 176.806 156.267 178.905C154.171 181.004 151.274 182.301 148.076 182.301H111.386H74.6961C72.917 182.301 71.3098 183.022 70.1435 184.19C68.9771 185.358 68.2568 186.968 68.2568 188.749V268.675C68.2568 270.457 68.9771 272.066 70.1435 273.234C71.3098 274.402 72.917 275.123 74.6961 275.123H154.515C156.294 275.123 157.901 274.402 159.067 273.234C160.234 272.066 160.954 270.457 160.954 268.675V195.197C160.954 191.995 162.249 189.094 164.346 186.995C166.442 184.895 169.339 183.598 172.537 183.598C175.735 183.598 178.632 184.895 180.729 186.995C182.825 189.094 184.12 191.995 184.12 195.197V224.202V253.207C184.12 254.988 184.841 256.597 186.007 257.765C187.173 258.933 188.78 259.654 190.56 259.654H238.193C248.857 259.654 258.516 255.327 265.503 248.325C272.491 241.328 276.818 231.656 276.818 220.978C276.818 210.3 272.496 200.628 265.503 193.631C258.516 186.634 248.857 182.301 238.193 182.301Z" fill="#120049"></path></g><defs><clipPath id="clip0_71_47"><rect width="344" height="345" fill="white"></rect></clipPath></defs></svg>			</a>
4580			<a href="https://open.spotify.com/episode/3LdpV5fQ6gzg5ngjiiou2N?si=9uC31fJsSMiapIXlsOBM3Q">
4581			<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path fill="#1ed760" d="M248 8C111.1 8 0 119.1 0 256s111.1 248 248 248 248-111.1 248-248S384.9 8 248 8Z"></path><path d="M406.6 231.1c-5.2 0-8.4-1.3-12.9-3.9-71.2-42.5-198.5-52.7-280.9-29.7-3.6 1-8.1 2.6-12.9 2.6-13.2 0-23.3-10.3-23.3-23.6 0-13.6 8.4-21.3 17.4-23.9 35.2-10.3 74.6-15.2 117.5-15.2 73 0 149.5 15.2 205.4 47.8 7.8 4.5 12.9 10.7 12.9 22.6 0 13.6-11 23.3-23.2 23.3zm-31 76.2c-5.2 0-8.7-2.3-12.3-4.2-62.5-37-155.7-51.9-238.6-29.4-4.8 1.3-7.4 2.6-11.9 2.6-10.7 0-19.4-8.7-19.4-19.4s5.2-17.8 15.5-20.7c27.8-7.8 56.2-13.6 97.8-13.6 64.9 0 127.6 16.1 177 45.5 8.1 4.8 11.3 11 11.3 19.7-.1 10.8-8.5 19.5-19.4 19.5zm-26.9 65.6c-4.2 0-6.8-1.3-10.7-3.6-62.4-37.6-135-39.2-206.7-24.5-3.9 1-9 2.6-11.9 2.6-9.7 0-15.8-7.7-15.8-15.8 0-10.3 6.1-15.2 13.6-16.8 81.9-18.1 165.6-16.5 237 26.2 6.1 3.9 9.7 7.4 9.7 16.5s-7.1 15.4-15.2 15.4z"></path></svg>			</a>
4582			<a href="https://podcasts.apple.com/us/podcast/episode-6-randy-brasche-account-based-marketing-for/id1715919774?i=1000653697789">
4583			<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" id="Layer_1" viewBox="0 0 70 70"><defs><style>.cls-1{fill:url(#linear-gradient);fill-rule:evenodd;}.cls-2{fill:#fff;}</style><linearGradient id="linear-gradient" x1="35" y1="72" x2="35" y2="2" gradientTransform="translate(0 72) scale(1 -1)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f452ff"></stop><stop offset="1" stop-color="#832bc1"></stop></linearGradient></defs><path d="m68.62,60.67c-.68,1.73-2.24,4.15-4.48,5.88-1.28.98-2.82,1.94-4.92,2.57-2.24.68-5.02.89-8.47.89h-31.5c-3.45,0-6.21-.23-8.47-.89-2.1-.63-3.64-1.56-4.92-2.57-2.22-1.7-3.8-4.15-4.48-5.88-1.35-3.48-1.38-7.42-1.38-9.92h0v-31.5h0c0-2.5.02-6.44,1.38-9.92.68-1.73,2.24-4.15,4.48-5.88,1.28-.98,2.82-1.94,4.92-2.57,2.26-.65,5.02-.89,8.47-.89h31.5c3.45,0,6.21.23,8.47.89,2.1.63,3.64,1.56,4.92,2.57,2.22,1.7,3.8,4.15,4.48,5.88,1.38,3.48,1.38,7.44,1.38,9.92v31.5c0,2.5-.02,6.44-1.38,9.92Z"></path><path d="m41,42.26c-.09-.84-.37-1.45-.93-2.01-1.05-1.1-2.89-1.82-5.06-1.82s-4.01.7-5.06,1.82c-.54.58-.84,1.17-.93,2.01-.19,1.63-.07,3.03.12,5.3.19,2.15.54,5.02.98,7.91.33,2.08.58,3.2.82,3.99.4,1.31,1.82,2.43,4.08,2.43s3.71-1.14,4.08-2.43c.23-.79.49-1.91.82-3.99.44-2.92.79-5.76.98-7.91.21-2.26.3-3.66.12-5.3Z"></path><path d="m40.74,30.36c0,3.17-2.57,5.74-5.74,5.74s-5.74-2.57-5.74-5.74,2.57-5.74,5.74-5.74,5.74,2.59,5.74,5.74Z"></path>
4583<path d="m34.93,7.75c-13.39.05-24.36,10.92-24.55,24.31-.14,10.85,6.79,20.14,16.47,23.54.23.09.47-.12.44-.35-.12-.84-.26-1.68-.35-2.52-.05-.3-.23-.54-.49-.68-7.65-3.34-13-11.01-12.9-19.9.12-11.67,9.64-21.16,21.28-21.26,11.92-.09,21.65,9.57,21.65,21.47,0,8.8-5.32,16.36-12.9,19.69-.28.12-.47.37-.49.68-.12.84-.23,1.68-.35,2.52-.05.26.21.44.44.35,9.59-3.36,16.47-12.51,16.47-23.24-.05-13.58-11.13-24.64-24.73-24.62Z"></path><path d="m34.37,15.91c-8.73.33-15.73,7.54-15.84,16.26-.07,5.74,2.8,10.83,7.21,13.84.21.14.51-.02.51-.28-.07-1-.07-1.89-.02-2.82.02-.3-.09-.58-.33-.79-2.68-2.52-4.32-6.11-4.22-10.08.19-7,5.81-12.69,12.81-12.97,7.61-.3,13.86,5.81,13.86,13.32,0,3.83-1.63,7.28-4.22,9.73-.21.21-.33.49-.33.79.05.91.02,1.8-.02,2.8-.02.26.28.44.51.28,4.34-2.96,7.21-7.98,7.21-13.63.02-9.29-7.75-16.82-17.13-16.45Z"></path></svg>			</a>
4584			<img width="1132" height="1132" src="https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero.png" alt="" data-column-space="auto" data-lazyload="" data-grve-filter="yes" decoding="async" srcset="https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero.png 1132w, https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero-300x300.png 300w, https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero-1024x1024.png 1024w, https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero-150x150.png 150w, https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero-768x768.png 768w, https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero-560x560.png 560w, https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero-900x900.png 900w" sizes="(max-width: 1132px) 100vw, 1132px" />		
4585		<p>With the onset of the pandemic, ABM strategies have evolved and focusing on leads per campaign is no longer the main KPI. In our sixth episode of ABM Insider, Shira talks with <a href="https://www.linkedin.com/in/rbrasche" target="_blank" rel="noreferrer noopener">Randy Brasche,</a> founder of <a href="https://adaptiveb2b.com/" target="_blank" rel="noreferrer noopener">adaptiveb2b.com</a> and author of Some Assembly Required, a survival guide for B2B marketers, about the evolution of ABM post pandemic, how SaaS startups can attain hyper growth and the key performance indicators you need to focus on when optimizing your ABM go to market strategies. We hope you enjoy our latest podcast in the ABM Insider series, hosted by Hunter and Bard CEO Shira Abel. </p><p><em><strong>Podcast sneak peek: </strong>Catch a glimpse of our engaging discussion in this quick highlight video. For an in-depth exploration, be sure to listen to the full podcast episode below.</em></p>		
4586			<video controls poster=""><source src="https://hunterandbard.com/wp-content/uploads/2024/04/ABM-Insider-Promo-ep6-Randy-Brsche.mp4" type="video/mp4"></video>		
4587		<h3>Discover how to overcome the complexities of hyper growth when marketing to enterprise </h3><p>Randy is the founder of adaptiveb2b.com, author of Some Assembly Required, a survival guide for B2B marketers, and an expert marketing leader with over 25 years of experience in B2B SaaS marketing. He joins Shira to discuss the nuances and challenges of marketing to enterprise while managing and how to manage hyper growth. Randy emphasizes the importance of understanding the funnel and optimizing your go to marketing strategies with a keen focus on revenue and goals for each department rather than focusing solely on leads. </p><p>Randy also discusses the complexities that AI are introducing to ABM go to market strategies, and the challenges that accelerants like growth hacking strategies present to the success of ABM strategies.  </p><p> </p>		
4588		<p>“...If marketing knows exactly how much revenue has to be generated by line of business, that becomes the accountability for marketing, but it also helps the rest of the revenue team and CEO understand what you’re brining to the table...” </p>		
4589													<img width="1132" height="1132" src="https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero.png" alt="" srcset="https://hunterandbard.com/w
4589p-content/uploads/2024/04/ep-6-blog-hero.png 1132w, https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero-300x300.png 300w, https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero-1024x1024.png 1024w, https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero-150x150.png 150w, https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero-768x768.png 768w, https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero-560x560.png 560w, https://hunterandbard.com/wp-content/uploads/2024/04/ep-6-blog-hero-900x900.png 900w" sizes="(max-width: 1132px) 100vw, 1132px" />													
4590		<p>Listen to the whole episode below to hear Randy and Shira’s entire conversation, and be sure to check out future episodes of ABM Insider wherever you listen to your podcasts. In Episode 7, Shira is joined by Davis Potter, founder and CEO of ForgeX. </p>		
4591			<iframe title="Embed Player" style="border:none" src="
4592https://play.libsyn.com/embed/episode/id/31001148/height/192/theme/modern/size/large/thumbn
4592ail/no/custom-color/008080/time-start/00:00:00/hide-show/yes/hide-playlist/yes/hide-subscribe/yes/hide-share/yes/font-color/FFFFFF"
4593height="192" width="100%" scrolling="no" allowfullscreen="" webkitallowfullscreen="true" mozallowfullscreen="true" oallowfullscreen="true" msallowfullscreen="true"></iframe>		
4594													<img width="765" height="765" src="https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast.png" alt="Shira Abel, CEO of Hunter and Bard award-winning ABM agency" srcset="https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast.png 765w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-300x300.png 300w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-150x150.png 150w, https://hunterandbard.com/wp-content/uploads/2023/11/Shira_ABM-insider-podcast-560x560.png 560w, https://hunterandbard.com/wp-content/uploads/2023/11/elementor/thumbs/Shira_ABM-insider-podcast-qf43fmx5kfqj5mir2ydu0nmtmn87915huhe1edaukg.png 160w" sizes="(max-width: 765px) 100vw, 765px" />													
4595		<p>Tap into a wealth of marketing insights and direct dialogue with industry experts. Join the ABM conversation and connect with our podcast host, Shira Abel, on LinkedIn. </p>		
4596			<a href="https://www.linkedin.com/in/shiraabel" target="_blank" rel="noopener">
4597		Connect with Shira
4598	</a>`,seoTitle:"ABM Insider Ep.6: ABM for Hyper Growth"},{id:"6013",image:tP,heroGrade:"wasabi",imageAlt:"Editorial black and white photograph of a hand holding a smartphone displaying a text conversation, illustrating B2B SMS outreach",title:"B2B SMS Outreach Best Practices: How to Unblock Enterprise Deals Without Getting Reported",slug:"b2b-sms-outreach-best-practices",category:"ABM & Pipeline",seoTitle:"B2B SMS Outreach: Tactics That Unblock Deals",seoDescription:"A practical guide to B2B SMS outreach: TCPA-safe consent, message structure, timing, and the moments where texting unblocks enterprise sales.",ogImage:"https://hunterandbard.com/__l5e/assets-v1/a8a1e08c-7442-460c-a41d-18c8a1284fec/og-b2b-sms-outreach.jpg",excerpt:"SMS is the most over-promised, under-used channel in B2B. Used in the right moments, with the right consent, it is the fastest way to unblock stalled enterprise deals. Used badly, it is a lawsuit waiting to happen.",readTime:8,author:"Shira Abel",datePublished:"2026-06-29",globalFeaturedOrder:4,dateModified:"2026-06-30",tldr:"B2B SMS is not a top-of-funnel channel. Cold texts to scraped numbers violate TCPA and torch your brand. SMS earns its keep in the middle and bottom of the funnel: confirming meetings, nudging stalled deals, and reaching champions who have gone dark in email. The rules are simple: get explicit consent, identify yourself, keep messages under 160 characters, send during business hours in the recipient's timezone, and always give an opt-out. Done this way, SMS becomes the fastest way to unblock enterprise pipeline you already have.",faqSchema:[{question:"What is B2B SMS outreach?",answer:"B2B SMS outreach is the use of text messages between businesses, typically between a seller and a buyer inside a target account. In an enterprise sales motion it is not a prospecting channel. It is a velocity layer used to confirm meetings, nudge stalled deals after a demo, and reach a champion during procurement and security review. The recipient has already shared their number for the purpose the message serves."},{question:"Is cold B2B SMS legal in the United States?",answer:"No. The TCPA requires prior express written consent before sending any marketing text to a mobile number, and that rule applies to business contacts as well as consumers. A business card, a LinkedIn profile, or a purchased list does not count as consent. Cold marketing texts to scraped numbers expose the sender to statutory damages of $500 to $1,500 per message and are commonly the basis for class action lawsuits."},{question:"What are the TCPA penalties for non-compliant B2B texts?",answer:"TCPA statutory damages are $500 per violation for ordinary violations and up to $1,500 per violation when the court finds the sender willfully or knowingly violated the statute. Eac
4598h individual message counts as a separate violation, which is why TCPA cases are routinely filed as class actions and routinely settle in the seven and eight figures."},{question:"Is B2B SMS outreach legal?",answer:"In the US, SMS outreach is governed by the TCPA, which requires prior express written consent before sending marketing texts to a mobile number. Transactional texts (meeting confirmations, document delivery, support replies) to contacts who have given you their number for that purpose carry less risk, but consent still matters. Cold SMS to scraped numbers is not safe and exposes the sender to statutory damages of $500 to $1,500 per message."},{question:"When does SMS outperform email in B2B sales?",answer:"SMS wins in three moments: confirming or rescheduling booked meetings, reviving a deal that has gone quiet after a strong demo, and reaching a champion in the final week of a procurement cycle. In each case, the recipient already knows you, has shared their number, and is dealing with email overload. A short, specific text gets a faster response than a fifth email."},{question:"What should a B2B sales text actually say?",answer:"Identify yourself and your company in the first sentence. State the one thing you need (a yes/no, a date, a document). Keep it under 160 characters so it lands as a single message. Include a clear opt-out on the first message of any sequence. Do not pitch, do not attach links the recipient did not ask for, and never send outside business hours in their timezone."}],content:`<div class="blog-key-takeaways"><h2>Key Takeaways</h2><ul><li>SMS is a mid- and bottom-funnel channel in B2B. Treat it as a top-of-funnel cold channel and you will get reported, blocked, and sued.</li><li>The TCPA requires prior express written consent for marketing texts. Transactional texts to contacts who shared their number for that purpose are lower risk, but consent still matters.</li><li>The highest-leverage moments for B2B SMS are meeting confirmations, post-demo nudges, and procurement-stage check-ins with a known champion.</li><li>Good texts are short (under 160 characters), self-identifying, specific about the ask, and sent during the recipient's business hours.</li><li>SMS does not replace email or calls. It unblocks the deals you already have moving.</li></ul></div>
4599<p>In a relationship building sale (i.e. anything sales-led) you should be getting to know the people in the buying committee and exchanging personal numbers.&nbsp;</p>
4600
4601
4602<p>B2B teams that ignore SMS entirely or use it the way they use cold email are leaving money on the table. The first ignores a channel where response times are measured in minutes instead of days. The second torches the brand with the exact buyers it is trying to reach and exposes the company to TCPA liability.</p>
4603<p>SMS is a deal-unblocking channel. Used sparingly, in the right moments, with the right consent, it is the fastest tool in an enterprise seller's kit. Used wrong, it is a lawsuit and a reputation hit.</p>
4604<div class="blog-definition"><h3>What is B2B SMS outreach?</h3><p>B2B SMS outreach is the practice of using text messages between a seller and contacts inside a target account, typically to confirm meetings, follow up on a demo, or move a deal through procurement. In a compliant enterprise motion it is a velocity layer on top of email and calls, not a prospecting channel. The recipient has already shared their number for the purpose the message serves.</p></div>
4605<h2>SMS vs. email vs. LinkedIn for B2B</h2>
4606<p>Each channel has a job. The mistake is using one to do another's work.</p>
4607<div style="overflow-x:auto;margin:1.5rem 0"><table style="width:100%;border-collapse:collapse;font-size:15px"><thead><tr style="background:#f1f8f8;text-align:left"><th style="padding:12px;border:1px solid #ddeeee">Channel</th><th style="padding:12px;border:1px solid #ddeeee">Best for</th><th style="padding:12px;border:1px solid #ddeeee">Typical response time</th><th style="padding:12px;border:1px solid #ddeeee">Cold use?</th></tr></thead><tbody><tr><td style="padding:12px;border:1px solid #ddeeee"><strong>Email</strong></td><td style="padding:12px;border:1px solid #ddeeee">Discovery, documentation, longer asks, attachments</td><td style="padding:12px;border:1px solid #ddeeee">Hours to days</td><td style="padding:12px;border:1px solid #ddeeee">Yes, with care</td></tr><tr><td style="padding:12px;border:1px solid #ddeeee"><strong>LinkedIn</strong></td><td style="padding:12px;border:1px solid #ddeeee">First-touch warm intros, social proof, content-led nurture</td><td style="padding:12px;border:1px solid #ddeeee">Days</td><td style="padding:12px;border:1px solid #ddeeee">Yes, if personalized</td></tr><tr><td style="padding:12px;border:1px solid #ddeeee"><strong>SMS</strong></td><td style="padding:12px;border:1px solid #ddeeee">Meeting confirms, post-demo nudges, procurement check-ins</td><td style="padding:12px;border:1px solid #ddeeee">Minutes</td><td style="padding:12px;border:1px solid #ddeeee">No. Consent required.</td></tr></tbody></table></div>
4608<p>Email and LinkedIn open the relationship. SMS removes the friction inside it.</p>
4609<h2>The legal floor: what you have to know before you send anything</h2>
4610<p>In the United States, business-to-consumer texting is governed by the <a href="https://www.law.cornell.edu/uscode/text/47/227" target="_blank" rel="noopener noreferrer">
4610Telephone Consumer Protection Act (TCPA)</a>. Most B2B teams assume the TCPA does not apply to them because their recipients are professionals at companies, not consumers at home. That assumption is wrong. Mobile numbers, including the ones on a buyer's business card or LinkedIn profile, are covered. Statutory damages run $500 to $1,500 per message, and class actions are common.</p>
4611<p>The practical rules:</p>
4612<ul>
4613<li><strong>Marketing texts</strong> (anything promoting your product) require <em>prior express written consent</em>. A checkbox on a form, a signed agreement, or a documented opt-in. Not a business card. We don't recommend using this in sales to enterprise, unless it's related to a conference.&nbsp;</li>
4614<li><strong>Transactional texts</strong> (meeting confirmations, contract delivery, support replies) sent to someone who gave you their number for that purpose carry much lower risk. Document why they gave you the number. This is the most common for sales-to-enterprise.</li>
4615<li><strong>Every sequence needs an opt-out</strong>, and the opt-out has to work the first time. "Reply STOP to opt out" is the standard.</li>
4616<li><strong>Carrier rules</strong> are stricter than the law. US carriers require registration through <a href="https://www.campaignregistry.com/" target="_blank" rel="noopener noreferrer">The Campaign Registry</a> for A2P 10DLC traffic. Unregistered traffic gets filtered or blocked.</li>
4617</ul>
4618<p>None of this means SMS is off-limits. It means the channel works when you have a real reason the recipient gave you their number, and the reason matches what you are sending.</p>
4619<h2>Where SMS actually earns its keep in B2B</h2>
4620<p>SMS is not where you find new buyers. It is where you keep the ones you already have moving. Three moments produce almost all the return:</p>
4621<h3>1. Meeting confirmations and reschedules</h3>
4622<p>The single highest-ROI use of SMS in B2B sales. No-show rates on booked enterprise meetings hover between 20 and 40 percent depending on the segment. A short text 24 hours before the call ("Hi Maria, this is Shira from Hunter & Bard, confirming our call tomorrow at 10am PT. Reply Y to confirm or R to reschedule.") cuts that number in half. The recipient already agreed to the meeting. They gave you the number when they booked. The consent is clear and the message is transactional.</p>
4623<h3>2. Post-demo and post-proposal nudges</h3>
4624<p>Enterprise deals stall in the gap between a strong demo and the next concrete step. Champions go quiet because their inbox is buried under everything else. A single text two or three days after a meaningful moment ("Hi James, following up on Tuesday's demo. Any blockers I can help with before your team's review on Frid
4624ay?") gets a response when the fifth email does not. Send it once. Do not chase.</p>
4625<h3>3. Procurement and security-review check-ins</h3>
4626<p>In the final weeks of an enterprise cycle, your champion is fielding security questionnaires, legal redlines, and procurement requests. A short, specific text to confirm a document arrived or ask whether legal needs one more clause respects their time. It is the difference between being remembered as a partner and being remembered as another vendor adding to the pile.</p>
4627<h2>What a good B2B text actually looks like</h2>
4628<p>The structural rules are boring and they are the rules:</p>
4629<ul>
4630<li><strong>Identify yourself and your company in the first sentence.</strong> The recipient does not have you saved. A text from an unknown number that opens with "Hey" gets ignored or reported.</li>
4631<li><strong>One ask per message.</strong> A yes/no, a date, a single document. If you need more than that, send an email.</li>
4632<li><strong>Under 160 characters.</strong> Anything longer splits into multiple messages, looks like spam, and reads as needy.</li>
4633<li><strong>No links the recipient did not ask for.</strong> Unsolicited links in SMS are the fastest way to get carrier-filtered.</li>
4634<li><strong>Business hours in their timezone.</strong> A 7am text to a West Coast buyer from your East Coast desk is a small violation. Repeat violators get blocked.</li>
4635<li><strong>Opt-out language on the first message of any sequence.</strong> Even if the message is transactional, "Reply STOP to opt out" protects you and respects them.</li>
4636</ul>
4637<p>The pattern that works: <em>identify, reference the shared context, make one specific ask, give them an easy out</em>. Anything else is a pitch, and pitches do not belong in someone's text messages.</p>
4638<h2>The mistakes that kill the channel</h2>
4639<p>Most B2B SMS failures come from treating the channel like cold email with a smaller character count. The specific mistakes:</p>
4640<ul>
4641<li><strong>Scraped numbers.</strong> Buying a list of mobile numbers and texting them is illegal in most jurisdictions and guaranteed to get your sending number flagged. There is no version of this that works.</li>
4642<li><strong>Sequences of three, five, seven texts.</strong> Email cadences do not translate. One unanswered text means the recipient is busy or not interested. A second text two weeks later is fine. A second text two hours later is harassment.</li>
4643<li><strong>Pitching in the first message.</strong> "I help companies like yours grow revenue by 40 percent" in a text from an unknown number is the fastest way to get reported as spam.</li>
4644<li><strong>Using SMS to bypass an unresponsive channel.</strong> If a prospect is ignoring your emails, they are not going to be delighted that you texted instead. Re-evaluate the relationship before you escalate the channel.</li>
4645</ul>
4646<h2>How SMS fits into the rest of the funnel</h2>
4647<p>SMS is not a standalone channel. It is a velocity layer on top of channels that already work. Email and LinkedIn create the relationship and document the conversation. Calls do the discovery. SMS removes the friction between those moments. A buyer who agreed to a call gets a confirmation text. A champion who saw the demo gets a single nudge. A procurement contact who is missing one piece of paperwork gets a one-line reminder.</p>
4648<p>This is the same pattern we see in the broader shift in B2B buying: <a href="/resources/blog/cognitive-science-b2b-buying-why-your-company-needs-a-face" class="text-[#316263] font-bold underline">buyers want to know there is a real person behind the company</a>, and they want that person to respect their time. A well-timed text does both. A cold blast does neither.</p>
4649<h2>The 30-second decision rule</h2>
4650<p>Before you send any B2B text, ask three questions:</p>
4651<ol>
4652<li><strong>Did this person give me their number for the reason I am about to use it?</strong> If not, send an email.</li>
4653<li><strong>Can I make the message useful to them in under 160 characters?</strong> If not, send an email.</li>
4654<li><strong>Would I be comfortable if their general counsel saw this message?</strong> If not, do not send it.</li>
4655</ol>
4656<p>If you can answer yes to all three, SMS is the right channel and you should send it now. If you cannot, the deal is not blocked by communication. It is blocked by something else, and another message in another channel is not going to fix it. It could, in fact, hurt it.</p>
4657<p>SMS will not save a deal that was never qualified. It will not rescue a relationship that has already broken. What it will do is remove the small frictions that turn 90-day enterprise cycles into 180-day ones, and give your champion one more reason to think of you as the easy partner in their stack.</p>
4658<div class="blog-inline-cta"><p class="blog-inline-cta-eyebrow">Enterprise Strategy</p><h3>Your channels are only as good as your positioning</h3><p>SMS, email, and LinkedIn all fall flat when the underlying message is vague. Hunter & Bard's Enterprise Strategy engagement sharpens positioning and messaging so every channel, including the one in your buyer's pocket, has something worth saying.</p><a href="/services/enterprise-strategy" class="blog-inline-cta-link">Explore Enterprise Strategy →</a></div>`}],ab={6020:1,6014:2,6012:3,6011:4,6009:5,6008:6,6007:7,6006:8,6005:9},LP={ABM:{3137:1,16755:2,16842:3},"Enterprise Marketing":{50:1,465:2,23662:3},"Enterprise Strategy":{6004:1,422:2,51:3,52:4},Frameworks:{432:1,420:2,468:3,406:4},"Design Strategy":{6003:1}},DP=new Set(["1895","554","1534","2209","49"]),WP={"/contact/":"/contact","/clients-arent-converting-can-change/":"/resources/blog/why-your-clients-arent-converting-and-what-you-can-do-to-change-that","/is-the-sales-funnel-ruining-your-conversion-rate/":"/resources/blog/is-the-sales-funnel-ruining-your-conversion-rate","/content-thats-worth-your-time/":"/resources/blog/content-thats-worth-your-time","/social-media-kpis-what-matters/":"/resources/blog/social-media-kpis-what-matters","/5-compelling-reasons-blog-saas-website/":"/resources/blog/5-compelling-reasons-to-have-a-blog-on-your-saas-website","/behavior-engineering-canvas-framework/":"/resources/blog/behavior-engineering-canvas-and-framework","/consider-growth-hacking/":"/resources/blog/why-you-should-consider-growth-hacking","/importance-knowing-audience/":"/resources/blog/the-importance-of-knowing-your-audience","/marketing-debt-care/":"/resources/blog/marketing-debt-what-is-it-and-why-do-you-care","/content-marketing-plan-cover-4-core-content-types/":"/resources/blog/does-your-content-marketing-plan-cover-the-4-core-content-types","/calls-actions-actually-convert/":"/resources/blog/calls-to-actions-that-actually-convert","/definitive-guide-naming-company/":"/resources/blog/the-definitive-guide-to-naming-your-company","/fram
4658ing-matters-use-words-well/":"/resources/blog/framing-matters-use-your-words-well","/creating-useful-buyer-personas/":"/resources/blog/creating-useful-buyer-personas","/importance-setting-goals-marketing/":"/resources/blog/the-importance-of-setting-goals-in-marketing","/internal-branding-plus-five-ways-get-started/":"/resources/blog","/build-credibility-audience/":"/resources/blog/how-to-build-credibility-with-your-audience","/account-based-marketing-services/":"/services/enterprise-strategy","/marketing-and-sales-enablement-materials/":"/services/design-strategy","/crafting-marketing-sales-funnel-works/":"/resources/blog/crafting-the-marketing-sales-funnel-that-works-for-you","/b2b-key-decision-makers/":"/resources/blog/b2b-marketing-the-decision-making-process"};function qP(t){let e=t;e=e.replace(/https?:\/\/staging\.hunterandbard\.com\/contact\/?/g,"/contact");for(const[n,o]of Object.entries(WP)){const r=n.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),a=new RegExp(`https?://hunterandbard\\.com${r}`,"g");e=e.replace(a,o)}return e=e.replace(/https?:\/\/hunterandbard\.com\/(?!wp-content)([a-z0-9-]+)\/?/gi,(n,o)=>o?"/resources/blog":"/"),e=e.replace(/https?:\/\/hunterandbard\.com\/?(?=["'<\s])/g,"/"),e=e.replace(/\[caption[^\]]*\].*?(?:cdn2\.hubspot\.net|hunterandbard\.com\/wp-content\/uploads).*?\[\/caption\]/gs,""),e=e.replace(/<a[^>]*>\s*<img[^>]*(?:cdn2\.hubspot\.net|hunterandbard\.com\/wp-content\/uploads)[^>]*\/?\s*>\s*<\/a>/gi,""),e=e.replace(/<img[^>]*(?:cdn2\.hubspot\.net|hunterandbard\.com\/wp-content\/uploads)[^>]*\/?\s*>/gi,""),e=e.replace(/<img[^>]*src="[^"]*hubspot[^"]*"[^>]*>/gi,""),e=e.replace(/<a[^>]*>\s*<\/a>/gi,""),e=e.replace(/<p>\s*<\/p>/gi,""),e=e.replace(/<div[^>]*>\s*<\/div>/gi,""),e}Ym.forEach(t=>{ab[t.id]?(t.featured=!0,t.globalFeaturedOrder=ab[t.id]):t.globalFeaturedOrder=void 0;const e=NP(t),n=LP[e];n&&n[t.id]&&(t.featured=!0,t.featuredOrder=n[t.id]),DP.has(t.id)&&(t.thin=!0),t.content=qP(t.content)});const wN=t=>Ym.find(e=>e.slug===t),bN=(t,e=!1)=>[...t].sort((n,o)=>{if(n.thin&&!o.thin)return 1;if(!n.thin&&o.thin)return-1;const r=e?n.globalFeaturedOrder:n.featuredOrder,a=e?o.globalFeaturedOrder:o.featuredOrder,s=r!==void 0,i=a!==void 0;if(s&&!i)return-1;if(!s&&i)return 1;if(s&&i&&r!==a)return r-a;const l=n.datePublished?Date.parse(n.datePublished):-1/0,c=o.datePublished?Date.parse(o.datePublished):-1/0;return l!==c?c-l:0}),FP="/assets/dun-and-bradstreet-card-D3ggYBSl.jpg",sb="/assets/emerjplatformmockup-em99aHL1.jpg",HP="/assets/emerjbrandcollage-C93oi4in.jpg",zP="/assets/emerj_brand_application-WbtvuTy4.jpg",$P="/assets/emerj_website-CRTKkiPj.jpg",UP="/assets/emerj-pitch-deck-DjfNUy0c.png",YP="/assets/emerj-product-mvp-BWpCv6r1.gif",ib="/assets/collage-CCXWnf8f.png",VP="/assets/eye-CFfIcB0u.svg",GP="/assets/brain-BwPyQlAS.svg",KP="/assets/audit-BPwpNU3u.svg",JP="/assets/dead_deals-D1jjZ92d.svg",QP="/assets/heritage-KFd_cttr.svg",ZP="/assets/barchart-CC2DZDkw.svg",XP="/assets/speaker-B7cNOQ4I.svg",ej="/assets/404-Dd4JLiDF.svg",tj="/assets/brand-board-BwHum1I9.png",nj="/assets/barbara-rosario-Do7hXN-i.png",oj=1,rj="ac034c3f-3fab-4c1d-bf2c-73e9bff4b74c",aj="cfe06422-ea21-4b12-bd98-50c166e33f9f",sj="/__l5e/assets-v1/ac034c3f-3fab-4c1d-bf2c-73e9bff4b74c/sharpsee-hero-hd.webp",ij="a/v1/cfe06422-ea21-4b12-bd98-50c166e33f9f/ac034c3f-3fab-4c1d-bf2c-73e9bff4b74c/sharpsee-hero-hd.webp",lj="sharpsee-hero-hd.webp",cj=189696,hj="image/webp",uj="2026-07-21T21:21:30Z",nx={version:oj,asset_id:rj,project_id:aj,url:sj,r2_key:ij,original_filename:lj,size:cj,content_type:hj,created_at:uj},dj=1,pj="07c5fca6-3603-4b18-a353-4a728bf363f2",gj="cfe06422-ea21-4b12-bd98-50c166e33f9f",mj="/__l5e/assets-v1/07c5fca6-3603-4b18-a353-4a728bf363f2/coral-after-hero-hd.webp",fj="a/v1/cfe06422-ea21-4b12-bd98-50c166e33f9f/07c5fca6-3603-4b18-a353-4a728bf363f2/coral-after-hero-hd.webp",yj="coral-after-hero-hd.webp",wj=119372,bj="image/webp",vj="2026-07-21T21:21:36Z",ox={version:dj,asset_id:pj,project_id:gj,url:mj,r2_key:fj,original_filename:yj,size:wj,content_type:bj,created_at:vj},kj=nx.url,xj=ox.url,Sj=[{slug:"sharpsee",company:"Sharpsee",title:"Positioning & Messaging",subt
4658itle:"INDUSTRIAL SAFETY AI PLATFORM",role:"Design Partner",timeline:"2025",summary:"A full reposition and website messaging overhaul for an industrial computer vision platform. The new messaging repositions Sharpsee as a category-defining safety platform, without losing the technical credibility the category demands.",coverImage:{src:kj,alt:"Sharpsee Industrial Safety AI Platform - Brand Identity and Web Redesign by Hunter and Bard"},challenge:"Industrial safety buyers don't respond to startup aesthetics. The original Sharpsee site led with an acronym (IOISS), defaulted to light-mode SaaS conventions, and buried its value proposition behind feature lists. The platform had genuine urgency. The site communicated none of it. The challenge was to build a visual identity and web presence that matched the stakes of the product without losing the technical credibility the category demands.",keyDecisions:[{title:"Dark cinematic hero",description:"Rather than defaulting to a light-mode SaaS layout, the hero runs full-bleed dark with a scrim and left-aligned content column. All visual real estate on the right is given to footage of the product in context: equipment, workers, real industrial environments.",impact:"The hero reads as a category statement, not a software landing page. Industrial buyers recognize the environment immediately."},{title:"Orange as signal, not fill",description:"#FF6347 is used exactly once per section, on the single element that matters most. It never fills backgrounds. It never decorates. It functions the way warning indicators function on the factory floor: to direct attention.",impact:"The restraint makes every orange element feel like it means something, which mirrors how the product itself works."},{title:"Manrope 800 as editorial weight",description:"A single typeface at maximum weight for headings pulls the design toward editorial authority rather than SaaS approachability. Tight tracking on display headlines, comfortable leading on body.",impact:"The type system gives the weight that headlines like, 'The Math That Keeps CFOs Awake' and 'The Cost That Doesn't Fit on a Balance Sheet' need to land."}],solutionSections:[],outcomes:[{emoji:"🎨",title:"Category-Level Positioning",description:"A complete messaging system: tone, structure, and narrative, applied consistently across every section of the homepage."},{emoji:"👥",title:"Buyer-Facing Positioning",description:"A homepage that leads with consequences (accidents, shutdowns, liability) rather than features, structured for CFO and safety director audiences."},{emoji:"🚀",title:"Homepage as Sales Tool",description:"Every section sequenced to move a skeptical buyer: from urgency, to proof, to specificity, to action."}],testimonials:[],learnings:["The old site opened with the product name and the technology. The redesign opens with what inaction costs, because pushing off a decision is the most expensive option. Naming the settlement figure and the company closure rate changes the prospects risk assessment. Features come after you've earned the attention.","A product about accidents, liability, and shutdowns couldn't sound like a bright, friendly SaaS pitch. Matching the editorial tone to the stakes was most of the work.","Headlines came first, not last. Writing the risk-led narrative before anything else meant every section had somewhere to go, not just something to say."]},{slug:"coral-active",company:"Coral Active",title:"Positioning & Messaging",subtitle:"ENTERPRISE CONTACT CENTER PLATFORM",role:"Messaging Partner",timeline:"2025",summary:"A full repositioning and messaging overhaul, including sales materials (including sales deck, website, etc), for an enterprise agent desktop platform. The new messaging moves Coral Active from a technical description of its plumbing to a promise about what its customers can do: empower agents to deliver experiences their competitors cannot.",coverImage:{src:xj,alt:"Coral Active repositioning and messaging case study by Hunter & Bard"},challenge:"Coral Active sat inside a category buyers didn't shop by name. The original homepage led with 'The World's First Web Based Agent Desktop', framing the product as infrastru
4658cture. Buyers, contact center leaders responsible for CSAT, NPS, and cost per contact, don't procure a browser-based interface. They procure outcomes. The site talked about HTML5 and large-scale deployments before it talked about agents, customers, or business results.",keyDecisions:[],solutionSections:[],outcomes:[{emoji:"🎯",title:"Buyer-Led Homepage",description:"A homepage that opens with the outcome ('Empower your agents with the impossible') and treats the technical differentiators as proof, not premise."},{emoji:"👥",title:"Agent Experience as the Wedge",description:"Repositioned the product around the agent experience: the operational lever that determines CSAT, handle time, and first-call resolution."},{emoji:"📈",title:"Outcomes-First Proof",description:"The metrics buyers actually own, first-call resolution, ROI, handle time, transfer rate, brought forward as the site's proof structure."}],testimonials:[],learnings:["The old homepage led with what the product is ('a web-based agent desktop'). The new one leads with what the buyer can do ('empower your agents with the impossible'). Category-first framing works only when buyers already shop the category by name. Coral's buyers don't; they shop outcomes.","Agent experience is the wedge. CSAT and NPS are downstream of it, and every contact center leader knows it. Naming that lever explicitly, instead of hiding it inside a feature list, gave the homepage a spine.","Technical proof still matters, but it belongs after the promise, not in place of it. Multi-CTI, multi-CRM, cloud transition, all kept, all repositioned as evidence for the outcome rather than as the headline."]},{adminOnly:!0,slug:"shira-abel",company:"Shira Abel",title:"Personal Brand & Speaker Website",subtitle:"Website Design, Illustration & Brand System",role:"Design Partner",timeline:"2025",summary:"This foundational brand and platform build established the digital home for Shira Abel's personal brand as a keynote speaker and perception strategist. By architecting a visual system that bridges corporate and association credibility with creative distinction, the project successfully decoupled Shira's thought leadership from the agency's service offerings while reinforcing her status as a global industry expert.",coverImage:{src:ib,alt:"Shira Abel Personal Brand Website Design - High Authority Digital Presence"},challenge:"Shira Abel required a high-authority digital presence to support her global speaking career and perception strategy practice—distinct from the Hunter & Bard agency brand. The challenge was to communicate executive credibility to enterprise clients and professional associations while maintaining the approachability of a personal brand. The platform needed to showcase complex methodologies while providing a seamless conversion path for association boards, event organizers, and executive teams.",keyDecisions:[{title:"Concept Visualization",description:"Developed a custom illustration library to visualize abstract concepts like perception gaps and organizational diagnostics.",impact:"Established a signature visual language that made complex strategic frameworks instantly accessible for C-suite and association audiences alike."},{title:"Editorial Authority",description:"Implemented a high-end editorial typography hierarchy, blending serif display type with clean sans-serif body text.",impact:"Positioned the platform as a prestigious publishing-quality experience, elevating Shira's status as a published authority."},{title:"High-Intent Architecture",description:"Designed modular, self-contained service pages for keynotes and workshops optimized for direct traffic from global events and association conferences.",impact:"Created a frictionless path from audience interest to executive booking, treating each service as a high-conversion landing page."}],solutionSections:[{title:"Website Design Showcase",description:"A multi-page website spanning personal brand, services, speaking, workshops, blog, and diagnostics, with each page designed to convert a specific audience segment.",images:[{src:ib,alt:"Shira Abel Personal Brand Website Design - High Authority Digital Presence"}],linkUrl:"https://shiraabel.com",linkLabel:"View Live Site"},{title:"Style Guide",description:"A comprehensive design system documenting typography, color palette, component patterns, and usage guidelines, ensuring visual consistency across the entire site and future content.",images:[{src:tj,alt:"Shira Abel Brand Style Guide - Typography and Color Palette for Executive Authority"}]},{title:"Custom Illustrations",description:"A bespoke illustration library created specifically for Shira's brand. Each illustration visualizes a core concept from her perception strategy framework using a consistent hand-drawn aesthetic.",layout:"collage",images:[{src:VP,alt:"Custom strategic illustration for Shira Abel - Perception Strategy Framework"},{src:GP,alt:"Custom strategic illustration for Shira Abel - Strategic Thinking Framework"},{src:KP,alt:"Custom strategic illustration for Shira Abel - Diagnostic Audit Framework"},{src:JP,alt:"Custom strategic illustration for Shira Abel - Lost Revenue Analysis"},{src:QP,alt:"Custom strategic illustration for Shira Abel - Legacy and Credibility Framework"},{src:ZP,alt:"Custom strategic illustration for Shira Abel - Data and Results Framework"},{src:XP,alt:"Custom strategic illustration for Shira Abel - Keynote Speaking Framework"},{src:ej,alt:"Custom strategic illustration for Shira Abel - Playful Brand 404"}]}],outcomes:[{emoji:"🔗",title:"Strategic Brand Decoupling",description:"Successfully established a distinct visual and verbal identity for Shira's personal brand, separate from agency operations."},{emoji:"🖼️",title:"IP Visualization",description:"Created a proprietary illustration library that serves as the primary visual asset for workshops, association keynotes, and presentations."},{emoji:"🚀",title:"Conversion Optimization",description:"Delivered a multi-page platform that serves as a 24/7 sales engine for global speaking engagements and strategic workshops."}],testimonials:[],learnings:["Custom illustrations offer significantly higher brand recall than stock imagery for personal leadership brands.","A documented style guide is essential for maintaining brand integrity across a multi-channel personal platform.","Building service pages as standalone modules allows for rapid adaptation to new market needs, whether targeting corporate retreats or major association conferences."]},{adminOnly:!0,slug:"dun-and-bradstreet",company:"Dun & Bradstreet",title:"KYC & Risk Analytics",subtitle:"Enterprise Compliance Intelligence Platform",role:"Senior Product Designer",timeline:"2022 → 2025",summary:"This foundational engagement, delivered prior to Hunter & Bard, overhauled the KYC compliance screening workflows for Dun & Bradstreet. By architecting a new standard for risk intelligence visualization, the project directly contributed to the retention of multi-million dollar enterprise contracts and established a unified de
4658sign language for D&B's global compliance suite.",coverImage:{src:FP,alt:"Dun & Bradstreet KYC Compliance Platform Redesign - Risk Intelligence Visualization"},challenge:"High-stakes compliance screening often suffers from information overload, where officers struggle to distinguish system-automated results from cases requiring critical manual attention. The challenge was to bridge the gap between complex database schemas and human-centric risk assessment. The mission required a total redesign of the end-to-end investigation workflow, balancing rigorous WCAG accessibility standards with the technical constraints of a massive legacy infrastructure.",keyDecisions:[{title:"Cognitive Load Segmentation",description:"To reduce decision paralysis, the team architected a workspace that separates system-adjudicated entities from those requiring manual review.",impact:"This allowed compliance officers to prioritize high-risk investigations immediately, increasing throughput and accuracy."},{title:"Schema-to-Insight Transformation",description:"Rather than forcing users to decode raw database hierarchies, the design translated complex data into a 'glanceable' visual language of flags and excerpts.",impact:"Officers could assess entity risk at a glance, significantly accelerating the adjudication cycle."},{title:"Functional Accessibility Architecture",description:"When technical constraints limited custom screen-reader support, the team prioritized functional accessibility over visual aesthetics, working within existing component libraries to ensure total compliance.",impact:"The product shipped with genuine WCAG accessibility, ensuring the platform remained viable for high-stakes government and enterprise contracts."}],solutionSections:[{title:"Risk Intelligence",description:"Every interface in D&B's KYC compliance screening product was redesigned, from dashboard configuration to entity investigation workflows. Detailed interface images pending legal clearance.",images:[]}],outcomes:[{emoji:"💰",title:"Multi-Million Dollar Retention",description:"Directly supported the retention of high-value enterprise contracts by solving critical usability and workflow bottlenecks."},{emoji:"📊",title:"Global Design Standard",description:"The visual risk-categorization language developed in this project was adopted as the official standard for D&B's entire compliance product line."},{emoji:"♿",title:"True WCAG Compliance",description:"Delivered a platform that met strict accessibility mandates without sacrificing the complexity required for advanced risk analytics."}],testimonials:[],learnings:["In enterprise compliance, visual elegance must never come at the cost of functional inclusivity; design must work for every user to be legally viable.","When dealing with massive data sets, the most valuable design intervention is distilling database schemas into actionable human insights.","Success in legacy environments depends on designing with engineering limitations, not against them, to ensure a shippable and sustainable product."],youtubeVideoId:"NuoGESfmLng",interactiveDemo:{title:"Interactive Demo",description:"Beyond the KYC screening redesign, drove foundational work scaling design quality across D&B's compliance platform: design system migration ensuring WCAG compliance, 12+ features shipped annually, and built research infrastructure supporting the broader product team.",url:"https://dnb.tourial.com/compliance-intelligence-pdp"}},{adminOnly:!0,slug:"onecause",company:"OneCause",title:"Unified Platform Architecture",subtitle:"Nonprofit Fundraising Platform",role:"Product Designer (First design hire during team restructure)",timeline:"2021 → 2022",summary:"This foundational engagement established the architectural blueprint for a unified fundraising suite, integrating three previously disconnected product lines. By auditing complex legacy systems and deploying scalable design patterns, the project created a cohesive ecosystem that now serves over 10,000 nonprofit administrators.",coverImage:{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/9d6edb41-bb04-4107-addd-4fb96d8bd9dd/Screen+Shot+53.png?format=2500w",alt:"OneCause Unified Platform Interface - Enterprise SaaS Design by Hu
4658nter and Bard"},challenge:'Rapid growth through acquisition left OneCause with a fragmented ecosystem of specialized tools. Each had its own interface, navigation, and workflow. The strategic challenge was to eliminate this "product chaos" by architecting a unified interaction model. The mission was to reduce user friction and support overhead by transforming a collection of separate products into a single, intuitive enterprise platform.',keyDecisions:[{title:"Adaptive Dashboard Architecture",description:`To manage high architectural complexity, a progressive disclosure model was deployed. This allowed the interface to adapt dynamically to the user's level of expertise, offering a guided "Zero State" for new users and a high-density "Command Center" for power administrators.`,impact:"The dashboard successfully scaled from a simple setup tool to a real-time monitoring hub without overwhelming the user."},{title:"Reusable Page Patterns Across Product Lines",description:"The engagement identified and standardized a library of core interaction patterns, including contextual drawers, full-screen task panels, and unified form logic. These patterns were designed to handle the diverse needs of auction management and peer-to-peer campaigns within a single framework.",impact:"Established a consistent user experience across three previously disconnected product lines, significantly reducing the learning curve for administrators."},{title:"Story Mapping with Async Stakeholder Feedback",description:"To reconcile the needs of 15+ distributed stakeholders, a collaborative story-mapping framework was established. This allowed product, engineering, and success teams to contribute insights asynchronously, ensuring technical constraints were addressed before development began.",impact:"Accelerated the transition from exploratory research to execution by surfacing critical gaps early and building cross-functional consensus."}],solutionSections:[{title:"Adaptive Dashboard States",description:"The dashboard needed to serve both new users setting up their first event and experienced administrators managing multiple active fundraisers.",images:[{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/6d6dc307-fc25-481a-9f3e-d406e9912aac/zero.png?format=1000w",alt:"Adaptive Dashboard States: Zero State for new OneCause administrators - Enterprise SaaS Design by Hunter and Bard",caption:"Zero State: clean slate with guided setup for new users."},{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/190ee347-a344-4df7-be08-6ee3bcaea4ad/Events+_+Getting+Started.png?format=1000w",alt:"Adaptive Dashboard States: Getting Started progressive disclosure for OneCause - Enterprise SaaS Design by Hunter and Bard",caption:"Getting Started: progressive disclosure revealing functionality as users configure events."},{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/127da8b3-1bbf-4282-8f2b-cb2c75450b75/Events+_+built+out.png?format=1000w",alt:"Adaptive Dashboard States: Hero Command Center for OneCause power administrators - Enterprise SaaS Design by Hunter and Bard",caption:"Hero State: full command center with real-time fundraising monitoring and auction management."}]},{title:"Core Page Patterns",description:"To ensure consistency across acquired product lines, established three primary page patterns.",images:[{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/00efacb9-52c4-4657-ba2b-662867f39d2c/Task+Panel.png?format=2500w",alt:"Reusable UI patterns: Task Panel Drawer for OneCause unified platform - Enterprise SaaS Design by Hunter and Bard",caption:"Task Panel Drawer: slide-out panel for quick edits while maintaining dashboard awareness."},{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/9a7cb972-a5a7-4473-8c58-642d675e0d50/Accordion+example.png?format=2500w",alt:"Reusable UI patterns: Accordion Edit Page for OneCause unified platform - Enterprise SaaS Design by Hunter and Bard",caption:"Accordion Edit Page: multi-section forms with focused, expandable sections."}]},{title:"Research & Story Mapping",description:"Deep-dive analysis of three acquired products, mapping user flows and identifying 12+ instances of duplicated functionality with inconsistent patterns.",images:[{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/2ecd9cb3-c7ed-4445-970a-6f653586f11b/sob.png",alt:"Collaborative Story Mapping and Information Architecture for OneCause platform unification - Hunter and Bard",caption:"Story mapping overview: comprehensive maps covering the end-to-e
4658nd administrator experience."},{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/4f5d7865-60ff-4ebc-b6b6-55fca95636a8/sobstory.png",alt:"Asynchronous stakeholder feedback on story maps for OneCause platform unification - Hunter and Bard",caption:"Story mapping details: asynchronous feedback from 15+ stakeholders."},{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/5fca0d26-3ca6-4d1d-b051-db636ebdde0c/flowmappuserflow.png",alt:"Information Architecture user flows for OneCause unified platform - Hunter and Bard",caption:"Information architecture: detailed user flows documenting how the unified platform connects features."}]}],outcomes:[{emoji:"🏗️",title:"Unified Architecture",description:`Delivered the IA documentation and design patterns that served as the "North Star" for the product suite's evolution.`},{emoji:"📐",title:"Scalable Design System",description:"Created a library of reusable page patterns that now serve three distinct product lines with total visual and functional consistency."},{emoji:"🗺️",title:"Strategic North Star",description:"Provided comprehensive story maps and user flows that guided the engineering and product development for years following the engagement."}],testimonials:[],learnings:["High-level exploratory design requires rigorous validation checkpoints to ensure long-term alignment across distributed teams.",'Successful architecture projects depend on establishing clear alignment on success metrics and "Definition of Done" early in the research phase.',"Build in user testing throughout the design phase, not just at the end."]},{adminOnly:!0,slug:"vyrill",company:"Vyrill",title:"Creator Discovery & Analytics Platform",subtitle:"Video Influencer Marketplace & Analytics Platform",role:"Head of Design (Sole Designer)",timeline:"2018 → 2020",summary:"Delivered prior to Hunter & Bard, this engagement established the entire design foundation for Vyrill from the ground up. By defining the product strategy and shipping 20+ screens for their dual-sided marketplace, the work helped secure 'Cool Vendor' recognition from Gartner, laying the groundwork for the strategic frameworks we use at the agency today.",coverImage:{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/e7971e83-a21c-4e7b-bd40-216bfae8ee9c/photo_marketer+copy.png?format=2500w",alt:"Vyrill Creator Discovery Platform - AI Analytics Interface by Hunter and Bard"},challenge:`Brands struggled with fragmented workflows for influencer marketing, juggling multiple tools for discovery, communication, and licensing of user-generated video content. This inefficiency cost brands time and missed opportunities, while influencers lacked a centralized platform to monetize their content effectively.
4659
4660While Vyrill had successfully built the core technology for video analytics, the user interface remained fragmented, hindering enterprise adoption. The mission was to build a foundational design architecture from the ground up. Meaning, establishing the company's first unified design system and research methodology. This wasn't just about adding features; it was about creating a scalable visual and functional language that could support a rapidly growing global marketplace.`,keyDecisions:[{title:"Unified Communication Workflow Eliminated Tool-Switching",description:"Research across 10+ competitor platforms identified fragmented communication as the primary friction point for enterprise users. The solution involved architecting an integrated messaging system that consolidated discovery, negotiation, and licensing into a single, unified interface.",impact:"This strategic consolidation eliminated the need for external tools, allowing brands to move from initial discovery to signed licensing agreements within a single session."},{title:"Micro-Influencer Focus Maximized ROI",description:"Research revealed micro-influencers (10k-25k followers) drove 3.8% engagement vs. 2.0% for larger accounts. The product strategy was intentionally pivoted to prioritize discovery and filtering systems for these high-engagement creators, providing brands with a higher ROI-per-dollar spent.",impact:"The platform's discovery engine became optimized for high-value outcomes rather than vanity metrics, directly influencing Vyrill's competitive positioning in the creator economy."},{title:"AI-Powered Quality Scoring Built Trust at Scale",description:"Competitive analysis showed brands needed confidence in influencer authenticity. Interfaces were designed showcasing Vyrill's proprietary metrics: Brand Safety scores, bot detection, sentiment analysis, and FTC compliance indicators.",impact:`This visual data framework became a patent-pending technology and a key market differentiator, cited by anal
4660ysts as a primary reason for Vyrill's "Cool Vendor" status.`}],solutionSections:[{title:"Influencer Experience",description:"Designed Vyrill VIP (Video Influencer Platform), a dual-sided marketplace enabling influencers to monetize content and brands to discover, license, and track video performance.",images:[{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/2348845a-2a7d-43b1-85ed-33ce48225cd0/Screen+Shot+120.png",alt:"Vyrill VIP Influencer Dashboard - Personalized Onboarding and Monetization by Hunter and Bard",caption:"Personalized Onboarding & Dashboard: guides influencers through profile optimization while showing monetization potential."},{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/e9aebb20-1956-44fc-a62a-174fdab6f10f/Screen+Shot+121.png",alt:"Vyrill VIP Built-in Messaging System - Unified Communication Workflow by Hunter and Bard",caption:"Built-in Messaging System: integrated messaging keeps all licensing negotiations in-platform."},{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/124eb36c-53a7-4946-9683-344b2caf1791/Screen+Shot+124.png",alt:"Vyrill VIP AI-Powered Video Analytics Hub - Brand Safety and Sentiment Scoring by Hunter and Bard",caption:"Video Analytics & Licensing Hub: AI-powered video analysis with Brand Safety, Sentiment, and Diversity scores."},{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/97287132-f1df-451a-ba0a-65f24e6d5699/Screen+Shot+127.png",alt:"Vyrill VIP Portfolio Performance Dashboard - Aggregate Metrics and Trend Indicators by Hunter and Bard",caption:"Portfolio Performance Dashboard: aggregate metrics, trend indicators, and content quality scores."}]},{title:"Brand Experience",description:"Enterprise tools for discovering, evaluating, and licensing influencer content at scale.",images:[{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/d5401d05-0ac6-4028-b38a-9a8aa521a9a5/Screen+Shot+148.png",alt:"Patent-pending AI-powered demographic and diversity visualization for Vyrill - Hunter and Bard",caption:"Demographics & Diversity Insights: patent-pending AI-powered demographic analysis."},{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/ca4366be-b782-4db2-8392-41709eeb3c23/Screen+Shot+149.png",alt:"Vyrill Advanced Video Library - Multi-criteria Filtering and AI Topic Detection by Hunter and Bard",caption:"Advanced Video Library: multi-criteria filtering and AI-powered topic detection."},{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/a883d940-527b-4ce6-90f5-d7afa9892cc7/Screen+Shot+129.png",alt:"Vyrill Influencer Grid View - Visual Discovery with Verified Badges and Performance Metrics by Hunter and Bard",caption:"Influencer Grid View: visual discovery with Vyrill Verified badges and at-a-glance performance metrics."},{src:"https://images.squarespace-cdn.com/content/v1/68e3e4849154215b96c61219/d0c92f6b-3e86-49b1-b9e5-0094d9df9637/Screen+Shot+152.png",alt:"Vyrill Brand Profile - Network Diversity Visualization and Representation Gap Analysis by Hunter and Bard",caption:"Brand Profile: network diversity visualization and actionable insights for representation gaps."}]}],outcomes:[{emoji:"🏆",title:"Industry Recognition",details:[{label:"Gartner",text:"Cool Vendors in AI for Computer Vision, Q3 2019"},{label:"Forrester",text:"New Tech AI Services for Rich Media, Q3 2019"}]},{emoji:"📋",title:"Patent-Pending Innovation",description:"Contributed to provisional patent for demographic and diversity visualization in user-generated videos."},{emoji:"🔗",title:"Complete Marketplace Workflow",description:"Took the product from MVP to a functioning dual-sided marketplace under ambiguity and resource constraints."}],testimonials:[{quote:"She researched the market place and use cases, collaborated with our engineers and marketers very effectively to entirely re-design our (complex) platform. Her strengths are the ability to step back and consider the 'big picture' to inform the design and product interactions while also paying attention to detail.",name:"Barbara Rosario",role:"CTO & Co-Founder at Vyrill Inc.",image:nj}],learnings:["Resourcefulness over resources: figured it out without researchers, PMs, or senior designers to lean on.","Strategic thinking under pressure: every design decision impacts engineering velocity and fundraising timelines.","Ownership end-to-e
4660nd: saw designs through from concept to code to customer feedback."],youtubeVideoId:"jvJdGhyeNPM"},{adminOnly:!0,slug:"emerj",company:"Emerj",title:"Brand, Product & Pitch Design",subtitle:"Enterprise Mentoring Platform",role:"Brand & Product Designer",timeline:"Full Engagement",summary:"This comprehensive brand and product launch, delivered prior to Hunter & Bard, established Emerj as a credible contender in the enterprise mentoring space. By unifying brand identity, marketing strategy, and interactive prototyping under a single strategic vision, the project provided the full-stack foundation required for a successful market entry and investor validation.",coverImage:{src:sb,alt:"Emerj Enterprise Mentoring Platform Mockup - Brand and Product Design by Hunter and Bard"},challenge:"Entering the competitive enterprise HR-tech sector required more than just a functional tool. It required an institutional identity that commanded trust. The challenge was to build a 'Day Zero' presence from the ground up: creating a premium brand, an interactive MVP for enterprise sales demos, and an investor narrative capable of securing funding. The mission was to synthesize these four distinct workstreams (Brand, Web, Product, and Pitch) into one cohesive, launch-ready ecosystem.",keyDecisions:[{title:"Strategic Brand Architecture",description:"To differentiate from competitors, the team established a sophisticated visual language using a rich gradient palette and high-end typography.",impact:"This 'Enterprise-First' aesthetic allowed a seed-stage company to immediately command C-suite attention."},{title:"Product-Forward Conversion",description:"Rather than generic stock imagery, the website was designed to lead with the product, using high-fidelity visualizations to showcase the actual UX.",impact:"The website functioned as a 24/7 sales demo, significantly shortening the sales cycle."},{title:"Interactive Validation Framework",description:"Developed a high-fidelity interactive prototype to mirror the final product experience for testing and demos.",impact:"Validated core assumptions and secured vital stakeholder buy-in before any engineering investment."}],solutionSections:[{title:"Brand Identity",description:"Developed the complete brand system including logo, color palette, typography, and brand application guidelines, creating a cohesive visual language for all touchpoints.",images:[{src:HP,alt:"Emerj Brand Identity System: Logo, Typography, and Enterprise Color Palette - Hunter and Bard"},{src:zP,alt:"Emerj Brand Application Guidelines - Enterprise Visual Identity System by Hunter and Bard"}]},{title:"Website Design",description:"Designed and built a marketing website that communicates Emerj's value proposition and positions the platform for enterprise buyers.",images:[{src:$P,alt:"Emerj Marketing Website Design - Product-Forward Enterprise Positioning by Hunter and Bard"}]},{title:"Product MVP Prototype",description:"Created a high-fidelity interactive prototype of the mentoring platform, demonstrating core workflows for mentors, mentees, and administrators.",images:[{src:YP,alt:"Interactive MVP Prototype of Emerj Mentoring Platform for Mentors and Admins - Animated Walkthrough"},{src:sb,alt:"Emerj Enterprise Mentoring Platform Mockup - High-Fidelity Product Design by Hunter and Bard"}]},{title:"Pitch Deck",description:"Designed an investor-ready pitch deck that told the Emerj story through data, product vision, and market opportunity, aligned with the brand system for maximum impact.",images:[{src:UP,alt:"Investor-Ready Pitch Deck for Emerj - Narrative and Market Opportunity Design by Hunter and Bard"}]}],outcomes:[{emoji:"🎨",title:"Institutional Brand Integrity",description:"A complete visual identity system applied consistently across all touchpoints."},{emoji:"📱",title:"Pre-Development Validation",description:"An interactive MVP that served as the primary tool for early user testing and pivots."},{emoji:"📊",title:"Fundraising Catalyzation",description:"A unified brand and pitch deck that secured stakeholder confidence and supported fundraising."}],testimonials:[],learnings:["Designing brand and product simultaneously ensures the marketing promise matches the product delivery.","For enterprise buyers, a functional prototype is more persuasive than a static slide deck.","Building brand foundations first creates a coherent narrative that accelerates all downstream deliverables."]}],rx=t=>t.replace(/<!--[\s\S]*?-->/g," ").replace(/<[^>]+>/g," ").replace(/&nbsp;/g," ").replace(/&amp;/g,"&").replace(/&#\d+;/g," ").replace(/&[a-z]+;/g," ").replace(/\s+/g," ").trim(),Tj=[{title:"Home",description:"Hunter & Bard — B2B positioning & brand strategy",href:"/",category:"Pages"},{title:"About",description:"Our story and leadership",href:"/about",category:"Pages"},{title:"Contact",description:"Get in touch with our team",href:"/contact",category:"Pages"},{title:"Portfolio",description:"Case studies and client work",href:"/portfolio",category:"Pages"},{title:"Resources",description:"Blog, vlog, downloads, and more",href:"/resources",category:"Pages"},{title:"Blog",description:"Articles on B2B positioning, messaging, and US market entry",href:"/resources/blog",category:"Pages"}
4660,{title:"Vlog",description:"Short-form video insights on B2B marketing and strategy",href:"/resources/vlog",category:"Pages"},{title:"S.C.A.L.E. Framework",description:"Our framework for enterprise-ready positioning and messaging",href:"/resources/scale-framework",category:"Pages"},{title:"US Enterprise Messaging Audit",description:"Learn why your US enterprise deals stall, slip, or go to competitors",href:"/us-enterprise-audit",category:"Pages"},{title:"US Entry Cost Calculator",description:"Estimate the cost of entering the US with the wrong message and motion",href:"/us-entry-cost",category:"Pages"},{title:"The Martini Pipeline",description:"Talk: why the funnel is the wrong shape for enterprise pipeline",href:"/talks/martini-pipeline",category:"Pages"},{title:"Brand & Messaging Sprint",description:"2-week positioning and messaging sprint",href:"/products/sprint",category:"Pages"},{title:"US Market Intensive (3mo)",description:"3-month US market entry intensive",href:"/products/intensive",category:"Pages"},{title:"US Market Cohort (6mo)",description:"6-month guided cohort for US market entry",href:"/products/cohort",category:"Pages"},{title:"Apply to the Cohort",description:"Application for the 6-month US market entry cohort",href:"/products/cohort/apply",category:"Pages"},{title:"Marketing Strategy",description:"Custom marketing strategy for B2B enterprise buyers",href:"/services/marketing-strategy",category:"Pages"},{title:"Design & Brand Strategy",description:"Strategic design and brand positioning",href:"/services/design-strategy",category:"Pages"},{title:"Website Messaging",description:"Conversion-focused website design",href:"/services/website-design",category:"Pages"},{title:"Revenue Enablement",description:"Sales enablement and revenue-facing messaging",href:"/services/revenue-enablement",category:"Pages"},{title:"Privacy Policy",description:"How we handle your data",href:"/privacy",category:"Pages"},{title:"Terms of Service",description:"Terms and conditions for working with us",href:"/terms",category:"Pages"}],Aj=Ym.filter(t=>!(Array.isArray(t.category)?t.category:[t.category]).includes("ABM Insights")&&!t.adminOnly).map(t=>({title:t.title,description:t.excerpt,href:`/resources/blog/${t.slug}`,category:"Blog",body:rx(`${t.excerpt} ${t.content??""}`)})),_j=Sj.filter(t=>!t.adminOnly).map(t=>({title:`${t.company} — ${t.title}`,description:t.summary,href:`/portfolio/${t.slug}`,category:"Portfolio",body:rx([t.subtitle,t.summary,t.challenge,...(t.keyDecisions??[]).flatMap(e=>[e.title,e.description,e.impact]),...(t.solutionSections??[]).flatMap(e=>[e.title,e.description])].filter(Boolean).join(" "))})),Cj=[...Tj,...Aj,..._j],Ej=({open:t,onOpenChange:e})=>{const n=Is(),[o,r]=f.useState("");f.useEffect(()=>{t||r("")},[t]);const a=f.useCallback(d=>{e(!1),n(d)},[n,e]),s=o.trim().toLowerCase(),i=s.length>0?Cj.map(d=>{const g=d.title.toLowerCase().includes(s),p=d.description.toLowerCase().includes(s),v=!!d.body&&d.body.toLowerCase().includes(s);return!g&&!p&&!v?null:{item:d,rank:g?0:p?1:2,inBody:v&&!g&&!p}}).filter(d=>d!==null).sort((d,g)=>d.rank-g.rank):[],l=d=>{if(!d.body)return d.description;const g=d.body.toLowerCase().indexOf(s);if(g===-1)return d.description;const p=Math.max(0,g-40);return`${p>0?"…":""}${d.body.slice(p,g+100).trim()}…`},c=i.reduce((d,g)=>{const p=g.item.category;return d[p]||(d[p]=[]),d[p].push(g),d},{}),u=["Pages","Blog","Portfolio"];return h.jsx(k9,{open:t,onOpenChange:e,children:h.jsx(z2,{className:"overflow-hidden p-0 shadow-lg max-w-[560px] rounded-2xl border-none bg-white !top-24 !translate-y-0 [&>button]:hidden",children:h.jsxs(Z2,{className:"bg-white",shouldFilter:!1,children:[h.jsxs("div",{className:"flex items-center px-5",children:[h.jsx(wm,{className:"mr-3 h-5 w-5 shrink-0 text-obsidian/30"}),h.jsx("input",{className:"flex h-14 w-full bg-transparent py-3 text-base font-sans text-obsidian outline-none placeholder:text-obsidian/30 disabled:cursor-not-allowed disabled:opacity-50",placeholder:"Search...",value:o,onChange:d=>r(d.target.value)})]}),i.length>0&&h.jsx(X2,{className:"max-h-[360px] overflow-y-auto border-t border-obsidian/10",children:u.map(d=>{const g=c[d];return!g||g.length===0?null:h.jsx(ex,{heading:d,className:"[&_[cmdk-group-heading]]:text-obsidian-900 [&_[cmdk-group-heading]]:font-semibold [&_[cmdk-group-heading]]:text-xs [&_[cmdk-group-heading]]:uppercase [&_[cmdk-group-heading]]:tracking-wider [&_[cmdk-group-heading]]:px-4 [&_[cmdk-group-heading]]:py-2",children:g.slice(0,5).map(({item:p,inBody:v})=>h.jsx(tx,{value:p.href,onSelect:()=>a(p.href),className:"flex items-start gap-3 px-4 py-3 cursor-pointer rounded-none data-[selected='true']:bg-cloud",children:h.jsxs("div",{className:"flex-1 min-w-0",children:[h.jsxs("div",{className:"flex items-center gap-2",children:[h.jsx("span",{className:"font-semibold text-sm text-obsidian truncate",children:p.title}),h.jsx("span",{className:"shrink-0 px-2 py-0.5 bg-teal/10 text-teal-700 text-xs rounded-md",children:p.category})]}),h.jsx("p",{className:"text-sm text-obsidian/50 truncate mt-0.5",children:v?l(p):p.description})]})},p.href))},d)})})]})})})},Sd=({cta_id:t,location:e,destination:n})=>{var o;if(!(typeof window>"u"))try{(o=window.gtag)==null||o.call(window,"event","cta_click",{cta_id:t,cta_location:e,destination:n??(typeof window<"u"?window.location.pathname:void 0),page_path:typeof window<"u"?window.location.pathname:void 0})}catch{}},Ij=({darkMode:t=!1})=>{const[e,n]=f.useState(!1),[o,r]=f.useState(!1),[a,s]=f.useState(!1),[i,l]=f.useState(!1),[c,u]=f.useState(!1),d=Ao();f.useEffect(()=>{if(!t)return;const w=()=>u(window.scrollY>window.innerHeight*.35);return window.addEventListener("scroll",w,{passive:!0}),w(),()=>window.removeEventListener("scroll",w)},[t]);const g=t&&!c;f.useEffect(()=>{n(!1)},[d.pathname]),f.useEffect(()=>{const w=m=>{(m.metaKey||m.ctrlKey)&&m.key==="k"&&(m.preventDefault(),r(b=>!b))};return document.addEventListener("keydown",w),()=>document.removeEventListener("keydown",w)},[]);const p=[{label:"Positioning & Messaging",href:"/products/sprint"},{label:"Marketing Strategy",href:"/services/marketing-strategy"},{label:"Website Messaging",href:"/services/website-design"},{label:"Revenue Enablement",href:"/services/revenue-enablement"}],v=[{label:"Blog",href:"/resources/blog"},{label:"Messaging Audit",href:"/us-enterprise-audit"},{label:"Vlog",href:"/resources/vlog"},{label:"S.C.A.L.E. Framework",href:"/resources/scale-framework"}],y=d.pathname.startsWith("/resources"),k=w=>`text-sm font-semibold tracking-wide transition-colors duration-[400ms] ${w?g?"text-teal-100":"text-teal":g?"text-white hover:text-white/80":"text-obsidian hover:text-teal"}`;return h.jsx("header",{className:"w-full bg-transparent",role:"banner",children:h.jsxs("div",{className:"max-w-[1350px] mx-auto px-6 md:px-12",children:[h.jsxs("div",{className:"relative flex items-center h-20",children:[h.jsx(Ne,{to:"/",className:"flex items-center","aria-label":"Hunter & Bard - Home",children:h.jsx("img",{src:w7,alt:"Hunter & Bard — B2B enterprise positioning and brand messaging consultancy",className:`h-10 w-auto transition-all duration-[400ms] ${g?"brightness-0 invert":""}`,width:40,height:40,fetchPriority:"high"})}),h.jsxs("nav",{className:"hidden md:flex flex-1 justify-center items-center gap-4 lg:gap-8 whitespace-nowrap","aria-label":"Main navigation",children:[h.jsxs("div",{className:"relative",onMouseEnter:()=>s(!0),onMouseLeave:()=>s(!1),children:[h.jsxs("span",{className:`${k(d.pathname.startsWith("/services"))} flex items-center gap-1 cursor-default`,children:["Services",h.jsx(gs,{className:`w-4 h-4 transition-transform ${a?"rotate-180":""}`})]}),a&&h.jsx("div",{className:"absolute top-full left-0 pt-2 z-50",children:h.jsx("div",{className:"bg-white border border-obsidian/10 rounded-lg min-w-[260px] shadow-lg p-2",children:p.map(w=>h.jsx(Ne,{to:w.href,className:"block px-4 py-2 text-sm font-semibold text-obsidian hover:bg-mushroom-100 rounded-md transition-colors",children:w.label},w.href))})})]}),h.jsxs("div",{className:"relative",onMouseEnter:()=>l(!0),onMouseLeave:()=>l(!1),children:[h.jsxs("span",{className:`${k(y)} flex items-center gap-1 cursor-default`,children:["Resources",h.jsx(gs,{className:`w-4 h-4 transition-transform ${i?"rotate-180":""}`})]}),i&&h.jsx("div",{className:"absolute top-full left-0 pt-2 z-50",children:h.jsxs("div",{className:"bg-white border border-obsidian/10 rounded-lg min-w-[260px] shadow-lg p-2",children:[h.jsx(Ne,{to:"/resources",className:"block px-4 py-2 text-sm font-semibold text-obsidian hover:bg-mushroom-100 rounded-md transition-colors",children:"All Resources"}),v.map(w=>h.jsx(Ne,{to:w.href,className:"block px-4 py-2 text-sm font-semibold text-obsidian hover:bg-mushroom-100 rounded-md transition-colors",children:w.label},w.href))]})})]}),h.jsx(Ne,{to:"/portfolio",className:k(d.pathname.startsWith("/portfolio")),children:"Work"}),h.jsx(Ne,{to:"/about",className:k(d.pathname.startsWith("/about")),children:"About"}),h.jsx("button",{onClick:()=>r(!0),className:`flex items-center gap-1.5 text-sm font-semibold tracking-wide transition-colors duration-[400ms] ${g?"text-white hover:text-wasabi":"text-obsidian hover:text-teal"}`,"aria-label":"Search site",children:h.jsx(wm,{className:"w-4 h-4"})})]}),h.jsx("div",{className:"hidden md:flex items-center gap-4 ml-auto",children:h.jsx(Ne,{to:"/contact",onClick:()=>Sd({cta_id:"nav_contact_desktop",location:"nav",destination:"/contact"}),children:h.jsxs(Kn,{variant:"wasabi",size:"sm",className:"group",children:["Let's Talk",h.jsx(Vn,{className:"ml-2 w-4 h-4 group-hover:translate-x-1 transition-transform"})]})})}),h.jsxs("div",{className:"md:hidden flex items-center gap-2 ml-auto",children:[h.jsx(Ne,{to:"/contact",onClick:()=>Sd({cta_id:"nav_contact_mobile_persistent",location:"nav",destination:"/contact"}),"aria-label":"Contact Hunter and Bard",children:h.jsxs(Kn,{variant:"wasabi",size:"sm",className:"group",children:["Let's Talk",h.jsx(Vn,{className:"ml-1.5 w-4 h-4 group-hover:translate-x-1 transition-transform"})]})}),h.jsx("button",{className:"p-2",onClick:()=>n(!e),"aria-label":e?"Close menu":"Open menu","aria-expanded":e,children:e?h.jsx(Gh,{className:`w-6 h-6 transition-colors duration-[400ms] ${g?"text-white":"text-obsidian"}`}):h.jsx(_A,{className:`w-6 h-6 transition-colors duration-[400ms] ${g?"text-white":"text-obsidian"}`})})]})]}),e&&h.jsx("div",{className:"md:hidden border-t border-obsidian/10 bg-white",children:h.jsxs("nav",{className:"flex flex-col","aria-label":"Mobile navigation",children:[h.jsx("span",{className:"px-4 py-3 text-sm font-semibold text-obsidian border-b border-obsidian/10",children:"Services"}),p.map(w=>h.jsx(Ne,{to:w.href,className:"px-4 py-3 pl-8 text-sm font-semibold text-obsidian/70 hover:bg-mushroom-100 transition-colors border-b border-obsidian/10",onClick:()=>n(!1),children:w.label},w.href)),h.jsx("span",{className:"px-4 py-3 text-sm font-semibold text-obsidian border-b border-obsidian/10",children:"Resources"}),h.jsx(Ne,{to:"/resources",className:"px-4 py-3 pl-8 text-sm font-semibold text-obsidian/70 hover:bg-mushroom-100 transition-colors border-b border-obsidian/10",onClick:()=>n(!1),children:"All Resources"}),v.map(w=>h.jsx(Ne,{to:w.href,className:"px-4 py-3 pl-8 text-sm font-semibold text-obsidian/70 hover:bg-mushroom-100 transition-colors border-b border-obsidian/10",onClick:()=>n(!1),children:w.label},w.href)),h.jsx(Ne,{to:"/portfolio",className:"px-4 py-3 text-sm font-semibold text-obsidian border-b border-obsidian/10",onClick:()=>n(!1),children:"Work"}),h.jsx(Ne,{to:"/about",className:"px-4 py-3 text-sm font-semibold text-obsidian border-b border-obsidian/10",onClick:()=>n(!1),children:"About"}),h.jsx("div",{className:"p-4",children:h.jsx(Ne,{to:"/contact",onClick:()=>{Sd({cta_id:"nav_contact_mobile_menu",location:"nav",destination:"/contact"}),n(!1)},children:h.jsxs(Kn,{variant:"wasabi",className:"w-full group",children:["Let's Talk",h.jsx(Vn,{className:"ml-2 w-4 h-4 group-hover:translate-x-1 transition-transform"})]})})})]})}),h.jsx(Ej,{open:o,onOpenChange:r})]})})},Pj=({className:t,style:e})=>h.jsxs("svg",{viewBox:"0 0 1032 181",fill:"none",xmlns:"http://www.w3.org/2000/svg",className:t,style:e,preserveAspectRatio:"none",children:[h.jsxs("g",{clipPath:"url(#clip0_3_12)",children:[h.jsx("path",{d:"M147.429 100.456H129.531H111.634C108.949 100.456 106.265 99.3374 104.475 97.5476C102.685 95.7577 101.567 93.2967 101.567 90.3881C101.567 87.7033 102.685 85.
46600185 104.475 83.2287C106.265 81.4388 108.726 80.3201 111.634 80.3201H124.386H137.138C146.31 80.3201 154.811 76.5167 160.852 70.4759C166.892 64.4351 170.695 55.9332 170.695 46.7602C170.695 37.5871 166.892 29.0853 160.852 23.0445C154.811 17.0037 146.534 13.424 137.361 13.424H121.701H106.041C104.475 13.424 103.133 14.0952 102.014 14.9901C100.896 15.885 100.448 17.4512 100.448 19.0173V69.3572C100.448 72.042 99.3297 74.7268 97.54 76.5167C95.7503 78.3066 93.2894 79.4252 90.3811 79.4252C87.6965 79.4252 85.0119 78.3066 83.2222 76.5167C81.4325 74.7268 80.3139 72.2658 80.3139 69.3572V37.3634V5.59332C80.3139 4.02719 79.6428 2.6848 78.7479 1.56613C77.853 0.447466 76.287 0 74.721 0H5.59289C4.02688 0 2.68459 0.671199 1.56601 1.56613C0.447431 2.46106 0 4.02719 0 5.59332V74.9506C0 76.5167 0.671147 77.8591 1.56601 78.9777C2.46087 80.0964 4.02688 80.5439 5.59289 80.5439H69.3518C72.0364 80.5439 74.721 81.6625 76.5107 83.4524C78.3005 85.2423 79.419 87.7033 79.419 90.6119C79.419 93.2967 78.3005 95.9815 76.5107 97.7713C74.721 99.5612 72.2601 100.68 69.3518 100.68H37.3605H5.59289C4.02688 100.68 2.68459 101.351 1.56601 102.246C0.447431 103.141 0 104.483 0 106.049V175.407C0 176.973 0.671147 178.315 1.56601 179.434C2.46087 180.553 4.02688 181 5.59289 181H74.9447C76.5107 181 77.853 180.329 78.9716 179.434C80.0902 178.539 80.5376 176.973 80.5376 175.407V111.643C80.5376 108.958 81.6562 106.273 83.4459 104.483C85.2356 102.693 87.6965 101.575 90.6048 101.575C93.2894 101.575 95.974 102.693 97.7637 104.483C99.5534 106.273 100.672 108.734 100.672 111.643V136.701V161.759C100.672 163.325 101.343 164.667 102.238 165.786C103.133 166.905 104.699 167.352 106.265 167.352H147.652C156.825 167.352 165.326 163.549 171.366 157.508C177.406 151.467 181.21 143.189 181.21 133.792C181.21 124.619 177.406 116.117 171.366 110.077C165.326 104.036 156.825 100.456 147.429 100.456Z",fill:"currentColor"}),h.jsx("path",{d:"M269.801 97.7713H233.783V133.569H217.004V49.445H233.783V83.8999H269.801V49.445H286.58V133.345H269.801V97.7713Z",fill:"currentColor"}),h.jsx("path",{d:"M366.222 133.345H349.22V124.843C344.969 130.436 337.587 134.016 329.309 134.016C313.873 134.016 302.687 123.948 302.687 105.602V66.8962H319.466V103.588C319.466 114.328 325.282 120.145 334.231 120.145C343.18 120.145 349.22 114.328 349.22 103.588V66.8962H366.222V133.345Z",fill:"currentColor"}),h.jsx("path",{d:"M429.534 96.6527C429.534 85.9135 423.717 80.0964 414.769 80.0964C405.82 80.0964 399.78 85.9135 399.78 96.6527V133.569H383.001V66.6724H399.78V74.9506C404.03 69.3572 411.413 65.7775 419.914 65.7775C435.351 65.7775 446.536 75.8455 446.536 94.1916V133.345H429.534V96.6527Z",fill:"currentColor"}),h.jsx("path",{d:"M464.881 80.5439H456.827V66.6724H464.881V50.1162H481.883V66.6724H496.872V80.5439H481.883V112.761C481.883 117.236 483.673 119.026 489.042 119.026H496.872V133.121H486.358C473.606 133.121 465.105 127.752 465.105 112.538C464.881 112.761 464.881 80.5439 464.881 80.5439Z",fill:"currentColor"}),h.jsx("path",{d:"M538.036 134.464C518.573 134.464 504.702 121.04 504.702 100.009C504.702 78.9777 518.349 65.5538 538.036 65.5538C557.723 65.5538 570.922 78.754 570.922 98.4425C570.922 100.68 570.698 102.693 570.475 104.931H521.705C522.6 114.775 529.311 120.368 537.589 120.368C544.747 120.368 548.774 116.789 551.012 112.314H569.132C565.553 124.843 554.591 134.464 538.036 134.464ZM521.928 93.9679H553.472C553.249 85.2423 546.313 79.6489 537.589 79.6489C529.535 79.4252 523.047 84.7948 521.928 93.9679Z",fill:"currentColor"}),h.jsx("path",{d:"M600.005 133.345H583.227V66.6724H600.005V76.9642C604.256 70.0284 611.191 65.5538 620.363 65.5538V83.2287H615.889C605.822 83.2287 600.005 87.0321 600.005 100.009V133.345Z",fill:"currentColor"}),h.jsx("path",{d:"M688.82 68.9098C689.044 63.5402 685.912 60.6316 681.438 60.6316C676.963 60.6316 673.608 63.5402 673.608 67.7911C673.608 71.8183 676.069 75.398 681.214 80.9913L702.467 102.022C702.691 101.799 702.914 101.351 703.138 101.127L710.073 89.7169H727.747L719.246 104.483C717.456 107.839 715.89 110.524 714.1 113.433L734.458 133.569H713.876L704.704 124.619C696.874 131.555 687.702 135.135 676.292 135.135C657.5 135.135 645.196 125.067 645.196 109.405C645.196 98.6663 
4660651.236 89.2695 663.764 83.6761C659.29 78.3066 657.724 73.6082 657.724 68.2386C657.724 56.8282 666.896 47.8789 682.333 47.8789C697.769 47.8789 706.27 57.7231 705.599 69.1335L688.82 68.9098ZM693.742 113.88L673.16 93.5204C665.33 97.1001 661.527 102.022 661.527 108.287C661.527 115.446 667.344 121.04 676.516 121.04C683.227 121.04 688.82 118.578 693.742 113.88Z",fill:"currentColor"}),h.jsx("path",{d:"M795.756 133.345H759.514V49.445H794.19C811.864 49.445 821.484 58.618 821.484 71.1471C821.484 81.4388 815.443 87.7033 807.166 90.3881C816.562 92.178 823.497 100.904 823.497 110.748C823.273 123.948 813.206 133.345 795.756 133.345ZM791.729 63.0927H776.293V84.1236H791.729C799.56 84.1236 804.258 80.5439 804.258 73.6082C804.258 66.6724 799.56 63.0927 791.729 63.0927ZM792.848 97.1001H776.293V119.697H793.296C801.573 119.697 806.271 115.67 806.271 108.511C806.271 101.351 801.126 97.1001 792.848 97.1001Z",fill:"currentColor"}),h.jsx("path",{d:"M862.871 65.7775C873.609 65.7775 880.992 70.9234 884.795 76.293V66.8962H901.798V133.569H884.795V123.724C880.768 129.541 873.162 134.464 862.647 134.464C845.869 134.464 832.446 120.592 832.446 99.7849C832.446 78.9777 846.092 65.7775 862.871 65.7775ZM867.345 80.5439C858.397 80.5439 849.672 87.2559 849.672 100.009C849.672 112.761 858.173 119.921 867.345 119.921C876.518 119.921 885.019 112.985 885.019 100.232C885.019 87.4796 876.518 80.5439 867.345 80.5439Z",fill:"currentColor"}),h.jsx("path",{d:"M935.131 133.345H918.353V66.6724H935.131V76.9642C939.382 70.0284 946.317 65.5538 955.489 65.5538V83.2287H951.015C940.948 83.2287 935.131 87.0321 935.131 100.009V133.345Z",fill:"currentColor"}),h.jsx("path",{d:"M993.297 65.7775C1002.02 65.7775 1010.52 69.8047 1015 76.0692V44.2991H1032V133.345H1015V123.501C1010.97 129.541 1003.59 134.464 993.074 134.464C976.071 134.464 962.648 120.592 962.648 99.7849C962.648 78.9777 976.071 65.7775 993.297 65.7775ZM997.548 80.5439C988.599 80.5439 979.874 87.2559 979.874 100.009C979.874 112.761 988.376 119.921 997.548 119.921C1006.72 119.921 1015.22 112.985 1015.22 100.232C1015.22 87.4796 1006.72 80.5439 997.548 80.5439Z",fill:"currentColor"})]}),h.jsx("defs",{children:h.jsx("clipPath",{id:"clip0_3_12",children:h.jsx("rect",{width:"1032",height:"181",fill:"white"})})})]});var hu="Collapsible",[jj,ax]=wr(hu),[Bj,Vm]=jj(hu),sx=f.forwardRef((t,e)=>{const{__scopeCollapsible:n,open:o,defaultOpen:r,disabled:a,onOpenChange:s,...i}=t,[l,c]=Gr({prop:o,defaultProp:r??!1,onChange:s,caller:hu});return h.jsx(Bj,{scope:n,disabled:a,contentId:Bt(),open:l,onOpenToggle:f.useCallback(()=>c(u=>!u),[c]),children:h.jsx(ce.div,{"data-state":Km(l),"data-disabled":a?"":void 0,...i,ref:e})})});sx.displayName=hu;var ix="CollapsibleTrigger",lx=f.forwardRef((t,e)=>{const{__scopeCollapsible:n,...o}=t,r=Vm(ix,n);return h.jsx(ce.button,{type:"button","aria-controls":r.contentId,"aria-expanded":r.open||!1,"data-state":Km(r.open),"data-disabled":r.disabled?"":void 0,disabled:r.disabled,...o,ref:e,onClick:me(t.onClick,r.onOpenToggle)})});lx.displayName=ix;var Gm="CollapsibleContent",cx=f.forwardRef((t,e)=>{const{forceMount:n,...o}=t,r=Vm(Gm,t.__scopeCollapsible);return h.jsx(aa,{present:n||r.open,children:({present:a})=>h.jsx(Oj,{...o,ref:e,present:a})})});cx.displayName=Gm;var Oj=f.forwardRef((t,e)=>{const{__scopeCollapsible:n,present:o,children:r,...a}=t,s=Vm(Gm,n),[i,l]=f.useState(o),c=f.useRef(null),u=Ee(e,c),d=f.useRef(0),g=d.current,p=f.useRef(0),v=p.current,y=s.open||i,k=f.useRef(y),w=f.useRef(void 0);return f.useEffect(()=>{const m=requestAnimationFrame(()=>k.current=!1);return()=>cancelAnimationFrame(m)},[]),rt(()=>{const m=c.current;if(m){w.current=w.current||{transitionDuration:m.style.transitionDuration,animationName:m.style.animationName},m.style.transitionDuration="0s",m.style.animationName="none";const b=m.getBoundingClientRect();d.current=b.height,p.current=b.width,k.current||(m.style.transitionDuration=w.current.transitionDuration,m.style.animationName=w.current.animationName),l(o)}},[s.open,o]),h.jsx(ce.div,{"data-state":Km(s.open),"data-disabled":s.disabled?"":void 0,id:s.contentId,hidden:!y,...a,ref:u,style:{"--radix-collapsible-content-height":g?`${g}px`:void 0,"--radix-collapsible-content-width":v?`${v}px`:void 0,...t.style},children:y&&r})});function Km(t){return t?"open":"closed"}var Mj=sx,Rj=lx,Nj=cx,Lj=f.createContext(void 0);function hx(t){const e=f.useContext(Lj);return t||e||"ltr"}var On="Accordion",Dj=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[Jm,Wj,qj]=pm(On),[uu,vN]=wr(On,[qj,ax]),Qm=ax(),ux=M.forwardRef((t,e)=>{const{type:n,...o}=t,r=o,a=o;return h.jsx(Jm.Provider,{scope:t.__scopeAccordion,children:n==="multiple"?h.jsx($j,{...a,ref:e}):h.jsx(zj,{...r,ref:e})})});ux.displayName=On;var[dx,Fj]=uu(On),[px,Hj]=uu(On,{collapsible:!1}),zj=M.forwardRef((t,e)=>{const{value:n,defaultValue:o,onValueChange:r=()=>{},collapsible:a=!1,...s}=t,[i,l]=Gr({prop:n,defaultProp:o??"",onChange:r,caller:On});return h.jsx(dx,{scope:t.__scopeAccordion,value:M.useMemo(()=>i?[i]:[],[i]),onItemOpen:l,onItemClose:M.useCallback(()=>a&&l(""),[a,l]),children:h.jsx(px,{scope:t.__scopeAccordion,collapsible:a,children:h.jsx(gx,{...s,ref:e})})})}),$j=M.forwardRef((t,e)=>{const{value:n,defaultValue:o,onValueChange:r=()=>{},...a}=t,[s,i]=Gr({prop:n,defaultProp:o??[],onChange:r,caller:On}),l=M.useCallback(u=>i((d=[])=>[...d,u]),[i]),c=M.useCallback(u=>i((d=[])=>d.filter(g=>g!==u)),[i]);return h.jsx(dx,{scope:t.__scopeAccordion,value:s,onItemOpen:l,onItemClose:c,children:h.jsx(px,{scope:t.__scopeAccordion,collapsible:!0,children:h.jsx(gx,{...a,ref:e})})})}),[Uj,du]=uu(On),gx=M.forwardRef((t,e)=>{const{__scopeAccordion:n,disabled:o,dir:r,orientation:a="vertical",...s}=t,i=M.useRef(null),l=Ee(i,e),c=Wj(n),d=hx(r)==="ltr",g=me(t.onKeyDown,p=>{var _;if(!Dj.includes(p.key))return;const v=p.target,y=c().filter(C=>{var P;return!((P=C.ref.current)!=null&&P.disabled)}),k=y.findIndex(C=>C.ref.current===v),w=y.length;if(k===-1)return;p.preventDefault();let m=k;const b=0,x=w-1,S=()=>{m=k+1,m>x&&(m=b)},T=()=>{m=k-1,m<b&&(m=x)};switch(p.key){case"Home":m=b;break;case"End":m=x;break;case"ArrowRight":a==="horizontal"&&(d?S():T());break;case"ArrowDown":a==="vertical"&&S();break;case"ArrowLeft":a==="horizontal"&&(d?T():S());break;case"ArrowUp":a==="vertical"&&T();break}const A=m%w;(_=y[A].ref.current)==null||_.focus()});return h.jsx(Uj,{scope:n,disabled:o,direction:r,orientation:a,children:h.jsx(Jm.Slot,{scope:n,children:h.jsx(ce.div,{...s,"data-orientation":a,ref:l,onKeyDown:o?void 0:g})})})}),fh="AccordionItem",[Yj,Zm]=uu(fh),mx=M.forwardRef((t,e)=>{const{__scopeAccordion:n,value:o,...r}=t,a=du(fh,n),s=Fj(fh,n),i=Qm(n),l=Bt(),c=o&&s.value.includes(o)||!1,u=a.disabled||t.disabled;return h.jsx(Yj,{scope:n,open:c,disabled:u,triggerId:l,children:h.jsx(Mj,{"data-orientation":a.orientation,"data-state":kx(c),...i,...r,ref:e,disabled:u,open:c,onOpenChange:d=>{d?s.onItemOpen(o):s.onItemClose(o)}})})});mx.displayName=fh;var fx="AccordionHeader",yx=M.forwardRef((t,e)=>{const{__scopeAccordion:n,...o}=t,r=du(On,n),a=Zm(fx,n);return h.jsx(ce.h3,{"data-orientation":r.orientation,"data-state":kx(a.open),"data-disabled":a.disabled?"":void 0,...o,ref:e})});yx.displayName=fx;var og="AccordionTrigger",wx=M.forwardRef((t,e)=>{const{__scopeAccordion:n,...o}=t,r=du(On,n),a=Zm(og,n),s=Hj(og,n),i=Qm(n);return h.jsx(Jm.ItemSlot,{scope:n,children:h.jsx(Rj,{"aria-disabled":a.open&&!s.collapsible||void 0,"data-orientation":r.orientation,id:a.triggerId,...i,...o,ref:e})})});wx.displayName=og;var bx="AccordionContent",vx=M.forwardRef((t,e)=>{const{__scopeAccordion:n,...o}=t,r=du(On,n),a=Zm(bx,n),s=Qm(n);return h.jsx(Nj,{role:"region","aria-labelledby":a.triggerId,"data-orientation":r.orientation,...s,...o,ref:e,style:{"--radix-accordion-content-height":"var(--radix-collapsible-content-height)","--radix-accordion-content-width":"var(--radix-collapsible-content-width)",...t.style}})});vx.displayName=bx;function kx(t){return t?"open":"closed"}var Vj=ux,Gj=mx,Kj=yx,xx=wx,Sx=vx;const Tx=Vj,yh=f.forwardRef(({className:t,...e},n)=>h.jsx(Gj,{ref:n,className:ve("border-b",t),...e}));yh.displayName="AccordionItem";const wh=f.forwardRef(({className:t,children:e,...n},o)=>h.jsx(Kj,{className:"flex",children:h.jsxs(xx,{ref:o,className:ve("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",t),...n,children:[e,h.jsx(gs,{className:"h-6 w-6 shrink-0 transition-transform duration-200"})]})}));wh.displayName=xx.displayName;const bh=f.forwardRef(({className:t,children:e,...n},o)=>h.jsx(Sx,{ref:o,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...n,children:h.jsx("div",{className:ve("pb-4 pt-0",t),children:e})}));bh.displayName=Sx.displayName;const lb=({links:t,label:e})=>h.jsx("nav",{className:"flex flex-col gap-3","aria-label":e,children:t.map(n=>h.jsx(Ne,{to:n.href,className:"text-sm text-obsidian/60 hover:text-obsidian transition-colors",children:n.label},n.href))}),Td=()=>{const t=[{title:"Services",links:[{label:"Positioning & Messaging",href:"/products/sprint"},{label:"Marketing Strategy",href:"/services/marketing-strategy"},{label:"Website Messaging",href:"/services/website-design"},{label:"Revenue Enablement",href:"/services/revenue-enablement"}]},{title:"Cohorts",links:[{label:"US Market Intensive (3mo)",href:"/products/intensive"},{label:"US Market Cohort (6mo)",href:"/products/cohort"}]},{title:"Resources",href:"/resources",links:[{label:"Blog",href:"/resources/blog"},{label:"Vlog",href:"/resources/vlog"},{label:"S.C.A.L.E. Framework",href:"/resources/scale-framework"}]},{title:"Company",links:[{label:"About",href:"/about"},{label:"Work",href:"/portfolio"},{label:"Contact",href:"/contact"}]}];return h.jsxs("footer",{className:"bg-cloud",role:"contentinfo",children:[h.jsxs("div",{className:"w-full pt-0 md:pt-16 pb-8",children:[h.jsxs("div",{className:"hidden md:grid md:grid-cols-2 lg:grid-cols-5 ga
4660p-12 mb-16",children:[t.map(e=>h.jsxs("div",{className:"hidden md:block",children:[e.href?h.jsx(Ne,{to:e.href,className:"block text-sm font-semibold uppercase tracking-eyebrow text-obsidian hover:text-teal transition-colors mb-4",children:e.title}):h.jsx("h4",{className:"text-sm font-semibold uppercase tracking-eyebrow text-obsidian mb-4",children:e.title}),h.jsx(lb,{links:e.links,label:e.title})]},e.title)),h.jsxs("div",{className:"hidden md:block",children:[h.jsx("h4",{className:"text-sm font-semibold uppercase tracking-eyebrow text-obsidian mb-4",children:"Socials"}),h.jsxs("nav",{className:"flex flex-col gap-3","aria-label":"Socials",children:[h.jsxs("a",{href:"https://www.youtube.com/@hunterandbardagency",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-2 text-sm text-obsidian/60 hover:text-obsidian transition-colors",children:[h.jsx(My,{className:"w-4 h-4"}),"YouTube"]}),h.jsxs("a",{href:"https://www.linkedin.com/company/hunter-&-bard/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-2 text-sm text-obsidian/60 hover:text-obsidian transition-colors",children:[h.jsx(Oy,{className:"w-4 h-4"}),"LinkedIn"]})]})]})]}),h.jsx("div",{className:"md:hidden mb-8",children:h.jsxs(Tx,{type:"multiple",className:"w-full",children:[t.map(e=>h.jsxs(yh,{value:e.title,className:"border-b border-mushroom-200 last:border-b-0",children:[h.jsx(wh,{className:"text-sm font-semibold uppercase tracking-eyebrow text-obsidian hover:no-underline py-4",children:e.title}),h.jsx(bh,{children:h.jsxs("div",{className:"pb-2 flex flex-col gap-3",children:[e.href&&h.jsxs(Ne,{to:e.href,className:"text-sm font-semibold text-obsidian hover:text-teal transition-colors",children:["All ",e.title]}),h.jsx(lb,{links:e.links,label:e.title})]})})]},e.title)),h.jsxs(yh,{value:"Socials",className:"border-b border-mushroom-200 last:border-b-0",children:[h.jsx(wh,{className:"text-sm font-semibold uppercase tracking-eyebrow text-obsidian hover:no-underline py-4",children:"Socials"}),h.jsx(bh,{children:h.jsx("div",{className:"pb-2",children:h.jsxs("nav",{className:"flex flex-col gap-3","aria-label":"Socials",children:[h.jsxs("a",{href:"https://www.youtube.com/@hunterandbardagency",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-2 text-sm text-obsidian/60 hover:text-obsidian transition-colors",children:[h.jsx(My,{className:"w-4 h-4"}),"YouTube"]}),h.jsxs("a",{href:"https://www.linkedin.com/company/hunter-&-bard/",target:"_blank",rel:"noopener noreferrer",className:"flex items-center gap-2 text-sm text-obsidian/60 hover:text-obsidian transition-colors",children:[h.jsx(Oy,{className:"w-4 h-4"}),"LinkedIn"]})]})})})]})]})})]}),h.jsx("div",{className:"w-full",children:h.jsx(Pj,{className:"w-full select-none block text-teal-700"})}),h.jsx("div",{className:"w-full py-8",children:h.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-2 text-xs text-obsidian/60",children:[h.jsxs("div",{className:"flex flex-wrap items-center gap-2",children:[h.jsxs("span",{children:["© ",new Date().getFullYear()," Hunter & Bard. All rights reserved."]}),h.jsxs("span",{className:"whitespace-nowrap py-2",children:[h.jsx(Ne,{to:"/privacy",className:"hover:text-obsidian transition-colors",children:"Privacy Policy"}),h.jsx("span",{className:"mx-1",children:"·"}),h.jsx(Ne,{to:"/terms",className:"hover:text-obsidian transition-colors",children:"Terms of Service"})]})]}),h.jsx("span",{children:"Est. 2011 · San Francisco, CA"})]})})]})};var Ae;(function(t){t.assertEqual=r=>{};function e(r){}t.assertIs=e;function n(r){throw new Error}t.assertNever=n,t.arrayToEnum=r=>{const a={};for(const s of r)a[s]=s;return a},t.getValidEnumValues=r=>{const a=t.objectKeys(r).filter(i=>typeof r[r[i]]!="number"),s={};for(const i of a)s[i]=r[i];return t.objectValues(s)},t.objectValues=r=>t.objectKeys(r).map(function(a){return r[a]}),t.objectKeys=typeof Object.keys=="function"?r=>Object.keys(r):r=>{const a=[];for(const s in r)Object.prototype.hasOwnProperty.call(r,s)&&a.push(s);return a},t.find=(r,a)=>{for(const s of r)if(a(s))return s},t.isInteger=typeof Number.isInteger=="function"?r=>Number.isInteger(r):r=>typeof r=="number"&&Number.isFinite(r)&&Math.floor(r)===r;function o(r,a=" | "){return r.map(s=>typeof s=="string"?`'${s}'`:s).join(a)}t.joinValues=o,t.jsonStringifyReplacer=(r,a)=>typeof a=="bigint"?a.toString():a})(Ae||(Ae={}));var cb;(function(t){t.mergeShapes=(e,n)=>({...e,...n})})(cb||(cb={}));const ee=Ae.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),Do=t=>{switch(typeof t){case"undefined":return ee.undefined;case"string":return ee.string;
vendor: 6,499 bytes, line 4660
4660case"number":return Number.isNaN(t)?ee.nan:ee.number;case"boolean":return ee.boolean;case"function":return ee.function;case"bigint":return ee.bigint;case"symbol":return ee.symbol;case"object":return Array.isArray(t)?ee.array:t===null?ee.null:t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?ee.promise:typeof Map<"u"&&t instanceof Map?ee.map:typeof Set<"u"&&t instanceof Set?ee.set:typeof Date<"u"&&t instanceof Date?ee.date:ee.object;default:return ee.unknown}},z=Ae.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class xo extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=o=>{this.issues=[...this.issues,o]},this.addIssues=(o=[])=>{this.issues=[...this.issues,...o]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=e}format(e){const n=e||function(a){return a.message},o={_errors:[]},r=a=>{for(const s of a.issues)if(s.code==="invalid_union")s.unionErrors.map(r);else if(s.code==="invalid_return_type")r(s.returnTypeError);else if(s.code==="invalid_arguments")r(s.argumentsError);else if(s.path.length===0)o._errors.push(n(s));else{let i=o,l=0;for(;l<s.path.length;){const c=s.path[l];l===s.path.length-1?(i[c]=i[c]||{_errors:[]},i[c]._errors.push(n(s))):i[c]=i[c]||{_errors:[]},i=i[c],l++}}};return r(this),o}static assert(e){if(!(e instanceof xo))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,Ae.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=n=>n.message){const n={},o=[];for(const r of this.issues)if(r.path.length>0){const a=r.path[0];n[a]=n[a]||[],n[a].push(e(r))}else o.push(e(r));return{formErrors:o,fieldErrors:n}}get formErrors(){return this.flatten()}}xo.create=t=>new xo(t);const rg=(t,e)=>{let n;switch(t.code){case z.invalid_type:t.received===ee.undefined?n="Required":n=`Expected ${t.expected}, received ${t.received}`;break;case z.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(t.expected,Ae.jsonStringifyReplacer)}`;break;case z.unrecognized_keys:n=`Unrecognized key(s) in object: ${Ae.joinValues(t.keys,", ")}`;break;case z.invalid_union:n="Invalid input";break;case z.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${Ae.joinValues(t.options)}`;break;case z.invalid_enum_value:n=`Invalid enum value. Expected ${Ae.joinValues(t.options)}, received '${t.received}'`;break;case z.invalid_arguments:n="Invalid function arguments";break;case z.invalid_return_type:n="Invalid function return type";break;case z.invalid_date:n="Invalid date";break;case z.invalid_string:typeof t.validation=="object"?"includes"in t.validation?(n=`Invalid input: must include "${t.validation.includes}"`,typeof t.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${t.validation.position}`)):"startsWith"in t.validation?n=`Invalid input: must start with "${t.validation.startsWith}"`:"endsWith"in t.validation?n=`Invalid input: must end with "${t.validation.endsWith}"`:Ae.assertNever(t.validation):t.validation!=="regex"?n=`Invalid ${t.validation}`:n="Invalid";break;case z.too_small:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at least":"more than"} ${t.minimum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at least":"over"} ${t.minimum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="bigint"?n=`Number must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${t.minimum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly equal to ":t.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(t.minimum))}`:n="Invalid input";break;case z.too_big:t.type==="array"?n=`Array must contain ${t.exact?"exactly":t.inclusive?"at most":"less than"} ${t.maximum} element(s)`:t.type==="string"?n=`String must contain ${t.exact?"exactly":t.inclusive?"at most":"under"} ${t.maximum} character(s)`:t.type==="number"?n=`Number must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="bigint"?n=`BigInt must be ${t.exact?"exactly":t.inclusive?"less than or equal to":"less than"} ${t.maximum}`:t.type==="date"?n=`Date must be ${t.exact?"exactly":t.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(t.maximum))}`:n="Invalid input";break;case z.custom:n="Invalid input";break;case z.invalid_intersection_types:n="Intersection results could not be merged";break;case z.not_multiple_of:n=`Number must be a multiple of ${t.multipleOf}`;break;case z.not_finite:n="Number must be finite";break;default:n=e.defaultError,Ae.assertNever(t)}return{message:n}};let Jj=rg;function Qj(){return Jj}const Zj=t=>{const{data:e,path:n,errorMaps:o,issueData:r}=t,a=[...n,...r.path||[]],s={...r,path:a};if(r.message!==void 0)return{...r,path:a,message:r.message};let i="";const l=o.filter(c=>!!c).slice().reverse();for(const c of l)i=c(s,{data:e,defaultError:i}).message;return{...r,path:a,message:i}};function J(t,e){const n=Qj(),o=Zj({issueData:e,data:t.data,path:t.path,errorMaps:[t.common.contextualErrorMap,t.schemaErrorMap,n,n===rg?void 0:rg].filter(r=>!!r)});t.common.issues.push(o)}class zt{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,n){const o=[];for(const r of n){if(r.status==="aborted")return de;r.status==="dirty"&&e.dirty(),o.push(r.value)}return{status:e.value,value:o}}static async mergeObjectAsync(e,n){const o=[];for(const r of n){const a=await r.key,s=await r.value;o.push({key:a,value:s})}return zt.mergeObjectSync(e,o)}static mergeObjectSync(e,n){const o={};for(const r of n){const{key:a,value:s}=r;if(a.status==="aborted"||s.status==="aborted")return de;a.status==="dirty"&&e.dirty(),s.status==="dirty"&&e.dirty(),a.value!=="__proto__"&&(typeof s.value<"u"||r.alwaysSet)&&(o[a.value]=s.value)}return{status:e.value,value:o}}}const de=Object.freeze({status:"aborted"}),ai=t=>({status:"dirty",value:t}),nn=t=>
vendor: 5,879 bytes, line 4660
4660({status:"valid",value:t}),hb=t=>t.status==="aborted",ub=t=>t.status==="dirty",ys=t=>t.status==="valid",vh=t=>typeof Promise<"u"&&t instanceof Promise;var oe;(function(t){t.errToObj=e=>typeof e=="string"?{message:e}:e||{},t.toString=e=>typeof e=="string"?e:e==null?void 0:e.message})(oe||(oe={}));class pr{constructor(e,n,o,r){this._cachedPath=[],this.parent=e,this.data=n,this._path=o,this._key=r}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const db=(t,e)=>{if(ys(e))return{success:!0,data:e.value};if(!t.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const n=new xo(t.common.issues);return this._error=n,this._error}}};function we(t){if(!t)return{};const{errorMap:e,invalid_type_error:n,required_error:o,description:r}=t;if(e&&(n||o))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:r}:{errorMap:(s,i)=>{const{message:l}=t;return s.code==="invalid_enum_value"?{message:l??i.defaultError}:typeof i.data>"u"?{message:l??o??i.defaultError}:s.code!=="invalid_type"?{message:i.defaultError}:{message:l??n??i.defaultError}},description:r}}class Se{get description(){return this._def.description}_getType(e){return Do(e.data)}_getOrReturnCtx(e,n){return n||{common:e.parent.common,data:e.data,parsedType:Do(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new zt,ctx:{common:e.parent.common,data:e.data,parsedType:Do(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const n=this._parse(e);if(vh(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(e){const n=this._parse(e);return Promise.resolve(n)}parse(e,n){const o=this.safeParse(e,n);if(o.success)return o.data;throw o.error}safeParse(e,n){const o={common:{issues:[],async:(n==null?void 0:n.async)??!1,contextualErrorMap:n==null?void 0:n.errorMap},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Do(e)},r=this._parseSync({data:e,path:o.path,parent:o});return db(o,r)}"~validate"(e){var o,r;const n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Do(e)};if(!this["~standard"].async)try{const a=this._parseSync({data:e,path:[],parent:n});return ys(a)?{value:a.value}:{issues:n.common.issues}}catch(a){(r=(o=a==null?void 0:a.message)==null?void 0:o.toLowerCase())!=null&&r.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:n}).then(a=>ys(a)?{value:a.value}:{issues:n.common.issues})}async parseAsync(e,n){const o=await this.safeParseAsync(e,n);if(o.success)return o.data;throw o.error}async safeParseAsync(e,n){const o={common:{issues:[],contextualErrorMap:n==null?void 0:n.errorMap,async:!0},path:(n==null?void 0:n.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:Do(e)},r=this._parse({data:e,path:o.path,parent:o}),a=await(vh(r)?r:Promise.resolve(r));return db(o,a)}refine(e,n){const o=r=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(r):n;return this._refinement((r,a)=>{const s=e(r),i=()=>a.addIssue({code:z.custom,...o(r)});return typeof Promise<"u"&&s instanceof Promise?s.then(l=>l?!0:(i(),!1)):s?!0:(i(),!1)})}refinement(e,n){return this._refinement((o,r)=>e(o)?!0:(r.addIssue(typeof n=="function"?n(o,r):n),!1))}_refinement(e){return new bs({schema:this,typeName:pe.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)}}optional(){return ir.create(this,this._def)}nullable(){return vs.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Jn.create(this)}promise(){return Th.create(this,this._def)}or(e){return xh.create([this,e],this._def)}and(e){return Sh.create(this,e,this._def)}transform(e){return new bs({...we(this._def),schema:this,typeName:pe.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const n=typeof e=="function"?e:()=>e;return new ig({...we(this._def),innerType:this,defaultValue:n,typeName:pe.ZodDefault})}brand(){return new kB({typeName:pe.ZodBranded,type:this,...we(this._def)})}catch(e){const n=typeof e=="function"?e:()=>e;return new lg({...we(this._def),innerType:this,catchValue:n,typeName:pe.ZodCatch})}describe(e){const n=this.constructor;return new n({...this._def,description:e})}pipe(e){return Xm.create(this,e)}readonly(){return cg.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const Xj=/^c[^\s-]{8,}
vendor: 4,606 bytes, line 4660
4660$/i,eB=/^[0-9a-z]+$/,tB=/^[0-9A-HJKMNP-TV-Z]{26}$/i,nB=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,oB=/^[a-z0-9_-]{21}$/i,rB=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,aB=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,sB=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,iB="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let Ad;const lB=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,cB=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,hB=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,uB=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,dB=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,pB=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Ax="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",gB=new RegExp(`^${Ax}$`);function _x(t){let e="[0-5]\\d";t.precision?e=`${e}\\.\\d{${t.precision}}`:t.precision==null&&(e=`${e}(\\.\\d+)?`);const n=t.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${n}`}function mB(t){return new RegExp(`^${_x(t)}$`)}function fB(t){let e=`${Ax}T${_x(t)}`;const n=[];return n.push(t.local?"Z?":"Z"),t.offset&&n.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${n.join("|")})`,new RegExp(`^${e}$`)}function yB(t,e){return!!((e==="v4"||!e)&&lB.test(t)||(e==="v6"||!e)&&hB.test(t))}function wB(t,e){if(!rB.test(t))return!1;try{const[n]=t.split(".");if(!n)return!1;const o=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),r=JSON.parse(atob(o));return!(typeof r!="object"||r===null||"typ"in r&&(r==null?void 0:r.typ)!=="JWT"||!r.alg||e&&r.alg!==e)}catch{return!1}}function bB(t,e){return!!((e==="v4"||!e)&&cB.test(t)||(e==="v6"||!e)&&uB.test(t))}class Qo extends Se{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==ee.string){const a=this._getOrReturnCtx(e);return J(a,{code:z.invalid_type,expected:ee.string,received:a.parsedType}),de}const o=new zt;let r;for(const a of this._def.checks)if(a.kind==="min")e.data.length<a.value&&(r=this._getOrReturnCtx(e,r),J(r,{code:z.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),o.dirty());else if(a.kind==="max")e.data.length>a.value&&(r=this._getOrReturnCtx(e,r),J(r,{code:z.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),o.dirty());else if(a.kind==="length"){const s=e.data.length>a.value,i=e.data.length<a.value;(s||i)&&(r=this._getOrReturnCtx(e,r),s?J(r,{code:z.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}):i&&J(r,{code:z.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}),o.dirty())}else if(a.kind==="email")sB.test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"email",code:z.invali
vendor: 15,881 bytes, line 4660
4660d_string,message:a.message}),o.dirty());else if(a.kind==="emoji")Ad||(Ad=new RegExp(iB,"u")),Ad.test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"emoji",code:z.invalid_string,message:a.message}),o.dirty());else if(a.kind==="uuid")nB.test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"uuid",code:z.invalid_string,message:a.message}),o.dirty());else if(a.kind==="nanoid")oB.test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"nanoid",code:z.invalid_string,message:a.message}),o.dirty());else if(a.kind==="cuid")Xj.test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"cuid",code:z.invalid_string,message:a.message}),o.dirty());else if(a.kind==="cuid2")eB.test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"cuid2",code:z.invalid_string,message:a.message}),o.dirty());else if(a.kind==="ulid")tB.test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"ulid",code:z.invalid_string,message:a.message}),o.dirty());else if(a.kind==="url")try{new URL(e.data)}catch{r=this._getOrReturnCtx(e,r),J(r,{validation:"url",code:z.invalid_string,message:a.message}),o.dirty()}else a.kind==="regex"?(a.regex.lastIndex=0,a.regex.test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"regex",code:z.invalid_string,message:a.message}),o.dirty())):a.kind==="trim"?e.data=e.data.trim():a.kind==="includes"?e.data.includes(a.value,a.position)||(r=this._getOrReturnCtx(e,r),J(r,{code:z.invalid_string,validation:{includes:a.value,position:a.position},message:a.message}),o.dirty()):a.kind==="toLowerCase"?e.data=e.data.toLowerCase():a.kind==="toUpperCase"?e.data=e.data.toUpperCase():a.kind==="startsWith"?e.data.startsWith(a.value)||(r=this._getOrReturnCtx(e,r),J(r,{code:z.invalid_string,validation:{startsWith:a.value},message:a.message}),o.dirty()):a.kind==="endsWith"?e.data.endsWith(a.value)||(r=this._getOrReturnCtx(e,r),J(r,{code:z.invalid_string,validation:{endsWith:a.value},message:a.message}),o.dirty()):a.kind==="datetime"?fB(a).test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{code:z.invalid_string,validation:"datetime",message:a.message}),o.dirty()):a.kind==="date"?gB.test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{code:z.invalid_string,validation:"date",message:a.message}),o.dirty()):a.kind==="time"?mB(a).test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{code:z.invalid_string,validation:"time",message:a.message}),o.dirty()):a.kind==="duration"?aB.test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"duration",code:z.invalid_string,message:a.message}),o.dirty()):a.kind==="ip"?yB(e.data,a.version)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"ip",code:z.invalid_string,message:a.message}),o.dirty()):a.kind==="jwt"?wB(e.data,a.alg)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"jwt",code:z.invalid_string,message:a.message}),o.dirty()):a.kind==="cidr"?bB(e.data,a.version)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"cidr",code:z.invalid_string,message:a.message}),o.dirty()):a.kind==="base64"?dB.test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"base64",code:z.invalid_string,message:a.message}),o.dirty()):a.kind==="base64url"?pB.test(e.data)||(r=this._getOrReturnCtx(e,r),J(r,{validation:"base64url",code:z.invalid_string,message:a.message}),o.dirty()):Ae.assertNever(a);return{status:o.value,value:e.data}}_regex(e,n,o){return this.refinement(r=>e.test(r),{validation:n,code:z.invalid_string,...oe.errToObj(o)})}_addCheck(e){return new Qo({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...oe.errToObj(e)})}url(e){return this._addCheck({kind:"url",...oe.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...oe.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...oe.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...oe.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...oe.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...oe.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...oe.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...oe.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...oe.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...oe.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...oe.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...oe.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof(e==null?void 0:e.precision)>"u"?null:e==null?void 0:e.precision,offset:(e==null?void 0:e.offset)??!1,local:(e==null?void 0:e.local)??!1,...oe.errToObj(e==null?void 0:e.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof(e==null?void 0:e.precision)>"u"?null:e==null?void 0:e.precision,...oe.errToObj(e==null?void 0:e.message)})}duration(e){return this._addCheck({kind:"duration",...oe.errToObj(e)})}regex(e,n){return this._addCheck({kind:"regex",regex:e,...oe.errToObj(n)})}includes(e,n){return this._addCheck({kind:"includes",value:e,position:n==null?void 0:n.position,...oe.errToObj(n==null?void 0:n.message)})}startsWith(e,n){return this._addCheck({kind:"startsWith",value:e,...oe.errToObj(n)})}endsWith(e,n){return this._addCheck({kind:"endsWith",value:e,...oe.errToObj(n)})}min(e,n){return this._addCheck({kind:"min",value:e,...oe.errToObj(n)})}max(e,n){return this._addCheck({kind:"max",value:e,...oe.errToObj(n)})}length(e,n){return this._addCheck({kind:"length",value:e,...oe.errToObj(n)})}nonempty(e){return this.min(1,oe.errToObj(e))}trim(){return new Qo({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new Qo({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new Qo({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(const n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxLength(){let e=null;for(const n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}}Qo.create=t=>new Qo({checks:[],typeName:pe.ZodString,coerce:(t==null?void 0:t.coerce)??!1,...we(t)});function vB(t,e){const n=(t.toString().split(".")[1]||"").length,o=(e.toString().split(".")[1]||"").length,r=n>o?n:o,a=Number.parseInt(t.toFixed(r).replace(".","")),s=Number.parseInt(e.toFixed(r).replace(".",""));return a%s/10**r}class el extends Se{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==ee.number){const a=this._getOrReturnCtx(e);return J(a,{code:z.invalid_type,expected:ee.number,received:a.parsedType}),de}let o;const r=new zt;for(const a of this._def.checks)a.kind==="int"?Ae.isInteger(e.data)||(o=this._getOrReturnCtx(e,o),J(o,{code:z.invalid_type,expected:"integer",received:"float",message:a.message}),r.dirty()):a.kind==="min"?(a.inclusive?e.data<a.value:e.data<=a.value)&&(o=this._getOrReturnCtx(e,o),J(o,{code:z.too_small,minimum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),r.dirty()):a.kind==="max"?(a.inclusive?e.data>a.value:e.data>=a.value)&&(o=this._getOrReturnCtx(e,o),J(o,{code:z.too_big,maximum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),r.dirty()):a.kind==="multipleOf"?vB(e.data,a.value)!==0&&(o=this._getOrReturnCtx(e,o),J(o,{code:z.not_multiple_of,multipleOf:a.value,message:a.message}),r.dirty()):a.kind==="finite"?Number.isFinite(e.data)||(o=this._getOrReturnCtx(e,o),J(o,{code:z.not_finite,message:a.message}),r.dirty()):Ae.assertNever(a);return{status:r.value,value:e.data}}gte(e,n){return this.setLimit("min",e,!0,oe.toString(n))}gt(e,n){return this.setLimit("min",e,!1,oe.toString(n))}lte(e,n){return this.setLimit("max",e,!0,oe.toString(n))}lt(e,n){return this.setLimit("max",e,!1,oe.toString(n))}setLimit(e,n,o,r){return new el({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:o,message:oe.toString(r)}]})}_addCheck(e){return new el({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:oe.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:oe.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:oe.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:oe.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:oe.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:oe.toString(n)})}finite(e){return this._addCheck({kind:"finite",message:oe.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:oe.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:oe.toString(e)})}get minValue(){let e=null;for(const n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(const n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&Ae.isInteger(e.value))}get isFinite(){let e=null,n=null;for(const o of this._def.checks){if(o.kind==="finite"||o.kind==="int"||o.kind==="multipleOf")return!0;o.kind==="min"?(n===null||o.value>n)&&(n=o.value):o.kind==="max"&&(e===null||o.value<e)&&(e=o.value)}return Number.isFinite(n)&&Number.isFinite(e)}}el.create=t=>new el({checks:[],typeName:pe.ZodNumber,coerce:(t==null?void 0:t.coerce)||!1,...we(t)});class tl extends Se{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==ee.bigint)return this._getInvalidInput(e);let o;const r=new zt;for(const a of this._def.checks)a.kind==="min"?(a.inclusive?e.data<a.value:e.data<=a.value)&&(o=this._getOrReturnCtx(e,o),J(o,{code:z.too_small,type:"bigint",minimum:a.value,inclusive:a.inclusive,message:a.message}),r.dirty()):a.kind==="max"?(a.inclusive?e.data>a.value:e.data>=a.value)&&(o=this._getOrReturnCtx(e,o),J(o,{code:z.too_big,type:"bigint",maximum:a.value,inclusive:a.inclusive,message:a.message}),r.dirty()):a.kind==="multipleOf"?e.data%a.value!==BigInt(0)&&(o=this._getOrReturnCtx(e,o),J(o,{code:z.not_multiple_of,multipleOf:a.value,message:a.message}),r.dirty()):Ae.assertNever(a);return{status:r.value,value:e.data}}_getInvalidInput(e){const n=this._getOrReturnCtx(e);return J(n,{code:z.invalid_type,expected:ee.bigint,received:n.parsedType}),de}gte(e,n){return this.setLimit("min",e,!0,oe.toString(n))}gt(e,n){return this.setLimit("min",e,!1,oe.toString(n))}lte(e,n){return this.setLimit("max",e,!0,oe.toString(n))}lt(e,n){return this.setLimit("max",e,!1,oe.toString(n))}setLimit(e,n,o,r){return new tl({...this._def,checks:[...this._def.checks,{kind:e,value:n,inclusive:o,message:oe.toString(r)}]})}_addCheck(e){return new tl({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:oe.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:oe.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:oe.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:oe.toString(e)})}multipleOf(e,n){return this._addCheck({kind:"multipleOf",value:e,message:oe.toString(n)})}get minValue(){let e=null;for(const n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e}get maxValue(){let e=null;for(const n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e}}tl.create=t=>new tl({checks:[],typeName:pe.ZodBigInt,coerce:(t==null?void 0:t.coerce)??!1,...we(t)});class pb extends Se{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==ee.boolean){const o=this._getOrReturnCtx(e);return J(o,{code:z.invalid_type,expected:ee.boolean,received:o.parsedType}),de}return nn(e.data)}}pb.create=t=>new pb({typeName:pe.ZodBoolean,coerce:(t==null?void 0:t.coerce)||!1,...we(t)});class kh extends Se{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==ee.date){const a=this._getOrReturnCtx(e);return J(a,{code:z.invalid_type,expected:ee.date,received:a.parsedType}),de}if(Number.isNaN(e.data.getTime())){const a=this._getOrReturnCtx(e);return J(a,{code:z.invalid_date}),de}const o=new zt;let r;for(const a of this._def.checks)a.kind==="min"?e.data.getTime()<a.value&&(r=this._getOrReturnCtx(e,r),J(r,{code:z.too_small,message:a.message,inclusive:!0,exact:!1,minimum:a.value,type:"date"}),o.dirty()):a.kind==="max"?e.data.getTime()>a.value&&(r=this._getOrReturnCtx(e,r),J(r,{code:z.too_big,message:a.message,inclusive:!0,exact:!1,maximum:a.value,type:"date"}),o.dirty()):Ae.assertNever(a);return{status:o.value,value:new Date(e.data.getTime())}}_addCheck(e){return new kh({...this._def,checks:[...this._def.checks,e]})}min(e,n){return this._addCheck({kind:"min",value:e.getTime(),message:oe.toString(n)})}max(e,n){return this._addCheck({kind:"max",value:e.getTime(),message:oe.toString(n)})}get minDate(){let e=null;for(const n of this._def.checks)n.kind==="min"&&(e===null||n.value>e)&&(e=n.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(const n of this._def.checks)n.kind==="max"&&(e===null||n.value<e)&&(e=n.value);return e!=null?new Date(e):null}}kh.create=t=>new kh({checks:[],coerce:(t==null?void 0:t.coerce)||!1,typeName:pe.ZodDate,...we(t)});class gb extends Se{_parse(e){if(this._getType(e)!==ee.symbol){const o=this._getOrReturnCtx(e);return J(o,{code:z.invalid_type,expected:ee.symbol,received:o.parsedType}),de}return nn(e.data)}}gb.create=t=>new gb({typeName:pe.ZodSymbol,...we(t)});class mb extends Se{_parse(e){if(this._getType(e)!==ee.undefined){const o=this._getOrReturnCtx(e);return J(o,{code:z.invalid_type,expected:ee.undefined,received:o.parsedType}),de}return nn(e.data)}}mb.create=t=>new mb({typeName:pe.ZodUndefined,...we(t)});class fb extends Se{_parse(e){if(this._getType(e)!==ee.null){const o=this._getOrReturnCtx(e);return J(o,{code:z.invalid_type,expected:ee.null,received:o.parsedType}),de}return nn(e.data)}}fb.create=t=>new fb({typeName:pe.ZodNull,...we(t)});class yb extends Se{constructor(){super(...arguments),this._any=!0}_parse(e){return nn(e.data)}}yb.create=t=>new yb({typeName:pe.ZodAny,...we(t)});class wb extends Se{constructor(){super(...arguments),this._unknown=!0}_parse(e){return nn(e.data)}}wb.create=t=>new wb({typeName:pe.ZodUnknown,...we(t)});class gr extends Se{_parse(e){const n=this._getOrReturnCtx(e);
vendor: 5,949 bytes, line 4660
4660return J(n,{code:z.invalid_type,expected:ee.never,received:n.parsedType}),de}}gr.create=t=>new gr({typeName:pe.ZodNever,...we(t)});class bb extends Se{_parse(e){if(this._getType(e)!==ee.undefined){const o=this._getOrReturnCtx(e);return J(o,{code:z.invalid_type,expected:ee.void,received:o.parsedType}),de}return nn(e.data)}}bb.create=t=>new bb({typeName:pe.ZodVoid,...we(t)});class Jn extends Se{_parse(e){const{ctx:n,status:o}=this._processInputParams(e),r=this._def;if(n.parsedType!==ee.array)return J(n,{code:z.invalid_type,expected:ee.array,received:n.parsedType}),de;if(r.exactLength!==null){const s=n.data.length>r.exactLength.value,i=n.data.length<r.exactLength.value;(s||i)&&(J(n,{code:s?z.too_big:z.too_small,minimum:i?r.exactLength.value:void 0,maximum:s?r.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:r.exactLength.message}),o.dirty())}if(r.minLength!==null&&n.data.length<r.minLength.value&&(J(n,{code:z.too_small,minimum:r.minLength.value,type:"array",inclusive:!0,exact:!1,message:r.minLength.message}),o.dirty()),r.maxLength!==null&&n.data.length>r.maxLength.value&&(J(n,{code:z.too_big,maximum:r.maxLength.value,type:"array",inclusive:!0,exact:!1,message:r.maxLength.message}),o.dirty()),n.common.async)return Promise.all([...n.data].map((s,i)=>r.type._parseAsync(new pr(n,s,n.path,i)))).then(s=>zt.mergeArray(o,s));const a=[...n.data].map((s,i)=>r.type._parseSync(new pr(n,s,n.path,i)));return zt.mergeArray(o,a)}get element(){return this._def.type}min(e,n){return new Jn({...this._def,minLength:{value:e,message:oe.toString(n)}})}max(e,n){return new Jn({...this._def,maxLength:{value:e,message:oe.toString(n)}})}length(e,n){return new Jn({...this._def,exactLength:{value:e,message:oe.toString(n)}})}nonempty(e){return this.min(1,e)}}Jn.create=(t,e)=>new Jn({type:t,minLength:null,maxLength:null,exactLength:null,typeName:pe.ZodArray,...we(e)});function Sa(t){if(t instanceof Ue){const e={};for(const n in t.shape){const o=t.shape[n];e[n]=ir.create(Sa(o))}return new Ue({...t._def,shape:()=>e})}else return t instanceof Jn?new Jn({...t._def,type:Sa(t.element)}):t instanceof ir?ir.create(Sa(t.unwrap())):t instanceof vs?vs.create(Sa(t.unwrap())):t instanceof Zr?Zr.create(t.items.map(e=>Sa(e))):t}class Ue extends Se{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const e=this._def.shape(),n=Ae.objectKeys(e);return this._cached={shape:e,keys:n},this._cached}_parse(e){if(this._getType(e)!==ee.object){const c=this._getOrReturnCtx(e);return J(c,{code:z.invalid_type,expected:ee.object,received:c.parsedType}),de}const{status:o,ctx:r}=this._processInputParams(e),{shape:a,keys:s}=this._getCached(),i=[];if(!(this._def.catchall instanceof gr&&this._def.unknownKeys==="strip"))for(const c in r.data)s.includes(c)||i.push(c);const l=[];for(const c of s){const u=a[c],d=r.data[c];l.push({key:{status:"valid",value:c},value:u._parse(new pr(r,d,r.path,c)),alwaysSet:c in r.data})}if(this._def.catchall instanceof gr){const c=this._def.unknownKeys;if(c==="passthrough")for(const u of i)l.push({key:{status:"valid",value:u},value:{status:"valid",value:r.data[u]}});else if(c==="strict")i.length>0&&(J(r,{code:z.unrecognized_keys,keys:i}),o.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const c=this._def.catchall;for(const u of i){const d=r.data[u];l.push({key:{status:"valid",value:u},value:c._parse(new pr(r,d,r.path,u)),alwaysSet:u in r.data})}}return r.common.async?Promise.resolve().then(async()=>{const c=[];for(const u of l){const d=await u.key,g=await u.value;c.push({key:d,value:g,alwaysSet:u.alwaysSet})}return c}).then(c=>zt.mergeObjectSync(o,c)):zt.mergeObjectSync(o,l)}get shape(){return this._def.shape()}strict(e){return oe.errToObj,new Ue({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(n,o)=>{var a,s;const r=((s=(a=this._def).errorMap)==null?void 0:s.call(a,n,o).message)??o.defaultError;return n.code==="unrecognized_keys"?{message:oe.errToObj(e).message??r}:{message:r}}}:{}})}strip(){return new Ue({...this._def,unknownKeys:"strip"})}passthrough(){return new Ue({...this._def,unknownKeys:"passthrough"})}extend(e){return new Ue({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new Ue({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:pe.ZodObject})}setKey(e,n){return this.augment({[e]:n})}catchall(e){return new Ue({...this._def,catchall:e})}pick(e){const n={};for(const o of Ae.objectKeys(e))e[o]&&this.shape[o]&&(n[o]=this.shape[o]);return new Ue({...this._def,shape:()=>n})}omit(e){const n={};for(const o of Ae.objectKeys(this.shape))e[o]||(n[o]=this.shape[o]);return new Ue({...this._def,shape:()=>n})}deepPartial(){return Sa(this)}partial(e){const n={};for(const o of Ae.objectKeys(this.shape)){const r=this.shape[o];e&&!e[o]?n[o]=r:n[o]=r.optional()}return new Ue({...this._def,shape:()=>n})}required(e){const n={};for(const o of Ae.objectKeys(this.shape))if(e&&!e[o])n[o]=this.shape[o];else{let a=this.shape[o];for(;a instanceof ir;)a=a._def.innerType;n[o]=a}return new Ue({...this._def,shape:()=>n})}keyof(){return Cx(Ae.objectKeys(this.shape))}}Ue.create=(t,e)=>new Ue({shape:()=>t,unknownKeys:"strip",catchall:gr.create(),typeName:pe.ZodObject,...we(e)});Ue.strictCreate=(t,e)=>new Ue({shape:()=>t,unknownKeys:"strict",catchall:gr.create(),typeName:pe.ZodObject,...we(e)});Ue.lazycreate=(t,e)=>new Ue({shape:t,unknownKeys:"strip",catchall:gr.create(),typeName:pe.ZodObject,...we(e)});class xh extends Se{_parse(e){const{ctx:n}=this._processInputParams(e),o=this._def.options;function r(a){for(const i of a)if(i.result.status==="valid")return i.result;for(const i of a)if(i.result.status==="dirty")return n.common.issues.push(...i.ctx.common.issues),i.result;const s=a.map(i=>new xo(i.ctx.common.issues));
vendor: 4,104 bytes, line 4660
4660return J(n,{code:z.invalid_union,unionErrors:s}),de}if(n.common.async)return Promise.all(o.map(async a=>{const s={...n,common:{...n.common,issues:[]},parent:null};return{result:await a._parseAsync({data:n.data,path:n.path,parent:s}),ctx:s}})).then(r);{let a;const s=[];for(const l of o){const c={...n,common:{...n.common,issues:[]},parent:null},u=l._parseSync({data:n.data,path:n.path,parent:c});if(u.status==="valid")return u;u.status==="dirty"&&!a&&(a={result:u,ctx:c}),c.common.issues.length&&s.push(c.common.issues)}if(a)return n.common.issues.push(...a.ctx.common.issues),a.result;const i=s.map(l=>new xo(l));return J(n,{code:z.invalid_union,unionErrors:i}),de}}get options(){return this._def.options}}xh.create=(t,e)=>new xh({options:t,typeName:pe.ZodUnion,...we(e)});function ag(t,e){const n=Do(t),o=Do(e);if(t===e)return{valid:!0,data:t};if(n===ee.object&&o===ee.object){const r=Ae.objectKeys(e),a=Ae.objectKeys(t).filter(i=>r.indexOf(i)!==-1),s={...t,...e};for(const i of a){const l=ag(t[i],e[i]);if(!l.valid)return{valid:!1};s[i]=l.data}return{valid:!0,data:s}}else if(n===ee.array&&o===ee.array){if(t.length!==e.length)return{valid:!1};const r=[];for(let a=0;a<t.length;a++){const s=t[a],i=e[a],l=ag(s,i);if(!l.valid)return{valid:!1};r.push(l.data)}return{valid:!0,data:r}}else return n===ee.date&&o===ee.date&&+t==+e?{valid:!0,data:t}:{valid:!1}}class Sh extends Se{_parse(e){const{status:n,ctx:o}=this._processInputParams(e),r=(a,s)=>{if(hb(a)||hb(s))return de;const i=ag(a.value,s.value);return i.valid?((ub(a)||ub(s))&&n.dirty(),{status:n.value,value:i.data}):(J(o,{code:z.invalid_intersection_types}),de)};return o.common.async?Promise.all([this._def.left._parseAsync({data:o.data,path:o.path,parent:o}),this._def.right._parseAsync({data:o.data,path:o.path,parent:o})]).then(([a,s])=>r(a,s)):r(this._def.left._parseSync({data:o.data,path:o.path,parent:o}),this._def.right._parseSync({data:o.data,path:o.path,parent:o}))}}Sh.create=(t,e,n)=>new Sh({left:t,right:e,typeName:pe.ZodIntersection,...we(n)});class Zr extends Se{_parse(e){const{status:n,ctx:o}=this._processInputParams(e);if(o.parsedType!==ee.array)return J(o,{code:z.invalid_type,expected:ee.array,received:o.parsedType}),de;if(o.data.length<this._def.items.length)return J(o,{code:z.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),de;!this._def.rest&&o.data.length>this._def.items.length&&(J(o,{code:z.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());const a=[...o.data].map((s,i)=>{const l=this._def.items[i]||this._def.rest;return l?l._parse(new pr(o,s,o.path,i)):null}).filter(s=>!!s);return o.common.async?Promise.all(a).then(s=>zt.mergeArray(n,s)):zt.mergeArray(n,a)}get items(){return this._def.items}rest(e){return new Zr({...this._def,rest:e})}}Zr.create=(t,e)=>{if(!Array.isArray(t))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Zr({items:t,typeName:pe.ZodTuple,rest:null,...we(e)})};class vb extends Se{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:n,ctx:o}=this._processInputParams(e);if(o.parsedType!==ee.map)return J(o,{code:z.invalid_type,expected:ee.map,received:o.parsedType}),de;const r=this._def.keyType,a=this._def.valueType,s=[...o.data.entries()].map(([i,l],c)=>({key:r._parse(new pr(o,i,o.path,[c,"key"])),value:a._parse(new pr(o,l,o.path,[c,"value"]))}));if(o.common.async){const i=new Map;return Promise.resolve().then(async()=>{for(const l of s){const c=await l.key,u=await l.value;if(c.status==="aborted"||u.status==="aborted")return de;(c.status==="dirty"||u.status==="dirty")&&n.dirty(),i.set(c.value,u.value)}return{status:n.value,value:i}})}else{const i=new Map;for(const l of s){const c=l.key,u=l.value;if(c.status==="aborted"||u.status==="aborted")return de;(c.status==="dirty"||u.status==="dirty")&&n.dirty(),i.set(c.value,u.value)}return{status:n.value,value:i}}}}vb.create=(t,e,n)=>new vb({valueType:e,keyType:t,typeName:pe.ZodMap,...we(n)});class nl extends Se{_parse(e){const{status:n,ctx:o}=this._processInputParams(e);
vendor: 6,880 bytes, line 4660
4660if(o.parsedType!==ee.set)return J(o,{code:z.invalid_type,expected:ee.set,received:o.parsedType}),de;const r=this._def;r.minSize!==null&&o.data.size<r.minSize.value&&(J(o,{code:z.too_small,minimum:r.minSize.value,type:"set",inclusive:!0,exact:!1,message:r.minSize.message}),n.dirty()),r.maxSize!==null&&o.data.size>r.maxSize.value&&(J(o,{code:z.too_big,maximum:r.maxSize.value,type:"set",inclusive:!0,exact:!1,message:r.maxSize.message}),n.dirty());const a=this._def.valueType;function s(l){const c=new Set;for(const u of l){if(u.status==="aborted")return de;u.status==="dirty"&&n.dirty(),c.add(u.value)}return{status:n.value,value:c}}const i=[...o.data.values()].map((l,c)=>a._parse(new pr(o,l,o.path,c)));return o.common.async?Promise.all(i).then(l=>s(l)):s(i)}min(e,n){return new nl({...this._def,minSize:{value:e,message:oe.toString(n)}})}max(e,n){return new nl({...this._def,maxSize:{value:e,message:oe.toString(n)}})}size(e,n){return this.min(e,n).max(e,n)}nonempty(e){return this.min(1,e)}}nl.create=(t,e)=>new nl({valueType:t,minSize:null,maxSize:null,typeName:pe.ZodSet,...we(e)});class kb extends Se{get schema(){return this._def.getter()}_parse(e){const{ctx:n}=this._processInputParams(e);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}}kb.create=(t,e)=>new kb({getter:t,typeName:pe.ZodLazy,...we(e)});class sg extends Se{_parse(e){if(e.data!==this._def.value){const n=this._getOrReturnCtx(e);return J(n,{received:n.data,code:z.invalid_literal,expected:this._def.value}),de}return{status:"valid",value:e.data}}get value(){return this._def.value}}sg.create=(t,e)=>new sg({value:t,typeName:pe.ZodLiteral,...we(e)});function Cx(t,e){return new ws({values:t,typeName:pe.ZodEnum,...we(e)})}class ws extends Se{_parse(e){if(typeof e.data!="string"){const n=this._getOrReturnCtx(e),o=this._def.values;return J(n,{expected:Ae.joinValues(o),received:n.parsedType,code:z.invalid_type}),de}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){const n=this._getOrReturnCtx(e),o=this._def.values;return J(n,{received:n.data,code:z.invalid_enum_value,options:o}),de}return nn(e.data)}get options(){return this._def.values}get enum(){const e={};for(const n of this._def.values)e[n]=n;return e}get Values(){const e={};for(const n of this._def.values)e[n]=n;return e}get Enum(){const e={};for(const n of this._def.values)e[n]=n;return e}extract(e,n=this._def){return ws.create(e,{...this._def,...n})}exclude(e,n=this._def){return ws.create(this.options.filter(o=>!e.includes(o)),{...this._def,...n})}}ws.create=Cx;class xb extends Se{_parse(e){const n=Ae.getValidEnumValues(this._def.values),o=this._getOrReturnCtx(e);if(o.parsedType!==ee.string&&o.parsedType!==ee.number){const r=Ae.objectValues(n);return J(o,{expected:Ae.joinValues(r),received:o.parsedType,code:z.invalid_type}),de}if(this._cache||(this._cache=new Set(Ae.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){const r=Ae.objectValues(n);return J(o,{received:o.data,code:z.invalid_enum_value,options:r}),de}return nn(e.data)}get enum(){return this._def.values}}xb.create=(t,e)=>new xb({values:t,typeName:pe.ZodNativeEnum,...we(e)});class Th extends Se{unwrap(){return this._def.type}_parse(e){const{ctx:n}=this._processInputParams(e);if(n.parsedType!==ee.promise&&n.common.async===!1)return J(n,{code:z.invalid_type,expected:ee.promise,received:n.parsedType}),de;const o=n.parsedType===ee.promise?n.data:Promise.resolve(n.data);return nn(o.then(r=>this._def.type.parseAsync(r,{path:n.path,errorMap:n.common.contextualErrorMap})))}}Th.create=(t,e)=>new Th({type:t,typeName:pe.ZodPromise,...we(e)});class bs extends Se{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===pe.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:n,ctx:o}=this._processInputParams(e),r=this._def.effect||null,a={addIssue:s=>{J(o,s),s.fatal?n.abort():n.dirty()},get path(){return o.path}};if(a.addIssue=a.addIssue.bind(a),r.type==="preprocess"){const s=r.transform(o.data,a);if(o.common.async)return Promise.resolve(s).then(async i=>{if(n.value==="aborted")return de;const l=await this._def.schema._parseAsync({data:i,path:o.path,parent:o});return l.status==="aborted"?de:l.status==="dirty"||n.value==="dirty"?ai(l.value):l});{if(n.value==="aborted")return de;const i=this._def.schema._parseSync({data:s,path:o.path,parent:o});return i.status==="aborted"?de:i.status==="dirty"||n.value==="dirty"?ai(i.value):i}}if(r.type==="refinement"){const s=i=>{const l=r.refinement(i,a);if(o.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return i};if(o.common.async===!1){const i=this._def.schema._parseSync({data:o.data,path:o.path,parent:o});return i.status==="aborted"?de:(i.status==="dirty"&&n.dirty(),s(i.value),{status:n.value,value:i.value})}else return this._def.schema._parseAsync({data:o.data,path:o.path,parent:o}).then(i=>i.status==="aborted"?de:(i.status==="dirty"&&n.dirty(),s(i.value).then(()=>({status:n.value,value:i.value}))))}if(r.type==="transform")if(o.common.async===!1){const s=this._def.schema._parseSync({data:o.data,path:o.path,parent:o});if(!ys(s))return de;const i=r.transform(s.value,a);if(i instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:i}}else return this._def.schema._parseAsync({data:o.data,path:o.path,parent:o}).then(s=>ys(s)?Promise.resolve(r.transform(s.value,a)).then(i=>({status:n.value,value:i})):de);Ae.assertNever(r)}}bs.create=(t,e,n)=>new bs({schema:t,typeName:pe.ZodEffects,effect:e,...we(n)});bs.createWithPreprocess=(t,e,n)=>new bs({schema:e,effect:{type:"preprocess",transform:t},typeName:pe.ZodEffects,...we(n)});class ir extends Se{_parse(e){return this._getType(e)===ee.undefined?nn(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}ir.create=(t,e)=>new ir({innerType:t,typeName:pe.ZodOptional,...we(e)});class vs extends Se{_parse(e){return this._getType(e)===ee.null?nn(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}vs.create=(t,e)=>new vs({innerType:t,typeName:pe.ZodNullable,...we(e)});class ig extends Se{_parse(e){const{ctx:n}=this._processInputParams(e);let o=n.data;return n.parsedType===ee.undefined&&(o=this._def.defaultValue()),this._def.innerType._parse({data:o,path:n.path,parent:n})}removeDefault(){return this._def.innerType}}ig.create=(t,e)=>new ig({innerType:t,typeName:pe.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...we(e)});class lg extends Se{_parse(e){const{ctx:n}=this._processInputParams(e),o={...n,common:{...n.common,issues:[]}},r=this._def.innerType._parse({data:o.data,path:o.path,parent:{...o}});return vh(r)?r.then(a=>
4660({status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new xo(o.common.issues)},input:o.data})})):{status:"valid",value:r.status==="valid"?r.value:this._def.catchValue({get error(){return new xo(o.common.issues)},input:o.data})}}removeCatch(){return this._def.innerType}}lg.create=(t,e)=>new lg({innerType:t,typeName:pe.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...we(e)});class Sb extends Se{_parse(e){if(this._getType(e)!==ee.nan){const o=this._getOrReturnCtx(e);return J(o,{code:z.invalid_type,expected:ee.nan,received:o.parsedType}),de}return{status:"valid",value:e.data}}}Sb.create=t=>new Sb({typeName:pe.ZodNaN,...we(t)});class kB extends Se{_parse(e){const{ctx:n}=this._processInputParams(e),o=n.data;return this._def.type._parse({data:o,path:n.path,parent:n})}unwrap(){return this._def.type}}class Xm extends Se{_parse(e){const{status:n,ctx:o}=this._processInputParams(e);if(o.common.async)return(async()=>{const a=await this._def.in._parseAsync({data:o.data,path:o.path,parent:o});return a.status==="aborted"?de:a.status==="dirty"?(n.dirty(),ai(a.value)):this._def.out._parseAsync({data:a.value,path:o.path,parent:o})})();{const r=this._def.in._parseSync({data:o.data,path:o.path,parent:o});return r.status==="aborted"?de:r.status==="dirty"?(n.dirty(),{status:"dirty",value:r.value}):this._def.out._parseSync({data:r.value,path:o.path,parent:o})}}static create(e,n){return new Xm({in:e,out:n,typeName:pe.ZodPipeline})}}class cg extends Se{_parse(e){const n=this._def.innerType._parse(e),o=r=>(ys(r)&&(r.value=Object.freeze(r.value)),r);return vh(n)?n.then(r=>o(r)):o(n)}unwrap(){return this._def.innerType}}cg.create=(t,e)=>new cg({innerType:t,typeName:pe.ZodReadonly,...we(e)});Ue.lazycreate;var pe;(function(t){t.ZodString="ZodString",t.ZodNumber="ZodNumber",t.ZodNaN="ZodNaN",t.ZodBigInt="ZodBigInt",t.ZodBoolean="ZodBoolean",t.ZodDate="ZodDate",t.ZodSymbol="ZodSymbol",t.ZodUndefined="ZodUndefined",t.ZodNull="ZodNull",t.ZodAny="ZodAny",t.ZodUnknown="ZodUnknown",t.ZodNever="ZodNever",t.ZodVoid="ZodVoid",t.ZodArray="ZodArray",t.ZodObject="ZodObject",t.ZodUnion="ZodUnion",t.ZodDiscriminatedUnion="ZodDiscriminatedUnion",t.ZodIntersection="ZodIntersection",t.ZodTuple="ZodTuple",t.ZodRecord="ZodRecord",t.ZodMap="ZodMap",t.ZodSet="ZodSet",t.ZodFunction="ZodFunction",t.ZodLazy="ZodLazy",t.ZodLiteral="ZodLiteral",t.ZodEnum="ZodEnum",t.ZodEffects="ZodEffects",t.ZodNativeEnum="ZodNativeEnum",t.ZodOptional="ZodOptional",t.ZodNullable="ZodNullable",t.ZodDefault="ZodDefault",t.ZodCatch="ZodCatch",t.ZodPromise="ZodPromise",t.ZodBranded="ZodBranded",t.ZodPipeline="ZodPipeline",t.ZodReadonly="ZodReadonly"})(pe||(pe={}));const Yt=Qo.create;gr.create;const kN=Jn.create,xB=Ue.create;Ue.strictCreate;xh.create;Sh.create;Zr.create;const SB=sg.create;ws.create;Th.create;ir.create;vs.create;const si=f.forwardRef(({className:t,type:e,...n},o)=>h.jsx("input",{type:e,className:ve("flex h-10 w-full rounded border border-teal-500/20 bg-cloud px-3 py-2.5 text-sm font-sans text-obsidian ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-obsidian placeholder:text-mushroom/60 hover:border-teal-500/40 focus:outline-none focus:ring-0 focus-visible:outline-none focus-visible:ring-0 focus:border-teal-500 focus:bg-white disabled:cursor-not-allowed disabled:opacity-50 transition-colors",t),ref:o,...n}));si.displayName="Input";const Ic=f.forwardRef(({className:t,...e},n)=>h.jsx("textarea",{className:ve("flex min-h-[80px] w-full rounded border border-teal-500/20 bg-cloud px-3 py-2.5 text-sm font-sans text-obsidian ring-offset-background placeholder:text-mushroom/60 hover:border-teal-500/40 focus:outline-none focus:ring-0 focus-visible:outline-none focus-visible:ring-0 focus:border-teal-500 focus:bg-white disabled:cursor-not-allowed disabled:opacity-50 transition-colors",t),ref:n,...e}));Ic.displayName="Textarea";var TB="Label",Ex=f.forwardRef((t,e)=>h.jsx(ce.label,{...t,ref:e,onMouseDown:n=>{var r;n.target.closest("button, input, select, textarea")||((r=t.onMouseDown)==null||r.call(t,n),!n.defaultPrevented&&n.detail>1&&n.preventDefault())}}));Ex.displayName=TB;var Ix=Ex;const AB=ym("text-[13px] font-semibold font-sans text-obsidian leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),Rt=f.forwardRef(({className:t,...e},n)=>h.jsx(Ix,{ref:n,className:ve(AB(),t),...e}));Rt.displayName=Ix.displayName;function Tb(t,[e,n]){return Math.min(n,Math.max(e,t))}function _B(t){const e=f.useRef({value:t,previous:t});return f.useMemo(()=>(e.current.value!==t&&(e.current.previous=e.current.value,e.current.value=t),e.current.previous),[t])}
vendor: 18,338 bytes, line 4660
4660var CB=[" ","Enter","ArrowUp","ArrowDown"],EB=[" ","Enter"],Xr="Select",[pu,gu,IB]=pm(Xr),[Bs,xN]=wr(Xr,[IB,Zh]),mu=Zh(),[PB,vr]=Bs(Xr),[jB,BB]=Bs(Xr),Px=t=>{const{__scopeSelect:e,children:n,open:o,defaultOpen:r,onOpenChange:a,value:s,defaultValue:i,onValueChange:l,dir:c,name:u,autoComplete:d,disabled:g,required:p,form:v}=t,y=mu(e),[k,w]=f.useState(null),[m,b]=f.useState(null),[x,S]=f.useState(!1),T=hx(c),[A,_]=Gr({prop:o,defaultProp:r??!1,onChange:a,caller:Xr}),[C,P]=Gr({prop:s,defaultProp:i,onChange:l,caller:Xr}),L=f.useRef(null),O=k?v||!!k.closest("form"):!0,[Y,B]=f.useState(new Set),V=Array.from(Y).map(U=>U.props.value).join(";");return h.jsx(l6,{...y,children:h.jsxs(PB,{required:p,scope:e,trigger:k,onTriggerChange:w,valueNode:m,onValueNodeChange:b,valueNodeHasChildren:x,onValueNodeHasChildrenChange:S,contentId:Bt(),value:C,onValueChange:P,open:A,onOpenChange:_,dir:T,triggerPointerDownPosRef:L,disabled:g,children:[h.jsx(pu.Provider,{scope:e,children:h.jsx(jB,{scope:t.__scopeSelect,onNativeOptionAdd:f.useCallback(U=>{B(K=>new Set(K).add(U))},[]),onNativeOptionRemove:f.useCallback(U=>{B(K=>{const I=new Set(K);return I.delete(U),I})},[]),children:n})}),O?h.jsxs(eS,{"aria-hidden":!0,required:p,tabIndex:-1,name:u,autoComplete:d,value:C,onChange:U=>P(U.target.value),disabled:g,form:v,children:[C===void 0?h.jsx("option",{value:""}):null,Array.from(Y)]},V):null]})})};Px.displayName=Xr;var jx="SelectTrigger",Bx=f.forwardRef((t,e)=>{const{__scopeSelect:n,disabled:o=!1,...r}=t,a=mu(n),s=vr(jx,n),i=s.disabled||o,l=Ee(e,s.onTriggerChange),c=gu(n),u=f.useRef("touch"),[d,g,p]=nS(y=>{const k=c().filter(b=>!b.disabled),w=k.find(b=>b.value===s.value),m=oS(k,y,w);m!==void 0&&s.onValueChange(m.value)}),v=y=>{i||(s.onOpenChange(!0),p()),y&&(s.triggerPointerDownPosRef.current={x:Math.round(y.pageX),y:Math.round(y.pageY)})};return h.jsx(g1,{asChild:!0,...a,children:h.jsx(ce.button,{type:"button",role:"combobox","aria-controls":s.contentId,"aria-expanded":s.open,"aria-required":s.required,"aria-autocomplete":"none",dir:s.dir,"data-state":s.open?"open":"closed",disabled:i,"data-disabled":i?"":void 0,"data-placeholder":tS(s.value)?"":void 0,...r,ref:l,onClick:me(r.onClick,y=>{y.currentTarget.focus(),u.current!=="mouse"&&v(y)}),onPointerDown:me(r.onPointerDown,y=>{u.current=y.pointerType;const k=y.target;k.hasPointerCapture(y.pointerId)&&k.releasePointerCapture(y.pointerId),y.button===0&&y.ctrlKey===!1&&y.pointerType==="mouse"&&(v(y),y.preventDefault())}),onKeyDown:me(r.onKeyDown,y=>{const k=d.current!=="";!(y.ctrlKey||y.altKey||y.metaKey)&&y.key.length===1&&g(y.key),!(k&&y.key===" ")&&CB.includes(y.key)&&(v(),y.preventDefault())})})})});Bx.displayName=jx;var Ox="SelectValue",Mx=f.forwardRef((t,e)=>{const{__scopeSelect:n,className:o,style:r,children:a,placeholder:s="",...i}=t,l=vr(Ox,n),{onValueNodeHasChildrenChange:c}=l,u=a!==void 0,d=Ee(e,l.onValueNodeChange);return rt(()=>{c(u)},[c,u]),h.jsx(ce.span,{...i,ref:d,style:{pointerEvents:"none"},children:tS(l.value)?h.jsx(h.Fragment,{children:s}):a})});Mx.displayName=Ox;var OB="SelectIcon",Rx=f.forwardRef((t,e)=>{const{__scopeSelect:n,children:o,...r}=t;return h.jsx(ce.span,{"aria-hidden":!0,...r,ref:e,children:o||"▼"})});Rx.displayName=OB;var MB="SelectPortal",Nx=t=>h.jsx(Uh,{asChild:!0,...t});Nx.displayName=MB;var ea="SelectContent",Lx=f.forwardRef((t,e)=>{const n=vr(ea,t.__scopeSelect),[o,r]=f.useState();if(rt(()=>{r(new DocumentFragment)},[]),!n.open){const a=o;return a?ra.createPortal(h.jsx(Dx,{scope:t.__scopeSelect,children:h.jsx(pu.Slot,{scope:t.__scopeSelect,children:h.jsx("div",{children:t.children})})}),a):null}return h.jsx(Wx,{...t,ref:e})});Lx.displayName=ea;var mn=10,[Dx,kr]=Bs(ea),RB="SelectContentImpl",NB=ps("SelectContent.RemoveScroll"),Wx=f.forwardRef((t,e)=>{const{__scopeSelect:n,position:o="item-aligned",onCloseAutoFocus:r,onEscapeKeyDown:a,onPointerDownOutside:s,side:i,sideOffset:l,align:c,alignOffset:u,arrowPadding:d,collisionBoundary:g,collisionPadding:p,sticky:v,hideWhenDetached:y,avoidCollisions:k,...w}=t,m=vr(ea,n),[b,x]=f.useState(null),[S,T]=f.useState(null),A=Ee(e,N=>x(N)),[_,C]=f.useState(null),[P,L]=f.useState(null),O=gu(n),[Y,B]=f.useState(!1),V=f.useRef(!1);f.useEffect(()=>{if(b)return x2(b)},[b]),g2();const U=f.useCallback(N=>{const[te,...se]=O().map(q=>q.ref.current),[ie]=se.slice(-1),ne=document.activeElement;for(const q of N)if(q===ne||(q==null||q.scrollIntoView({block:"nearest"}),q===te&&S&&(S.scrollTop=0),q===ie&&S&&(S.scrollTop=S.scrollHeight),q==null||q.focus(),document.activeElement!==ne))return},[O,S]),K=f.useCallback(()=>U([_,b]),[U,_,b]);f.useEffect(()=>{Y&&K()},[Y,K]);const{onOpenChange:I,triggerPointerDownPosRef:j}=m;f.useEffect(()=>{if(b){let N={x:0,y:0};const te=ie=>{var ne,q;N={x:Math.abs(Math.round(ie.pageX)-(((ne=j.current)==null?void 0:ne.x)??0)),y:Math.abs(Math.round(ie.pageY)-(((q=j.current)==null?void 0:q.y)??0))}},se=ie=>{N.x<=10&&N.y<=10?ie.preventDefault():b.contains(ie.target)||I(!1),document.removeEventListener("pointermove",te),j.current=null};return j.current!==null&&(document.addEventListener("pointermove",te),document.addEventListener("pointerup",se,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",te),document.removeEventListener("pointerup",se,{capture:!0})}}},[b,I,j]),f.useEffect(()=>{const N=()=>I(!1);return window.addEventListener("blur",N),window.addEventListener("resize",N),()=>{window.removeEventListener("blur",N),window.removeEventListener("resize",N)}},[I]);const[H,Z]=nS(N=>{const te=O().filter(ne=>!ne.disabled),se=te.find(ne=>ne.ref.current===document.activeElement),ie=oS(te,N,se);ie&&setTimeout(()=>ie.ref.current.focus())}),E=f.useCallback((N,te,se)=>{const ie=!V.current&&!se;(m.value!==void 0&&m.value===te||ie)&&(C(N),ie&&(V.current=!0))},[m.value]),D=f.useCallback(()=>b==null?void 0:b.focus(),[b]),F=f.useCallback((N,te,se)=>{const ie=!V.current&&!se;(m.value!==void 0&&m.value===te||ie)&&L(N)},[m.value]),$=o==="popper"?hg:qx,re=$===hg?{side:i,sideOffset:l,align:c,alignOffset:u,arrowPadding:d,collisionBoundary:g,collisionPadding:p,sticky:v,hideWhenDetached:y,avoidCollisions:k}:{};return h.jsx(Dx,{scope:n,content:b,viewport:S,onViewportChange:T,itemRefCallback:E,selectedItem:_,onItemLeave:D,itemTextRefCallback:F,focusSelectedItem:K,selectedItemText:P,position:o,isPositioned:Y,searchRef:H,children:h.jsx(Wm,{as:NB,allowPinchZoom:!0,children:h.jsx(Dm,{asChild:!0,trapped:m.open,onMountAutoFocus:N=>{N.preventDefault()},onUnmountAutoFocus:me(r,N=>{var te;(te=m.trigger)==null||te.focus({preventScroll:!0}),N.preventDefault()}),children:h.jsx(gl,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:a,onPointerDownOutside:s,onFocusOutside:N=>N.preventDefault(),onDismiss:()=>m.onOpenChange(!1),children:h.jsx($,{role:"listbox",id:m.contentId,"data-state":m.open?"open":"closed",dir:m.dir,onContextMenu:N=>N.preventDefault(),...w,...re,onPlaced:()=>B(!0),ref:A,style:{display:"flex",flexDirection:"column",outline:"none",...w.style},onKeyDown:me(w.onKeyDown,N=>{const te=N.ctrlKey||N.altKey||N.metaKey;if(N.key==="Tab"&&N.preventDefault(),!te&&N.key.length===1&&Z(N.key),["ArrowUp","ArrowDown","Home","End"].includes(N.key)){let ie=O().filter(ne=>!ne.disabled).map(ne=>ne.ref.current);if(["ArrowUp","End"].includes(N.key)&&(ie=ie.slice().reverse()),["ArrowUp","ArrowDown"].includes(N.key)){const ne=N.target,q=ie.indexOf(ne);ie=ie.slice(q+1)}setTimeout(()=>U(ie)),N.preventDefault()}})})})})})})});Wx.displayName=RB;var LB="SelectItemAlignedPosition",qx=f.forwardRef((t,e)=>{const{__scopeSelect:n,onPlaced:o,...r}=t,a=vr(ea,n),s=kr(ea,n),[i,l]=f.useState(null),[c,u]=f.useState(null),d=Ee(e,A=>u(A)),g=gu(n),p=f.useRef(!1),v=f.useRef(!0),{viewport:y,selectedItem:k,selectedItemText:w,focusSelectedItem:m}=s,b=f.useCallback(()=>{if(a.trigger&&a.valueNode&&i&&c&&y&&k&&w){const A=a.trigger.getBoundingClientRect(),_=c.getBoundingClientRect(),C=a.valueNode.getBoundingClientRect(),P=w.getBoundingClientRect();if(a.dir!=="rtl"){const ne=P.left-_.left,q=C.left-ne,ue=A.left-q,ke=A.width+ue,De=Math.max(ke,_.width),Ze=window.innerWidth-mn,at=Tb(q,[mn,Math.max(mn,Ze-De)]);i.style.minWidth=ke+"px",i.style.left=at+"px"}else{const ne=_.right-P.right,q=window.innerWidth-C.right-ne,ue=window.innerWidth-A.right-q,ke=A.width+ue,De=Math.max(ke,_.width),Ze=window.innerWidth-mn,at=Tb(q,[mn,Math.max(mn,Ze-De)]);i.style.minWidth=ke+"px",i.style.right=at+"px"}const L=g(),O=window.innerHeight-mn*2,Y=y.scrollHeight,B=window.getComputedStyle(c),V=parseInt(B.borderTopWidth,10),U=parseInt(B.paddingTop,10),K=parseInt(B.borderBottomWidth,10),I=parseInt(B.paddingBottom,10),j=V+U+Y+I+K,H=Math.min(k.offsetHeight*5,j),Z=window.getComputedStyle(y),E=parseInt(Z.paddingTop,10),D=parseInt(Z.paddingBottom,10),F=A.top+A.height/2-mn,$=O-F,re=k.offsetHeight/2,N=k.offsetTop+re,te=V+U+N,se=j-te;if(te<=F){const ne=L.length>0&&k===L[L.length-1].ref.current;i.style.bottom="0px";const q=c.clientHeight-y.offsetTop-y.offsetHeight,ue=Math.max($,re+(ne?D:0)+q+K),ke=te+ue;i.style.height=ke+"px"}else{const ne=L.length>0&&k===L[0].ref.current;i.style.top="0px";const ue=Math.max(F,V+y.offsetTop+(ne?E:0)+re)+se;i.style.height=ue+"px",y.scrollTop=te-F+y.offsetTop}i.style.margin=`${mn}px 0`,i.style.minHeight=H+"px",i.style.maxHeight=O+"px",o==null||o(),requestAnimationFrame(()=>p.current=!0)}},[g,a.trigger,a.valueNode,i,c,y,k,w,a.dir,o]);rt(()=>b(),[b]);const[x,S]=f.useState();rt(()=>{c&&S(window.getComputedStyle(c).zIndex)},[c]);const T=f.useCallback(A=>{A&&v.current===!0&&(b(),m==null||m(),v.current=!1)},[b,m]);return h.jsx(WB,{scope:n,contentWrapper:i,shouldExpandOnScrollRef:p,onScrollButtonChange:T,children:h.jsx("div",{ref:l,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:x},children:h.jsx(ce.div,{...r,ref:d,style:{boxSizing:"border-box",maxHeight:"100%",...r.style}})})})});qx.displayName=LB;var DB="SelectPopperPosition",hg=f.forwardRef((t,e)=>{const{__scopeSelect:n,align:o="start",collisionPadding:r=mn,...a}=t,s=mu(n);return h.jsx(m1,{...s,...a,ref:e,align:o,collisionPadding:r,style:{boxSizing:"border-box",...a.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});hg.displayName=DB;var[WB,ef]=Bs(ea,{}),ug="SelectViewport",Fx=f.forwardRef((t,e)=>{const{__scopeSelect:n,nonce:o,...r}=t,a=kr(ug,n),s=ef(ug,n),i=Ee(e,a.onViewportChange),l=f.useRef(0);return h.jsxs(h.Fragment,{children:[h.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:o}),h.jsx(pu.Slot,{scope:n,children:h.jsx(ce.div,{"data-radix-select-viewport":"",role:"presentation",...r,ref:i,style:{position:"relative",flex:1,overflow:"hidden auto",...r.style},onScroll:me(r.onScroll,c=>{const u=c.currentTarget,{contentWrapper:d,shouldExpandOnScrollRef:g}=s;if(g!=null&&g.current&&d){const p=Math.abs(l.current-u.scrollTop);if(p>0){const v=window.innerHeight-mn*2,y=parseFloat(d.style.minHeight),k=parseFloat(d.style.height),w=Math.max(y,k);if(w<v){const m=w+p,b=Math.min(v,m),x=m-b;d.style.height=b+"px",d.style.bottom==="0px"&&(u.scrollTop=x>0?x:0,d.style.justifyContent="flex-end")}}}l.current=u.scrollTop})})})]})});Fx.displayName=ug;var Hx="SelectGroup",[qB,FB]=Bs(Hx),HB=f.forwardRef((t,e)=>{const{__scopeSelect:n,...o}=t,r=Bt();return h.jsx(qB,{scope:n,id:r,children:h.jsx(ce.div,{role:"group","aria-labelledby":r,...o,ref:e})})});HB.displayName=Hx;var zx="SelectLabel",$x=f.forwardRef((t,e)=>{const{__scopeSelect:n,...o}=t,r=FB(zx,n);return h.jsx(ce.div,{id:r.id,...o,ref:e})});$x.displayName=zx;var Ah="SelectItem",[zB,Ux]=Bs(Ah),Yx=f.forwardRef((t,e)=>{const{__scopeSelect:n,value:o,disabled:r=!1,textValue:a,...s}=t,i=vr(Ah,n),l=kr(Ah,n),c=i.value===o,[u,d]=f.useState(a??""),[g,p]=f.useState(!1),v=Ee(e,m=>{var b;return(b=l.itemRefCallback)==null?void 0:b.call(l,m,o,r)}),y=Bt(),k=f.useRef("touch"),w=()=>{r||(i.onValueChange(o),i.onOpenChange(!1))};if(o==="")throw new Error("A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return h.jsx(zB,{scope:n,value:o,disabled:r,textId:y,isSelected:c,onItemTextChange:f.useCallback(m=>{d(b=>b||((m==null?void 0:m.textContent)??"").trim())},[]),children:h.jsx(pu.ItemSlot,{scope:n,value:o,disabled:r,textValue:u,children:h.jsx(ce.div,{role:"option","aria-labelledby":y,"data-highlighted":g?"":void 0,"aria-selected":c&&g,"data-state":c?"checked":"unchecked","aria-disabled":r||void 0,"data-disabled":r?"":void 0,tabIndex:r?void 0:-1,...s,ref:v,onFocus:me(s.onFocus,()=>p(!0)),onBlur:me(s.onBlur,()=>p(!1)),onClick:me(s.onClick,()=>{k.current!=="mouse"&&w()}),onPointerUp:me(s.onPointerUp,()=>{k.current==="mouse"&&w()}),onPointerDown:me(s.onPointerDown,m=>{k.current=m.pointerType}),onPointerMove:me(s.onPointerMove,m=>{var b;k.current=m.pointerType,r?(b=l.onItemLeave)==null||b.call(l):k.current==="mouse"&&m.currentTarget.focus({preventScroll:!0})}),onPointerLeave:me(s.onPointerLeave,m=>{var b;m.currentTarget===document.activeElement&&((b=l.onItemLeave)==null||b.call(l))}),onKeyDown:me(s.onKeyDown,m=>{var x;((x=l.searchRef)==null?void 0:x.current)!==""&&m.key===" "||(EB.includes(m.key)&&w(),m.key===" "&&m.preventDefault())})})})})});Yx.displayName=Ah;var ii="SelectItemText",Vx=f.forwardRef((t,e)=>{const{__scopeSelect:n,className:o,style:r,...a}=t,s=vr(ii,n),i=kr(ii,n),l=Ux(ii,n),c=BB(ii,n),[u,d]=f.useState(null),g=Ee(e,w=>d(w),l.onItemTextChange,w=>{var m;return(m=i.itemTextRefCallback)==null?void 0:m.call(i,w,l.value,l.disabled)}),p=u==null?void 0:u.textContent,v=f.useMemo(()=>h.jsx("option",{value:l.value,disabled:l.disabled,children:p},l.value),[l.disabled,l.value,p]),{onNativeOptionAdd:y,onNativeOptionRemove:k}=c;return rt(()=>(y(v),()=>k(v)),[y,k,v]),h.jsxs(h.Fragment,{children:[h.jsx(ce.span,{id:l.textId,...a,ref:g}),l.isSelected&&s.valueNode&&!s.valueNodeHasChildren?ra.createPortal(a.children,s.valueNode):null]})});Vx.displayName=ii;var Gx="SelectItemIndicator",Kx=f.forwardRef((t,e)=>{const{__scopeSelect:n,...o}=t;return Ux(Gx,n).isSelected?h.jsx(ce.span,{"aria-hidden":!0,...o,ref:e}):null});Kx.displayName=Gx;var dg="SelectScrollUpButton",Jx=f.forwardRef((t,e)=>{const n=kr(dg,t.__scopeSelect),o=ef(dg,t.__scopeSelect),[r,a]=f.useState(!1),s=Ee(e,o.onScrollButtonChange);return rt(()=>{if(n.viewport&&n.isPositioned){let i=function(){const c=l.scrollTop>0;a(c)};const l=n.viewport;return i(),l.addEventListener("scroll",i),()=>l.removeEventListener("scroll",i)}},[n.viewport,n.isPositioned]),r?h.jsx(Zx,{...t,ref:s,onAutoScroll:()=>{const{viewport:i,selectedItem:l}=n;i&&l&&(i.scrollTop=i.scrollTop-l.offsetHeight)}}):null});Jx.displayName=dg;var pg="SelectScrollDownButton",Qx=f.forwardRef((t,e)=>{const n=kr(pg,t.__scopeSelect),o=ef(pg,t.__scopeSelect),[r,a]=f.useState(!1),s=Ee(e,o.onScrollButtonChange);return rt(()=>{if(n.viewport&&n.isPositioned){let i=function(){const c=l.scrollHeight-l.clientHeight,u=Math.ceil(l.scrollTop)<c;a(u)};const l=n.viewport;return i(),l.addEventListener("scroll",i),()=>l.removeEventListener("scroll",i)}},[n.viewport,n.isPositioned]),r?h.jsx(Zx,{...t,ref:s,onAutoScroll:()=>{const{viewport:i,selectedItem:l}=n;i&&l&&(i.scrollTop=i.scrollTop+l.offsetHeight)}}):null});Qx.displayName=pg;var Zx=f.forwardRef((t,e)=>{const{__scopeSelect:n,onAutoScroll:o,...r}=t,a=kr("SelectScrollButton",n),s=f.useRef(null),i=gu(n),l=f.useCallback(()=>{s.current!==null&&(window.clearInterval(s.current),s.current=null)},[]);return f.useEffect(()=>()=>l(),[l]),rt(()=>{var u;const c=i().find(d=>d.ref.current===document.activeElement);(u=c==null?void 0:c.ref.current)==null||u.scrollIntoView({block:"nearest"})},[i]),h.jsx(ce.div,{"aria-hidden":!0,...r,ref:e,style:{flexShrink:0,...r.style},onPointerDown:me(r.onPointerDown,()=>{s.current===null&&(s.current=window.setInterval(o,50))}),onPointerMove:me(r.onPointerMove,()=>{var c;(c=a.onItemLeave)==null||c.call(a),s.current===null&&(s.current=window.setInterval(o,50))}),onPointerLeave:me(r.onPointerLeave,()=>{l()})})}),$B="SelectSeparator",Xx=f.forwardRef((t,e)=>{const{__scopeSelect:n,...o}=t;return h.jsx(ce.div,{"aria-hidden":!0,...o,ref:e})});Xx.displayName=$B;var gg="SelectArrow",UB=f.forwardRef((t,e)=>{const{__scopeSelect:n,...o}=t,r=mu(n),a=vr(gg,n),s=kr(gg,n);return a.open&&s.position==="popper"?h.jsx(f1,{...r,...o,ref:e}):null});UB.displayName=gg;var YB="SelectBubbleInput",eS=f.forwardRef(({__scopeSelect:t,value:e,...n},o)=>{const r=f.useRef(null),a=Ee(o,r),s=_B(e);return f.useEffect(()=>{const i=r.current;if(!i)return;const l=window.HTMLSelectElement.prototype,u=Object.getOwnPropertyDescriptor(l,"value").set;if(s!==e&&u){const d=new Event("change",{bubbles:!0});u.call(i,e),i.dispatchEvent(d)}},[s,e]),h.jsx(ce.select,{...n,style:{...p0,...n.style},ref:a,defaultValue:e})});eS.displayName=YB;function tS(t){return t===""||t===void 0}function nS(t){const e=In(t),n=f.useRef(""),o=f.useRef(0),r=f.useCallback(s=>{const i=n.current+s;e(i),function l(c){n.current=c,window.clearTimeout(o.current),c!==""&&(o.current=window.setTimeout(()=>l(""),1e3))}(i)},[e]),a=f.useCallback(()=>{n.current="",window.clearTimeout(o.current)},[]);return f.useEffect(()=>()=>window.clearTimeout(o.current),[]),[n,r,a]}function oS(t,e,n){const r=e.length>1&&Array.from(e).every(c=>c===e[0])?e[0]:e,a=n?t.indexOf(n):-1;let s=VB(t,Math.max(a,0));r.length===1&&(s=s.filter(c=>c!==n));const l=s.find(c=>c.textValue.toLowerCase().startsWith(r.toLowerCase()));return l!==n?l:void 0}function VB(t,e){return t.map((n,o)=>t[(e+o)%t.length])}var GB=Px,rS=Bx,KB=Mx,JB=Rx,QB=Nx,aS=Lx,ZB=Fx,sS=$x,iS=Yx,XB=Vx,eO=Kx,lS=Jx,cS=Qx,hS=Xx;const Js=GB,Qs=KB,Ta=f.forwardRef(({className:t,children:e,...n},o)=>h.jsxs(rS,{ref:o,className:ve("flex h-10 w-full items-center justify-between rounded border border-teal-500/20 bg-cloud px-3 py-2.5 text-sm font-sans text-obsidian ring-offset-background placeholder:text-mushroom/60 hover:border-teal-500/40 focu
4660s:outline-none focus:ring-0 data-[state=open]:border-teal-500 data-[state=open]:bg-white disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1 transition-colors",t),...n,children:[e,h.jsx(JB,{asChild:!0,children:h.jsx(gs,{className:"h-4 w-4 opacity-50"})})]}));Ta.displayName=rS.displayName;const uS=f.forwardRef(({className:t,...e},n)=>h.jsx(lS,{ref:n,className:ve("flex cursor-default items-center justify-center py-1",t),...e,children:h.jsx(AA,{className:"h-4 w-4"})}));uS.displayName=lS.displayName;const dS=f.forwardRef(({className:t,...e},n)=>h.jsx(cS,{ref:n,className:ve("flex cursor-default items-center justify-center py-1",t),...e,children:h.jsx(gs,{className:"h-4 w-4"})}));dS.displayName=cS.displayName;const Aa=f.forwardRef(({className:t,children:e,position:n="popper",...o},r)=>h.jsx(QB,{children:h.jsxs(aS,{ref:r,className:ve("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border border-mushroom-200 bg-white text-obsidian shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-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",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",t),position:n,...o,children:[h.jsx(uS,{}),h.jsx(ZB,{className:ve("p-1",n==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:e}),h.jsx(dS,{})]})}));Aa.displayName=aS.displayName;const tO=f.forwardRef(({className:t,...e},n)=>h.jsx(sS,{ref:n,className:ve("py-1.5 pl-8 pr-2 text-sm font-semibold",t),...e}));tO.displayName=sS.displayName;const Me=f.forwardRef(({className:t,children:e,...n},o)=>h.jsxs(iS,{ref:o,className:ve("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 focus:bg-teal-700 focus:text-white",t),...n,children:[h.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:h.jsx(eO,{children:h.jsx(N0,{className:"h-4 w-4"})})}),h.jsx(XB,{children:e})]}));Me.displayName=iS.displayName;const nO=f.forwardRef(({className:t,...e},n)=>h.jsx(hS,{ref:n,className:ve("-mx-1 my-1 h-px bg-muted",t),...e}));nO.displayName=hS.displayName;const oO=36e5,Ab=xB({name:Yt().trim().min(2,"Name must be at least 2 characters").max(100,"Name must be under 100 characters"),email:Yt().trim().email("Please enter a valid email address").max(255,"Email must be under 255 characters"),company:Yt().trim().min(2,"Company name must be at least 2 characters").max(200,"Company name must be under 200 characters"),role:Yt().min(1,"Please select a role"),website:Yt().max(500,"URL must be under 500 characters").optional().or(SB("")),headquarters:Yt().min(1,"Please select a region"),revenue:Yt().min(1,"Please select a revenue range"),usExperience:Yt().trim().min(1,"This field is required").max(2e3,"Please keep your response under 2000 characters"),whyNow:Yt().trim().min(1,"This field is required").max(2e3,"Please keep your response under 2000 characters"),expectedOutcome:Yt().trim().min(1,"This field is required").max(2e3,"Please keep your response under 2000 characters"),commitment:Yt().min(1,"Please select an option"),pricingPreference:Yt().min(1,"Please select an option")}),rO=({isOpen:t,onClose:e})=>{const[n,o]=f.useState(1),[r,a]=f.useState(!1),[s,i]=f.useState(!1),[l,c]=f.useState({}),[u,d]=f.useState(""),g=f.useRef(Date.now()),[p,v]=f.useState({name:"",email:"",company:"",role:"",website:"",headquarters:"",revenue:"",usExperience:"",whyNow:"",expectedOutcome:"",commitment:"",pricingPreference:""}),y=(x,S)=>{v(T=>({...T,[x]:S})),l[x]&&c(T=>{const A={...T};return delete A[x],A})},k=()=>{const S=Ab.pick({name:!0,email:!0,company:!0,role:!0,website:!0,headquarters:!0,revenue:!0}).safeParse(p);if(!S.success){const T={};
4660return S.error.errors.forEach(A=>{const _=A.path[0];T[_]||(T[_]=A.message)}),c(T),!1}return c({}),!0},w=async x=>{x.preventDefault();const S=Ab.safeParse(p);if(!S.success){const _={};S.error.errors.forEach(C=>{const P=C.path[0];_[P]||(_[P]=C.message)}),c(_),Yl.error("Please fix the highlighted fields.");return}const T=localStorage.getItem("hb_last_form_submit"),A=Date.now();if(T&&A-parseInt(T)<oO){Yl.error("You've already submitted recently. Please wait before trying again.");return}i(!0);try{const{error:_}=await Ja.functions.invoke("submit-cohort-application",{body:{...S.data,_hp_company_url:u,_t:g.current}});if(_)throw _;localStorage.setItem("hb_last_form_submit",A.toString()),a(!0),Yl.success("Application submitted! We'll be in touch within a week.")}catch{Yl.error("Something went wrong. Please try again or contact support.")}finally{i(!1)}},m=()=>{k()&&o(2)};if(!t)return null;const b=({field:x})=>{const S=l[x];return S?h.jsx("p",{className:"text-xs text-destructive mt-1",children:S}):null};return h.jsx("div",{className:"fixed inset-0 z-50 flex items-center justify-center p-3 sm:p-4 bg-background/80 backdrop-blur-sm",children:h.jsxs("div",{className:"relative w-full max-w-2xl max-h-[90vh] overflow-y-auto bg-card border border-border rounded-xl shadow-elevated",children:[h.jsxs("div",{className:"sticky top-0 z-10 flex items-center justify-between p-4 sm:p-6 border-b border-border bg-card",children:[h.jsxs("div",{children:[h.jsx("h2",{className:"text-lg sm:text-xl font-serif font-semibold text-foreground",children:r?"Application Submitted":"Apply to the Cohort"}),!r&&h.jsxs("p",{className:"text-xs sm:text-sm text-muted-foreground mt-1",children:["Step ",n," of 2"]})]}),h.jsx("button",{onClick:e,className:"p-2 rounded-lg hover:bg-secondary transition-colors",children:h.jsx(Gh,{className:"w-5 h-5 text-muted-foreground"})})]}),h.jsx("div",{className:"p-4 sm:p-6",children:r?h.jsxs("div",{className:"text-center py-8 sm:py-12",children:[h.jsx("div",{className:"w-14 h-14 sm:w-16 sm:h-16 rounded-full bg-primary/20 flex items-center justify-center mx-auto mb-4 sm:mb-6",children:h.jsx(N0,{className:"w-7 h-7 sm:w-8 sm:h-8 text-primary"})}),h.jsx("h3",{className:"text-xl sm:text-2xl font-serif font-semibold text-foreground mb-3 sm:mb-4",children:"Thank you for applying"}),h.jsx("p",{className:"text-muted-foreground text-sm sm:text-base max-w-md mx-auto mb-6 sm:mb-8",children:"We review applications weekly. If there's a potential fit, you'll hear from us within 5 business days to schedule a screening call."}),h.jsx(Kn,{variant:"outline",onClick:e,children:"Close"})]}):h.jsxs("form",{onSubmit:w,children:[h.jsxs("div",{className:"absolute -left-[9999px] opacity-0 h-0 overflow-hidden","aria-hidden":"true",children:[h.jsx("label",{htmlFor:"modal_company_url",children:"Company URL"}),h.jsx("input",{type:"text",id:"modal_company_url",name:"company_url",tabIndex:-1,autoComplete:"off",value:u,onChange:x=>d(x.target.value)})]}),n===1&&h.jsxs("div",{className:"space-y-6",children:[h.jsxs("div",{className:"grid sm:grid-cols-2 gap-4",children:[h.jsxs("div",{className:"flex flex-col gap-1.5",children:[h.jsxs(Rt,{htmlFor:"name",children:["Full Name ",h.jsx("span",{className:"text-teal-500 ml-0.5",children:"*"})]}),h.jsx(si,{id:"name",value:p.name,onChange:x=>y("name",x.target.value),placeholder:"Your full name",maxLength:100,required:!0}),h.jsx(b,{field:"name"})]}),h.jsxs("div",{className:"flex flex-col gap-1.5",children:[h.jsxs(Rt,{htmlFor:"email",children:["Work Email ",h.jsx("span",{className:"text-teal-500 ml-0.5",children:"*"})]}),h.jsx(si,{id:"email",type:"email",value:p.email,onChange:x=>y("email",x.target.value),placeholder:"[email protected]",maxLength:255,required:!0}),h.jsx(b,{field:"email"})]})]}),h.jsxs("div",{className:"grid sm:grid-cols-2 gap-4",children:[h.jsxs("div",{className:"flex flex-col gap-1.5",children:[h.jsxs(Rt,{htmlFor:"company",children:["Company Name ",h.jsx("span",{className:"text-teal-500 ml-0.5",children:"*"})]}),h.jsx(si,{id:"company",value:p.company,onChange:x=>y("company",x.target.value),placeholder:"Your company name",maxLength:200,required:!0}),h.jsx(b,{field:"company"})]}),h.jsxs("div",{className:"flex flex-col gap-1.5",children:[h.jsxs(Rt,{htmlFor:"role",children:["Your Role ",h.jsx("span",{className:"text-teal-500 ml-0.5",children:"*"})]}
4660),h.jsxs(Js,{value:p.role,onValueChange:x=>y("role",x),children:[h.jsx(Ta,{children:h.jsx(Qs,{placeholder:"Select role"})}),h.jsxs(Aa,{children:[h.jsx(Me,{value:"ceo",children:"CEO / Managing Director"}),h.jsx(Me,{value:"founder",children:"Founder / Co-Founder"}),h.jsx(Me,{value:"vp-sales",children:"VP Sales / CRO"}),h.jsx(Me,{value:"head-expansion",children:"Head of Expansion"}),h.jsx(Me,{value:"other",children:"Other"})]})]}),h.jsx(b,{field:"role"})]})]}),h.jsxs("div",{className:"grid sm:grid-cols-2 gap-4",children:[h.jsxs("div",{className:"flex flex-col gap-1.5",children:[h.jsx(Rt,{htmlFor:"website",children:"Company Website"}),h.jsx(si,{id:"website",value:p.website,onChange:x=>y("website",x.target.value),placeholder:"https://company.com",maxLength:500}),h.jsx(b,{field:"website"})]}),h.jsxs("div",{className:"flex flex-col gap-1.5",children:[h.jsxs(Rt,{htmlFor:"headquarters",children:["Headquarters ",h.jsx("span",{className:"text-teal-500 ml-0.5",children:"*"})]}),h.jsxs(Js,{value:p.headquarters,onValueChange:x=>y("headquarters",x),children:[h.jsx(Ta,{children:h.jsx(Qs,{placeholder:"Select region"})}),h.jsxs(Aa,{children:[h.jsx(Me,{value:"western-europe",children:"Western Europe"}),h.jsx(Me,{value:"central-europe",children:"Central Europe"}),h.jsx(Me,{value:"eastern-europe",children:"Eastern Europe"}),h.jsx(Me,{value:"central-asia",children:"Central Asia"}),h.jsx(Me,{value:"middle-east",children:"Middle East"}),h.jsx(Me,{value:"asia-pacific",children:"Asia Pacific"}),h.jsx(Me,{value:"other",children:"Other"})]})]}),h.jsx(b,{field:"headquarters"})]})]}),h.jsxs("div",{className:"flex flex-col gap-1.5",children:[h.jsxs(Rt,{htmlFor:"revenue",children:["Current Annual Revenue ",h.jsx("span",{className:"text-teal-500 ml-0.5",children:"*"})]}),h.jsxs(Js,{value:p.revenue,onValueChange:x=>y("revenue",x),children:[h.jsx(Ta,{children:h.jsx(Qs,{placeholder:"Select range"})}),h.jsxs(Aa,{children:[h.jsx(Me,{value:"2-5m",children:"$2M – $5M"}),h.jsx(Me,{value:"5-10m",children:"$5M – $10M"}),h.jsx(Me,{value:"10-25m",children:"$10M – $25M"}),h.jsx(Me,{value:"25m+",children:"$25M+"})]})]}),h.jsx(b,{field:"revenue"})]}),h.jsxs("button",{type:"button",onClick:m,className:"on-dark w-full rounded-full bg-teal-700 hover:bg-teal-800 text-white font-sans font-semibold text-[15px] py-3 transition-colors inline-flex items-center justify-center gap-2 group",children:["Continue",h.jsx(Vn,{className:"w-4 h-4 group-hover:translate-x-1 transition-transform"})]})]}),n===2&&h.jsxs("div",{className:"space-y-6",children:[h.jsxs("div",{className:"flex flex-col gap-1.5",children:[h.jsxs(Rt,{htmlFor:"usExperience",children:["What US market experience do you have so far? ",h.jsx("span",{className:"text-teal-500 ml-0.5",children:"*"})]}),h.jsx(Ic,{id:"usExperience",value:p.usExperience,onChange:x=>y("usExperience",x.target.value),placeholder:"Describe any US customers, partnerships, or US market entry attempts...",rows:3,maxLength:2e3,required:!0}),h.jsx(b,{field:"usExperience"})]}),h.jsxs("div",{className:"flex flex-col gap-1.5",children:[h.jsxs(Rt,{htmlFor:"whyNow",children:["Why is now the right time for US expansion? ",h.jsx("span",{className:"text-teal-500 ml-0.5",children:"*"})]}),h.jsx(Ic,{id:"whyNow",value:p.whyNow,onChange:x=>y("whyNow",x.target.value),placeholder:"What's driving this decision? What's changed?",rows:3,maxLength:2e3,required:!0}),h.jsx(b,{field:"whyNow"})]}),h.jsxs("div",{className:"flex flex-col gap-1.5",children:[h.jsxs(Rt,{htmlFor:"expectedOutcome",children:["What does success look like after 6 months? ",h.jsx("span",{className:"text-teal-500 ml-0.5",children:"*"})]}),h.jsx(Ic,{id:"expectedOutcome",value:p.expectedOutcome,onChange:x=>y("expectedOutcome",x.target.value),placeholder:"Be specific about outcomes you're expecting...",rows:3,maxLength:2e3,required:!0}),h.jsx(b,{field:"expectedOutcome"})]}),h.jsxs("div",{className:"flex flex-col gap-1.5",children:[h.jsxs(Rt,{htmlFor:"commitment",children:["Can you commit 3–4 hours/week for 6 months? ",h.jsx("span",{className:"text-teal-500 ml-0.5",children:"*"})]}),h.jsxs(Js,{value:p.commitment,onValueChange:x=>y("commitment",x),children:[h.jsx(Ta,{children:h.jsx(Qs,{placeholder:"Select"})}),h.jsxs(Aa,{children:[h.jsx(Me,{value:"yes",children:"Yes, I can commit fully"}),h.jsx(Me,{value:"mostly",children:"Mostly, with occasional conflicts"}),h.jsx(Me,{value:"uncertain",children:"I need to check my calendar"})]})]}),h.jsx(b,{field:"commitment"})]}),h.jsxs("div",{className:"flex flex-col gap-1.5",children:[h.jsxs(Rt,{htmlFor:"pricingPreference",children:["Which pricing option interests you? ",h.jsx("span",{className:"text-teal-500 ml-0.5",children:"*"})]}
4660),h.jsxs(Js,{value:p.pricingPreference,onValueChange:x=>y("pricingPreference",x),children:[h.jsx(Ta,{children:h.jsx(Qs,{placeholder:"Select"})}),h.jsxs(Aa,{children:[h.jsx(Me,{value:"solo",children:"Solo – 1 seat ($2,000/mo)"}),h.jsx(Me,{value:"team-a",children:"Team A – 2 call seats + 1 Slack ($2,500/mo)"}),h.jsx(Me,{value:"team-b",children:"Team B – 2 call seats + 2 Slack ($3,250/mo)"}),h.jsx(Me,{value:"premium",children:"Premium – 1 seat + weekly 1:1s ($3,000/mo)"}),h.jsx(Me,{value:"undecided",children:"Not sure yet"})]})]}),h.jsx(b,{field:"pricingPreference"})]}),h.jsxs("div",{className:"flex gap-3",children:[h.jsx(Kn,{type:"button",variant:"outline",className:"flex-1",onClick:()=>o(1),children:"Back"}),h.jsxs("button",{type:"submit",disabled:s,className:"on-dark flex-1 rounded-full bg-teal-700 hover:bg-teal-800 text-white font-sans font-semibold text-[15px] py-3 transition-colors inline-flex items-center justify-center gap-2 disabled:opacity-60 group",children:[s?"Submitting...":"Submit Application",!s&&h.jsx(Vn,{className:"w-4 h-4 group-hover:translate-x-1 transition-transform"})]})]})]})]})})]})})},pS=f.createContext({onApplyClick:()=>{},heroRef:{current:null}}),SN=()=>f.useContext(pS),aO=({children:t,fullWidthContent:e,breakoutContent:n,secondBreakoutContent:o,thirdBreakoutContent:r,fourthBreakoutContent:a,afterBreakoutContent:s,stickyBar:i,multiSection:l,darkMode:c,heroOutsideLayout:u})=>{const[d,g]=f.useState(!1),[p,v]=f.useState(!1),[y,k]=f.useState(!1),[w,m]=f.useState(80),[b,x]=f.useState(0),S=f.useRef(null),T=f.useRef(null),A=f.useRef(null),_=()=>{g(!0)};f.useEffect(()=>{const O=()=>{if(v(window.scrollY>20),c){const Y=window.innerHeight*.35;k(window.scrollY>Y)}};return window.addEventListener("scroll",O,{passive:!0}),O(),()=>window.removeEventListener("scroll",O)},[c]),f.useEffect(()=>{const O=T.current;if(!O)return;const Y=()=>{m(Math.ceil(O.getBoundingClientRect().height))};Y();const B=new ResizeObserver(Y);return B.observe(O),()=>B.disconnect()},[]),f.useEffect(()=>{const O=A.current;if(!O){x(0);return}const Y=()=>x(Math.ceil(O.getBoundingClientRect().height));Y();const B=new ResizeObserver(Y);return B.observe(O),()=>B.disconnect()},[i]);const C={onApplyClick:_,heroRef:S},L=(c?y:p)?"bg-white shadow-sm":"bg-transparent";return h.jsx(pS.Provider,{value:C,children:h.jsxs("div",{className:`min-h-screen pb-[8px] md:pb-[34px] ${u?"pt-0":"pt-[8px] md:pt-[24px]"}`,style:{background:"hsl(var(--cloud))","--nav-height":`${w}px`},children:[h.jsx("div",{ref:T,className:`fixed top-0 left-0 right-0 z-50 transition-all duration-[400ms] ease-out ${L}`,children:h.jsx(Ij,{darkMode:c})}),i&&h.jsx("div",{ref:A,className:`fixed left-0 right-0 z-40 transition-all duration-300 ${p?"translate-y-0 opacity-100":"-translate-y-full opacity-0 pointer-events-none"}`,style:{top:`${w}px`},children:i}),!u&&h.jsx("div",{className:"max-w-content mx-auto w-full px-[8px] md:px-[34px]",children:h.jsx("div",{className:"h-20 mb-[8px] md:mb-[30px]"})}),i&&p&&b>0&&h.jsx("div",{"aria-hidden":"true",style:{height:b}}),h.jsxs("main",{id:"main-content",className:"max-w-content mx-auto w-full px-[8px] md:px-[34px]",style:{scrollMarginTop:`${w+(i?b:0)}px`},children:[l?h.jsxs("div",{className:"flex flex-col gap-[16px] md:gap-[24px]",children:[typeof t=="function"?t(C):t,!n&&h.jsx("div",{className:"bg-background rounded-lg overflow-hidden",children:h.jsx(Td,{})})]}):h.jsxs(h.Fragment,{children:[h.jsx("div",{className:"bg-background rounded-lg overflow-hidden",children:typeof t=="function"?t(C):t}),!n&&h.jsx("div",{className:"mt-16",children:h.jsx(Td,{})})]}),e,n,o,r,a&&h.jsx("div",{className:"mt-[32px] md:mt-[64px]",children:a}),(n||o||r||a)&&h.jsxs("div",{className:"rounded-lg overflow-hidden",children:[s,h.jsx(Td,{})]}),h.jsx(rO,{isOpen:d,onClose:()=>g(!1)})]})]})})},sO="/assets/ul-solutions-DVqOmxaK.webp",iO="/assets/twinify-xBhCryR4.webp",lO="data:image/webp;base64,UklGRhgPAABXRUJQVlA4WAoAAAAQAAAANwMAywEAQUxQSBkHAAAB8FbbVl5b27Z1CUhAAhKQEAlIiAQcRAISIgEJkYAEJPQfe+2ZwUjWmBzH+UFETACW/5f/l/+X/5f/l/+X/5f/l/+X/5f/l/+X/5f/l/+X/5f/l/+X/5f/l/+X/5f/l/+X/5f/l/+X/5f/l/+X/5f/l/+X/5f/l/+X/1d9XfzU/4eEi7k23q8lx/BPjI97zrXWI/+8xzip/F459DpziiKV0lEg87n5RuXQpGbnyCiQ+dx6gwPziMy7WUPYa6fwVeuZcwzzKFXq7NU8l5pmju5eJByNGtsxg1zu1GseRiUbzcHjNdJFrXX+uNyp2T5FSTUI/Su43Kl3/myNuu1DpyLQIuUNUqfm2eNOajfQrqKYhPFx4aLuyRMav4+mwdEm9WmZ2udO6PxCGBVkozA+q3Cmhc6vpCh
4660oVmmPKpxprvE7oR+WaBWmBxVOtZPfSh522aW5x+ycahu/ljYq0i7MT/Gca21Er0fOOZ+12YzboGKZ7h5S51qieDsCPg0xn81c5xhPyzA/I3LgdaToAYQY93xec+iS6gmSbjuaqeiHZNvQP6KKtd3hdtzPPns8hXuAuN+vl8pQryIP6W9SoV5DeYKncE+QDvmaOrtUxFB/dCv1EYnGYXjALhUw0u/XvDmFKoYnIzENaOapD6hCBaP9NmuaUBonaJUqF2keRn0U3obNWwrHr4Fe7DTQpS5IhVkVpI7v4ZDyNBCTtigVZ1WU6u5r6E7oMFHTlqTyZOPlvgUmGddNxKwsS3U/2Xj5b+GS2Wmj7l6Bl59s7PuXwCDSjMSsK4mxxymFAWRL7isoEhutRK8qypGnn2xkz/4L6E6g2qmo8iPIc5tPdQzJ4s3HdM/TTgya0IeQLbnJdAwji7dSEWv3yr1qmKrqHET2w0+lTQFZoo1ylWK843h/+/26HKOmNIzkGScSugayRhNtYuVOvlfi71er3KXJaSCvNI8OHWSNBkKTorvR7gULeDkmRSgqyJ79JPJayCu9XM2DdWSx/bPE2xXPa3mw14Ai1zRFJSRLmELIasiWXm24DifWPqv30gsMjyp8F+OuCFUNWeMMck0PeUXboEgxfhJ4u8EGyHLdKYqKyOrnD0JXRJ7ONFHs/KTcy1ZwXYxZEU5NZHbTB0kV+24ZXFL0f/O876yAJNe9It9VscXpg6KKPJ1hklj+W75XYAY0MRZFCF0VeUwfFF1swS6uS7W/9XvBEJscvSKEpouXmz0outiTWXBIcfsp8XaFIVDlqia4Sxd7mD0oushkFi9Wf7ruJVNEOUZNcFUXe5g92JUxWQVViv6PyNsNpkCRq6qAQxd7mD0ITRc3q2xixx/nvWwML8ekC1tXxR5mD5B19WAUNKkOwPO+MwYOuaYM7lTFy00f+KKJl1WyFBNw3Cuwhuti3JUBsWlimT+AL4qYjeLEKly/F8yBLNedNiBdihgnEOCPpqb7dylxsCIUKfrE2xVvccXBThOaGLM+IBxNTZtCALZTCcu7ZKiXi2Kl3UuvUaF+RJLr/gEAQuk6mCYR4Pamgs4muKQ6bzdYBJcYyzMAbKVraNMIQChdQTJKkhLMNolyLE8BsJVxDBMJcKkOO43iuhZnE1S5+5oAl85Rx1QC4I82hkbBoaTAKP6dALh0DqmzCcBWhwSjeCXBKihvBSC2AZxQwN4HRKOgqqgwi+/vBVcG+BmF0OV2q2wqkl2QXwwocnFKIXSxbBU0BQ2Gcf3NcM01JHNlBdkySK+2TTZ0qc0sToEzDdqbYbZVqWgWlGEFttl+I0y2YJc4LBgH9cXcbKM07IJrUIV14oslqTphnI4kVS2TBiXzoDwiHUFDkzomTOxlc8Nck9ot4/qQBvv4R2Sylc0NKpTeZgxJ1j0McRelvWVwDMkGwvGQP68cnZivlO6YNST7maNU6pS+8Co1a/Sq/BD3Ni1rjOpcf86fV9mju7cVypeZ8+N15i26j/xWOuXTu+iMqlAHFLyNzqwO+Vk/13rknGOMKefz4lA/ff7a68+NYxuMsw0INkJ7AcUFs0hrtA6aWIWR0i/S/VwrME8WS1bC9XvsmGqXs4+TajBT/DVOTLXuYR8UoWwn1F/iclOtB1goCjlD+d/hcphpLcBEuEQKDIXyG1wOM606GCmJBFP5/n4H5u0T+g5Jo7guUGEq5LdrG2ba6WEnHALJWK6/2+Ew0WqEsFX8vQZjIb3Z6TF3ldUIcaug3srmQnutEjF9Y65aegkYaJbtlrPXpgnbUbX0w2MSh5RrG9TP5DDULGg3CuyFqunPuB+1D2plw2yOWy61SVznHmH2LX/uhb7RmPJZu0Qte8DM9vFjh390Q/wYy//L/8v/y//L/8v/y//L/8v/y//L/8v/y//L/8v/y//L/8v/y//L/8v/y//L/8v/y//L/8v/y//L/8v/y//L/8v/y//L/8v/y//rvgBWUDgg2AcAAPB4AJ0BKjgDzAE+bTaZSSQjIqEi1ugwgA2JaW7hdI5D/gH4AeztRBgPwA/Gb1B/UP4B+AH4Afv8rYb6PBMd+zfvGMfQb7VJCcNn+8elP0T/Mx50nnOb8j6AHnVel9k53gD+AfgBTfoL2FHnLjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjVWZ7ty5JpCk0GCeSYbo+5Kcq/TmewLnHiZmgOEWTaruS4dovNpys8iDRUP4/bVcBHwfGwfGwfGwA+wM7L051Degboh0X06R7E8rgVdLg3Kmo6Axd83o1NESrMUUgYXLjYPjYPjYAsDVXaUYybBHKZ2zFPhpTEC04L76Kpk5FtomtZbdNt7q+e0Z8CCLojKNWj129sGS3Y2D42D3IOMze3Hui5KmKfCc7sShho8dnpW+o619vmbgf24giy2Yy3ppSbNwpR5y42D41Ud8xgKAHfYGKfEIuDDSVZ3GSsgxGNhIYW3TwaKOBgrPPBWVIialA3EPrcEh9GNcBw3hR5y42D42ADeNw4iYIOM3H1rhwqqDsThEjcUkeJRrXCNzWxma3RFbeDEGVmLUbvClHnLjYPdYdUpc4ZyQALsNgPYfEa1ewch6H4NYsBVV7ByJqhla88rPh4DWr0Pyde4PDFivClHnLjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjYPjVQAA/qC0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0zqPK/qbWCpEzqi291ZinUefmU7aLeAckgkI+iX/e8u8PsDJmYCEOlh1Hn5UkFErIxYeI4PzKkwQZTBPwGdRkZLT4ECDMWBI/3g16IoYfypEAyZcJlsqjqPPypIKJWXpmJrROje9lp1nkAJMbQAEQGiRnW4+V3RehTbkxD/V5JnYHdlzZLuoC26ko4AhYN6jUGltV2z4muOPPgD0SYwvkb+UV58bozWfP448j0xoWbhhqjLr7c1AWkSB5LL7PDCGEK+H0NEUQuHNqwRf8+7ysdOzP4irtAmHmJcMWDIV1dXnnPZVfMTCx8kE0gg1uLQDNSklGN2JSOvXsc2/h85tge/qZzcsVFIww0jkjQcF6zxDUE+lU04iLPr5Hecje57PnL4i6YsXAZBPVJvN6QM9F96ARHz87IoX9DMhRdPoP47r//DfZP/Bu16ivc9Yrd/mkAN3QcPanRVFUkFeJmkXVHtR7QALRk3MtxgeD/SQJDVnko9AwOmqScykf//YfezJrnJ39NXQlUKBZPLSxxNSAeQZgtaq28clbgIRsZ01w2B7dhzJYNF7DtsAwv/+p9RpzzAD1mRBnR2Kq6hRyOL/+YPI9xMBYbe+emWKf8JzQGwFstr//r9eehj1VU9CE9xZUOqlV0eyxEGLBt2c2qtQZ/jhJunyIuwWshsJivXblo0Qq1+2wfhSqiTP7eBvix0UAQWBBEB2fQFTgS/+m3VJUXSmGZWbh13qbFeVHerTVtQ+U0dKQrgVegtXGjNdAWCsyW5l0SWoFajQi4M5Vnppadf96ziJQ+AcaPYnQZhcQNOzvMsIBe/xDx7QK4EFxEe2Cvm9lWmMnGxzthkSjc/EvkzX52v8z1tXJ0XQphOkXCH2gDG1uuvpTRXQNnYR9G+qHrWHjKYmLks9bhi3lsV8hcDLV4zH9hMoCu9QNbCOMP43uB3lyTzG4chE4gsGKq1FAzFJFz1ru6C8XNG2TcjPgfh+lbu0gV/nlF+er/n3fz//DfYz8CIMQjcjqzbpvccG2Z2wNe2oMy/xh4zg+WC093yPglC008cKcza6q7uBZvfQWHS5iu71iFYg9QNhxI5JIQ3M9UOFfLY9Olm8V3bHvpde25E3XE2t5PJGJ+Udf9uJwOCMFS+YmVPEBPqBoPnMRHIftuLMSrwmSf3unmLaAJBtMWox/oS5fz/z5mqE5PjtCfhe32+UMHExZxlBCVZZm//dLy0+MjWTWjeNKtGSOaQeYpbHeoQhnhYPWEzPpLnZ4p
4660ZYHZC8nIYZS2l6PZW/+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",cO="/assets/jll-CH9MyZcS.webp",hO="/assets/stackbit-AyAb1HIs.webp",uO="/assets/coral-active-Di6BJlzB.webp",dO="/assets/totango-fXK637Cc.webp",pO="/assets/cyara-BCiZTafr.webp",gO="/assets/superwise-SRfdwwWZ.webp",mO="/assets/folloze-DumN032p.webp",fO="/assets/windward-D5ToOHW_.webp",yO="/assets/jeld-wen-CigSupjt.webp",wO="/assets/here-DtFhdMnT.webp",bO="/assets/exponent-BTmgg6W5.webp",vO="/assets/forward-CfZTcgNc.webp",kO="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20id='Layer_1'%20viewBox='0%200%20517%20293'%3e%3cdefs%3e%3cstyle%3e.cls-1{fill:%23212945;stroke-width:0px;}%3c/style%3e%3c/defs%3e%3cpath%20class='cls-1'%20d='M122.41,150.73c5.06,0,7.8-1.52,7.8-6.39,0-4.51-2.98-6.28-7.8-6.28h-15.77v12.67h15.77ZM97.5,131.24h27.53c11.08,0,14.68,5.06,14.68,11.81,0,5.66-3.11,9.19-7.18,10.48v.12c5.17,1.09,6.33,5.6,6.33,11.75,0,2.07.06,6.94,1.83,9.32h-9.87c-.67-1.22-1.09-3.41-1.09-6.58,0-6.21-.86-10.6-7.55-10.6h-15.53v17.17h-9.13v-43.48Z'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M173.69,155.35c-1.03-6.45-6.76-8.4-10.9-8.4-3.9,0-9.38,1.83-10.78,8.4h21.68ZM152.01,160.71c.18,3.59,2.62,9.13,10.96,9.13,5.54,0,7.98-1.95,9.62-4.63h9.13c-1.82,3.59-6.21,10.72-18.51,10.72-14.55,0-19.97-8.46-19.97-17.05,0-10.78,7.98-17.66,19.43-17.66,14.31,0,19.79,8.83,19.79,18.27v1.22h-30.45Z'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M256.95,155.35c-1.04-6.45-6.76-8.4-10.9-8.4-3.9,0-9.38,1.83-10.78,8.4h21.68ZM235.27,160.71c.18,3.59,2.62,9.13,10.96,9.13,5.54,0,7.98-1.95,9.62-4.63h9.14c-1.83,3.59-6.21,10.72-18.51,10.72-14.55,0-19.97-8.46-19.97-17.05,0-10.78,7.97-17.66,19.43-17.66,14.31,0,19.79,8.83,19.79,18.27v1.22h-30.45Z'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M270.29,142.44h8.4v4.87h.12c2.74-3.47,7.01-5.72,12.73-5.72,6.94,0,13.7,2.5,13.7,11.21v21.92h-8.4v-19.24c0-3.47-1.16-7.43-8.1-7.43-4.38,0-10.05,2.44
4660-10.05,9.32v17.36h-8.4v-32.28Z'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M339.35,155.35c-1.03-6.45-6.76-8.4-10.9-8.4-3.9,0-9.38,1.83-10.78,8.4h21.68ZM317.67,160.71c.18,3.59,2.62,9.13,10.96,9.13,5.54,0,7.98-1.95,9.62-4.63h9.13c-1.82,3.59-6.21,10.72-18.51,10.72-14.55,0-19.97-8.46-19.97-17.05,0-10.78,7.98-17.66,19.43-17.66,14.31,0,19.79,8.83,19.79,18.27v1.22h-30.45Z'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M382.1,155.35c-1.03-6.45-6.76-8.4-10.9-8.4-3.9,0-9.38,1.83-10.78,8.4h21.68ZM360.42,160.71c.18,3.59,2.62,9.13,10.96,9.13,5.54,0,7.98-1.95,9.62-4.63h9.14c-1.83,3.59-6.21,10.72-18.51,10.72-14.55,0-19.97-8.46-19.97-17.05,0-10.78,7.98-17.66,19.43-17.66,14.31,0,19.79,8.83,19.79,18.27v1.22h-30.45Z'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M395.44,142.44h8.4v6.27h.12c2.25-3.65,5.72-7.12,12.18-7.12,1.28,0,2.25.12,3.35.3v8.28c-2.31-.73-3.9-.79-5.36-.79-4.26,0-10.29,2.25-10.29,9.74v15.59h-8.4v-32.28Z'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M210.08,174.66c0,3.16-2.57,5.72-5.72,5.72s-5.72-2.56-5.72-5.72,2.57-5.72,5.72-5.72,5.72,2.57,5.72,5.72'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M202.1,160.68c0,3.16-2.57,5.73-5.73,5.73s-5.72-2.57-5.72-5.73,2.57-5.72,5.72-5.72,5.73,2.57,5.73,5.72'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M217.87,160.68c0,3.16-2.57,5.73-5.73,5.73s-5.72-2.57-5.72-5.73,2.56-5.72,5.72-5.72,5.73,2.57,5.73,5.72'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M194.22,146.7c0,3.16-2.56,5.73-5.72,5.73s-5.73-2.57-5.73-5.73,2.57-5.72,5.73-5.72,5.72,2.56,5.72,5.72'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M225.64,146.7c0,3.16-2.56,5.73-5.72,5.73s-5.72-2.57-5.72-5.73,2.56-5.72,5.72-5.72,5.72,2.56,5.72,5.72'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M233.45,132.54c0,3.16-2.56,5.72-5.72,5.72s-5.73-2.57-5.73-5.72,2.57-5.72,5.73-5.72,5.72,2.57,5.72,5.72'%3e%3c/path%3e%3cpath%20class='cls-1'%20d='M241.3,118.34c0,3.16-2.57,5.72-5.72,5.72s-5.72-2.56-5.72-5.72,2.57-5.72,5.72-5.72,5.72,2.57,5.72,5.72'%3e%3c/path%3e%3c/svg%3e",xO=[{name:"HERE",src:wO},{name:"Windward",src:fO},{name:"UL Solutions",src:sO},{name:"Twinify",src:iO},{name:"Siemens",src:lO},{name:"JLL",src:cO},{name:"Stackbit",src:hO},{name:"Coral Active",src:uO},{name:"Totango",src:dO},{name:"Cyara",src:pO},{name:"Superwise",src:gO},{name:"Folloze",src:mO},{name:"JELD-WEN",src:yO},{name:"Exponent",src:bO},{name:"Forward",src:vO},{name:"Reveneer",src:kO}],SO=()=>h.jsx("section",{className:"pt-16 pb-[20px]",children:h.jsxs("div",{className:"flex flex-col items-center gap-8",children:[h.jsx("p",{className:"font-semibold text-xs text-obsidian-900 uppercase tracking-wider text-center m-0 p-0",children:"Trusted By"}),h.jsx("div",{className:"overflow-hidden marquee-pause-on-hover w-full m-0 p-0",children:h.jsx("div",{className:"flex w-max animate-marquee-scroll-left",children:Array.from({length:3}).map((t,e)=>h.jsx("div",{className:"flex items-center gap-10 pr-10",children:xO.map((n,o)=>h.jsx("div",{className:"h-20 md:h-28 flex-shrink-0 flex items-center justify-center m-0 p-0",children:h.jsx("img",{src:n.src,alt:`${n.name} - B2B Enterprise Client of Hunter and Bard`,width:220,height:100,loading:e===0?"eager":"lazy",decoding:"async",className:"h-full w-auto object-contain max-w-[200px] md:max-w-[220px] m-0 p-0"})},`${e}-${n.name}-${o}`))},e))})})]})}),TO="/assets/wsj-black-C0vcf9p7.webp",AO="/assets/forbes-black-nY6fSY5Y.webp",_O="data:image/svg+xml,%3csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20365%2073'%20width='2500'%20height='500'%3e%3ctitle%3eUntitled-1%3c/title%3e%3cpath%20fill='%23030304'%20d='M126.9%2053.3v8.4H92.1v-8.4h12.5V19.7H92.1v-8.4h34.8v8.4h-12.5v33.6h12.5zM67.8%2011.3h-9.6l-6.9%2039.9h-.1l-8-37c-.5-2.5-1.3-3.1-3.7-3.1h-5.3c-2.3%200-3.2.6-3.7%203.1l-8%2037h-.2l-6.8-39.9H5.2l9.9%2047.9c.4%202.1%201.2%202.6%203.5%202.6h6.8c2.3%200%203.1-.5%203.5-2.7l7.5-34.7h.2l7.5%2034.7c.5%202.2%201.2%202.7%203.5%202.7h6.7c2.4%200%203.1-.5%203.5-2.6zM73%2073H0V0h73v73zM193.4%2048.8a105.8%20105.8%200%200%200%20.9%2012.9h10c-.3-2.7-.6-7.2-.8-13.6s-2.6-8.6-7.8-9.6v-.2c5.8-.9%208.3-3.7%208.3-12.6%200-7.4-1.2-10.1-3.2-12.1s-4.1-2.2-8-2.2h-30.7v50.3h10.4V42.1h14.4c3%200%204.2.2%205%201s1.4%201.7%201.5%205.7m-20.9-14.9v-14H189c2.3%200%203%20.2%203.4.6s1.4%201.8%201.4%206.2-.7%205.8-1.5%206.5-1.1.7-3.4.7h-16.4zM219%2073h-73V0h73v73zM308.1%2011.3v50.4h24.8c7.1%200%2011-1%2014.1-3.7s5.3-9%205.3-21.4-1.7-18.3-5.3-21.4-6.9-3.7-14.1-3.7h-24.8zM342%2036.5c0%2010.8-.9%2013.6-2.8%2015.1s-3.3%201.5-7%201.5h-13.7V19.9h13.7c3.8%200%205.4.2%207%201.5s2.8%204.3%202.8%2015.2M365%2073h-73V0h73v73zM232.4%2019.7v-8.4h42.9v16.2h-9v-7.8h-17.4v12h13.8v8.1h-13.8v13.5h1
46607.8v-8.8h9.1v17.2h-43.4v-8.4h6.8V19.7h-6.8z'/%3e%3c/svg%3e",CO="/assets/venturebeat-black-BXgQ-ZLP.webp",EO="data:image/webp;base64,UklGRpYGAABXRUJQVlA4WAoAAAAQAAAA/wEAngAAQUxQSLQFAAABoIVt29q2+X6pzMwM4UIWpyqjoVw7ZWZm5tZH4+2ImZmZAoPgeLMyjFymhRkM39CxP/3x9I8SERMAjf5v9H+j//+XIeN3QEy3nGBUaTCqNBjVhmCck9OH+gQUf8qp0xMHNjrGR3RqorPI406KJ+NoDDjspHjKRKPXASfJcQ3BYeR04eiA1nlRt57K/B/T7t6sdGY6mleNFL1LaEwqQYq+rTRM+UjycENwiFf5SkBr6/Tzx54rqc4J7XUzt5JE7WIaE4tIeLYQuUbjkFHw+2uvrekt9hCrM7b3FnuINR8sbSv2EEsfjWdiDzF3TSvBhyW39hR86Hk+SvChPyVe8CGmm0QfpptEH6abRB9mjBJ9mKmIPsxURB9mKaIPsxTRh1mK6MNsRfRhtiL6MFsRfZitiD7MVkQfZiuiD3MU0Yc5iujDHEX0YY4i+jBntOjDnNGiD7MTRB+mRok+/7M9BB/W3tDSgDnMq8KGCQuWMuNlkzvYWgEN3yXNHeTPR9LzXdHcgV4q9ekCP4/h26S/JJ0igx1xPY2ihRGRQR7Skl7Z6ojIAKOum3X4zXw9+O5sxTVrKUfG5YcNIdxD4+dEIEmkeCrUt6Pt6XJ6+PNsxrNVtRxxVIQ/e2nkKzwx1wugw2Y3PXytM8ekG5Af7IjPgJgWBJBmqvTKljB+dUnlSLtX0RgBZlHJ4eud+DWjiCMTrhglwCwqueJZ3Gr3FBLZRKHlPX4iBwwAYBaVGt7fglPSyhIitWsIMEc+0vTvNAKAmVVqP8ZwamwuEq1aSCD+MyRat9YQAGZWidVuYFxKyECqJebQxSYj1Yp5xgAws0oLH2/JI1M6kr04MmSx7yPZ/HEGATCzSss1kEOmDKT7Zd9Qxb6PdH+KNAqATXORKp3OH1MGEn69XYhik5Hwh50NA2DTXJR8BxhvTBlI+VY5NLHJSPn+psYBsGkuQvhgM86YMpByzSoIaVwyUvbuZAYCsGkuQimd+JKYiaTPx4ckLgVJ/zwBjARgU110XP25kpiJtN/uEIq4FKSd2d1YADZVJXNhBE8SM5G275gUgrhkJH6LbDAAm3WeSsEEjozKROKXx0Dwh6Ug8WIbGA3QZH81kfLp/FCykfqL7YI3PBWpp3Y1HqD7+0Sq5nBDyUbqVStZ0IanIvW63cyAgNXVNGocvFCykXx6Lwj2iFQk7xoKRsTAr4kk8YGNz0HyNdukYCWkIXnvKdmQaPZIA9J6qYr0P+wNwW3p+Azpfx0JhgQc9vNqUb3aTry/EOmXLIWgth59xzWkX7NbMihWeThVt2vwkAAjRtr2vngZ9ZicMKTeESMsO5+9gHp8uwcYFAtqOYVX8wJ1Xyzxoj4L8+rvvlDsQV1esoJRMZ9b4WbNiWZiz/9sVxB7WXEg9r6bzMSee54EQs+dJIPQcyfJIPS0JBmEnpYkg9DTHDIIPc0hg9DTHDKIFw9PNLsM4sX1go8fml0G8fKteYefG5pdBvHyrY1t54Zml0G8fGtjsIMXml0C8ZJrY8ANzS6BeMm1MeCGZpdAvORaGXBDs0sgXnKtDLiRZ5dAvORaGXAjzy6BeFGtDLiRZ5dAvKhWBtzIs0sgXlQLA27k2SUQL6qFATd+mieBePl8CgNuqLMkEC7+5EQIXF8ZExkIl6qHBgM3ap6OgfDWmDiztwNw4+LxriBcql6e2AR4UfO2pSmIFs+nm7tAEHXi+3p3Dwh/jYa6L48MgqDqwuM6FclAsBS+v32QBJwoSdsbIUNY3ACZwxXfzxk3WbpA0In5C3Jun9kNwuV9NAqJrPOSKKPiIVE3P6B51frxVBVoHz+wa0J3GUK4E4l6qwvdGY/sndxThvB5jJPkoT404k85KR4ZRCP6pJPiieiAIo87dXry4OYFk6K7NIUQjzrtpHjy0JZFk2O6NYPwmlGlwajSYFQDYroFoowmNPq/0f+N/v+fjVZQOCC8AAAAcBQAnQEqAAKfAD5tNplJpCMioSAoAIANiWlu4XdhG0AJ7APfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99snIe+2TkPfbJyHvtk5D32ych77ZOQ99snH8AAD+/+sAAAAAAAAAAAAAAAA=",IO="/assets/huffpost-logo-CId0y2mk.svg",PO=[{name:"WSJ",logo:TO,imgClassName:"h-6 md:h-8"},{name:"Forbes",logo:AO,imgClassName:"h-9 md:h-12"},{name:"Wired",logo:_O,imgClassName:"h-7 md:h-8"},{name:"VentureBeat",logo:CO,imgClassName:"h-5 md:h-6"},{name:"TNW",logo:EO,imgClassName:"h-7 md:h-8"},{name:"HuffPost",logo:IO,imgClassName:"h-6 md:h-7"}],jO=()=>h.jsx("section",{className:"py-16",children:h.jsxs("div",{className:"max-w-[1350px] mx-auto px-6 md:px-12",children:[h.jsx("p",{className:"font-semibold text-xs text-obsidian-900 uppercase tracking-wider text-center mb-8",children:"As Seen In"}),h.jsx("div",{className:"grid grid-cols-3 md:flex md:flex-nowrap items-center justify-items-center md:justify-between gap-8 md:gap-14",children:PO.map((t,e)=>h.jsx("div",{className:"flex items-center justify-center",children:h.jsx("img",{src:t.logo,alt:`As seen in ${t.name} - Hunter and Bard B2B Authority`,loading:"lazy",decoding:"async",className:`${t.imgClassName} w-auto object-contain grayscale`,style:{mixBlendMode:"multiply"}})},e))})]})}),BO=()=>{const t=[{question:"Why is our team all describing our product differently?",answer:"Internal 'messaging drift' happens when there isn't a single source of truth. We run a Brand & Messaging Sprint to get everyone on the same page with a crisp narrative that the whole team can actually use."},{question:"How can we get a professional marketing-to-enterprise strategy without a big agency price tag?",answer:"Most agencies have massive overhead that you pay for. We offer high-leverage Enterprise Strategy Engagements and Messaging Sprints for a flat fee (starting at 11.5k USD), giving you senior-level expertise without the 'big agency' bloat."},{question:"What's the best way for a European company to start selling in the US?",answer:"It's usually not a product issue; it's a 'local story' issue. Our US Market Cohort is built specifically to help international leaders adapt their positioning for US buyers and build an initial pipeline over 6 months."},{question:"Do we need a full-time CMO yet?",answer:"If you have a solid product but marketing feels reactive, you might just need part-time senior leadership, not a full-time hire. A Fractional CMO can jump in to sharpen your strategy and manage execution until you're ready for a full-time leader."},{question:"Why isn't our marketing moving the needle on revenue?",answer:"Usually, it's because the messaging is too engineering-heavy and doesn't connect with how enterprise buyers actually make decisions. We focus on building positioning that connects with buyers and drives them to take action."}];return h.jsx("section",{className:"pt-16 pb-8 md:py-24 bg-transparent","aria-labelledby":"home-faq-heading",children:h.jsx("div",{className:"max-w-[1350px] mx-auto px-6 md:px-12",children:h.jsxs("div",{className:"max-w-3xl mx-auto",children:[h.jsx("h2",{id:"home-faq-heading",className:"section-title text-[32px] md:text-[48px] md:leading-[1.1] tracking-[-0.02em] text-obsidian mb-10 text-center",children:"STILL HAVE QUESTIONS?"}),h.jsx("div",{className:"flex flex-col gap-3",children:t.map((e,n)=>h.jsx("div",{className:"on-dark bg-obsidian/[0.04] rounded-xl p-4",children:h.jsx(Tx,{type:"single",collapsible:!0,className:"w-full",children:h.jsxs(yh,{value:`item-${n}`,className:"border-b-0",children:[h.jsx(wh,{className:"text-left text-obsidian hover:no-underline py-2 font-semibold text-lg leading-[120%]",children:e.question}),h.jsx(bh,{className:"text-obsidian/70 text-base leading-relaxed",children:e.answer})]})})},n))})]})})})};function OO(t){return Object.prototype.toString.call(t)==="[object Object]"}function _b(t){return OO(t)||Array.isArray(t)}function MO(){return!!(typeof window<"u"&&window.document&&window.document.createElement)}function tf(t,e){const n=Object.keys(t),o=Object.keys(e);if(n.length!==o.length)return!1;const r=JSON.stringify(Object.keys(t.breakpoints||{})),a=JSON.stringify(Object.keys(e.breakpoints||{}));return r!==a?!1:n.every(s=>{const i=t[s],l=e[s];return typeof i=="function"?`${i}`==`${l}`:!_b(i)||!_b(l)?i===l:tf(i,l)})}function Cb(t){return t.concat().sort((e,n)=>e.name>n.name?1:-1).map(e=>e.options)}function RO(t,e){if(t.length!==e.length)return!1;const n=Cb(t),o=Cb(e);return n.every((r,a)=>{const s=o[a];return tf(r,s)})}function nf(t){return typeof t=="number"}function mg(t){return typeof t=="string"}function fu(t){return typeof t=="boolean"}function Eb(t){return Object.prototype.toString.call(t)==="[object Object]"}function qe(t){return Math.abs(t)}function of(t){return Math.sign(t)}function xi(t,e){return qe(t-e)}function NO(t,e){if(t===0||e===0||qe(t)<=qe(e))return 0;const n=xi(qe(t),qe(e));return qe(n/t)}function LO(t){return Math.round(t*100)/100}function ol(t){return rl(t).map(Number)}function Cn(t){return t[bl(t)]}function bl(t){return Math.max(0,t.length-1)}function rf(t,e){return e===bl(t)}function Ib(t,e=0){return Array.from(Array(t),(n,o)=>e+o)}function rl(t){return Object.keys(t)}function gS(t,e){return[t,e].reduce((n,o)=>
vendor: 15,452 bytes, line 4660
4660(rl(o).forEach(r=>{const a=n[r],s=o[r],i=Eb(a)&&Eb(s);n[r]=i?gS(a,s):s}),n),{})}function fg(t,e){return typeof e.MouseEvent<"u"&&t instanceof e.MouseEvent}function DO(t,e){const n={start:o,center:r,end:a};function o(){return 0}function r(l){return a(l)/2}function a(l){return e-l}function s(l,c){return mg(t)?n[t](l):t(e,l,c)}return{measure:s}}function al(){let t=[];function e(r,a,s,i={passive:!0}){let l;if("addEventListener"in r)r.addEventListener(a,s,i),l=()=>r.removeEventListener(a,s,i);else{const c=r;c.addListener(s),l=()=>c.removeListener(s)}return t.push(l),o}function n(){t=t.filter(r=>r())}const o={add:e,clear:n};return o}function WO(t,e,n,o){const r=al(),a=1e3/60;let s=null,i=0,l=0;function c(){r.add(t,"visibilitychange",()=>{t.hidden&&v()})}function u(){p(),r.clear()}function d(k){if(!l)return;s||(s=k,n(),n());const w=k-s;for(s=k,i+=w;i>=a;)n(),i-=a;const m=i/a;o(m),l&&(l=e.requestAnimationFrame(d))}function g(){l||(l=e.requestAnimationFrame(d))}function p(){e.cancelAnimationFrame(l),s=null,i=0,l=0}function v(){s=null,i=0}return{init:c,destroy:u,start:g,stop:p,update:n,render:o}}function qO(t,e){const n=e==="rtl",o=t==="y",r=o?"y":"x",a=o?"x":"y",s=!o&&n?-1:1,i=u(),l=d();function c(v){const{height:y,width:k}=v;return o?y:k}function u(){return o?"top":n?"right":"left"}function d(){return o?"bottom":n?"left":"right"}function g(v){return v*s}return{scroll:r,cross:a,startEdge:i,endEdge:l,measureSize:c,direction:g}}function ta(t=0,e=0){const n=qe(t-e);function o(c){return c<t}function r(c){return c>e}function a(c){return o(c)||r(c)}function s(c){return a(c)?o(c)?t:e:c}function i(c){return n?c-n*Math.ceil((c-e)/n):c}return{length:n,max:e,min:t,constrain:s,reachedAny:a,reachedMax:r,reachedMin:o,removeOffset:i}}function mS(t,e,n){const{constrain:o}=ta(0,t),r=t+1;let a=s(e);function s(g){return n?qe((r+g)%r):o(g)}function i(){return a}function l(g){return a=s(g),d}function c(g){return u().set(i()+g)}function u(){return mS(t,i(),n)}const d={get:i,set:l,add:c,clone:u};return d}function FO(t,e,n,o,r,a,s,i,l,c,u,d,g,p,v,y,k,w,m){const{cross:b,direction:x}=t,S=["INPUT","SELECT","TEXTAREA"],T={passive:!1},A=al(),_=al(),C=ta(50,225).constrain(p.measure(20)),P={mouse:300,touch:400},L={mouse:500,touch:600},O=v?43:25;let Y=!1,B=0,V=0,U=!1,K=!1,I=!1,j=!1;function H(q){if(!m)return;function ue(De){(fu(m)||m(q,De))&&re(De)}const ke=e;A.add(ke,"dragstart",De=>De.preventDefault(),T).add(ke,"touchmove",()=>{},T).add(ke,"touchend",()=>{}).add(ke,"touchstart",ue).add(ke,"mousedown",ue).add(ke,"touchcancel",te).add(ke,"contextmenu",te).add(ke,"click",se,!0)}function Z(){A.clear(),_.clear()}function E(){const q=j?n:e;_.add(q,"touchmove",N,T).add(q,"touchend",te).add(q,"mousemove",N,T).add(q,"mouseup",te)}function D(q){const ue=q.nodeName||"";return S.includes(ue)}function F(){return(v?L:P)[j?"mouse":"touch"]}function $(q,ue){const ke=d.add(of(q)*-1),De=u.byDistance(q,!v).distance;return v||qe(q)<C?De:k&&ue?De*.5:u.byIndex(ke.get(),0).distance}function re(q){const ue=fg(q,o);j=ue,I=v&&ue&&!q.buttons&&Y,Y=xi(r.get(),s.get())>=2,!(ue&&q.button!==0)&&(D(q.target)||(U=!0,a.pointerDown(q),c.useFriction(0).useDuration(0),r.set(s),E(),B=a.readPoint(q),V=a.readPoint(q,b),g.emit("pointerDown")))}function N(q){if(!fg(q,o)&&q.touches.length>=2)return te(q);const ke=a.readPoint(q),De=a.readPoint(q,b),Ze=xi(ke,B),at=xi(De,V);if(!K&&!j&&(!q.cancelable||(K=Ze>at,!K)))return te(q);const Mt=a.pointerMove(q);Ze>y&&(I=!0),c.useFriction(.3).useDuration(.75),i.start(),r.add(x(Mt)),q.preventDefault()}function te(q){const ke=u.byDistance(0,!1).index!==d.get(),De=a.pointerUp(q)*F(),Ze=$(x(De),ke),at=NO(De,Ze),Mt=O-10*at,yt=w+at/50;K=!1,U=!1,_.clear(),c.useDuration(Mt).useFriction(yt),l.distance(Ze,!v),j=!1,g.emit("pointerUp")}function se(q){I&&(q.stopPropagation(),q.preventDefault(),I=!1)}function ie(){return U}return{init:H,destroy:Z,pointerDown:ie}}function HO(t,e){let o,r;function a(d){return d.timeStamp}function s(d,g){const v=`client${(g||t.scroll)==="x"?"X":"Y"}`;return(fg(d,e)?d:d.touches[0])[v]}function i(d){return o=d,r=d,s(d)}function l(d){const g=s(d)-s(r),p=a(d)-a(o)>170;return r=d,p&&(o=d),g}function c(d){if(!o||!r)return 0;const g=s(r)-s(o),p=a(d)-a(o),v=a(d)-a(r)>170,y=g/p;return p&&!v&&qe(y)>.1?y:0}return{pointerDown:i,pointerMove:l,pointerUp:c,readPoint:s}}function zO(){function t(n){const{offsetTop:o,offsetLeft:r,offsetWidth:a,offsetHeight:s}=n;return{top:o,right:r+a,bottom:o+s,left:r,width:a,height:s}}return{measure:t}}function $O(t){function e(o){return t*(o/100)}return{measure:e}}function UO(t,e,n,o,r,a,s){const i=[t].concat(o);let l,c,u=[],d=!1;function g(k){return r.measureSize(s.measure(k))}function p(k){if(!a)return;c=g(t),u=o.map(g);function w(m){for(const b of m){if(d)return;const x=b.target===t,S=o.indexOf(b.target),T=x?c:u[S],A=g(x?t:o[S]);if(qe(A-T)>=.5){k.reInit(),e.emit("resize");break}}}l=new ResizeObserver(m=>{(fu(a)||a(k,m))&&w(m)}),n.requestAnimationFrame(()=>{i.forEach(m=>l.observe(m))})}function v(){d=!0,l&&l.disconnect()}return{init:p,destroy:v}}function YO(t,e,n,o,r,a){let s=0,i=0,l=r,c=a,u=t.get(),d=0;function g(){const T=o.get()-t.get(),A=!l;let _=0;return A?(s=0,n.set(o),t.set(o),_=T):(n.set(t),s+=T/l,s*=c,u+=s,t.add(s),_=u-d),i=of(_),d=u,S}function p(){const T=o.get()-e.get();return qe(T)<.001}function v(){return l}function y(){return i}function k(){return s}function w(){return b(r)}function m(){return x(a)}function b(T){return l=T,S}function x(T){return c=T,S}const S={direction:y,duration:v,velocity:k,seek:g,settled:p,useBaseFriction:m,useBaseDuration:w,useFriction:x,useDuration:b};return S}function VO(t,e,n,o,r){const a=r.measure(10),s=r.measure(50),i=ta(.1,.99);let l=!1;function c(){return!(l||!t.reachedAny(n.get())||!t.reachedAny(e.get()))}function u(p){if(!c())return;const v=t.reachedMin(e.get())?"min":"max",y=qe(t[v]-e.get()),k=n.get()-e.get(),w=i.constrain(y/s);n.subtract(k*w),!p&&qe(k)<a&&(n.set(t.constrain(n.get())),o.useDuration(25).useBaseFriction())}function d(p){l=!p}return{shouldConstrain:c,constrain:u,toggleActive:d}}function GO(t,e,n,o,r){const a=ta(-e+t,0),s=d(),i=u(),l=g();function c(v,y){return xi(v,y)<=1}function u(){const v=s[0],y=Cn(s),k=s.lastIndexOf(v),w=s.indexOf(y)+1;return ta(k,w)}function d(){return n.map((v,y)=>{const{min:k,max:w}=a,m=a.constrain(v),b=!y,x=rf(n,y);return b?w:x||c(k,m)?k:c(w,m)?w:m}).map(v=>parseFloat(v.toFixed(3)))}function g(){if(e<=t+r)return[a.max];if(o==="keepSnaps")return s;const{min:v,max:y}=i;return s.slice(v,y)}return{snapsContained:l,scrollContainLimit:i}}function KO(t,e,n){const o=e[0],r=n?o-t:Cn(e);return{limit:ta(r,o)}}function JO(t,e,n,o){const a=e.min+.1,s=e.max+.1,{reachedMin:i,reachedMax:l}=ta(a,s);function c(g){return g===1?l(n.get()):g===-1?i(n.get()):!1}function u(g){if(!c(g))return;const p=t*(g*-1);o.forEach(v=>v.add(p))}return{loop:u}}function QO(t){const{max:e,length:n}=t;function o(a){const s=a-e;return n?s/-n:0}return{get:o}}function ZO(t,e,n,o,r){const{startEdge:a,endEdge:s}=t,{groupSlides:i}=r,l=d().map(e.measure),c=g(),u=p();function d(){return i(o).map(y=>Cn(y)[s]-y[0][a]).map(qe)}function g(){return o.map(y=>n[a]-y[a]).map(y=>-qe(y))}function p(){return i(c).map(y=>y[0]).map((y,k)=>y+l[k])}return{snaps:c,snapsAligned:u}}function XO(t,e,n,o,r,a){const{groupSlides:s}=r,{min:i,max:l}=o,c=u();function u(){const g=s(a),p=!t||e==="keepSnaps";return n.length===1?[a]:p?g:g.slice(i,l).map((v,y,k)=>{const w=!y,m=rf(k,y);if(w){const b=Cn(k[0])+1;return Ib(b)}if(m){const b=bl(a)-Cn(k)[0]+1;return Ib(b,Cn(k)[0])}return v})}return{slideRegistry:c}}function eM(t,e,n,o,r){const{reachedAny:a,removeOffset:s,constrain:i}=o;function l(v){return v.concat().sort((y,k)=>qe(y)-qe(k))[0]}function c(v){const y=t?s(v):i(v),k=e.map((m,b)=>({diff:u(m-y,0),index:b})).sort((m,b)=>qe(m.diff)-qe(b.diff)),{index:w}=k[0];return{index:w,distance:y}}function u(v,y){const k=[v,v+n,v-n];if(!t)return v;if(!y)return l(k);const w=k.filter(m=>of(m)===y);return w.length?l(w):Cn(k)-n}function d(v,y){const k=e[v]-r.get(),w=u(k,y);return{index:v,distance:w}}function g(v,y){const k=r.get()+v,{index:w,distance:m}=c(k),b=!t&&a(k);if(!y||b)return{index:w,distance:v};const x=e[w]-m,S=v+u(x,0);return{index:w,distance:S}}return{byDistance:g,byIndex:d,shortcut:u}}function tM(t,e,n,o,r,a,s){function i(d){const g=d.distance,p=d.index!==e.get();a.add(g),g&&(o.duration()?t.start():(t.update(),t.render(1),t.update())),p&&(n.set(e.get()),e.set(d.index),s.emit("select"))}function l(d,g){const p=r.byDistance(d,g);i(p)}function c(d,g){const p=e.clone().set(d),v=r.byIndex(p.get(),g);i(v)}return{distance:l,index:c}}function nM(t,e,n,o,r,a,s,i){const l={passive:!0,capture:!0};let c=0;function u(p){if(!i)return;function v(y){if(new Date().getTime()-c>10)return;s.emit("slideFocusStart"),t.scrollLeft=0;const m=n.findIndex(b=>b.includes(y));nf(m)&&(r.useDuration(0),o.index(m,0),s.emit("slideFocus"))}a.add(document,"keydown",d,!1),e.forEach((y,k)=>{a.add(y,"focus",w=>{(fu(i)||i(p,w))&&v(k)},l)})}function d(p){p.code==="Tab"&&(c=new Date().getTime())}return{init:u}}function li(t){let e=t;function n(){return e}function o(l){e=s(l)}function r(l){e+=s(l)}function a(l){e-=s(l)}function s(l){return nf(l)?l:l.get()}return{get:n,set:o,add:r,subtract:a}}function fS(t,e){const n=t.scroll==="x"?s:i,o=e.style;let r=null,a=!1;function s(g){return`translate3d(${g}px,0px,0px)`}function i(g){return`translate3d(0px,${g}px,0px)`}function l(g){if(a)return;const p=LO(t.direction(g));p!==r&&(o.transform=n(p),r=p)}function c(g){a=!g}function u(){a||(o.transform="",e.getAttribute("style")||e.removeAttribute("style"))}return{clear:u,to:l,toggleActive:c}}function oM(t,e,n,o,r,a,s,i,l){const u=ol(r),d=ol(r).reverse(),g=w().concat(m());function p(A,_){return A.reduce((C,P)=>C-r[P],_)}function v(A,_){return A.reduce((C,P)=>p(C,_)>0?C.concat([P]):C,[])}function y(A){return a.map((_,C)=>({start:_-o[C]+.5+A,end:_+e-.5+A}))}function k(A,_,C){const P=y(_);return A.map(L=>{const O=C?0:-n,Y=C?n:0,B=C?"end":"start",V=P[L][B];return{index:L,loopPoint:V,slideLocation:li(-1),translate:fS(t,l[L]),target:()=>i.get()>V?O:Y}})}function w(){const A=s[0],_=v(d,A);return k(_,n,!1)}function m(){const A=e-s[0]-1,_=v(u,A);return k(_,-n,!0)}function b(){return g.every(({index:A})=>{const _=u.filter(C=>C!==A);return p(_,e)<=.1})}function x(){g.forEach(A=>{const{target:_,translate:C,slideLocation:P}=A,L=_();L!==P.get()&&(C.to(L),P.set(L))})}function S(){g.forEach(A=>A.translate.clear())}return{canLoop:b,clear:S,loop:x,loopPoints:g}}function rM(t,e,n){let o,r=!1;function a(l){if(!n)return;function c(u){for(const d of u)if(d.type==="childList"){l.reInit(),e.emit("slidesChanged");break}}o=new MutationObserver(u=>{r||(fu(n)||n(l,u))&&c(u)}),o.observe(t,{childList:!0})}function s(){o&&o.disconnect(),r=!0}return{init:a,destroy:s}}function aM(t,e,n,o){const r={};let a=null,s=null,i,l=!1;function c(){i=new IntersectionObserver(v=>{l||(v.forEach(y=>{const k=e.indexOf(y.target);r[k]=y}),a=null,s=null,n.emit("slidesInView"))},{root:t.parentElement,threshold:o}),e.forEach(v=>i.observe(v))}function u(){i&&i.disconnect(),l=!0}function d(v){return rl(r).reduce((y,k)=>{const w=parseInt(k),{isIntersecting:m}=r[w];return(v&&m||!v&&!m)&&y.push(w),y},[])}function g(v=!0){if(v&&a)return a;if(!v&&s)return s;const y=d(v);return v&&(a=y),v||(s=y),y}return{init:c,destroy:u,get:g}}function sM(t,e,n,o,r,a){const{measureSize:s,startEdge:i,endEdge:l}=t,c=n[0]&&r,u=v(),d=y(),g=n.map(s),p=k();function v(){if(!c)return 0;const m=n[0];return qe(e[i]-m[i])}function y(){if(!c)return 0;const m=a.getComputedStyle(Cn(o));return parseFloat(m.getPropertyValue(`margin-${l}`))}function k(){return n.map((m,b,x)=>{const S=!b,T=rf(x,b);return S?g[b]+u:T?g[b]+d:x[b+1][i]-m[i]}).map(qe)}return{slideSizes:g,slideSizesWithGaps:p,startGap:u,endGap:d}}function iM(t,e,n,o,r,a,s,i,l){const{startEdge:c,endEdge:u,direction:d}=t,g=nf(n);function p(w,m){return ol(w).filter(b=>b%m===0).map(b=>w.slice(b,b+m))}function v(w){return w.length?ol(w).reduce((m,b,x)=>{const S=Cn(m)||0,T=S===0,A=b===bl(w),_=r[c]-a[S][c],C=r[c]-a[b][u],P=!o&&T?d(s):0,L=!o&&A?d(i):0,O=qe(C-L-(_+P));return x&&O>e+l&&m.push(b),A&&m.push(w.length),m},[]).map((m,b,x)=>{const S=Math.max(x[b-1]||0);return w.slice(S,m)}):[]}function y(w){return g?p(w,n):v(w)}return{groupSlides:y}}function lM(t,e,n,o,r,a,s){const{align:i,axis:l,direction:c,startIndex:u,loop:d,duration:g,dragFree:p,dragThreshold:v,inViewThreshold:y,slidesToScroll:k,skipSnaps:w,containScroll:m,watchResize:b,watchSlides:x,watchDrag:S,watchFocus:T}=a,A=2,_=zO(),C=_.measure(e),P=n.map(_.measure),L=qO(l,c),O=L.measureSize(C),Y=$O(O),B=DO(i,O),V=!d&&!!m,U=d||!!m,{slideSizes:K,slideSizesWithGaps:I,startGap:j,endGap:H}=sM(L,C,P,n,U,r),Z=iM(L,O,k,d,C,P,j,H,A),{snaps:E,snapsAligned:D}=ZO(L,B,C,P,Z),F=-Cn(E)+Cn(I),{snapsContained:$,scrollContainLimit:re}=GO(O,F,D,m,A),N=V?$:D,{limit:te}=KO(F,N,d),se=mS(bl(N),u,d),ie=se.clone(),ne=ol(n),q=({dragHandler:an,scrollBody:Ms,scrollBounds:ia,options:{loop:_o}})=>{_o||ia.constrain(an.pointerDown()),Ms.seek()},ue=({scrollBody:an,translate:Ms,location:ia,offsetLocation:_o,previousLocation:Co,scrollLooper:xl,slideLooper:Eo,dragHandler:wu,animation:bu,eventHandler:Rs,scrollBounds:Sl,options:{loop:Tl}},la)=>{const sn=an.settled(),vu=!Sl.shouldConstrain(),he=Tl?sn:sn&&vu,_e=he&&!wu.pointerDown();_e&&bu.stop();const Ie=ia.get()*la+Co.get()*(1-la);_o.set(Ie),Tl&&(xl.loop(an.direction()),Eo.loop()),Ms.to(_o.get()),_e&&Rs.emit("settle"),he||Rs.emit("scroll")},ke=WO(o,r,()=>q(Os),an=>ue(Os,an)),De=.68,Ze=N[se.get()],at=li(Ze),Mt=li(Ze),yt=li(Ze),Mn=li(Ze),on=YO(at,yt,Mt,Mn,g,De),sa=eM(d,N,F,te,Mn),rn=tM(ke,se,ie,on,sa,Mn,s),vl=QO(te),kl=al(),Tt=aM(e,n,s,y),{slideRegistry:to}=XO(V,m,N,re,Z,ne),yu=nM(t,n,to,rn,on,kl,s,T),Os={ownerDocument:o,ownerWindow:r,eventHandler:s,containerRect:C,slideRects:P,animation:ke,axis:L,dragHandler:FO(L,t,o,r,Mn,HO(L,r),at,ke,rn,on,sa,se,s,Y,p,v,w,De,S),eventStore:kl,percentOfView:Y,index:se,indexPrevious:ie,limit:te,location:at,offsetLocation:yt,previousLocation:Mt,options:a,resizeHandler:UO(e,s,r,n,L,b,_),scrollBody:on,scrollBounds:VO(te,yt,Mn,on,Y),scrollLooper:JO(F,te,yt,[at,yt,Mt,Mn]),scrollProgress:vl,scrollSnapList:N.map(vl.get),scrollSnaps:N,scrollTarget:sa,scrollTo:rn,slideLooper:oM(L,O,F,K,I,E,N,yt,n),slideFocus:yu,slidesHandler:rM(e,s,x),slidesInView:Tt,slideIndexes:ne,slideRegistry:to,slidesToScroll:Z,target:Mn,translate:fS(L,e)};return Os}function cM(){let t={},e;function n(c){e=c}function o(c){return t[c]||[]}function r(c){return o(c).forEach(u=>u(e,c)),l}function a(c,u){return t[c]=o(c).concat([u]),l}function s(c,u){return t[c]=o(c).filter(d=>d!==u),l}function i(){t={}}const l={init:n,emit:r,off:s,on:a,clear:i};return l}const hM={align:"center",axis:"x",container:null,slides:null,containScroll:"trimSnaps",direction:"ltr",slidesToScroll:1,inViewThreshold:0,breakpoints:{},dragFree:!1,dragThreshold:10,loop:!1,skipSnaps:!1,duration:25,startIndex:0,active:!0,watchDrag:!0,watchResize:!0,watchSlides:!0,watchFocus:!0};function uM(t){function e(a,s){return gS(a,s||{})}function n(a){const s=a.breakpoints||{},i=rl(s).filter(l=>t.matchMedia(l).matches).map(l=>s[l]).reduce((l,c)=>e(l,c),{});return e(a,i)}function o(a){return a.map(s=>rl(s.breakpoints||{})).reduce((s,i)=>s.concat(i),[]).map(t.matchMedia)}return{mergeOptions:e,optionsAtMedia:n,optionsMediaQueries:o}}function dM(t){let e=[];function n(a,s){return e=s.filter(({options:i})=>t.optionsAtMedia(i).active!==!1),e.forEach(i=>
vendor: 9,099 bytes, line 4660
4660i.init(a,t)),s.reduce((i,l)=>Object.assign(i,{[l.name]:l}),{})}function o(){e=e.filter(a=>a.destroy())}return{init:n,destroy:o}}function _h(t,e,n){const o=t.ownerDocument,r=o.defaultView,a=uM(r),s=dM(a),i=al(),l=cM(),{mergeOptions:c,optionsAtMedia:u,optionsMediaQueries:d}=a,{on:g,off:p,emit:v}=l,y=L;let k=!1,w,m=c(hM,_h.globalOptions),b=c(m),x=[],S,T,A;function _(){const{container:ne,slides:q}=b;T=(mg(ne)?t.querySelector(ne):ne)||t.children[0];const ke=mg(q)?T.querySelectorAll(q):q;A=[].slice.call(ke||T.children)}function C(ne){const q=lM(t,T,A,o,r,ne,l);if(ne.loop&&!q.slideLooper.canLoop()){const ue=Object.assign({},ne,{loop:!1});return C(ue)}return q}function P(ne,q){k||(m=c(m,ne),b=u(m),x=q||x,_(),w=C(b),d([m,...x.map(({options:ue})=>ue)]).forEach(ue=>i.add(ue,"change",L)),b.active&&(w.translate.to(w.location.get()),w.animation.init(),w.slidesInView.init(),w.slideFocus.init(ie),w.eventHandler.init(ie),w.resizeHandler.init(ie),w.slidesHandler.init(ie),w.options.loop&&w.slideLooper.loop(),T.offsetParent&&A.length&&w.dragHandler.init(ie),S=s.init(ie,x)))}function L(ne,q){const ue=Z();O(),P(c({startIndex:ue},ne),q),l.emit("reInit")}function O(){w.dragHandler.destroy(),w.eventStore.clear(),w.translate.clear(),w.slideLooper.clear(),w.resizeHandler.destroy(),w.slidesHandler.destroy(),w.slidesInView.destroy(),w.animation.destroy(),s.destroy(),i.clear()}function Y(){k||(k=!0,i.clear(),O(),l.emit("destroy"),l.clear())}function B(ne,q,ue){!b.active||k||(w.scrollBody.useBaseFriction().useDuration(q===!0?0:b.duration),w.scrollTo.index(ne,ue||0))}function V(ne){const q=w.index.add(1).get();B(q,ne,-1)}function U(ne){const q=w.index.add(-1).get();B(q,ne,1)}function K(){return w.index.add(1).get()!==Z()}function I(){return w.index.add(-1).get()!==Z()}function j(){return w.scrollSnapList}function H(){return w.scrollProgress.get(w.offsetLocation.get())}function Z(){return w.index.get()}function E(){return w.indexPrevious.get()}function D(){return w.slidesInView.get()}function F(){return w.slidesInView.get(!1)}function $(){return S}function re(){return w}function N(){return t}function te(){return T}function se(){return A}const ie={canScrollNext:K,canScrollPrev:I,containerNode:te,internalEngine:re,destroy:Y,off:p,on:g,emit:v,plugins:$,previousScrollSnap:E,reInit:y,rootNode:N,scrollNext:V,scrollPrev:U,scrollProgress:H,scrollSnapList:j,scrollTo:B,selectedScrollSnap:Z,slideNodes:se,slidesInView:D,slidesNotInView:F};return P(e,n),setTimeout(()=>l.emit("init"),0),ie}_h.globalOptions=void 0;function Ch(t={},e=[]){const n=f.useRef(t),o=f.useRef(e),[r,a]=f.useState(),[s,i]=f.useState(),l=f.useCallback(()=>{r&&r.reInit(n.current,o.current)},[r]);return f.useEffect(()=>{tf(n.current,t)||(n.current=t,l())},[t,l]),f.useEffect(()=>{RO(o.current,e)||(o.current=e,l())},[e,l]),f.useEffect(()=>{if(MO()&&s){_h.globalOptions=Ch.globalOptions;const c=_h(s,n.current,o.current);return a(c),()=>c.destroy()}else a(void 0)},[s,a]),[i,r]}Ch.globalOptions=void 0;const pM={active:!0,breakpoints:{},delay:4e3,jump:!1,playOnInit:!0,stopOnFocusIn:!0,stopOnInteraction:!0,stopOnMouseEnter:!1,stopOnLastSnap:!1,rootNode:null};function gM(t,e){const n=t.scrollSnapList();return typeof e=="number"?n.map(()=>e):e(n,t)}function mM(t,e){const n=t.rootNode();return e&&e(n)||n}function af(t={}){let e,n,o,r,a=null,s=0,i=!1,l=!1,c=!1,u=!1;function d(B,V){n=B;const{mergeOptions:U,optionsAtMedia:K}=V,I=U(pM,af.globalOptions),j=U(I,t);if(e=K(j),n.scrollSnapList().length<=1)return;u=e.jump,o=!1,r=gM(n,e.delay);const{eventStore:H,ownerDocument:Z}=n.internalEngine(),E=!!n.internalEngine().options.watchDrag,D=mM(n,e.rootNode);H.add(Z,"visibilitychange",w),E&&n.on("pointerDown",b),E&&!e.stopOnInteraction&&n.on("pointerUp",x),e.stopOnMouseEnter&&H.add(D,"mouseenter",S),e.stopOnMouseEnter&&!e.stopOnInteraction&&H.add(D,"mouseleave",T),e.stopOnFocusIn&&n.on("slideFocusStart",k),e.stopOnFocusIn&&!e.stopOnInteraction&&H.add(n.containerNode(),"focusout",y),e.playOnInit&&y()}function g(){n.off("pointerDown",b).off("pointerUp",x).off("slideFocusStart",k),k(),o=!0,i=!1}function p(){const{ownerWindow:B}=n.internalEngine();B.clearTimeout(s),s=B.setTimeout(L,r[n.selectedScrollSnap()]),a=new Date().getTime(),n.emit("autoplay:timerset")}function v(){const{ownerWindow:B}=n.internalEngine();B.clearTimeout(s),s=0,a=null,n.emit("autoplay:timerstopped")}function y(){if(!o){if(m()){c=!0;return}i||n.emit("autoplay:play"),p(),i=!0}}function k(){o||(i&&n.emit("autoplay:stop"),v(),i=!1)}function w(){if(m())return c=i,k();c&&y()}function m(){const{ownerDocument:B}=n.internalEngine();return B.visibilityState==="hidden"}function b(){l||k()}function x(){l||y()}function S(){l=!0,k()}function T(){l=!1,y()}function A(B){typeof B<"u"&&(u=B),y()}function _(){i&&k()}function C(){i&&y()}function P(){return i}function L(){const{index:B}=n.internalEngine(),V=B.clone().add(1).get(),U=n.scrollSnapList().length-1,K=e.stopOnLastSnap&&V===U;if(n.canScrollNext()?n.scrollNext(u):n.scrollTo(0,u),n.emit("autoplay:select"),K)return k();y()}function O(){if(!a)return null;const B=r[n.selectedScrollSnap()],V=new Date().getTime()-a;return B-V}return{name:"autoplay",options:t,init:d,destroy:g,play:A,stop:_,reset:C,isPlaying:P,timeUntilNext:O}}af.globalOptions=void 0;const fM={direction:"forward",speed:2,startDelay:1e3,active:!0,breakpoints:{},playOnInit:!0,stopOnFocusIn:!0,stopOnInteraction:!0,stopOnMouseEnter:!1,rootNode:null};function yM(t,e){const n=t.rootNode();return e&&e(n)||n}function sf(t={}){let e,n,o,r,a=0,s=!1,i=!1,l;function c(C,P){n=C;const{mergeOptions:L,optionsAtMedia:O}=P,Y=L(fM,sf.globalOptions),B=L(Y,t);if(e=O(B),n.scrollSnapList().length<=1)return;r=e.startDelay,o=!1,l=n.internalEngine().scrollBody;const{eventStore:V}=n.internalEngine(),U=!!n.internalEngine().options.watchDrag,K=yM(n,e.rootNode);U&&n.on("pointerDown",v),U&&!e.stopOnInteraction&&n.on("pointerUp",y),e.stopOnMouseEnter&&V.add(K,"mouseenter",k),e.stopOnMouseEnter&&!e.stopOnInteraction&&V.add(K,"mouseleave",w),e.stopOnFocusIn&&n.on("slideFocusStart",g),e.stopOnFocusIn&&!e.stopOnInteraction&&V.add(n.containerNode(),"focusout",d),e.playOnInit&&d()}function u(){n.off("pointerDown",v).off("pointerUp",y).off("slideFocusStart",g).off("settle",m),g(),o=!0,s=!1}function d(){if(o||s)return;n.emit("autoScroll:play");const C=n.internalEngine(),{ownerWindow:P}=C;a=P.setTimeout(()=>{C.scrollBody=p(C),C.animation.start()},r),s=!0}function g(){if(o||!s)return;n.emit("autoScroll:stop");const C=n.internalEngine(),{ownerWindow:P}=C;C.scrollBody=l,P.clearTimeout(a),a=0,s=!1}function p(C){const{location:P,previousLocation:L,offsetLocation:O,target:Y,scrollTarget:B,index:V,indexPrevious:U,limit:{reachedMin:K,reachedMax:I,constrain:j},options:{loop:H}}=C,Z=e.direction==="forward"?-1:1,E=()=>se;let D=0,F=0,$=P.get(),re=0,N=!1;function te(){let ie=0;L.set(P),D=Z*e.speed,$+=D,P.add(D),Y.set(P),ie=$-re,F=Math.sign(ie),re=$;const ne=B.byDistance(0,!1).index;V.get()!==ne&&(U.set(V.get()),V.set(ne),n.emit("select"));const q=e.direction==="forward"?K(O.get()):I(O.get());if(!H&&q){N=!0;const ue=j(P.get());P.set(ue),Y.set(P),g()}return se}const se={direction:()=>F,duration:()=>-1,velocity:()=>D,settled:()=>N,seek:te,useBaseFriction:E,useBaseDuration:E,useFriction:E,useDuration:E};return se}function v(){i||g()}function y(){i||b()}function k(){i=!0,g()}function w(){i=!1,d()}function m(){n.off("settle",m),d()}function b(){n.on("settle",m)}function x(C){typeof C<"u"&&(r=C),d()}function S(){s&&g()}function T(){s&&(g(),b())}function A(){return s}return{name:"autoScroll",options:t,init:c,destroy:u,play:x,stop:S,reset:T,isPlaying:A}}sf.globalOptions=void 0;const wM="data:image/webp;base64,UklGRuQMAABXRUJQVlA4INgMAABwQwCdASrMAMAAPm0ylUakIyIhK5LqUIANiWVu3wgGsHdc8eDVAPg/EHZNa2L18F/XmVvXt5mwQ8uXktoGwedyIdbjrmPoaY7Ev7N+EOVyuvE8ZIivGYnyMrKH52bKEWD43x96m/mlOQTHO5Xh6lSxkwV5X2S3xtKGILo4KEdwVR1iVOAi/ptH8keHOmyE/p2HZAujVJs9JwCq8vN0K9KZs3h/fMYrC6tb+ti9oA2etkEUEvEyAvbk8Ebg+Ewi2oWNRYazThutvtdgNKa/TAq7jK2PHEjqOHHm+3POkHXVRnTCWs2aHCJVxseLzzXIlon0KeItFY4N6d9ZJBGFodK8428+AZWdWco+IkFT3HvjN9mb+0cVyFgcItG0yuo2rS5IVX5M4dTY9tPBQlGqWaBGu5OVO/AT03+UtvGowOHFvePMktqpizBXkvLZNHW1hQWUFFrmUT8RW1pCZuFV1gf3V+RuH62pHOyIvRPT0QKXNDeC+8e+fJdV2ebv6zWSdrqBv+JL53gtd/YVFyOLRNDNkk0N5IDYw18EhoKJhGr9qZXZH7BpELDjaoX+eFjTC29JxH7EEsfYgv+4oQacouA8tYj5i4rIpb1C+W9EGJGw5g41//M3fv2KQynIwdYw60SdfiaVhNXeKdBgwlw9gqBnL/DasEP6ZmZIYVOHDmDi2RgIrneVacWdIzI5T2y5Fw6fhsiQ/OR/VExQTdr+tOoPR4ChgAD+8QTBRD/3UJfPKCzSE9nfQEBpDhsWB+3LSul20ln1Plf+FZYsxxEMnatjtuF22sXhRI2FnL+2N9xzMK0slC1CXhuBNekJrm6f5ZqJSnoOqyrXTglWe6qrCdAQOlQ+MzNFeQs9O3X+r4qqmK4ur0lSG/Tdx49vmaeVwQJG5YosCVALI3VNiI6shVWLnuCE5AykAULsxMnKetQJ0JE8OYOqi34gGXKNvAJqcXpINQWSHXB/cyBYXc8k5lZf+gYeYT/ErryftAQ+bE9KnXZGziI8/noxe8JZ8odba4I/yHjjK8hs/U/s98uQEmU9Q6wZ9rhERFCzPJUhvO6YXNDQJvkRNjMsY2eSZJdTCWQLJHxzUD2wmVJ+YloTDkVT4RNmfCAvgmAdIcfG3h3NhThEE2FgholhYNGJpOo1qejM5YThETa9xG3ZCKiQPBD9VbKsOUiklHCaUq4ssUDt/YcW98WSgVVr1AO01fYdK/of5Se6v/+0fEftOiiYtYjc1aXOhETu25lwViUviHg55mMqhiV0fhn4vvm13aOpE2Ab7TkAcncviQpfhPsd9/tRr++2v0Y8PXLP0xikiz5lcgKPdtIR0X8uezYbrCPqqN/XriEfDX+ifTHJK4bZQFMMrVCyrSR+Rxyy6/YiMJXMd23nfOyLoiGV2TJ3vXDmiSeAnff031e1E
46605L2Ywy/7+rfpWhsHDI7++RhkMGgMbEtpRuHZyUBYGmuLj9Be/xRYyQtvfnfZQOrVC1J8AmqsNdS5S84p3k4VUWYTt5+TMraaPu/kh2swcbEumHeS0LGgwNcdGENB7P8WoMO+naJASuDPcCuFRYXKber4TSUvuyJ2VYphef6T/JAD5whAATgYlqcQBxsViJVidyQJZszLdXzrf3OEc4A8eyGXpellXNWsM8u5pDH1GLkYXav+N3uKw8sCO/v9KNneT7+Re+9mCbXq+rA6NX0QrI0wUDebsbJVX+JnpLGcYJtVr8Td9qWQK+o9xGdNDqBHESEZnBLy6pc4RwGVIXYVJehFCmMz2Fb/RfUxPr2Y58dK/BX7gWUewNrqZ6vJZlHHj4YX/HIUPWaDucgsUnY4Dc6WAuT7/F9TzAS96kJorP5eTdE9xbcRcVds9DiAba7St0TSzrUd0lXQniDm65Z2Jk8gME/POtISNeCpZ+vaHl/mTNwc6qsIA9QFclcYxveEqxovEkOaxgcRpPFYZj4DQhnCu8UBqOypVd1KycYEtiMeq2ROocugg4iyccsijyvToVinpizM/Km9qoa0yJPn29KVwXWA9vo4FSi7mdcWxQNk1+liP6ME7VhAmGfBw18V9y+fJkyKF3oAHDHR8tejKi3/p1LKaoJa5tSf+xZ5jwIlF6A74L4rEQQNR5Rb0uPQ5/rFEmJNcnYo0pXWqYZYHKZJMIi5KEo7olRHZQ+IeFXLyaPT8eNv3LNavPG9cgT8nVMe7dnoVDVp30xJJDA2/shJqM05vHcb5yO9IMSZJzKPHvauBHRSBRX58Mt1/9VWnZWLVTrfMHwQ5WKQI1CRbdJvh97taXQcsKdkqYdZpI30pIRC61WMnGj/xMQRXiYWo9SprYLGNOvKTbYIDlPaN3Pz4Jgb7Q9gNB489+Ym9lF77C1sB7e2A2b0Z7Ifz3CUTAXzRoIi58UrVeKbCAuFVxyJIHOKmJjaZ36cVm5Dypj2S6ik2l4FqUVumTbD+66NqsYULMJjSeQnMy5lE43Vv5UonWP18aVIUkJ7Hr5gv35Ij985nAPBzCMsFA3j5mEyc86+z20PJ77oUTJWUDJKbqWnSI8k9LBOKrTVb7jujxbqgr6CK4KkTPNbYQejd6kv1JrWQKwxMsA92K2cQOQhGM9jhN30xq++x2tLPZxtchkDN1VDnDxgCs1nejpfbTAkjasTyYuBUHp8IzGuMoZ3PdQCj79eKazaEl3JVBs7jnZQlfRFZgAXx6qqeMPqnswik7GhIMsbV+dsqK10/4wEa0LGhnuOdOGo6bcZ4XeHefZNyIpBEfQx035GthuAxM/RomvjFf6qTcgLyQR6ARobtcxwO6bPtJRxjHqpiSRQCNk4SJ3TL3r2qwG0zSma7wBCmUyrmUkJpKUKV2dPOYxpwe3yaiAIFniMqSg+FE1sm/berGO3Ai6K6ZPXU5fp6Jw+BbqC1e7hwZEmnlYEShaTn61AApYOXvh1KMQfA0Ix9ulLRQgg07ex+k5fC2qFb0xd6J6Jyb4pRpWcRy06DqQGOUzgxLY16qMqKWaZM+VCAsmMNZoyIbRvc88X/GXvcYDo5+gxfDCbHEjlsdi77VTLghinPZq4PKU0Aq1m9Vl+8WxnyFnZRrGr6hVdrafJ6DrEBEA3Ba9qBO8w3ZQgVEzEGrkeuziR/A/PJaVW7j8Z/HYo6oHCvPeUN9BG+K3nfwVt49gCYerC02yQAF0J5PnEr6TVBw6bnZ9i5T6E3Qwnerl2WQE2N8IbAOhlDC5I8Nn4iT7crhiOD1QOV19NY3JXK+ERdR3+pNx7cP9X1N84uaeCwpQ6kL1e22Rkfo2RKh8JElsJiPKSLC6tSIoDuiNBuVgW4/d9Xdjk9oshJ4y2C6WYu7FaW933gNw8vYg2LI5/xkbmBRLzqIUrOZqK02vyVtz06DmQVLTz797GbS5iwBbuHXAS8h6SN2c5Tud6LtqHTzm7bvpgdj47kL6Hn6KMLIIwh4OHKe/DFTD5mbawlH30dpNiLCXJVtxrgJRlOZUgsYS3s//U2gTKv2q/bCeZMvHZ5Iw0AedtMlen086mIaDysIm62YXdsHW5jHVM0XvMDcYnh2ImO8kvHeVUS3wGlblujwxn2iCaKwkCHfThudYMoce8YsNH+ea6jGnAQTUN+i61Nbp5BtlXxZQZfhYsHiniIQ0rxTtgA13unv/OEY5myc896VPDpcKVCnyQHHxputHKEP0LIfVaidgIZC64ZKQxscVRd0Cqd+IDSmk5vVRxiaz2l0otH0+myFwdZPvMDCJ5h5SHtY6Xb38NEF/OWo9LJ9W8ZITjytnSL0nZGC/FQPdqa04+yap54bntYkiWxskyD1MO7MTCdPwIoZ7NXieljyMCNojLnaob40CDDv6oHUHgkxHrQcWPIKaP9GbmuLaGoqtXp/M7eTepjsHY4SLPX1GjChJbfzMvt7l5vnC/vIwG9tO2haktIl5O6QaxMAW54Pl/sbEDuK5RcwxbaBHg6vLAb5l4lqlveG9gZZClPFXfg8fTNIZINvR4U49YVCSymtHHruHqfH2OIDbdW3O71d5BAvkGVlRm4yPojHp+yY8snXjZty43U6LTBLcGZ6cSAxzFb+KfovpiZsytoHNTz8mle91mgwlOtVPm23NASEiq0CBEVM+rPZGM+y9Z3BiK9b73/Eb6NJucSaOt/0/im3cessowWkXwqLDUL5VQRJWudWdgZi1kLkSTt+mAJHeTrMn4jcrT1h9MEbE6tEZZz0KB5umIVNozyn2xBu4x556l1HkvhUJgR1mMPBEJcs7+VcjklpeAxmiTaPIbBq6oSNtkJvJk2blTEt0FY3Tk5/S0ahDvtYAyXCYWaAqM1D7GKfph06s6gHiq4QdlQYunbWbjW7r16rGcF54HUT3md4qFb62ZOAjMbSBgJ64SHqdh10YrbpTRx4ccoAAAAA=",bM="/assets/tina-tran-CF6yeGlD.webp",vM="/assets/john-pedroza-Dc6pRue7.webp",kM="/assets/ivan-belokhvostikov-ZrJQz5ns.webp",xM="/assets/ray-wong-k19_mk8Z.webp",yS="/assets/paulius-rakauskas-BXW3E9TK.webp",_d=[{quote:"Shira and team are invaluable assets to any company getting serious about marketing and sales... We've accelerated our marketing work immensely with her help, and I can't recommend her enough.",author:"Dan Barak",title:"CEO, Stackbit",photo:wM},{quote:"Highly recommend Hunter & Bard! They delivered a great design with on-point messaging under a tight timeline. They gave strategic advice and created an intuitive information architecture, resulting in a fantastic website that converts significantly better.",author:"Tina Tran",title:"Marketing Manager, Livestories",photo:bM},{quote:"Hunter & Bard provided killer marketing that helped us close deals... The rebranding they provided helped us build trust with Fortune 500 companies and improved our rapport with customers. I can't recommend them enough!",author:"John Pedroza",title:"Head of Sales, Coral Active",photo:vM},{quote:"U.S. expansion looks simple on a slide and brutally different in the field. Shira's program gives you the structure and execution support to turn 'we should go to the U.S.' into real pipeline. Save time, avoid costly mistakes, and get to revenue faster.",author:"Ivan Belokhvostikov",title:"CEO & Co-founder, Cybernet AI",photo:kM},{quote:"Hunter & Bard has been instrumental in helping us build our branding and marketing strategy from the ground up. Shira and her team take the time to understand even the most complex technologies like ours so they can be true partners in helping us deliver our product to the world.",author:"Ray Wong",title:"Senior Director of Business Development, Twinify",photo:xM},{quote:"I've worked with plenty of consultants, but the speed of insight here is on another level. In our first call, we completely reframed our messaging. And when we took it to market, the difference was real. Prospects were actually getting it. The conversations changed. The depth of market understanding was immediate.",author:"Paulius Rakauskas",title:"CEO, Matom.ai",photo:yS}],SM=()=>{const[t]=Ch({loop:!0,align:"start",dragFree:!0}
4660,[sf({speed:.8,stopOnInteraction:!1,stopOnMouseEnter:!0})]),[e,n]=Ch({loop:!0,align:"start"},[af({delay:4e3,stopOnInteraction:!1,stopOnMouseEnter:!0})]),[o,r]=f.useState(0),a=f.useCallback(()=>{n&&r(n.selectedScrollSnap())},[n]);f.useEffect(()=>{if(n)return a(),n.on("select",a),()=>{n.off("select",a)}},[n,a]);const s=(n==null?void 0:n.scrollSnapList().length)??_d.length;return h.jsxs("section",{className:"py-16",children:[h.jsx("div",{className:"max-w-[1350px] mx-auto px-6 md:px-12",children:h.jsxs("h2",{className:"font-display font-semibold text-[28px] md:text-section leading-[0.95] tracking-tight text-obsidian-900 mb-10 text-center uppercase",children:["What ",h.jsx("span",{className:"font-serif font-normal italic text-teal-700",children:"Leaders"})," Say"]})}),h.jsx("div",{className:"hidden md:block",children:h.jsx("div",{className:"overflow-hidden",ref:t,children:h.jsx("div",{className:"flex",children:_d.map((i,l)=>h.jsx("div",{className:"min-w-0 shrink-0 grow-0 basis-1/3 max-w-[420px] px-3",children:h.jsxs("div",{className:"p-6 rounded-lg h-full flex flex-col bg-white",children:[i.photo&&h.jsx("img",{src:i.photo,alt:`${i.author}, ${i.title} — Hunter & Bard B2B client`,className:"w-20 h-20 rounded-full object-cover mb-6"}),h.jsxs("blockquote",{className:"font-sans font-normal text-base leading-[140%] text-obsidian-900 mb-6",children:['"',i.quote,'"']}),h.jsxs("div",{className:"mt-auto",children:[h.jsx("p",{className:"text-sm font-semibold text-obsidian-900",children:i.author}),h.jsx("p",{className:"text-sm text-obsidian-700 mt-1",children:i.title})]})]})},l))})})}),h.jsxs("div",{className:"md:hidden px-6",children:[h.jsx("div",{className:"overflow-hidden",ref:e,children:h.jsx("div",{className:"flex ml-[-8px]",children:_d.map((i,l)=>h.jsx("div",{className:"min-w-0 shrink-0 grow-0 basis-[85%] px-2",children:h.jsxs("div",{className:"p-4 rounded-lg h-full flex flex-col bg-white",children:[i.photo&&h.jsx("img",{src:i.photo,alt:`${i.author}, ${i.title} — Hunter & Bard B2B client`,className:"w-16 h-16 rounded-full object-cover mb-4"}),h.jsxs("blockquote",{className:"font-sans font-normal text-base leading-[140%] text-obsidian-900 mb-6",children:['"',i.quote,'"']}),h.jsxs("div",{className:"mt-auto",children:[h.jsx("p",{className:"text-sm font-semibold text-obsidian-900",children:i.author}),h.jsx("p",{className:"text-sm text-obsidian-700 mt-1",children:i.title})]})]})},l))})}),h.jsx("div",{className:"flex items-center justify-center mt-6",children:h.jsx("div",{className:"flex items-center gap-2",children:Array.from({length:s}).map((i,l)=>h.jsx("button",{onClick:()=>n==null?void 0:n.scrollTo(l),"aria-label":`Go to testimonial ${l+1}`,className:`h-[3px] rounded-full transition-all duration-300 ${l===o?"w-8 bg-obsidian-900":"w-4 bg-obsidian-900/25 hover:bg-obsidian-900/40"}`},l))})})]})]})},TM="/assets/leaders-come-to-us-DqGqRuUa.webp",Pb=[{num:"01",title:"You Can't Clearly Explain What Your Company Does",body:"Clear messaging hierarchy and leadership-ready narrative.",rotate:-2.2},{num:"02",title:"You Need a Messaging and Positioning Strategy",body:"Complete marketing strategy with priorities and playbooks.",rotate:1.8},{num:"03",title:"You Need Senior Judgment, Not Another Agency",body:"Strategic expertise with zero execution overhead.",rotate:-1.5},{num:"04",title:"You're Explaining What You Do, But It's Not Moving the Needle",body:"Positioning that connects with buyers and drives action.",rotate:2.5}],AM=()=>{const t=f.useRef(null),[e,n]=f.useState(0),[o,r]=f.useState(!1),[a,s]=f.useState(!1),[i,l]=f.useState(!1),[c,u]=f.useState(!1);f.useEffect(()=>{const m=window.matchMedia("(max-width: 1200px)");s(m.matches);const b=x=>s(x.matches);return m.addEventListener("change",b),()=>m.removeEventListener("change",b)},[]),f.useEffect(()=>{const m=window.matchMedia("(max-width: 768px)");l(m.matches);const b=x=>l(x.matches);return m.addEventListener("change",b),()=>m.removeEventListener("change",b)},[]),f.useEffect(()=>{const m=window.matchMedia("(max-height: 820px)");u(m.matches);const b=x=>u(x.matches);return m.addEventListener("change",b),()=>m.removeEventListener("change",b)},[]),f.useEffect(()=>{const m=window.matchMedia("(prefers-reduced-motion: reduce)");r(m.matches);const b=x=>r(x.matches);return m.addEventListener("change",b),()=>m.removeEventListener("change",b)},[]);const d=o||i||c,g=f.useCallback(()=>
4660{if(d){n(1);return}const m=t.current;if(!m)return;const x=-m.getBoundingClientRect().top,S=window.innerHeight*2;n(Math.max(0,Math.min(1,x/S)))},[d]);f.useEffect(()=>(window.addEventListener("scroll",g,{passive:!0}),g(),()=>window.removeEventListener("scroll",g)),[g]);const v=3*.08+.35,y=Math.max(0,Math.min(1,(e-v)/.15)),k=1-Math.pow(1-y,2),w=()=>h.jsx("div",{className:"grid grid-cols-1 sm:grid-cols-2 xl:grid-cols-4 gap-4 md:gap-6 w-full max-w-[1350px] mx-auto px-6 md:px-12",children:Pb.map((m,b)=>h.jsxs("div",{className:"p-6 md:p-8 flex flex-col rounded-lg bg-white min-h-[200px] md:min-h-[240px]",children:[h.jsx("span",{className:"font-display font-semibold text-[24px] md:text-[28px] text-teal-700 leading-none",children:m.num}),h.jsx("h3",{className:"font-display font-normal text-[16px] md:text-[20px] lg:text-[24px] text-teal-700 leading-[1.15] mt-4",children:m.title}),h.jsx("div",{className:"mt-auto pt-4",children:h.jsxs("div",{className:"flex gap-2",children:[h.jsx(Vn,{className:"w-4 h-4 flex-shrink-0 text-teal-700 mt-1"}),h.jsx("p",{className:"font-sans font-normal text-sm md:text-base text-obsidian-900 leading-relaxed",children:m.body})]})})]},b))});return h.jsx(h.Fragment,{children:h.jsx("div",{ref:t,style:{height:d?"auto":"calc(70vh + 200vh)",paddingTop:"0px"},children:h.jsx("div",{style:{position:d?"relative":"sticky",top:d?void 0:"var(--nav-height, 80px)",height:d?"auto":"calc(100vh - var(--nav-height, 80px))",display:"flex",flexDirection:"column"},children:h.jsxs("div",{className:"on-dark relative w-full flex-1 overflow-hidden bg-teal-900","aria-label":"Common B2B enterprise positioning challenges and solutions",children:[h.jsx("div",{className:"on-dark absolute inset-0 bg-teal-900",children:h.jsx("img",{src:TM,alt:"","aria-hidden":"true",className:"w-full h-full object-cover",style:{transform:d?"none":`scale(${1+e*.05})`,transition:"transform 0.15s linear"}})}),d&&h.jsx("div",{className:"on-dark absolute inset-0 bg-obsidian-900/60","aria-hidden":"true"}),h.jsxs("div",{className:"relative z-10 h-full flex flex-col overflow-hidden",style:{padding:d?"clamp(48px, 8vh, 80px) 0":"clamp(24px, 4vh, 80px) 0"},children:[h.jsxs("div",{className:"max-w-[1350px] mx-auto px-6 md:px-12 w-full",children:[h.jsx("p",{className:"font-semibold text-xs text-white uppercase tracking-wider mb-2",children:"Senior Strategy + High-Leverage Execution"}),h.jsx("h2",{className:"font-display font-semibold text-[36px] md:text-[64px] lg:text-[96px] uppercase text-white tracking-tight leading-[0.88]",children:"Come to Us When…"})]}),h.jsx("div",{className:`flex-1 flex items-center ${d?"mt-10":""}`,children:d?w():h.jsx("div",{className:`flex ${a?"flex-wrap":"flex-nowrap"} justify-center gap-4 md:gap-6 px-6 md:px-12 max-w-[1350px] w-full mx-auto`,children:Pb.map((m,b)=>{const x=b*.08,S=Math.max(0,Math.min(1,(e-x)/.35)),T=1-Math.pow(1-S,3),_=T*m.rotate*(1-k),P=80*(1-T),L=.85+T*.15;return h.jsx("div",{className:"rounded-lg overflow-hidden shadow-2xl",style:{width:a?"calc(50% - 12px)":"calc(25% - 18px)",backgroundColor:"#FFFFFF",opacity:S>.02?Math.min(1,T*2):0,transform:`translateY(${P}px) rotate(${_}deg) scale(${L})`,transition:"none",zIndex:10+b,flexShrink:0},children:h.jsxs("div",{className:"p-5 md:p-6 lg:p-8 flex flex-col min-h-[200px] md:min-h-[28vh]",children:[h.jsx("span",{className:"font-display font-semibold text-[24px] md:text-[28px] text-teal-700 leading-none select-none",children:m.num}),h.jsx("h3",{className:"font-display font-normal text-[14px] md:text-[18px] lg:text-[22px] text-teal-700 leading-[1.15] mt-4",children:m.title}),h.jsx("div",{className:"mt-auto pt-4",children:h.jsxs("div",{className:"flex gap-2",children:[h.jsx(Vn,{className:"w-4 h-4 flex-shrink-0 text-teal-700 mt-0.5"}),h.jsx("p",{className:"font-sans font-normal text-xs md:text-sm lg:text-base text-obsidian-900 leading-relaxed",children:m.body})]})})]})},b)})})})]})]})})})})},_M="/assets/buildings-overlay-light-DidhD0A9.webp",CM=[{id:"positioning-messaging",eyebrow:"Messaging",title:"Positioning & Messaging",subtitle:"",body:"Sharpening the story of what you do and why it matters, so every buyer-facing surface points at the same position and the same win.",ctaLabel:"See the Engagement",ctaLink:"/products/sprint",detailsLink:"/products/sprint",isCustom:!1},{id:"marketing-strategy",eyebrow:"Strategy",title:"Marketing Strategy",subtitle:"",body:"Using discipline to decide what not to pursue so you can make sharper choices, build a clearer market position, and concentrate your resources where you can win.",ctaLabel:"See the Engagement",ctaLink:"/services/marketing-strategy",detailsLink:"/services/marketing-strategy",isCustom:!1},{id:"website-design",eyebrow:"Website",title:"Website Messaging",subt
4660itle:"",body:"Turning strategy into a clear, credible website narrative that helps the right buyers understand what you do, why it matters, and why they should keep going.",ctaLabel:"See the Engagement",ctaLink:"/services/website-design",detailsLink:"/services/website-design",isCustom:!1},{id:"revenue-enablement",eyebrow:"Materials",title:"Revenue Enablement",subtitle:"",body:"Aligning messaging, sales narratives, and buyer-facing materials so your team can explain complex value clearly, consistently, and convincingly.",ctaLabel:"See the Engagement",ctaLink:"/services/revenue-enablement",detailsLink:"/services/revenue-enablement",isCustom:!1},{id:"programs",eyebrow:"",title:"Cohorts",subtitle:"",body:"",ctaLabel:"",ctaLink:"",detailsLink:"",isCustom:!0}],EM=[{title:"US Expansion Cohort",href:"/products/cohort"},{title:"US Market Intensive",href:"/products/intensive"}],IM=({isOpen:t,children:e})=>{const n=f.useRef(null),[o,r]=f.useState(0),[a,s]=f.useState(!1);return f.useEffect(()=>{if(t&&n.current){r(n.current.scrollHeight);const i=setTimeout(()=>s(!0),250);return()=>clearTimeout(i)}else r(0),s(!1)},[t]),h.jsx("div",{style:{height:t?o:0,overflow:"hidden",transition:"height 0.5s cubic-bezier(0.16, 1, 0.3, 1)"},children:h.jsx("div",{ref:n,className:"pb-8",children:h.jsx("div",{style:{transform:a?"translateY(0)":"translateY(14px)",opacity:a?1:0,transition:"transform 0.45s cubic-bezier(0.16, 1, 0.3, 1), opacity 0.4s ease"},children:e})})})},jb=({text:t,inView:e,delay:n=0,className:o="",fillColor:r="white",ghostColor:a="rgba(255,255,255,0.10)"})=>h.jsxs("span",{className:`relative inline-block ${o}`,children:[h.jsx("span",{style:{color:a},"aria-hidden":"true",children:t}),h.jsx("span",{className:"absolute inset-0",style:{color:r,clipPath:e?"inset(0 0% 0 0)":"inset(0 100% 0 0)",transition:`clip-path 1.2s cubic-bezier(0.33, 1, 0.68, 1) ${n}s`},children:t})]}),PM=()=>{const[t,e]=f.useState(null),[n,o]=f.useState(!1),r=f.useRef(null),a=Is(),s=f.useCallback(i=>{e(l=>l===i?null:i)},[]);return f.useEffect(()=>{const i=r.current;if(!i)return;const l=new IntersectionObserver(([c])=>{c.isIntersecting?o(!0):o(!1)},{threshold:.2});return l.observe(i),()=>l.disconnect()},[]),h.jsx("section",{ref:r,className:"w-screen relative left-1/2 right-1/2 -ml-[50vw] -mr-[50vw]",children:h.jsxs("div",{className:"flex flex-col md:flex-row md:h-[1000px]",children:[h.jsxs("div",{className:"md:w-1/2 relative overflow-hidden py-12 md:py-0",style:{minHeight:"auto"},children:[h.jsx("div",{className:"on-dark absolute inset-0 bg-teal-700"}),h.jsx("div",{className:"absolute inset-0",style:{backgroundImage:`url(${_M})`,backgroundSize:"cover",backgroundPosition:"center",mixBlendMode:"overlay",opacity:.45}}),h.jsxs("div",{className:"relative z-10 flex flex-col justify-start h-full px-8 md:px-12 lg:px-16 pt-12 md:pt-[96px] pb-8 md:pb-16",children:[h.jsx("div",{style:{overflow:"hidden"},children:h.jsx("h2",{className:"font-display font-semibold text-[36px] md:text-[72px] lg:text-[96px] uppercase tracking-tight leading-[0.88] mb-4",style:{transform:n?"translateY(0)":"translateY(100%)",transition:"transform 1s cubic-bezier(0.2, 1, 0.3, 1)"},children:h.jsx(jb,{text:"HOW WE WORK",inView:n,delay:.15,fillColor:"white",ghostColor:"rgba(255,255,255,0.10)"})})}),h.jsx("div",{style:{overflow:"hidden"},children:h.jsx("p",{className:"font-sans font-normal text-[20px] leading-relaxed text-white/80 md:whitespace-nowrap",style:{transform:n?"translateY(0)":"translateY(100%)",opacity:n?1:0,transition:"transform 1s cubic-bezier(0.2, 1, 0.3, 1) 0.2s, opacity 0.6s ease 0.2s"},children:"Choose the offering that matches where you are."})})]})]}),h.jsx("div",{className:"md:w-1/2 bg-white md:h-[1000px] md:overflow-y-auto",children:h.jsx("div",{className:"py-8 md:py-16 px-8 md:px-12 lg:px-16",children:CM.map((i,l)=>{const c=t===i.id,u=i.isCustom,d=.4+l*.2;return h.jsx("div",{className:"border-b border-obsidian/10",style:{overflow:"hidden"},children:h.jsxs("div",{style:{opacity:n?1:0,transform:n?"translateX(0)":"translateX(-30px)",transition:`opacity 0.8s ease ${d}s, transform 1s cubic-bezier(0.2, 1, 0.3, 1) ${d}s`},children:[h.jsxs("button",{onClick:()=>s(i.id),className:"w-full flex items-center justify-between py-8 text-left group",children:[h.jsxs("div",{children:[!u&&i.eyebrow&&h.jsx("p",{className:"font-semibold text-xs text-obsidian-900 uppercase tracking-wider mb-1",children:i.eyebrow}),h.jsx("h3",{className:`text-[24px] md:text-[32px] leading-[1.1] ${u?"font-serif italic font-normal uppercase":"font-display font-normal"}`,children:h.jsx(jb,{text:i.title,inView:n,delay:d+.1,fillColor:"hsl(var(--obsidian))",ghostColor:"rgba(17,20,24,0.10)"})}),!u&&i.subtitle&&h.jsx("p",{className:"font-sans font-semibold text-sm text-obsidian/60 mt-2",children:i.subtitle})]}),h.jsx(gs,{className:`w-6 h-6 text-obsidian/40 shrink-0 ml-4 transition-transform duration-300 ${c?"rotate-180":""}`})]}),h.jsx(IM,{isOpen:c,children:u?h.jsxs("div",{children:[h.jsx("p",{className:"font-sans font-normal text-base leading-relaxed text-obsidian/70 mb-6 max-w-xl",children:"Select a path:"}),h.jsx("ul",{className:"flex flex-col gap-4",children:EM.map((g,p)=>h.jsx("li",{children:h.jsxs(Ne,{to:g.href,className:"group flex items-center justify-between font-semibold text-base text-obsidian hover:text-teal transition-colors",children:[g.title,h.jsxs("span",{className:"text-sm font-semibold text-obsidian/50 group-hover:text-teal flex items-center gap-1 transition-colors",children:["Details",h.jsx(Vn,{className:"w-4 h-4 shrink-0 group-hover:translate-x-1 transition-transform"})]})]})},p))})]}):h.jsxs("div",{children:[h.jsx("p",{className:"font-sans font-normal text-base leading-relaxed text-obsidian/70 mb-6 max-w-xl",children:i.body}),h.jsx("div",{className:"flex flex-col sm:flex-row items-start sm:items-center gap-4",children:h.jsx(Kn,{variant:"wasabi",onClick:()=>a(i.ctaLink),children:i.ctaLabel})})]})})]})},i.id)})})})]})})},jM=1,BM="99fdab0b-6314-430f-a483-cb27e607b3ee",OM="cfe06422-ea21-4b12-bd98-50c166e33f9f",MM="/__l5e/assets-v1/99fdab0b-6314-430f-a483-cb27e607b3ee/sharpsee-home-before-hero.webp",RM="a/v1/cfe06422-ea21-4b12-bd98-50c166e33f9f/99fdab
46600b-6314-430f-a483-cb27e607b3ee/sharpsee-home-before-hero.webp",NM="sharpsee-home-before-hero.webp",LM=104156,DM="image/webp",WM="2026-07-21T17:19:38Z",qM={version:jM,asset_id:BM,project_id:OM,url:MM,r2_key:RM,original_filename:NM,size:LM,content_type:DM,created_at:WM},FM=1,HM="690ec2b4-4f0f-47a9-9972-cdf00e72f933",zM="cfe06422-ea21-4b12-bd98-50c166e33f9f",$M="/__l5e/assets-v1/690ec2b4-4f0f-47a9-9972-cdf00e72f933/coral-active-before-hero.png",UM="a/v1/cfe06422-ea21-4b12-bd98-50c166e33f9f/690ec2b4-4f0f-47a9-9972-cdf00e72f933/coral-active-before-hero.png",YM="coral-active-before-hero.png",VM=226118,GM="image/png",KM="2026-07-21T20:49:08Z",JM={version:FM,asset_id:HM,project_id:zM,url:$M,r2_key:UM,original_filename:YM,size:VM,content_type:GM,created_at:KM},QM=[{slug:"sharpsee",company:"Sharpsee",category:"REPOSITIONING & MESSAGING",beforeSrc:qM.url,beforeAlt:"Sharpsee homepage before Hunter & Bard redesign",afterSrc:nx.url,afterAlt:"Sharpsee homepage after Hunter & Bard redesign",attribution:h.jsxs(h.Fragment,{children:["New brand design by"," ",h.jsx("a",{href:"https://pigs-own-rbj.craft.me/rgwAcaqYU7PvvB",target:"_blank",rel:"noopener noreferrer",className:"underline hover:text-white transition-colors",onClick:t=>t.stopPropagation(),children:"Daina Reed"})]})},{slug:"coral-active",company:"Coral Active",category:"REPOSITIONING & MESSAGING",beforeSrc:JM.url,beforeAlt:"Coral Active homepage before Hunter & Bard repositioning",afterSrc:ox.url,afterAlt:"Coral Active homepage after Hunter & Bard repositioning"}],ZM=()=>h.jsx("section",{className:"on-dark bg-obsidian-900 py-16",children:h.jsxs("div",{className:"max-w-[1350px] mx-auto px-6 md:px-12",children:[h.jsx("h2",{className:"font-display font-semibold text-[36px] md:text-[72px] lg:text-[96px] xl:text-[120px] uppercase text-white tracking-tight leading-[0.88] mb-8",children:"Work"}),h.jsx("div",{className:"flex flex-col gap-16",children:QM.map(t=>h.jsxs(Ne,{to:`/portfolio/${t.slug}`,className:"block group",children:[h.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[h.jsxs("div",{className:"relative aspect-[3/2] rounded-lg overflow-hidden bg-obsidian-800",children:[h.jsx("span",{className:"absolute top-4 left-4 z-10 bg-obsidian-900/80 text-white/70 text-xs font-semibold uppercase tracking-wider px-3 py-1 rounded-md",children:"Before"}),h.jsx("img",{src:t.beforeSrc,alt:t.beforeAlt,className:"w-full h-full object-cover object-top group-hover:scale-[1.02] transition-transform duration-500",loading:"lazy",decoding:"async"})]}),h.jsxs("div",{className:"relative aspect-[3/2] rounded-lg overflow-hidden bg-obsidian-800",children:[h.jsx("span",{className:"absolute top-4 left-4 z-10 bg-wasabi text-obsidian-900 text-xs font-semibold uppercase tracking-wider px-3 py-1 rounded-md",children:"After"}),h.jsx("img",{src:t.afterSrc,alt:t.afterAlt,className:"w-full h-full object-cover object-top group-hover:scale-[1.02] transition-transform duration-500",loading:"lazy",decoding:"async"})]})]}),h.jsxs("div",{className:"mt-4 flex items-baseline gap-3",children:[h.jsx("span",{className:"font-display text-xs font-semibold tracking-wider text-white uppercase",children:t.company}),h.jsx("span",{className:"text-white/30 text-xs",children:"|"}),h.jsx("span",{className:"font-display text-xs font-semibold tracking-wider text-white/70 uppercase",children:t.category})]}),t.attribution&&h.jsx("p",{className:"mt-2 text-xs text-white/50",children:t.attribution})]},t.slug))})]})});function XM(){const[t,e]=f.useState(!1);return f.useEffect(()=>{const n=navigator.maxTouchPoints>0,o=window.screen.width<=1024;e(n&&o)},[]),t}const eR="/assets/crumpled-paper-CFeToa-7.webp",tR={"@context":"https://schema.org","@type":"ProfessionalService",name:"Hunter & Bard",url:"https://hunterandbard.com",foundingDate:"2011",logo:"https://hunterandbard.com/hb-logo.png",description:"Since 2011, Hunter & Bard helps B2B founders build the ICP clarity, messaging, positioning, and sales playbooks to open doors with enterprise buyers.",founder:{"@type":"Person",name:"Shira Abel",jobTitle:"CEO",url:"https://shiraabel.com",sameAs:["https://www.linkedin.com/in/shiraabel/"]},sameAs:["https://www.linkedin.com/company/hunter-%26-bard/","https://x.com/hunterandbard","https://www.youtube.com/@hunterandbardagency"],knowsAbout:["B2B Enterprise Positioning","Deep Tech Messaging","Enterprise Sales Alignment","ICP Clarity","Sales Playbooks"],hasOfferCatalog:{"@type":"OfferCatalog",name:"Enterprise Strategy Services for B2B Founders",itemListElement:[{"@type":"Offer",itemOffered:{"@type":"Service",name:"Brand & Messaging Sprint",url:"https://hunterandbard.com/products/sprint",serviceType:"B2B Enterprise Positioning",description:"ICP clarity, messaging, and positioning for B2B founders entering the enterprise market.",audience:{"@type":"Audience",audienceType:"B2B Founders"},offers:{"@type":"Offer",price:"11500",priceCurrency:"USD",unitText:"project"}}},{"@type":"Offer",itemOffered:{"@type":"Service",name:"US Expansion Cohort",url:"https://hunterandbard.com/products/cohort",serviceType:"Enterprise Sales Alignment",description:"6-month cohort program helping B2B founders build repeatable enterprise sales systems.",audience:{"@type":"Audience",audienceType:"B2B Founders"},offers:{"@type":"AggregateOffer",lowPrice:"4000",highPrice:"9500",priceCurrency:"USD",unitText:"MONTH"}}},{"@type":"Offer",itemOffered:{"@type":"Service",name:"Strategic Intensive",url:"https://hunterandbard.com/products/intensive",serviceType:"Enterprise Positioning"}},{"@type":"Offer",itemOffered:{"@type":"Service",name:"Marketing Strategy",url:"https://hunterandbard.com/services/marketing-strategy",serviceType:"B2B Marketing Strategy"}},{"@type":"Offer",itemOffered:{"@type":"Service",name:"Design & Brand Strategy",url:"https://hunterandbard.com/services/design-strategy"}},{"@type":"Offer",itemOffered:{"@type":"Service",name:"Website Messaging",url:"https://hunterandbard.com/services/website-design"}}]},aggregateRating:{"@type":"AggregateRating",ratingValue:"5.0",reviewCount:"7",bestRating:"5"},mentions:[{"@type":"Organization",name:"Siemens"},{"@type":"Organization",name:"UL Solutions"},{"@type":"Organization",name:"JLL"},{"@type":"Organization",name:"Samsung"},{"@type":"Organization",name:"Google"}]},nR=[tR],oR=({show:t})=>h.jsx("div",{"aria-hidden":"true",style:{opacity:t?1:0,transform:t?"translateX(0)":"translateX(20px)",transition:"opacity 0.6s ease-out, transform 0.6s ease-out"},children:h.jsxs("svg",{width:"200",height:"90",viewBox:"0 0 200 90",className:"w-[130px] h-[59px] md:w-[165px] md:h-[74px] lg:w-[200px] lg:h-[90px]",style:{transform:"rotate(25deg)"},children:[h.jsx("ellipse",{cx:"100",cy:"45",rx:"95",ry:"40",fill:"none",stroke:"white",strokeWidth:"1"}),h.jsx("text",{x:"100",y:"47",textAnchor:"middle",dominantBaseline:"central",fill:"white",fontFamily:"'Zalando Sans Expanded', 'Host Grotesk', system-ui, sans-serif",fontSize:"14",fontWeight:"600",letterSpacing:"0.08em",children:"SINCE 2011"})]})}),rR="POSITIONING".split(""),aR=[{x:3,y:-5,r:2,s:1.02},{x:-4,y:3,r:-3,s:.97},{x:2,y:6,r:1,s:1.03},{x:-5,y:-2,r:-2,s:.98},{x:4,y:-4,r:3,s:1.01},{x:-3,y:5,r:-1,s:.99},{x:5,y:-3,r:2,s:1.02},{x:-2,y:4,r:-3,s:.97},{x:3,y:-6,r:1,s:1.03},{x:-4,y:2,r:-2,s:.98},{x:2,y:-5,r:3,s:1.01}],sR=({onLocked:t})=>{const[e,n]=f.useState(!1),[o]=f.useState(!0),r=f.useRef();return f.useEffect(()=>{if(window.matchMedia("(prefers-reduced-motion: reduce)").matches){n(!0),t();return}return r.current=setTimeout(()=>{n(!0),setTimeout(t,700)},1600),()=>{r.current&&clearTimeout(r.current)}},[t]),h.jsx("span",{className:"block font-display font-semibold text-[9.2vw] md:text-[72px] lg:text-[96px] xl:text-[120px] uppercase text-white tracking-tight leading-[0.88]",children:rR.map((a,s)=>{const i=aR[s],l=!e&&o?`translate(${i.x}px, ${i.y}px) rotate(${i.r}deg) scale(${i.s})`:"translate(0, 0) rotate(0) scale(1)";return h.jsx("span",{className:"inline-block",style:{opacity:o?1:0,transform:l,transition:e?"transform 0.5s cubic-bezier(0.34, 1.56, 0.64, 1), opacity 0.3s ease-out":"transform 0.15s ease-out, opacity 0.4s ease-out",transitionDelay:e?`${s*20}ms`:`${s*30}ms`},children:a},s)})})},iR=()=>{const[t,e]=f.useState(!0);return f.useEffect(()=>{const n=()=>e(window.scrollY<=50);return window.addEventListener("scroll",n,{passive:!0}),n(),()=>window.removeEventListener("scroll",n)},[]),h.jsx("div",{className:"pointer-events-none",style:{opacity:t?1:0,transition:"opacity 0.3s ease-out",animation:"mouseBreath 3s ease-in-out infinite"},children:h.jsxs("svg",{width:"28",height:"48",viewBox:"0 0 28 48",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[h.jsx("rect",{x:"0.5",y:"0.5",width:"27",height:"47",rx:"13.5",stroke:"white",strokeWidth:"1"}),h.jsx("circle",{cx:"14",cy:"10",r:"2.5",fill:"white"})]})})},lR=()=>{const[t,e]=f.useState(!1),n=f.useRef(()=>e(!0)).current,o=XM();return h.jsxs("section",{className:"on-dark bg-teal-700 min-h-screen w-full flex flex-col justify-center relative overflow-hidden",id:"ticker-hero",children:[h.jsx("img",{src:eR,alt:"",width:1920,height:1080,fetchPriority:"high",decoding:"async","aria-hidden":"true",className:"absolute inset-0 w-full h-full object-cover pointer-events-none",style:{mixBlendMode:"multiply",opacity:.85}}),h.jsxs("div",{className:"relative z-10 max-w-[1350px] mx-auto w-full px-6 md:px-12 pt-[88px] md:pt-[110px] pb-14 flex flex-col justify-between min-h-screen",children:[h.jsx("div",{}),h.jsx("div",{className:"flex-1 flex flex-col justify-center",children:h.jsxs("div",{className:"relative",children:[h.jsx("div",{className:"absolute right-0 top-[-45px] md:top-[-55px]",children:h.jsx(oR,{show:t})}),h.jsxs("h1",{className:"leading-[0.88]",children:[h.jsx(sR,{onLocked:n}),h.jsx("span",{className:"block hero-mask-reveal font-display font-semibold text-[8.2vw] md:text-[9vw] lg:text-[96px] xl:text-[120px] uppercase text-white tracking-tight whitespace-nowrap",style:{animationDelay:"0.3s"},children:"THAT GETS YOU"}),h.jsx("span",{className:"block hero-mask-reveal font-serif font-normal italic text-[9.2vw] md:text-[72px] lg:text-[96px] xl:text-[120px] uppercase text-wasabi tracking-tight leading-none",style:{animationDelay:"0.5s"},children:"IN THE DOOR."})]})]})}),h.jsx("div",{children:h.jsxs("div",{className:"flex flex-col items-start gap-7 max-w-[420px] hero-mask-reveal",style:{animationDelay:"0.8s"},children:[h.jsxs("p",{className:"font-sans font-normal text-[17px] text-white/80 leading-relaxed",children:["Hunter & Bard helps B2B founders build the ICP clarity, messaging, positioning, and sales playbooks to open doors with enterprise buyers.",h.jsx("br",{}),h.jsx("span",{className:"font-semibold text-white",children:"Without the 18-month trial-and-error tax."})]}),h.jsxs("div",{className:"flex flex-col items-start gap-4",children:[h.jsx(Ne,{to:"/us-enterprise-audit",onClick:()=>u2("/"),children:h.jsxs(Kn,{variant:"wasabi",size:"xl",className:"group px-10 py-5",children:["Run the audit",h.jsx(Vn,{className:"ml-2 w-5 h-5 group-hover:translate-x-1 transition-transform"})]})}),h.jsxs("p",{className:"text-sm text-white/70 leading-relaxed",children:["See what US buyers and AI assistants hear when they read your site. ",c2," USD, results in minutes."]})]})]})}),!o&&h.jsx("div",{className:"hidden md:block absolute bottom-10 left-1/2 -translate-x-1/2",children:h.jsx(iR,{})})]})]})},cR=()=>{const t=Is();return h.jsx("div",{className:"on-dark bg-teal-700 rounded-lg overflow-hidden relative",children:h.jsxs("div",{className:"flex flex-col items-center justify-center text-center px-6 py-24",children:[h.jsxs("h2",{className:"font-display font-semibold uppercase leading-[1.1] text-white text-[36px] sm:text-[52px] md:text-[64px] mb-6",children:[h.jsx("span",{className:"block",children:"Ready to"}),h.jsxs("span",{className:"block",children:["Move ",h.jsx("span",{className:"font-serif italic font-medium text-wasabi",children:"Forward?"})]})]}),h.jsx("p",{className:"font-sans font-normal text-base leading-relaxed mb-10 max-w-xl text-white/90",children:"We work with a small number of leaders at a time."}),h.jsxs(Kn,{variant:"wasabi",size:"xl",id:"cta-home-contact","aria-label":"Start a conversation about enterprise positioning and strategy",onClick:()=>t("/contact"),className:"group px-10 py-5",children:["Start a Conversation",h.jsx(TA,{className:"ml-2 w-5 h-5 group-hover:translate-x-1 transition-transform"})]})]})})},hR=()=>h.jsx("section",{className:"py-16",children:h.jsxs("div",{className:"flex flex-col items-start text-left max-w-3xl mx-auto px-6",children:[h.jsx("img",{src:yS,alt:"Paulius Rakauskas, CEO of Matom.ai",className:"w-24 h-24 rounded-full object-cover mb-6"}),h.jsx("blockquote",{className:"pullquote",children:`"I've worked with plenty of consultants, but the speed of insight here is on another level. In our first call, we completely reframed our messaging. And when we took it to market, the difference was real. Prospects were actually getting it. The conversations changed."`}),h.jsxs("cite",{className:"not-italic",children:[h.jsx("span",{className:"font-sans font-medium text-base text-obsidian-900 block",children:"Paulius Rakauskas"}),h.jsx("span",{className:"font-sans font-normal text-sm text-obsidian/60",children:"CEO, Matom.ai"})]})]})}),uR=()=>h.jsxs(h.Fragment,{children:[h.jsxs(k3,{children:[h.jsx("title",{children:"The Positioning That Gets You In The Door | Hunter & Bard"}),h.jsx("meta",{name:"description",content:"Since 2011, Hunter & Bard helps B2B founders build the messaging, positioning, and sales playbooks that open doors with enterprise buyers."}),h.jsx("meta",{name:"keywords",content:"B2B positioning, enterprise sales, enterprise positioning, enterprise strategy, messaging, ICP clarity, sales playbooks, deep tech messaging"}),h.jsx("meta",{name:"robots",content:"index, follow, max-image-preview:large"}),h.jsx("link",{rel:"canonical",href:"https://hunterandbard.com/"}),h.jsx("meta",{property:"og:title",content:"The Positioning That Gets You In The Door | Hunter & Bard"}),h.jsx("meta",{property:"og:description",content:"Since 2011, Hunter & Bard helps B2B founders build the messaging, positioning, and sales playbooks to open doors with enterprise buyers."}),h.jsx("meta",{property:"og:type",content:"website"}),h.jsx("meta",{property:"og:url",content:"https://hunterandbard.com/"}),h.jsx("meta",{property:"og:image",content:"https://hunterandbard.com/og-image.png"}),h.jsx("meta",{property:"og:image:alt",content:"Hunter & Bard — enterprise positioning and sales playbooks for B2B founders."}),h.jsx("meta",{property:"og:site_name",content:"Hunter & Bard"}),h.jsx("meta",{name:"twitter:card",content:"summary_large_image"}),h.jsx("meta",{name:"twitter:site",content:"@hunterandbard"}),h.jsx("meta",{name:"twitter:title",content:"The Positioning That Gets You In The Door | Hunter & Bard"}),h.jsx("meta",{name:"twitter:description",content:"Since 2011, Hunter & Bard helps B2B founders build the messaging, positioning, and sales playbooks to open doors with enterprise buyers."}),h.jsx("meta",{name:"twitter:image",content:"https://hunterandbard.com/og-image.png"}),nR.map((t,e)=>h.jsx("script",{type:"application/ld+json",children:JSON.stringify(t)},e))]}),h.jsx(lR,{}),h.jsx(aO,{heroOutsideLayout:!0,darkMode:!0,multiSection:!0,fullWidthContent:h.jsx("div",{style:{width:"100vw",marginLeft:"calc(-50vw + 50%)"},children:h.jsx(ZM,{})}),breakoutContent:h.jsx(PM,{}),secondBreakoutContent:h.jsx("div",{style:{width:"100vw",marginLeft:"calc(-50vw + 50%)"},children:h.jsx(SM,{})}),thirdBreakoutContent:h.jsx(cR,{}),afterBreakoutContent:h.jsxs(h.Fragment,{children:[h.jsx(jO,{}),h.jsx(BO,{})]}),children:()=>h.jsxs(h.Fragment,{children:[h.jsx("div",{style:{width:"100vw",marginLeft:"calc(-50vw + 50%)"},children:h.jsx(SO,{})}),h.jsx(hR,{}),h.jsx("div",{className:"py-16",children:h.jsx(y7,{})}),h.jsx("div",{style:{width:"100vw",marginLeft:"calc(-50vw + 50%)"},children:h.jsx(AM,{})})]})})]}),Cd=({children:t})=>{const[e,n]=f.useState("loading");return f.useEffect(()=>{let o=!1;const r=async()=>{const{data:{user:s}}=await Ja.auth.getUser();if(!s){o||n("unauthorized");return}const{data:i,error:l}=await Ja.from("user_roles").select("role").eq("user_id",s.id).eq("role","admin").maybeSingle();o||n(!l&&i?"authorized":"unauthorized")};r();const{data:{subscription:a}}=Ja.auth.onAuthStateChange(()=>r());return()=>{o=!0,a.unsubscribe()}}
4660,[]),e==="loading"?h.jsx("div",{className:"min-h-screen flex items-center justify-center text-mushroom-600",children:"Checking access..."}):e==="unauthorized"?h.jsx(dt,{to:"/auth",replace:!0}):h.jsx(h.Fragment,{children:t})},Bb="hb_visitor_session";function dR(){try{let t=sessionStorage.getItem(Bb);return t||(t=crypto.randomUUID(),sessionStorage.setItem(Bb,t)),t}catch{return"no-session"}}async function pR(t){if(typeof window>"u")return;const e=window.location.hostname;if((e==="localhost"||e.endsWith(".lovable.dev")||e.includes("lovable.app"))&&!/hunterandbard\.com$/.test(e)||t.startsWith("/admin")||t.startsWith("/auth"))return;const n=new URLSearchParams(window.location.search);try{await Ja.functions.invoke("track-visitor",{body:{path:t,referrer:document.referrer||null,session_id:dR(),utm_source:n.get("utm_source"),utm_medium:n.get("utm_medium"),utm_campaign:n.get("utm_campaign")}})}catch{}}const gR=f.lazy(()=>fe(()=>import("./About-D4B_53Ec.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9]))),mR=f.lazy(()=>fe(()=>import("./Cohort-TUspyj90.js"),__vite__mapDeps([10,11,12,13,14,15,16,17,18,19,2,20,6,21,4,22,23,24,25,26,27,3,28,29,30,31]))),fR=f.lazy(()=>fe(()=>import("./CohortApply-D5fk3aJj.js"),[])),yR=f.lazy(()=>fe(()=>import("./Sprint-aw5Rl7Sk.js"),__vite__mapDeps([32,33,11,21,14,12,13,15,8,9,17,30,31,2]))),wR=f.lazy(()=>fe(()=>import("./MarketingStrategy-D3288THx.js"),__vite__mapDeps([34,35,11,25,36,37,30,31,38,16,26,22,12,13]))),bR=f.lazy(()=>fe(()=>import("./DesignStrategy-CEesJo6R.js"),__vite__mapDeps([39,35,11,7,8,9,30,31,20,6,40,41]))),vR=f.lazy(()=>fe(()=>import("./WebsiteDesign-B-ZteI9k.js"),__vite__mapDeps([42,35,11,30,31,20,6,43,23,13,40]))),kR=f.lazy(()=>fe(()=>import("./RevenueEnablement-DIHy1XEB.js"),__vite__mapDeps([44,35,11,30,31,36,23,3]))),xR=f.lazy(()=>fe(()=>import("./Intensive-DkU6SJF-.js"),__vite__mapDeps([45,21,12,14,13,15,25,18,19,2,20,6,4,37,27,3,28,11,30,31]))),SR=f.lazy(()=>fe(()=>import("./Resources-DCwnQSH4.js"),__vite__mapDeps([46,47,48]))),TR=f.lazy(()=>fe(()=>import("./Blog-BxRyfXcA.js"),[])),AR=f.lazy(()=>fe(()=>import("./BlogPost-DhGXfJaZ.js"),__vite__mapDeps([49,48,5,20,6,4]))),_R=f.lazy(()=>fe(()=>import("./Podcast-BYNAGcUY.js"),__vite__mapDeps([50,48,47,51]))),CR=f.lazy(()=>fe(()=>import("./VlogPost-BaDcdIXf.js"),__vite__mapDeps([52,47]))),ER=f.lazy(()=>fe(()=>import("./ScaleFramework-Dm-s1gr-.js"),__vite__mapDeps([53,54,18,23,12,22,21]))),IR=f.lazy(()=>fe(()=>import("./Portfolio-oWokLrH0.js"),[])),PR=f.lazy(()=>fe(()=>import("./CaseStudy-C8-CgMnd.js"),__vite__mapDeps([55,56,21,41,13,37,16,15,23,22,27,40,5,12,14,4,24,3]))),jR=f.lazy(()=>fe(()=>import("./Admin-ARlZ0lrj.js"),__vite__mapDeps([57,40,23,43,12]))),BR=f.lazy(()=>fe(()=>import("./HomeArchived-SDz7dlmG.js"),__vite__mapDeps([58,30,31,59,60,33,56,29,38,51,28,18,22,61,21,14,4]))),OR=f.lazy(()=>fe(()=>import("./HomeShira-DKDht7AI.js"),__vite__mapDeps([62,31,60,33,56,29,38]))),MR=f.lazy(()=>fe(()=>import("./HomeCrumpledPaper-CokGKHOq.js"),__vite__mapDeps([63,30,31,59,60,33,56,29,38,51,28,18,22,61,21,14,4]))),RR=f.lazy(()=>fe(()=>import("./HomeRoiCalculator-DlP_kYcP.js"),[])),NR=f.lazy(()=>fe(()=>import("./Programs-ItHQU_KP.js"),__vite__mapDeps([64,21,12]))),LR=f.lazy(()=>fe(()=>import("./Engagements-BlM_f6KM.js"),__vite__mapDeps([65,40,13]))),DR=f.lazy(()=>fe(()=>import("./Outreach-D8gDYeS2.js"),__vite__mapDeps([66,67,51,61,14,68]))),WR=f.lazy(()=>fe(()=>import("./Auth-BFY6qDSD.js"),[])),qR=f.lazy(()=>fe(()=>import("./ResetPassword-CosMjs0b.js"),[])),FR=f.lazy(()=>fe(()=>import("./StyleGuide-D8sQnUZd.js"),__vite__mapDeps([69,70,61]))),HR=f.lazy(()=>fe(()=>import("./Privacy-C-b5ybhI.js"),[])),zR=f.lazy(()=>fe(()=>import("./Terms-C1iIcTGQ.js"),[])),$R=f.lazy(()=>fe(()=>import("./Contact-DmIYUlnC.js"),__vite__mapDeps([71,72]))),UR=f.lazy(()=>fe(()=>import("./UsEntryCost-B4lz_jq5.js"),[])),YR=f.lazy(()=>fe(()=>import("./UsEnterpriseAudit-Bc0PQZ6v.js"),[])),VR=f.lazy(()=>fe(()=>import("./MartiniPipeline-ChsXMBju.js"),__vite__mapDeps([73,72,74,54,75]))),GR=f.lazy(()=>fe(()=>import("./TalkLeads-BHKh6-A-.js"),__vite__mapDeps([76,67,75,68]))),KR=f.lazy(()=>fe(()=>import("./Visitors-DMCOmg5v.js"),__vite__mapDeps([77,67,70]))),JR=f.lazy(()=>fe(()=>
4660import("./AboutArchived-CbMxIXVp.js"),__vite__mapDeps([78,1,2,3,4,5,6,18,15,13]))),QR=f.lazy(()=>fe(()=>import("./CheckoutReturn-lcz5Vb0K.js"),__vite__mapDeps([79,74,54]))),ZR=f.lazy(()=>fe(()=>import("./Audit-94GeNefP.js"),__vite__mapDeps([80,74,9]))),XR=f.lazy(()=>fe(()=>import("./ThankYou-mV1WnY0o.js"),__vite__mapDeps([81,74,54]))),eN=f.lazy(()=>fe(()=>import("./Intake-jcSAU_Q5.js"),__vite__mapDeps([82,74,54])));f.lazy(()=>fe(()=>import("./NotFound-U3PM2N3o.js"),[]));const tN=f.lazy(()=>fe(()=>import("./LegacyRedirect-vtCv4RBj.js"),[])),nN=new J6,oN=()=>{const{pathname:t}=Ao();return f.useEffect(()=>{window.scrollTo(0,0),pR(t)},[t]),null},rN=()=>h.jsx(Z6,{client:nN,children:h.jsxs(_6,{children:[h.jsx(l5,{}),h.jsx(q5,{}),h.jsxs(JC,{children:[h.jsx(oN,{}),h.jsx(f.Suspense,{fallback:h.jsx("div",{className:"min-h-screen bg-background"}),children:h.jsxs(HC,{children:[h.jsx(ae,{path:"/",element:h.jsx(uR,{})}),h.jsx(ae,{path:"/products",element:h.jsx(dt,{to:"/products/sprint",replace:!0})}),h.jsx(ae,{path:"/products/cohort",element:h.jsx(mR,{})}),h.jsx(ae,{path:"/products/cohort/apply",element:h.jsx(fR,{})}),h.jsx(ae,{path:"/products/sprint",element:h.jsx(yR,{})}),h.jsx(ae,{path:"/services/marketing-strategy",element:h.jsx(wR,{})}),h.jsx(ae,{path:"/services/design-strategy",element:h.jsx(bR,{})}),h.jsx(ae,{path:"/services/website-design",element:h.jsx(vR,{})}),h.jsx(ae,{path:"/services/revenue-enablement",element:h.jsx(kR,{})}),h.jsx(ae,{path:"/services/enterprise-strategy",element:h.jsx(dt,{to:"/services/marketing-strategy",replace:!0})}),h.jsx(ae,{path:"/products/gtm-strategy",element:h.jsx(dt,{to:"/services/marketing-strategy",replace:!0})}),h.jsx(ae,{path:"/services/gtm-strategy",element:h.jsx(dt,{to:"/services/marketing-strategy",replace:!0})}),h.jsx(ae,{path:"/products/design-strategy",element:h.jsx(dt,{to:"/services/design-strategy",replace:!0})}),h.jsx(ae,{path:"/products/website-design",element:h.jsx(dt,{to:"/services/website-design",replace:!0})}),h.jsx(ae,{path:"/products/intensive",element:h.jsx(xR,{})}),h.jsx(ae,{path:"/about",element:h.jsx(gR,{})}),h.jsx(ae,{path:"/portfolio",element:h.jsx(IR,{})}),h.jsx(ae,{path:"/portfolio/:slug",element:h.jsx(PR,{})}),h.jsx(ae,{path:"/resources",element:h.jsx(SR,{})}),h.jsx(ae,{path:"/resources/blog",element:h.jsx(TR,{})}),h.jsx(ae,{path:"/resources/blog/:slug",element:h.jsx(AR,{})}),h.jsx(ae,{path:"/resources/vlog",element:h.jsx(_R,{})}),h.jsx(ae,{path:"/resources/vlog/:videoId",element:h.jsx(CR,{})}),h.jsx(ae,{path:"/resources/videos",element:h.jsx(dt,{to:"/resources/vlog",replace:!0})}),h.jsx(ae,{path:"/resources/podcast",element:h.jsx(dt,{to:"/resources/vlog",replace:!0})}),h.jsx(ae,{path:"/resources/blog/the-3-year-itch",element:h.jsx(dt,{to:"/resources/blog/why-your-dated-website-is-killing-your-deals",replace:!0})}),h.jsx(ae,{path:"/resources/blog/land-and-expand-adaptable-and-scalable-marketing-for-b2b-sales-impact-updated-fo",element:h.jsx(dt,{to:"/resources/blog/bow-tie-funnel-land-and-expand-b2b-marketing",replace:!0})}),h.jsx(ae,{path:"/resources/scale-framework",element:h.jsx(ER,{})}),h.jsx(ae,{path:"/admin",element:h.jsx(jR,{})}),h.jsx(ae,{path:"/admin/home-archived",element:h.jsx(BR,{})}),h.jsx(ae,{path:"/admin/home-original",element:h.jsx(dt,{to:"/admin/home-archived",replace:!0})}),h.jsx(ae,{path:"/admin/home-archived-v2",element:h.jsx(dt,{to:"/",replace:!0})}),h.jsx(ae,{path:"/admin/home-shira",element:h.jsx(OR,{})}),h.jsx(ae,{path:"/admin/home-crumpled",element:h.jsx(MR,{})}),h.jsx(ae,{path:"/admin/home-roi-calculator",element:h.jsx(RR,{})}),h.jsx(ae,{path:"/admin/programs",element:h.jsx(NR,{})}),h.jsx(ae,{path:"/admin/engagements",element:h.jsx(LR,{})}),h.jsx(ae,{path:"/admin/outreach",element:h.jsx(Cd,{children:h.jsx(DR,{})})}),h.jsx(ae,{path:"/auth",element:h.jsx(WR,{})}),h.jsx(ae,{path:"/reset-password",element:h.jsx(qR,{})}),h.jsx(ae,{path:"/style-guide",element:h.jsx(FR,{})}),h.jsx(ae,{path:"/privacy",element:h.jsx(HR,{})}),h.jsx(ae,{path:"/terms",element:h.jsx(zR,{})}),h.jsx(ae,{path:"/contact",element:h.jsx($R,{})}),h.jsx(ae,{path:"/us-entry-cost",element:h.jsx(UR,{})}),h.jsx(ae,{path:"/us-enterprise-audit",element:h.jsx(YR,{})}),h.jsx(ae,{path:"/talks/martini-pipeline",element:h.jsx(VR,{})}),h.jsx(ae,{path:"/admin/talk-leads",element:h.jsx(Cd,{children:h.jsx(GR,{})})}),h.jsx(ae,{path:"/admin/visitors",element:h.jsx(Cd,{children:h.jsx(KR,{})})}
4660),h.jsx(ae,{path:"/admin/about-archived",element:h.jsx(JR,{})}),h.jsx(ae,{path:"/events/win-the-enterprise",element:h.jsx(dt,{to:"/",replace:!0})}),h.jsx(ae,{path:"/events/sell-to-enterprise",element:h.jsx(dt,{to:"/",replace:!0})}),h.jsx(ae,{path:"/checkout/return",element:h.jsx(QR,{})}),h.jsx(ae,{path:"/checkout/audit",element:h.jsx(ZR,{})}),h.jsx(ae,{path:"/thank-you",element:h.jsx(XR,{})}),h.jsx(ae,{path:"/audit/intake",element:h.jsx(eN,{})}),h.jsx(ae,{path:"/us-expansion-cohort-b2b-enterprise",element:h.jsx(dt,{to:"/products/cohort",replace:!0})}),h.jsx(ae,{path:"*",element:h.jsx(tN,{})})]})})]})]})});u7();document.querySelectorAll("prerender-content, #prerender-article").forEach(t=>t.remove());e0(document.getElementById("root")).render(h.jsx(i0,{children:h.jsx(rN,{})}));export{ra as $,Vn as A,Kn as B,N0 as C,TA as D,EM as E,jO as F,CM as G,k3 as H,si as I,gs as J,bN as K,Rt as L,Ym as M,yN as N,ve as O,aO as P,fN as Q,M as R,Js as S,Ic as T,hN as U,wN as V,dt as W,Gh as X,NP as Y,My as Z,M0 as _,SN as a,ll as a0,kg as a1,Sj as a2,Sd as a3,BO as a4,kO as a5,Ch as a6,xM as a7,sf as a8,af as a9,ps as aA,k9 as aB,z2 as aC,S9 as aD,A9 as aE,T9 as aF,kN as aG,pm as aH,hx as aI,In as aJ,_B as aK,t6 as aL,uN as aM,Ij as aN,Td as aO,Ao as aP,dN as aQ,c2 as aR,p7 as aS,pN as aT,fe as aU,ZM as aa,_M as ab,SM as ac,SO as ad,AM as ae,XM as af,eR as ag,eE as ah,wr as ai,Zh as aj,g1 as ak,Ee as al,ce as am,me as an,aa as ao,x2 as ap,Wm as aq,g2 as ar,Dm as as,gl as at,m1 as au,f1 as av,Gr as aw,l6 as ax,Bt as ay,Uh as az,Is as b,Zn as c,Yt as d,Ta as e,Qs as f,Aa as g,Me as h,Yl as i,h as j,Ja as k,SB as l,Tx as m,yh as n,xB as o,wh as p,bh as q,f as r,lO as s,wm as t,sO as u,y7 as v,sb as w,Ne as x,qM as y,nx as z};

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.