1import{r as k}from"./index-wUhNG3cz.js";(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};e.SENTRY_RELEASE={id:"09f4e62655a94d1779837daa4af160dfe345ddd5"};var t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="40af4c07-c4df-4432-a27a-16fbb8ba2d7d",e._sentryDebugIdIdentifier="sentry-dbid-40af4c07-c4df-4432-a27a-16fbb8ba2d7d")}catch{}})();function E(e){return e?e.startsWith("[")||e.startsWith(".")||e.startsWith("#")||e.includes(" ")||e.includes(":")?e:`[data-tour="${e}"]`:""}k("scroll-to",e=>{const t=typeof(e==null?void 0:e.target)=="string"?e.target:"";if(!t)return;const o=document.querySelector(E(t));o==null||o.scrollIntoView({behavior:"smooth",block:"center"})});const h="/narration/meta-review",c="metaReviewScenarioStep";function n(e){window.postMessage({__demo:!0,...e},"*")}function u(e){n({kind:"app",id:"scroll-to",args:{target:e}})}function d(e){return new Promise(t=>window.setTimeout(t,e))}async function p(e,t=15e3){const o=performance.now();for(;performance.now()-o<t;){const a=document.querySelector(e);if(a)return a;await d(200)}return null}let r=null;function _(){if(r)return r;const e=document.createElement("div");return e.id="__meta_review_captions",e.style.cssText=["position:fixed","left:50%","bottom:36px","transform:translateX(-50%)","max-width:min(86vw,900px)","padding:14px 22px","background:rgba(20,22,28,0.94)","border:1px solid #22d3ee","border-radius:12px","box-shadow:0 8px 32px rgba(0,0,0,.5)","font:500 18px/1.5 -apple-system,system-ui,sans-serif","color:rgba(255,255,255,0.45)","text-align:center","z-index:2147483647","pointer-events:none"].join(";"),document.body.appendChild(e),r=e,e}function w(){r==null||r.remove(),r=null}function A(){return new Promise(e=>{const t=document.createElement("div");t.id="__meta_review_start",t.style.cssText=["position:fixed","inset:0","display:flex","flex-direction:column","align-items:center","justify-content:center","gap:14px","background:rgba(8,10,14,0.82)","backdrop-filter:blur(2px)","cursor:pointer","z-index:2147483647","font:600 22px/1.4 -apple-system,system-ui,sans-serif","color:#fff","text-align:center"].join(";"),t.innerHTML='<div style="font-size:40px">â¶ï¸</div><div>Click anywhere to start the walkthrough</div><div style="font:400 14px/1.4 -apple-system,system-ui;color:#22d3ee">Make sure your screen recorder is running</div>';const o=()=>{t.removeEventListener("click",o),t.remove(),e()};t.addEventListener("click",o),document.body.appendChild(t)})}function y(e,t){const o=_();o.innerHTML="",e.forEach((a,i)=>{const s=document.createElement("span");s.textContent=a.word+" ",i<t?s.style.color="rgba(255,255,255,0.85)":i===t&&(s.style.color="#22d3ee",s.style.fontWeight="700"),o.appendChild(s)})}const l={};function m(e){if(l[e])return;const t=new Audio(`${h}/${e}.wav`);t.preload="auto",t.load();const o={duration:0,words:[]};l[e]={audio:t,timing:o},fetch(`${h}/${e}.json`).then(a=>a.json()).then(a=>{l[e].timing=a}).catch(()=>{})}async function b(e){l[e]||m(e);let t=l[e].timing;if(!t.words.length)try{t=await fetch(`${h}/${e}.json`).then(a=>a.json())}catch{t={duration:0,words:[]}}const o=l[e].audio;await new Promise(a=>{let i=0;const s=()=>{const x=o.currentTime;let v=-1;for(let f=0;f<t.words.length&&t.words[f].start<=x;f++)v=f;y(t.words,v),i=requestAnimationFrame(s)},g=()=>{cancelAnimationFrame(i),a()};o.addEventListener("ended",g,{once:!0}),o.addEventListener("error",g,{once:!0}),o.play().then(()=>{i=requestAnimationFrame(s)}).catch(()=>{y(t.words,t.words.length-1),window.setTimeout(g,(t.duration||6)*1e3)})})}async function I(){n({kind:"demo",method:"clear"});const e='[data-tour="connect-facebook"]',t=b("seg1");(async()=>(await p(e),u(e),n({kind:"demo",method:"spotlight",selector:e,padding:10,ms:22e3}),n({kind:"demo",method:"callout",selector:e,text:"Click here to start the Facebook Login flow",placement:"top",ms:22e3})))(),await t,n({kind:"demo",method:"clear"}),w(),n({kind:"demo",method:"toast",text:'Now click "Add Account" on Facebook. A new tab opens with the Facebook consent screen â complete it there; this walkthrough continues automatically.',ms:12e3}),sessionStorage.setItem(c,"seg2")}async function S(){n({kind:"demo",method:"clear"}),w();const e=await p('[data-tour="fb-row"]');if(e){const i=e.querySelector("button");i&&i.click(),await d(700)}const t='[data-tour="account-card"]';await p(t)&&(u(t),n({kind:"demo",method:"spotlight",selector:t,padding:10,ms:23e3}),n({kind:"demo",method:"callout",selector:'[data-tour="account-name"]',text:"Business account name (via business_management)",placement:"bottom",ms:11e3}));const a=b("seg2");await d(11e3),n({kind:"demo",method:"callout",selector:'[data-tour="account-id"]',text:"Account ID",placement:"bottom",ms:1e4}),await a,n({kind:"demo",method:"clear"}),sessionStorage.setItem(c,"seg3"),await T()}async function T(){n({kind:"demo",method:"clear"}),w(),location.pathname.includes("/dashboard")||(history.pushState({},"","/dashboard?demo=1"),window.dispatchEvent(new PopStateEvent("popstate")));const e='[data-tour="metric-spend"]';await p(e),await d(800),u(e),n({kind:"demo",method:"spotlight",selector:e,padding:10,ms:8e3}),n({kind:"demo",method:"callout",selector:e,text:"Total ad spend, pulled via ads_read",placement:"bottom",ms:8e3});const t=b("seg3");await d(8e3),n({kind:"demo",method:"clear"});const o='[data-tour="performance-trend"]';document.querySelector(o)&&(u(o),n({kind:"demo",method:"spotlight",selector:o,padding:8,ms:6e3}),n({kind:"demo",method:"callout",selector:o,text:"Performance trend from the Facebook Ads API",placement:"top",ms:6e3})),await d(5e3),n({kind:"demo",method:"clear"});const a='[data-tour="active-campaigns"]';document.querySelector(a)&&(u(a),n({kind:"demo",method:"spotlight",selector:a,padding:8,ms:6e3})),await t,n({kind:"demo",method:"clear"}),w(),sessionStorage.removeItem(c),sessionStorage.removeItem("demoModeActive")}function C(){return new URLSearchParams(window.location.search).get("scenario")==="meta-review"}function L(){sessionStorage.getItem(c)==="seg2"&&(sessionStorage.setItem(c,"running"),sessionStorage.removeItem("demoPopupPending"),window.dispatchEvent(new Event("meta-review-refetch-fb")),S().catch(e=>console.error("[meta-review] seg2 failed:",e)))}function F(){window.addEventListener("message",e=>{e.origin===window.location.origin&&e.data&&e.data.__metaReviewConsent&&e.data.ok&&L()})}if(typeof window<"u"&&C()){F();const e=sessionStorage.getItem(c);(async()=>{e==="seg2"?(m("seg2"),m("seg3"),await d(1200),sessionStorage.setItem(c,"running"),await S()):location.pathname.includes("/ad-accounts")?(m("seg1"),m("seg2"),await A(),await I()):console.log("[meta-review] not on /ad-accounts; open /ad-accounts?demo=1&scenario=meta-review to start.")})().catch(o=>console.error("[meta-review] scenario failed:",o)),console.log("[meta-review] scenario enabled.")}k("meta-review-noop",()=>{}); 2//# sourceMappingURL=index-C9i1Pb2d.js.map
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.