1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[7998],{3941:(e,t,a)=>{a.d(t,{N:()=>l,o:()=>d});var s=a(62227),r=a(48440),n=a(7385);let o="https://api.tributly.io",i="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJvbGUiOiJhbm9uIiwiaWF0IjoxNzg2NTY2NTg2LCJleHAiOjIxMDE5MjY1ODZ9.HdgPje8gOHNtB6RWZIaOQfgJvEgpkd89yLP97dd-RCA",l=(0,s.UU)(o,i);function d(){return(0,s.UU)(o,i,{auth:{persistSession:!1,autoRefreshToken:!1}})}r.dk||l.auth.onAuthStateChange((e,t)=>{var a,s,r,o;let i=null==t?void 0:t.user;(0,n.o)(i?{name:(null==(a=i.user_metadata)?void 0:a.full_name)||(null!=(r=i.email)?r:"").split("@")[0]||"Account",avatarColor:null!=(o=null==(s=i.user_metadata)?void 0:s.avatar_color)?o:0}:null)})},4261:(e,t,a)=>{var s;a.d(t,{B:()=>o,h:()=>n});let r=null!=(s="".trim().replace(/\/$/,""))?s:"";function n(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/";return r?"".concat(r).concat(e.startsWith("/")?e:"/".concat(e)):null}function o(e){var t;return null!=(t=n(e))?t:e}},7385:(e,t,a)=>{a.d(t,{n:()=>n,o:()=>r});let s="tb_account";function r(e){if("undefined"==typeof document)return;let t=function(){let e=window.location.hostname;return"tributly.io"===e||e.endsWith(".tributly.io")?".tributly.io":null}();if(!t)return;let a="; domain=".concat(t,"; path=/; SameSite=Lax; Secure");document.cookie=e?"".concat(s,"=").concat(encodeURIComponent(JSON.stringify(e)),"; max-age=").concat(2592e3).concat(a):"".concat(s,"=; max-age=0").concat(a)}function n(){var e;if("undefined"==typeof document)return null;
1let t=null==(e=document.cookie.split("; ").find(e=>e.startsWith("".concat(s,"="))))?void 0:e.slice(s.length+1);if(!t)return null;try{let e=JSON.parse(decodeURIComponent(t));if("string"!=typeof(null==e?void 0:e.name)||!e.name)return null;return{name:e.name.slice(0,60),avatarColor:Number.isInteger(e.avatarColor)?e.avatarColor:0}}catch(e){return null}}},14497:(e,t,a)=>{a.d(t,{JJ:()=>i,S1:()=>l,SO:()=>o,ew:()=>n,id:()=>c,lv:()=>d,tY:()=>u,xD:()=>g});var s=a(15651);function r(e,t,a){let r=510*t;return e/1e3*(r+r*a*(s.gT-1))*s.E_}let n=r(s.O3,.55,0),o=r(1.2,.9,.0025),i=4,l=s.q3*i;function d(e,t){let a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:7;return Math.min(Math.min(e*t,s.cu)*a,s.q3)*i}let c=3,u=22,h=22/i,m=e=>5*Math.floor(e/5),p=m(d(3,n,h)),x=m(d(c,o,h)),g="$".concat(p," to $").concat(x);"Estimated, not guaranteed. Based on ".concat(c," hours of browsing on ").concat(u," days a month at the ad rates our own auction charges, with half of that revenue paid to you. Nobody has been earning long enough for there to be an average, so this is a projection from our pricing rather than a measurement. Earnings are capped at $").concat(s.cu," a day and $").concat(s.q3," a week, so $").concat(l," a month is the most anyone can make. ").concat(s.SC," Browse less than that and you earn less.")},16324:(e,t,a)=>{a.d(t,{U:()=>v});var s=a(95155),r=a(12115),n=a(52619),o=a.n(n),i=a(3278),l=a(52609),d=a(41295),c=a(47982),u=a(88702),h=a(63316),m=a(57264),p=a(39473),x=a(3941),g=a(83789),f=a(35132),b=a(85396),y=a(95593),w=a(98580);function v(e){let{onClose:t,onAuth:a,initialMode:n="login",initialReferralCode:v="",intent:j="publisher",dismissable:N=!0}=e,[k,C]=(0,r.useState)(n),[S,T]=(0,r.useState)(!1),[z,_]=(0,r.useState)(""),[I,A]=(0,r.useState)(""),[E,F]=(0,r.useState)(""),[P,D]=(0,r.useState)(v),[O,U]=(0,r.useState)(null),[R,W]=(0,r.useState)(!1),[$,L]=(0,r.useState)(!1),[B,M]=(0,r.useState)("form"),[q,J]=(0,r.useState)(null),[Y,H]=(0,r.useState)(""),[K,Q]=(0,r.useState)(!1),[X,G]=(0,r.useState)(0),[Z,V]=(0,r.useState)(""),[ee,et]=(0,r.useState)("");async function ea(e){var t,s,r,n,o,i,l,d,c;if(e.preventDefault(),U(null),!I.trim()||!E.trim())return void U("Please fill in all fields");
1if("register"===k&&!$)return void U("Please accept the Terms of Service to continue");if("register"===k&&E.length<8)return void U("Password must be at least 8 characters");if(W(!0),"register"===k){let e=await (0,w.Ti)().then(e=>e.fingerprint).catch(()=>null),a=await fetch("/api/auth/check-email",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:I.trim(),fingerprint:e})}),i=await a.json();if(!i.success){if((null==(s=i.error)?void 0:s.code)==="BLOCKED"){J(i.error.message),M("closed"),W(!1);return}U((null==(r=i.error)?void 0:r.message)||"Please enter a valid email address"),W(!1);return}let{data:l,error:d}=await x.N.auth.signUp({email:I.trim(),password:E,options:{data:{full_name:z.trim()||I.trim().split("@")[0],...(0,f.WD)(j),...(0,b.tz)((0,b.o2)())}}});if(d){let e=d.message.toLowerCase();if(e.includes("cannot be used to create an account")){J(d.message),M("closed"),W(!1);return}e.includes("already registered")||e.includes("already exists")||e.includes("user already registered")?U("This email is already in use"):e.includes("rate limit")||e.includes("too many")?U("We cannot send confirmation emails just now. Please try again in a few minutes."):U("Something went wrong. Please try again"),W(!1);return}if(l.user&&!l.session&&(null!=(n=null==(t=l.user.identities)?void 0:t.length)?n:0)===0){U("This email is already in use. Sign in instead."),W(!1);return}return l.session&&l.user?void es(l.user.id,null==(o=l.user.user_metadata)?void 0:o.full_name,l.user.email,l.session.access_token):(M("verify"),G(60),W(!1),void 0)}{let{data:e,error:t}=await x.N.auth.signInWithPassword({email:I.trim(),password:E});if(t){if(t.message.toLowerCase().includes("not confirmed")){M("verify"),U(null),W(!1),en();return}let e=await fetch("/api/auth/ban-notice",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:I.trim()})}).then(e=>e.json()).catch(()=>null);if(null==e?void 0:e.banned){J(e.message),M("closed"),W(!1);return}U("Invalid email or password"),W(!1);return}e.user&&((0,g.u4)("Logged In"),a({id:e.user.id,name:null!=(d=null==(i=e.user.user_metadata)?void 0:i.full_name)?d:e.user.email.split("@")[0],email:e.user.email,avatarColor:null!=(c=null==(l=e.user.user_metadata)?void 0:l.avatar_color)?c:0,isNew:!1,intent:(0,f.hT)(e.user.user_metadata)}))}W(!1)}function es(e,t,s,r){if(P.trim()){let e=P.trim().toUpperCase(),t=(0,y.Om)();x.N.rpc("attribute_referral",{p_code:e,p_link:t&&t.code===e?t.via:null}).then(e=>{let{error:t}=e;t&&console.error("[referral] attribution failed",t)})}(0,g.u4)("Signed Up",{hasReferral:!!P.trim(),intent:j}),r&&fetch("/api/signup-notify",{method:"POST",headers:{Authorization:"Bearer ".concat(r)}}).catch(e=>console.error("[signup] could not announce the registration",e)),a({id:e,name:"string"==typeof t&&t?t:s.split("@")[0],email:s,avatarColor:0,isNew:!0,intent:j})}async function er(e){var t,a;e.preventDefault(),U(null);let s=Y.replace(/\D/g,"");if(s.length<6)return void U("Enter the six digit code from the email");W(!0);let{data:r,error:n}=await x.N.auth.verifyOtp({email:I.trim(),token:s,type:"signup"});if(n||!r.user){U("That code is wrong or has expired. Ask for a new one below."),W(!1);return}Q(!0),es(r.user.id,null==(t=r.user.user_metadata)?void 0:t.full_name,r.user.email,null==(a=r.session)?void 0:a.access_token)}async function en(){if(X>0||R)return;U(null),W(!0);let{error:e}="reset-code"===B?await x.N.auth.resetPasswordForEmail(I.trim()):await x.N.auth.resend({type:"signup",email:I.trim()});W(!1),G(60),e&&U("Could not send a new code just yet. Try again in a moment.")}async function eo(e){if(e.preventDefault(),U(null),!I.trim())return void U("Enter the address you signed up with");W(!0),await x.N.auth.resetPasswordForEmail(I.trim()),W(!1),H(""),V(""),et(""),M("reset-code"),G(60)}async function ei(e){var t,s,r,n;e.preventDefault(),U(null);let o=Y.replace(/\D/g,"");if(o.length<6)return void U("Enter the six digit code from the email");if(Z.length<8)return void U("Password must be at least 8 characters");if(Z!==ee)return void U("Those two passwords are not the same");W(!0);let{data:i,error:l}=await x.N.auth.verifyOtp({email:I.trim(),token:o,type:"recovery"});if(l||!i.user){U("That code is wrong or has expired. Ask for a new one below."),W(!1);return}let{error:d}=await x.N.auth.updateUser({password:Z});if(d){U(d.message.toLowerCase().includes("different from the old")?"That is the password you already had. Choose a different one.":"Could not set that password. Try a different one."),W(!1);return}Q(!0),(0,g.u4)("Password Reset"),a({id:i.user.id,name:null!=(r=null==(t=i.user.user_metadata)?void 0:t.full_name)?r:i.user.email.split("@")[0],email:i.user.email,avatarColor:null!=(n=null==(s=i.user.user_metadata)?void 0:s.avatar_color)?n:0,isNew:!1,intent:(0,f.hT)(i.user.user_metadata)})}function el(){M("form"),J(null),H(""),V(""),et(""),U(null),W(!1)}return(0,r.useEffect)(()=>{let{body:e}=document,t=e.style.overflow,a=e.style.paddingRight,s=window.innerWidth-document.documentElement.clientWidth;return e.style.overflow="hidden",s>0&&(e.style.paddingRight="".concat(s,"px")),()=>{e.style.overflow=t,e.style.paddingRight=a}},[]),(0,r.useEffect)(()=>
1{if(X<=0)return;let e=setTimeout(()=>G(e=>e-1),1e3);return()=>clearTimeout(e)},[X]),(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"hidden sm:block fixed inset-0 z-[60] ".concat(N?"bg-black/25 backdrop-blur-sm":"bg-white"),onClick:N?t:void 0}),(0,s.jsx)("div",{className:"fixed inset-0 z-[70] flex items-center justify-center overflow-y-auto overscroll-contain bg-white sm:bg-transparent sm:p-4 sm:py-6",children:(0,s.jsxs)("div",{className:"w-full min-h-full my-auto bg-white px-5 pt-7 pb-6 flex flex-col relative sm:min-h-0 sm:block sm:rounded-2xl sm:shadow-2xl sm:max-w-[400px] sm:p-8",children:[N&&(0,s.jsxs)("button",{onClick:t,"aria-label":"Close",className:"absolute top-2.5 right-2.5 sm:top-5 sm:right-5 w-11 h-11 sm:w-8 sm:h-8 rounded-xl sm:rounded-lg hover:bg-black/5 sm:hover:bg-gray-100 flex items-center justify-center text-gray-400 hover:text-gray-700 transition-colors",children:[(0,s.jsx)(i.X,{size:18,className:"sm:hidden"}),(0,s.jsx)(i.X,{size:15,className:"hidden sm:block"})]}),(0,s.jsx)("div",{className:"flex justify-center shrink-0 sm:mb-7",children:(0,s.jsx)("img",{src:"/tributlylogo.svg",alt:"tributly",className:"h-8"})}),(0,s.jsx)("div",{className:"flex-1 flex flex-col justify-center py-9 sm:block sm:flex-none sm:py-0",children:"closed"===B?(0,s.jsxs)("div",{className:"text-center",children:[(0,s.jsx)(l.k,{size:32,weight:"bold",className:"mx-auto text-[#f2010b]"}),(0,s.jsx)("h2",{className:"mt-4 text-[24px] sm:text-[20px] font-bold text-gray-950 leading-tight tracking-[-0.01em]",children:"Account closed"}),(0,s.jsx)("p",{className:"mt-2.5 text-[13.5px] text-gray-500 leading-relaxed",children:q}),(0,s.jsx)("a",{href:"mailto:[email protected]?subject=".concat(encodeURIComponent("Closed account")),className:"mt-6 w-full bg-[#f2010b] text-white font-semibold text-[15.5px] sm:text-[14px] h-[52px] sm:h-auto sm:py-3 rounded-xl hover:opacity-90 hover:shadow-lg hover:shadow-[#f2010b]/25 sm:hover:shadow-none active:scale-[0.98] transition-all flex items-center justify-center",children:"Contact support"}),(0,s.jsxs)("button",{type:"button",onClick:el,className:"mt-7 inline-flex items-center gap-1.5 text-[12.5px] text-gray-400 hover:text-gray-700 transition-colors",children:[(0,s.jsx)(d.n,{size:13}),"Back"]})]}):"verify"===B?(0,s.jsxs)("div",{className:"text-center",children:[(0,s.jsx)("h2",{className:"text-[24px] sm:text-[20px] font-bold text-gray-950 leading-tight tracking-[-0.01em]",children:"Confirm your email"}),(0,s.jsxs)("p",{className:"mt-2.5 text-[13.5px] text-gray-500 leading-relaxed",children:["We sent a six digit code to"," ",(0,s.jsx)("span",{className:"font-semibold text-gray-700 break-all",children:I.trim()}),"."]}),(0,s.jsxs)("form",{onSubmit:er,className:"mt-6",children:[(0,s.jsx)("input",{value:Y,onChange:e=>H(e.target.value.replace(/\D/g,"").slice(0,6)),inputMode:"numeric",autoComplete:"one-time-code",autoFocus:!0,placeholder:"000000","aria-label":"Confirmation code",className:"w-full h-[60px] text-center text-[26px] font-bold tracking-[10px] text-gray-900 bg-gray-50 border border-gray-200 rounded-xl placeholder:text-gray-300 focus:outline-none focus:border-gray-400 focus:bg-white transition-colors"}),O&&(0,s.jsx)("p",{className:"mt-3 text-[12.5px] text-[#f2010b] leading-relaxed",children:O}),(0,s.jsxs)("button",{type:"submit",disabled:R||K||Y.length<6,className:"mt-4 w-full bg-[#f2010b] text-white font-semibold text-[15.5px] sm:text-[14px] h-[52px] sm:h-auto sm:py-3 rounded-xl hover:opacity-90 hover:shadow-lg hover:shadow-[#f2010b]/25 sm:hover:shadow-none active:scale-[0.98] transition-all disabled:opacity-60 disabled:hover:shadow-none disabled:cursor-not-allowed flex items-center justify-center gap-2",children:[R&&(0,s.jsx)(c.N,{size:16,className:"animate-spin"}),K&&(0,s.jsx)(u.J,{size:16,weight:"bold"}),(0,s.jsx)("span",{children:K?"Confirmed":"Confirm and continue"})]})]}),(0,s.jsxs)("p",{className:"mt-4 text-[12.5px] text-gray-500",children:["Did not arrive? Check your spam folder."," ",(0,s.jsx)("button",{type:"button",onClick:en,disabled:X>0||R||K,className:"font-semibold text-gray-700 underline decoration-gray-300 underline-offset-2 hover:text-[#f2010b] disabled:text-gray-400 disabled:no-underline disabled:cursor-default transition-colors",children:X>0?"Send a new code in ".concat(X,"s"):"Send a new code"})]}),(0,s.jsxs)("button",{type:"button",onClick:el,className:"mt-7 inline-flex items-center gap-1.5 text-[12.5px] text-gray-400 hover:text-gray-700 transition-colors",children:[(0,s.jsx)(d.n,{size:13}),"Use a different address"]})]}):"reset"===B?(0,s.jsxs)("div",{className:"text-center",children:[(0,s.jsx)("h2",{className:"text-[24px] sm:text-[20px] font-bold text-gray-950 leading-tight tracking-[-0.01em]",children:"Reset your password"}),(0,s.jsx)("p",{className:"mt-2.5 text-[13.5px] text-gray-500 leading-relaxed",children:"Give us the address you signed up with and we will send a six digit code to it."}),(0,s.jsxs)("form",{onSubmit:eo,className:"mt-6 text-left",children:[(0,s.jsx)("label",{className:"block text-[11px] uppercase tracking-[0.12em] text-gray-500 sm:normal-case sm:tracking-normal sm:text-[12px] font-semibold sm:text-gray-600 mb-1.5",children:"Email address"}),(0,s.jsx)("input",{type:"email",value:I,onChange:e=>A(e.target.value),placeholder:"[email protected]",autoComplete:"username",autoFocus:!0,className:"w-full bg-gray-50 border border-gray-100 sm:bg-white sm:border-gray-200 rounded-xl px-4 sm:px-3.5 h-[52px] sm:h-auto sm:py-2.5 text-[13px] text-gray-900 placeholder-gray-400 focus:outline-none focus:bg-white focus:border-[#f2010b]/50 focus:ring-2 focus:ring-[#f2010b]/10 transition-all"}),O&&(0,s.jsx)("p",{className:"mt-3 text-[12.5px] text-[#f2010b] leading-relaxed text-center",children:O}),(0,s.jsxs)("button",{type:"submit",disabled:R,className:"mt-4 w-full bg-[#f2010b] text-white font-semibold text-[15.5px] sm:text-[14px] h-[52px] sm:h-auto sm:py-3 rounded-xl hover:opacity-90 hover:shadow-lg hover:shadow-[#f2010b]/25
1sm:hover:shadow-none active:scale-[0.98] transition-all disabled:opacity-60 disabled:hover:shadow-none disabled:cursor-not-allowed flex items-center justify-center gap-2",children:[R&&(0,s.jsx)(c.N,{size:16,className:"animate-spin"}),(0,s.jsx)("span",{children:"Send the code"})]})]}),(0,s.jsxs)("button",{type:"button",onClick:el,className:"mt-7 inline-flex items-center gap-1.5 text-[12.5px] text-gray-400 hover:text-gray-700 transition-colors",children:[(0,s.jsx)(d.n,{size:13}),"Back to sign in"]})]}):"reset-code"===B?(0,s.jsxs)("div",{className:"text-center",children:[(0,s.jsx)("h2",{className:"text-[24px] sm:text-[20px] font-bold text-gray-950 leading-tight tracking-[-0.01em]",children:"Choose a new password"}),(0,s.jsxs)("p",{className:"mt-2.5 text-[13.5px] text-gray-500 leading-relaxed",children:["If there is an account for"," ",(0,s.jsx)("span",{className:"font-semibold text-gray-700 break-all",children:I.trim()}),", a six digit code is on its way to it."]}),(0,s.jsxs)("form",{onSubmit:ei,className:"mt-6",children:[(0,s.jsx)("input",{value:Y,onChange:e=>H(e.target.value.replace(/\D/g,"").slice(0,6)),inputMode:"numeric",autoComplete:"one-time-code",autoFocus:!0,placeholder:"000000","aria-label":"Reset code",className:"w-full h-[60px] text-center text-[26px] font-bold tracking-[10px] text-gray-900 bg-gray-50 border border-gray-200 rounded-xl placeholder:text-gray-300 focus:outline-none focus:border-gray-400 focus:bg-white transition-colors"}),(0,s.jsxs)("div",{className:"mt-4 text-left",children:[(0,s.jsx)("label",{className:"block text-[11px] uppercase tracking-[0.12em] text-gray-500 sm:normal-case sm:tracking-normal sm:text-[12px] font-semibold sm:text-gray-600 mb-1.5",children:"New password"}),(0,s.jsxs)("div",{className:"relative",children:[(0,s.jsx)("input",{type:S?"text":"password",value:Z,onChange:e=>V(e.target.value),placeholder:"At least 8 characters",autoComplete:"new-password",className:"w-full bg-gray-50 border border-gray-100 sm:bg-white sm:border-gray-200 rounded-xl px-4 sm:px-3.5 h-[52px] sm:h-auto sm:py-2.5 pr-12 sm:pr-10 text-[13px] text-gray-900 placeholder-gray-400 focus:outline-none focus:bg-white focus:border-[#f2010b]/50 focus:ring-2 focus:ring-[#f2010b]/10 transition-all"}),(0,s.jsxs)("button",{type:"button",onClick:()=>T(e=>!e),"aria-label":S?"Hide password":"Show password",className:"absolute right-1.5 sm:right-3 top-1/2 -translate-y-1/2 w-11 h-11 sm:w-auto sm:h-auto rounded-lg hover:bg-gray-200/60 sm:hover:bg-transparent flex items-center justify-center text-gray-400 hover:text-gray-600 transition-colors",children:[S?(0,s.jsx)(h.L,{size:16,className:"sm:hidden"}):(0,s.jsx)(m.k,{size:16,className:"sm:hidden"}),S?(0,s.jsx)(h.L,{size:14,className:"hidden sm:block"}):(0,s.jsx)(m.k,{size:14,className:"hidden sm:block"})]})]})]}),(0,s.jsxs)("div",{className:"mt-3.5 text-left",children:[(0,s.jsx)("label",{className:"block text-[11px] uppercase tracking-[0.12em] text-gray-500 sm:normal-case sm:tracking-normal sm:text-[12px] font-semibold sm:text-gray-600 mb-1.5",children:"Repeat it"}),(0,s.jsx)("input",{type:S?"text":"password",value:ee,onChange:e=>et(e.target.value),placeholder:"â¢â¢â¢â¢â¢â¢â¢â¢",autoComplete:"new-password",className:"w-full bg-gray-50 border border-gray-100 sm:bg-white sm:border-gray-200 rounded-xl px-4 sm:px-3.5 h-[52px] sm:h-auto sm:py-2.5 text-[13px] text-gray-900 placeholder-gray-400 focus:outline-none focus:bg-white focus:border-[#f2010b]/50 focus:ring-2 focus:ring-[#f2010b]/10 transition-all"})]}),O&&(0,s.jsx)("p",{className:"mt-3 text-[12.5px] text-[#f2010b] leading-relaxed",children:O}),(0,s.jsxs)("button",{type:"submit",disabled:R||K||Y.length<6||!Z||!ee,className:"mt-4 w-full bg-[#f2010b] text-white font-semibold text-[15.5px] sm:text-[14px] h-[52px] sm:h-auto sm:py-3 rounded-xl hover:opacity-90 hover:shadow-lg hover:shadow-[#f2010b]/25 sm:hover:shadow-none active:scale-[0.98] transition-all disabled:opacity-60 disabled:hover:shadow-none disabled:cursor-not-allowed flex items-center justify-center gap-2",children:[R&&(0,s.jsx)(c.N,{size:16,className:"animate-spin"}),K&&(0,s.jsx)(u.J,{size:16,weight:"bold"}),(0,s.jsx)("span",{children:K?"Password changed":"Set password and sign in"})]})]}),(0,s.jsxs)("p",{className:"mt-4 text-[12.5px] text-gray-500",children:["Did not arrive? Check your spam folder."," ",(0,s.jsx)("button",{type:"button",onClick:en,disabled:X>0||R||K,className:"font-semibold text-gray-700 underline decoration-gray-300 underline-offset-2 hover:text-[#f2010b] disabled:text-gray-400 disabled:no-underline disabled:cursor-default transition-colors",children:X>0?"Send a new code in ".concat(X,"s"):"Send a new code"})]}),(0,s.jsxs)("button",{type:"button",onClick:el,className:"mt-7 inline-flex items-center gap-1.5 text-[12.5px] text-gray-400 hover:text-gray-700 transition-colors",children:[(0,s.jsx)(d.n,{size:13}),"Back to sign in"]})]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("div",{className:"sm:hidden mb-7 text-center",children:[(0,s.jsx)("h1",{className:"text-[27px] font-bold text-gray-950 leading-tight tracking-[-0.01em]",children:"login"===k?"Welcome back":"advertiser"===j?"Create your advertiser account":"Create your account"}),(0,s.jsx)("p",{className:"mt-2.5 text-[13.5px] text-gray-500 leading-relaxed",children:"login"===k?"Sign in to pick up where you left off.":"advertiser"===j?"Fund a balance, set your price per thousand, and only pay for attention that was really there.":"Half of what advertisers pay for your attention comes to you."})]}),(0,s.jsxs)("div",{className:"relative flex bg-gray-100 rounded-xl p-1 mb-6",children:[(0,s.jsx)("span",{className:"absolute top-1 bottom-1 left-1 w-[calc(50%-4px)] rounded-lg bg-white shadow-sm transition-transform duration-[350ms] ease-[cubic-bezier(0.16,1,0.3,1)]",style:{transform:"login"===k?"translateX(0)":"translateX(100%)"}}),["login","register"].map(e=>(0,s.jsx)("button",{onClick:()=>{C(e),U(null),_(""),A(""),F(""),T(!1)},className:"relative z-10 flex-1 h-12 sm:h-auto sm:py-2 text-[14px] sm:text-[13px] font-semibold rounded-lg transition-colors duration-200 ".concat(k===e?"text-gray-900":"text-gray-500 hover:text-gray-700"),children:"login"===e?"Sign in":"Create account"},e))]}),(0,s.jsxs)("form",{onSubmit:ea,children:[(0,s.jsx)("div",{className:"grid transition-[grid-template-rows] duration-[350ms] ease-[cubic-bezier(0.16,1,0.3,1)] ".concat("register"===k?"grid-rows-[1fr]":"grid-rows-[0fr]"),children:(0,s.jsx)("div",{className:"overflow-hidden",children:(0,s.jsxs)("div",{className:"pb-4 sm:pb-3.5 transition-opacity duration-200 ".concat("register"===k?"opacity-100 delay-100":"opacity-0"),children:[(0,s.jsx)("label",{className:"block text-[11px] uppercase tracking-[0.12em] text-gray-500 sm:normal-case sm:tracking-normal sm:text-[12px] font-semibold sm:text-gray-600 mb-1.5 sm:mb-1.5",children:"Display name"}),(0,s.jsx)("input",{value:z,onChange:e=>_(e.target.value),placeholder:"John Doe",autoComplete:"name",tabIndex:"register"===k?0:-1,className:"w-full bg-gray-50 border border-gray-100 sm:bg-white sm:border-gray-200 rounded-xl px-4 sm:px-3.5 h-[52px] sm:h-auto sm:py-2.5 text-[13px] text-gray-900 placeholder-gray-400 focus:outline-none focus:bg-white focus:border-[#f2010b]/50 focus:ring-2 focus:ring-[#f2010b]/10 transition-all"})]})})}),(0,s.jsxs)("div",{className:"pb-4 sm:pb-3.5",children:[(0,s.jsx)("label",{className:"block text-[11px] uppercase tracking-[0.12em] text-gray-500 sm:normal-case sm:tracking-normal sm:text-[12px] font-semibold sm:text-gray-600 mb-1.5 sm:mb-1.5",children:"Email address"}),(0,s.jsx)("input",{type:"email",value:I,onChange:e=>A(e.target.value),placeholder:"[email protected]",autoComplete:"register"===k?"email":"username",className:"w-full bg-gray-50 border border-gray-100 sm:bg-white sm:border-gray-200 rounded-xl px-4 sm:px-3.5 h-[52px] sm:h-auto sm:py-2.5 text-[13px] text-gray-900 placeholder-gray-400 focus:outline-none focus:bg-white focus:border-[#f2010b]/50 focus:ring-2 focus:ring-[#f2010b]/10 transition-all"})]}),(0,s.jsxs)("div",{className:"pb-4 sm:pb-3.5",children:[(0,s.jsx)("label",{className:"block text-[11px] uppercase tracking-[0.12em] text-gray-500 sm:normal-case sm:tracking-normal sm:text-[12px] font-semibold sm:text-gray-600 mb-1.5 sm:mb-1.5",children:"Password"}),(0,s.jsxs)("div",{className:"relative",children:[(0,s.jsx)("input",{type:S?"text":"password",value:E,onChange:e=>F(e.target.value),placeholder:"â¢â¢â¢â¢â¢â¢â¢â¢",autoComplete:"register"===k?"new-password":"current-password",className:"w-full bg-gray-50 border border-gray-100 sm:bg-white sm:border-gray-200 rounded-xl px-4 sm:px-3.5 h-[52px] sm:h-auto sm:py-2.5 pr-12 sm:pr-10 text-[13px] text-gray-900 placeholder-gray-400 focus:outline-none focus:bg-white focus:border-[#f2010b]/50 focus:ring-2 focus:ring-[#f2010b]/10 transition-all"}),(0,s.jsxs)("button",{type:"button",onClick:()=>T(e=>!e),"aria-label":S?"Hide password":"Show password",className:"absolute right-1.5 sm:right-3 top-1/2 -translate-y-1/2 w-11 h-11 sm:w-auto
1sm:h-auto rounded-lg hover:bg-gray-200/60 sm:hover:bg-transparent flex items-center justify-center text-gray-400 hover:text-gray-600 transition-colors",children:[S?(0,s.jsx)(h.L,{size:16,className:"sm:hidden"}):(0,s.jsx)(m.k,{size:16,className:"sm:hidden"}),S?(0,s.jsx)(h.L,{size:14,className:"hidden sm:block"}):(0,s.jsx)(m.k,{size:14,className:"hidden sm:block"})]})]})]}),(0,s.jsx)("div",{className:"grid transition-[grid-template-rows] duration-[350ms] ease-[cubic-bezier(0.16,1,0.3,1)] ".concat("login"===k?"grid-rows-[1fr]":"grid-rows-[0fr]"),children:(0,s.jsx)("div",{className:"overflow-hidden",children:(0,s.jsx)("div",{className:"pb-4 sm:pb-3.5 text-right transition-opacity duration-200 ".concat("login"===k?"opacity-100 delay-100":"opacity-0"),children:(0,s.jsx)("button",{type:"button",tabIndex:"login"===k?0:-1,onClick:()=>{U(null),M("reset")},className:"h-9 sm:h-auto px-2 -mr-2 sm:mr-0 sm:px-0 rounded-lg hover:bg-gray-50 sm:hover:bg-transparent text-[12.5px] sm:text-[12px] text-[#f2010b] font-medium sm:hover:underline transition-colors",children:"Forgot password?"})})})}),(0,s.jsx)("div",{className:"grid transition-[grid-template-rows] duration-[350ms] ease-[cubic-bezier(0.16,1,0.3,1)] ".concat("register"===k?"grid-rows-[1fr]":"grid-rows-[0fr]"),children:(0,s.jsx)("div",{className:"overflow-hidden",children:(0,s.jsxs)("div",{className:"pb-4 sm:pb-3.5 transition-opacity duration-200 ".concat("register"===k?"opacity-100 delay-100":"opacity-0"),children:[(0,s.jsxs)("label",{className:"block text-[11px] uppercase tracking-[0.12em] text-gray-500 sm:normal-case sm:tracking-normal sm:text-[12px] font-semibold sm:text-gray-600 mb-1.5 sm:mb-1.5",children:["Referral code ",(0,s.jsx)("span",{className:"font-normal text-gray-400",children:"(optional)"})]}),(0,s.jsx)("input",{value:P,onChange:e=>D(e.target.value),placeholder:"e.g. 79B1DB6C",tabIndex:"register"===k?0:-1,className:"w-full bg-gray-50 border border-gray-100 sm:bg-white sm:border-gray-200 rounded-xl px-4 sm:px-3.5 h-[52px] sm:h-auto sm:py-2.5 text-[13px] text-gray-900 placeholder-gray-400 focus:outline-none focus:bg-white focus:border-[#f2010b]/50 focus:ring-2 focus:ring-[#f2010b]/10 transition-all uppercase placeholder:normal-case"})]})})}),O&&(0,s.jsx)("p",{className:"text-[12px] text-red-500 text-center pb-3.5",children:O}),(0,s.jsx)("div",{className:"grid transition-[grid-template-rows] duration-[350ms] ease-[cubic-bezier(0.16,1,0.3,1)] ".concat("register"===k?"grid-rows-[1fr]":"grid-rows-[0fr]"),children:(0,s.jsx)("div",{className:"overflow-hidden",children:(0,s.jsxs)("label",{className:"flex items-start gap-2.5 pb-3.5 cursor-pointer select-none group transition-opacity duration-200 ".concat("register"===k?"opacity-100 delay-100":"opacity-0"),children:[(0,s.jsx)("input",{type:"checkbox",checked:$,onChange:e=>L(e.target.checked),tabIndex:"register"===k?0:-1,className:"sr-only peer"}),(0,s.jsx)("span",{className:"mt-px w-[17px] h-[17px] rounded-[5px] border-2 flex items-center justify-center shrink-0 transition-colors ".concat($?"bg-[#f2010b] border-[#f2010b]":"border-gray-300 group-hover:border-gray-400 peer-focus-visible:border-[#f2010b]"),children:$&&(0,s.jsx)(u.J,{size:11,weight:"bold",className:"text-white"})}),(0,s.jsxs)("span",{className:"min-w-0 text-[11.5px] text-gray-500 leading-relaxed",children:["I have read and agree to the"," ",(0,s.jsx)(o(),{href:"/terms",onClick:e=>e.stopPropagation(),className:"whitespace-nowrap text-gray-700 font-semibold underline decoration-gray-300 underline-offset-2 hover:text-[#f2010b] transition-colors",children:"Terms of Service"})," ","and"," ",(0,s.jsx)(o(),{href:"/privacy",onClick:e=>e.stopPropagation(),className:"whitespace-nowrap text-gray-700 font-semibold underline decoration-gray-300 underline-offset-2 hover:text-[#f2010b] transition-colors",children:"Privacy Policy"}),"."]})]})})}),(0,s.jsxs)("button",{type:"submit",disabled:R||"register"===k&&!$,className:"w-full bg-[#f2010b] text-white font-semibold text-[15.5px] sm:text-[14px] h-[52px] sm:h-auto sm:py-3 rounded-xl hover:opacity-90 hover:shadow-lg hover:shadow-[#f2010b]/25
1sm:hover:shadow-none active:scale-[0.98] transition-all disabled:opacity-60 disabled:hover:shadow-none disabled:cursor-not-allowed flex items-center justify-center gap-2",children:[R&&(0,s.jsx)(c.N,{size:16,className:"animate-spin"}),(0,s.jsx)("span",{className:"transition-opacity duration-150",children:"login"===k?"Sign in":"Create account"})]})]})]})}),(0,s.jsxs)("p",{className:"sm:hidden shrink-0 pt-5 border-t border-gray-100 flex items-center justify-center gap-2 text-[11.5px] text-gray-400 text-center",children:[(0,s.jsx)(p.o,{size:14,className:"shrink-0"}),"Payments run through Stripe. Earning never needs a card."]})]})})]})}},32021:(e,t,a)=>{function s(){return"undefined"!=typeof document&&document.cookie.split("; ").includes("ops_view=1")}function r(){return!0}a.d(t,{W:()=>r,X:()=>s})},33769:(e,t,a)=>{a.d(t,{D4:()=>i,KU:()=>p,T$:()=>h,UR:()=>s,Yg:()=>u,ap:()=>c,bc:()=>r,cK:()=>g,im:()=>o,l0:()=>n,o6:()=>x,qj:()=>d});let s="/",r="panel",n="auth",o="store",i="affiliates",l={publisher:"earn",advertiser:"advertise"};function d(e){return"/?".concat(n,"=").concat(l[e])}function c(e){for(let t of Object.keys(l))if(l[t]===e)return t;return null}let u="signout";function h(){return"/?".concat(u,"=1")}let m={client:"earn",advertiser:"advertise"};function p(e){return"/?".concat(r,"=").concat(m[e])}function x(e){return m[e]}function g(e){for(let t of Object.keys(m))if(m[t]===e)return t;return null}},35132:(e,t,a)=>{a.d(t,{WD:()=>r,hT:()=>n});let s="signup_intent";function r(e){return{[s]:e}}function n(e){return"advertiser"===(null==e?void 0:e[s])?"advertiser":"publisher"}},37862:(e,t,a)=>{a.d(t,{Footer:()=>N});var s=a(95155),r=a(52619),n=a.n(r),o=a(45214),i=a(91469),l=a(31928),d=a(3445),c=a(11951),u=a(15651),h=a(14497),m=a(45052),p=a(4261),x=a(12115),g=a(62861),f=a(47982),b=a(22747),y=a(43541);function w(){let[e,t]=(0,x.useState)(""),[a,r]=(0,x.useState)("idle"),[n,o]=(0,x.useState)(null),[i,l]=(0,x.useState)(""),d=(0,y.xf)(e);async function c(t){if(t.preventDefault(),d&&"sending"!==a){r("sending"),o(null);try{let t=await fetch("/api/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:e,website:i})}),a=await t.json().catch(()=>({}));if(!t.ok||!(null==a?void 0:a.ok)){var s;r("error"),o(null!=(s=null==a?void 0:a.error)?s:"That did not go through. Try again in a moment");return}r("done")}catch(e){r("error"),o("Could not reach us. Check your connection and try again")}}}let u=(0,s.jsxs)("div",{className:"min-w-0 lg:w-[340px] lg:shrink-0",children:[(0,s.jsx)("p",{className:"text-[11px] font-semibold text-gray-950 uppercase tracking-[0.14em]",children:"Updates"}),(0,s.jsx)("p",{className:"mt-1.5 text-[12.5px] text-gray-500 leading-relaxed",children:"News and product updates. No more than we would want to read ourselves."})]});return"done"===a?(0,s.jsxs)("div",{className:"mt-10 pt-8 border-t border-gray-100 flex flex-col lg:flex-row lg:items-center gap-4 lg:gap-10",children:[u,(0,s.jsxs)("div",{className:"flex-1 min-w-0 flex items-center gap-2 text-[13px] text-gray-500",children:[(0,s.jsx)(g.r,{size:16,weight:"fill",className:"text-emerald-500 shrink-0"}),(0,s.jsx)("span",{children:"Thanks. We will send updates to that address, and every email has a way out."})]})]}):(0,s.jsxs)("form",{onSubmit:c,className:"mt-10 pt-8 border-t border-gray-100 flex flex-col lg:flex-row lg:items-center gap-4 lg:gap-10",children:[u,(0,s.jsxs)("div",{className:"absolute left-[-9999px] w-px h-px overflow-hidden","aria-hidden":!0,children:[(0,s.jsx)("label",{htmlFor:"footer-website",children:"Website"}),(0,s.jsx)("input",{id:"footer-website",name:"website",type:"text",tabIndex:-1,autoComplete:"off",value:i,onChange:e=>l(e.target.value)})]}),(0,s.jsxs)("div",{className:"flex-1 min-w-0",children:[(0,s.jsxs)("div",{className:"flex items-center gap-2",children:[(0,s.jsx)("input",{type:"email",inputMode:"email",autoComplete:"email",value:e,onChange:e=>{t(e.target.value),"error"===a&&(r("idle"),o(null))},placeholder:"[email protected]","aria-label":"Your email address",className:"flex-1 min-w-0 h-11 px-4 rounded-xl border border-gray-200 bg-white text-[13.5px] text-gray-900 placeholder:text-gray-400 focus:outline-none focus:border-gray-400 transition-colors"}),(0,s.jsx)("button",{type:"submit",disabled:!d||"sending"===a,className:"shrink-0 h-11 px-5 rounded-xl bg-[#f2010b] text-white text-[13.5px] font-bold flex items-center justify-center gap-2 hover:bg-[#d2010a] active:scale-[0.97] transition-all disabled:opacity-30 disabled:cursor-not-allowed disabled:hover:bg-[#f2010b]",children:"sending"===a?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(f.N,{size:15,className:"animate-spin"})," Sending"]}):(0,s.jsxs)(s.Fragment,{children:["Subscribe ",(0,s.jsx)(b.Q,{size:15,weight:"bold"})]})})]}),n&&(0,s.jsx)("p",{className:"mt-2 text-[12px] text-[#f2010b] leading-relaxed",children:n})]})]})}let v=new Date().getFullYear(),j=[{title:"Product",links:[...m.dy.map(e=>({label:e.label,href:"/".concat(e.slug)})),{label:"Affiliates",href:"/affiliates"}]},{title:"Resources",links:[{label:"FAQ",href:"/faq"},{label:"Blog",href:"/blog"},{label:"Where the money goes",href:"/blog/where-your-browsing-money-goes"},{label:"Verified impressions",href:"/blog/what-counts-as-a-verified-impression"}]},{title:"Legal",links:[{label:"Privacy policy",href:"/privacy"},{label:"Cookies policy",href:"/cookies-policy"},{label:"Terms of service",href:"/terms"},{label:"Advertiser terms",href:"/advertiser-terms"},{label:"Affiliate terms",href:"/affiliate-terms"}]}];
1function N(e){let{onDebugAuth:t,onAdvertiserPanel:a,onAdminPanel:r,onProductPage:m}=e,x=[{show:t,Icon:o.z,label:"debug auth",onClick:t},{show:a,Icon:i.R,label:"advertiser panel",onClick:a},{show:r,Icon:l.c,label:"admin panel",onClick:r},{show:m,Icon:d.f,label:"product page",onClick:m}].filter(e=>e.show);return(0,s.jsx)("footer",{className:"border-t border-gray-100 bg-white",children:(0,s.jsxs)("div",{className:"max-w-7xl mx-auto px-6 lg:px-8 pt-12 pb-8 sm:pt-16",children:[(0,s.jsxs)("div",{className:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-12 gap-x-8 gap-y-10",children:[(0,s.jsxs)("div",{className:"col-span-2 sm:col-span-3 lg:col-span-5 lg:pr-10",children:[(0,s.jsx)(n(),{href:(0,p.B)("/"),className:"inline-block",children:(0,s.jsx)("img",{src:"/tributlylogo.svg",alt:"Tributly",className:"h-7 w-auto"})}),(0,s.jsx)("p",{className:"mt-4 text-[13px] text-gray-500 leading-relaxed max-w-[300px]",children:"Your AI tools and your browsing already sell ads. Tributly gives you a share of what advertisers pay for your attention, in cash."}),(0,s.jsx)("a",{href:"mailto:[email protected]",className:"mt-5 inline-block text-[13px] font-semibold text-gray-950 hover:text-[#f2010b] transition-colors",children:"[email protected]"})]}),j.map((e,t)=>{let a=t===j.length-1&&j.length%2==1;return(0,s.jsxs)("div",{className:"".concat(a?"col-span-2 sm:col-span-1":""," lg:col-span-2 last:lg:col-span-3"),children:[(0,s.jsx)("p",{className:"text-[11px] font-semibold text-gray-950 uppercase tracking-[0.14em] mb-4",children:e.title}),(0,s.jsxs)("ul",{className:"grid gap-y-2.5 ".concat(a?"grid-cols-2 sm:grid-cols-1 gap-x-8":""),children:[e.links.map(e=>(0,s.jsx)("li",{children:(0,s.jsx)(n(),{href:(0,p.B)(e.href),className:"text-[13px] text-gray-500 hover:text-[#f2010b] transition-colors",children:e.label})},e.href)),"Legal"===e.title&&(0,s.jsx)("li",{children:(0,s.jsx)("button",{type:"button",onClick:c.Ej,className:"text-[13px] text-gray-500 hover:text-[#f2010b] transition-colors",children:"Cookie settings"})})]})]},e.title)})]}),(0,s.jsx)(w,{}),(0,s.jsxs)("div",{className:"mt-12 pt-8 border-t border-gray-100",children:[(0,s.jsx)("div",{className:"grid grid-cols-2 lg:grid-cols-4 gap-x-4 gap-y-7 lg:divide-x lg:divide-gray-100",children:[{label:"Payments and payouts",value:"Stripe"},{label:"Currency",value:"USD"},{label:"Minimum payout",value:"$".concat(u.Yf)},{label:"Where it runs",value:"Free for VS Code, Chrome and Edge"}].map(e=>{let{label:t,value:a}=e;return(0,s.jsxs)("div",{className:"lg:px-6 lg:first:pl-0 lg:last:pr-0",children:[(0,s.jsx)("p",{className:"text-[10px] font-semibold text-gray-400 uppercase tracking-[0.14em]",children:t}),(0,s.jsx)("p",{className:"mt-1.5 text-[13px] font-semibold text-gray-950",children:a})]},t)})}),(0,s.jsxs)("p",{className:"mt-9 text-[11.5px] text-gray-400 leading-[1.85]",children:["Tributly is an advertising platform, not a bank. Card payments and payouts run through Stripe, and card details are entered on Stripe's own checkout rather than on our servers. Earning never requires a card. Payouts are funded by verified impressions only, so what an account earns depends on how much it browses and what advertisers are paying at the time. Most people should earn ",h.xD," a month for around"," ",h.id," hours of browsing a day, and earning is capped at $",u.cu.toFixed(2)," a day and $",u.q3.toFixed(2)," a week, so nobody earns more than $",h.S1," a month for now. That is an estimate from our own ad rates rather than an average of real results, because nobody has been earning long enough yet for there to be an average; the full basis is in the"," ",(0,s.jsx)(n(),{href:(0,p.B)("/faq"),className:"text-gray-500 underline decoration-gray-200 underline-offset-2 hover:text-[#f2010b] hover:decoration-[#f2010b] transition-colors",children:"FAQ"}),". Every campaign is reviewed before it is delivered. The operating entity and its registered address are stated in the"," ",(0,s.jsx)(n(),{href:(0,p.B)("/terms"),className:"text-gray-500 underline decoration-gray-200 underline-offset-2 hover:text-[#f2010b] hover:decoration-[#f2010b] transition-colors",children:"Terms of service"}),"."]}),(0,s.jsxs)("p",{className:"mt-8 pt-6 border-t border-gray-100 text-[12px] text-gray-500",children:["\xa9 ",v," Tributly. All rights reserved."]})]}),x.length>0&&(0,s.jsx)("div",{className:"mt-6 flex flex-wrap items-center gap-2",children:x.map(e=>{let{Icon:t,label:a,onClick:r}=e;return(0,s.jsxs)("button",{onClick:r,className:"flex items-center gap-1.5 text-[11px] font-medium text-gray-400 border border-dashed border-gray-200 rounded-lg px-2.5 py-1 hover:border-gray-400 hover:text-gray-600 transition-all",title:a,children:[(0,s.jsx)(t,{size:11}),a]},a)})})]})})}},45052:(e,t,a)=>{a.d(t,{dy:()=>i});var s=a(15651),r=a(14497);let n="".concat(100*s.E_,"%"),o="$".concat(s.O3.toFixed(2)),i=[{slug:"how-it-works",label:"How
1it works",title:"How Tributly works",description:"The full chain, from an advertiser funding a campaign to the cents landing in a viewer's balance: one auction, one sponsored slot, one ledger entry.",lede:"One sponsored strip, one live auction, one ledger write. Nothing in the chain below is a promise about the future; it is what happens on every page view today.",body:[{kind:"p",text:"Every page you open already runs an ad auction. An advertiser is charged, a slot is filled, and somebody is paid for your attention. Tributly does not change that machinery. It changes who is on the receiving end of it, and everything else here follows from that one decision."},{kind:"h",text:"The chain, end to end"},{kind:"steps",items:[{title:"An advertiser funds a campaign",text:"Money goes in first, through Stripe, from $".concat(s.F4,". A campaign can only ever spend a balance that has already been paid, which is why nothing here runs on credit and no invoice arrives later.")},{title:"They name a bid, not a price",text:"A bid is a CPM: what the advertiser will pay for a thousand verified views. The floor is ".concat(o," and campaigns compete above it. The highest live bid holds the top slot, so the rate a viewer earns is set by demand rather than by us.")},{title:"The campaign is reviewed before it runs",text:"Every campaign is checked before a single impression is served. Its budget is held while it waits, and nothing is charged if it is refused."},{title:"The extension fills one slot",text:"A single 44px sponsored strip at the top of the page, for ten seconds. The page is pushed down to make room rather than drawn over, and the slot only counts on the tab actually in front of you."},{title:"The impression is verified",text:"It has to have rendered, on an active tab, and no closer than ".concat(s.Qt," seconds to the last one credited to that account. The interval is enforced on our side, where the browser cannot argue with it.")},{title:"One transaction, both sides",text:"The advertiser is charged and the viewer credited in the same double-entry write. Up to ".concat(n," of the charge goes to the person who saw the ad. No balance exists anywhere that was not debited from a campaign, which is what makes the two sides add up.")},{title:"The viewer cashes out",text:"From $".concat(s.Yf,", through Stripe, to their own account.")}]},{kind:"h",text:"Why a click costs more than a view"},{kind:"p",text:"A click is billed as ".concat(s.T$," views. That is not a surcharge, it is what a click is worth relative to a view in any display market, and it means a campaign that gets clicked spends its budget over far fewer impressions than it bought. On those charges the platform keeps more than half, which is the headroom that funds payouts on the quiet days.")},{kind:"h",text:"Why earnings are capped"},{kind:"p",text:"An account earns at most $".concat(s.cu.toFixed(2)," a day and $").concat(s.q3.toFixed(2)," a week, counted across every place it earns. ").concat(s.SC," A cap on a payout looks like a restriction and works like a guarantee: it is the mechanism that keeps every credited cent backed by an advertiser who was actually billed. A product that pays unlimited amounts per person is either paying out of investor money or not paying at all.")},{kind:"h",text:"Two sides, one ledger"},{kind:"p",text:"The same event settles both halves of this product, so the two audiences are reading about one mechanism from opposite ends of it."},{kind:"list",items:["If you are here to earn, the parts that matter are what the extension does to a page, what a view is worth, and when the money is yours.","If you are here to buy attention, the parts that matter are the auction, the review queue, and what has to be true before you are billed."]},{kind:"note",text:"Tributly is operated by Cortallis Sp. z o.o. in Warsaw, Poland. Card payments and payouts run through Stripe, and card details are entered on Stripe's own checkout rather than on our servers."}]},{slug:"for-users",label:"For users",title:"What you get for browsing",description:"What the Tributly extension changes about a page, what a verified view is worth, when the money is yours, and what is collected to prove it was real.",lede:"You install one extension and then browse the way you already do. What follows is what changes, what it pays, and where the ceiling is.",body:[{kind:"h",text:"What changes on a page"},{kind:"p",text:"One 44px sponsored strip appears at the top of a page and stays for ten seconds. The page is pushed down to make room for it rather than covered by it, so nothing you were reading is hidden. There are no popups, no redirects, no interstitials, and no second slot further down."},{kind:"h",text:"What a view is worth"},{kind:"p",text:"Up to ".concat(n," of what the advertiser was charged for that view is credited to you. Bids start at ").concat(o," for a thous
1and views, so a single view is a fraction of a cent. That is the honest unit of this industry, and it only turns into money in aggregate, which is why the balance is paid out in one lump rather than trickled to a bank account.")},{kind:"facts",items:[{label:"Revenue share",value:"Up to ".concat(n)},{label:"Daily cap",value:"$".concat(s.cu.toFixed(2))},{label:"Weekly cap",value:"$".concat(s.q3.toFixed(2))},{label:"Minimum payout",value:"$".concat(s.Yf)}]},{kind:"p",text:"Realistic browsing produces coffee money, not a salary. Around ".concat(r.id," hours a day of ordinary use should land at ").concat(r.xD," a month, and it arrives without you doing anything you were not already doing. That is an estimate from our own ad rates rather than an average of real results, because nobody has been earning long enough yet for there to be an average. Anyone quoting a figure that would replace an income is counting something other than ad revenue.")},{kind:"h",text:"Where the ceiling is, and why"},{kind:"p",text:"Credited earnings stop at $".concat(s.cu.toFixed(2)," a day and $").concat(s.q3.toFixed(2)," a week. Both windows are calendar-aligned in UTC, so the day is the UTC date and the week starts Monday at 00:00 UTC. The limit belongs to the account, not to each device or app, so earning in a browser and in an editor on the same day adds up against the one cap. That ceiling is what bounds what one account can be paid, and it is what keeps every payout backed by a real charge. ").concat(s.SC)},{kind:"h",text:"Getting the money out"},{kind:"p",text:"Payouts start at $".concat(s.Yf," and run through Stripe to an account in your name. The floor exists because the cost of sending a transfer does not scale down with its size: a $1 payout costs nearly as much to send as a $50 one, so paying below the floor would come out of the same revenue that funds the payout.")},{kind:"h",text:"What is collected"},{kind:"p",text:"Verification needs to know that an ad rendered, on an active tab, at a given time, and which account to credit. So that is what is collected: a device identifier, whether the slot actually painted, and impression timestamps. Not your history, not the addresses of the pages you open, not their content. The data is never sold, and it is shared only with the providers needed to run the product, such as the payment processor that sends your payout."},{kind:"h",text:"Turning it off"},{kind:"p",text:"Earning mode is a switch in the extension popup. Flip it off and ads stop immediately; flip it back on whenever you want. Nothing accrues while it is off, and nothing is held against you for switching it off."},{kind:"h",text:"Inviting other people"},{kind:"p",text:"Your dashboard has an invite link, and you choose once how it pays. Either a share of what Tributly makes from everyone you bring, ".concat((0,s.Em)(s.mN[0].bps)," to ").concat((0,s.Em)(s.mN[s.mN.length-1].bps)," for as long as they use it, or a one-off $").concat(s.Rn.toFixed(2)," when someone who joined through it earns their first $").concat(s.nG,". Either way the money waits through a ").concat(s.mx," day hold before it moves, which is what makes farming invites expensive, since a fake referral has to keep looking real for a week first.")},{kind:"link",text:"The rates, the tiers and a calculator are on the",label:"affiliate program page",href:"/affiliates"},{kind:"note",text:"Nobody at Tributly will ever ask for your password, and
1you are never charged for anything. Earning does not require a card at any point. Anyone asking you for either is not us."}]},{slug:"for-advertisers",label:"For advertisers",title:"Attention that was actually given",description:"A live CPM auction on opted-in humans, a review queue before delivery, and billing that only fires on a view that rendered on an active tab.",lede:"The hard part of display inventory is not the price. It is whether a person was there. Every rule below exists to make that question answerable before you are billed.",body:[{kind:"p",text:"The people who see your ad on Tributly installed an extension in order to be paid for exactly that, and they are paid out of the same charge that appears on your invoice. It is a plainer arrangement than most inventory: nobody in the chain is pretending the attention was incidental."},{kind:"h",text:"What you are bidding on"},{kind:"p",text:"One slot: a 44px strip at the top of the page, held for ten seconds, on the tab a person is actually looking at. One advertiser holds it at a time. There is no second slot, no sidebar, and no background tab quietly accruing impressions against your budget."},{kind:"h",text:"Where it appears, and what you do not get to choose"},{kind:"p",text:"The strip sits on top of whatever sites our users are already browsing. You do not pick those sites. There is no publisher list, no domain whitelist, no category targeting and no page-level exclusions, because delivery follows the person rather than the page. If site selection is what you are buying, buy it somewhere else; this is not that product and pretending otherwise would waste your budget and our review time."},{kind:"p",text:"What we do run is an exclusion list. The banner never appears on banking, payment, brokerage or crypto services, on government and military domains, on health, pharmacy and crisis-support services, on tax filing and credit bureaus, on sign-in, password and checkout pages anywhere, on childrenâs and school platforms, on gambling, on piracy, or on adult content. Some of that protects users and some of it protects you, and the two mostly point the same way."},{kind:"p",text:"That list is maintained on best effort and it will never be finished. Domains change hands, new sites appear daily, and piracy and adult sites in particular move faster than any list can follow. We add to it continuously, but we do not promise your ad will never land somewhere you would rather it had not. If one bad adjacency is unacceptable to your brand or your regulator, that is a reason not to run here, and we would rather say so before you deposit than after."},{kind:"h",text:"How the auction works"},{kind:"p",text:"You bid a CPM, the amount you will pay for a thousand verified views. The floor is ".concat(o," and campaigns compete above it, with the highest live bid holding the top slot. A single campaign can request up to ").concat(s.d2.toLocaleString("en-US")," views.")},{kind:"p",text:"Delivery is paced rather than burned through at once, and the pacing only ever yields to competition. If nobody is bidding against you, nothing holds your campaign back."},{kind:"h",text:"What you are billed for"},{kind:"p",text:"A view is billable only once it has rendered, on an active tab, and no closer than ".concat(s.Qt," seconds to the last one credited to that account. Those checks run on our side rather than in the extension, so they are not something a modified client can talk its way past. A click is billed as ").concat(s.T$," views, which is what a click is worth against a view rather than a penalty for getting one.")},{kind:"facts",items:[{label:"Bid floor",value:"".concat(o," CPM")},{label:"A click is billed as",value:"".concat(s.T$," views")},{label:"Reach per campaign",value:"Up to ".concat(s.d2.toLocaleString("en-US")," views")},{label:"Deposits",value:"$".concat(s.F4," to $").concat(s.R9.toLocaleString("en-US"))}]},{kind:"h",text:"Review before delivery"},{kind:"p",text:"Every campaign is reviewed before it serves a single impression, usually within a few hours. The budget is held while it waits and released if the campaign is refused, so a rejection costs you nothing but the wait. The same queue is why the slot is worth holding: an advertiser is buying a position next to other reviewed campaigns, not next to whatever cleared an automated filter."},{kind:"h",text:"What the network can carry"},{kind:"p",text:"A slot lasts ten seconds, so one person browsing without a break generates about ".concat(s.C," views an hour. Available reach is that figure against the people actually online, which is the number the panel quotes rather than a total signup count. It moves through the day, and it is the honest ceiling on how fast a budget can be spent.")},{kind:"h",text:"Referring other advertisers"},{kind:"p",text:"Refer an advertiser and, depending on the plan you chose, you earn a share of what we make on their spend for as long as they advertise, or $".concat(s.Fz," of ad credit once they have spent $").concat(s.of,", after the same ").concat(s.mx," day hold. The advertiser you bring gets ").concat(s.DQ/100,"% extra ad credit on their first top-up, up to $").concat(s.Nv,".")},{kind:"link",text:"Both plans are laid out on the",label:"affiliate program page",href:"/affiliates"},{kind:"note",text:"Deposits run through Stripe from $".concat(s.F4,". A campaign can only spend a balance that is already funded, so there is no billing surprise at the end of a month and no credit line to reconcile.")}]},{slug:"extension",label:"The extension",title:"What the extension does, and what it does not",description:"One 44px slot, five permissions, no page content and no browsing history. The full account of what the Tributly extension does inside your browser.",lede:"A browser extension can read every page you open. That is the deal every one of them asks for, and most never say what they do with it. This page is that account for ours.",body:[{kind:"h",text:"What it puts on a page"},{kind:"p",text:"One sponsored strip, 44px tall, at the top of the document, for ten seconds. The page is pushed down rather than covered, so the strip never sits over something you were reading. It does not remove, replace or reprice the site's own ads; it adds one slot of its own and nothing else."},{kind:"h",text:"Where it runs"},{kind:"p",text:"On ordinary sites as you browse them, and explicitly not on tributly.io itself, which is excluded in the manifest. Our own
1site never carries our own inventory, so nothing you see on it is something we were paid to show you."},{kind:"h",text:"The permissions, one by one"},{kind:"p",text:"Five, and this is the whole list. A browser shows them at install time without saying what any of them are for, so here is what each one does here."},{kind:"defs",items:[{term:"storage",text:"Keeps your settings and the earning-mode switch on the device, so the extension remembers whether it should be working."},{term:"tabs and activeTab",text:"Tell the extension which tab is in front of you. That is the entire basis of a verified view, and it is used to know that a tab is active rather than to read what is in it."},{term:"scripting",text:"Inserts the strip into the page. It is what draws the slot, and it is the only thing written into a page you visit."},{term:"alarms",text:"Runs the timers: closing a slot after ten seconds and scheduling the next one without keeping a process awake in between."}]},{kind:"h",text:"What leaves your browser"},{kind:"p",text:"An impression event: that a slot rendered, when it rendered, that it was on an active tab, and a device identifier that ties it to your account. That is what a payout has to be able to prove. The address of the page is not part of it, the content of the page is not part of it, and your history is not part of it."},{kind:"h",text:"What it never does"},{kind:"list",items:["Read, store or transmit the pages you visit.","Touch the site's own advertising, layout or scripts beyond inserting its one slot.","Ask for a password, a card, or access to an account somewhere else.","Keep earning after you switch earning mode off."]},{kind:"h",text:"Turning it off, and off for good"},{kind:"p",text:"The popup has an earning-mode switch that stops ads immediately. Uninstalling removes the strip everywhere at once, the way any extension does. Your balance belongs to the account rather than to the browser, so it survives an uninstall, a new device, and a reinstall."},{kind:"h",text:"Which browsers"},{kind:"p",text:"Chrome and Edge are supported, and both are covered by the same build. Firefox and Safari are next. It is free on every browser, with no paid tier to upgrade to."},{kind:"note",text:"Built on Manifest V3, so it runs on the footing Chrome now requires of every extension: no remotely loaded code, and a background worker that sleeps when nothing is happening rather than sitting resident in your browser."}]}]},48440:(e,t,a)=>{a.d(t,{K6:()=>r,dk:()=>s});let s=!0,r=!0},64119:(e,t,a)=>{a.d(t,{T:()=>g,b:()=>y});var s=a(95155),r=a(12115),n=a(3941),o=a(3278),i=a(31928),l=a(88702),d=a(53847),c=a(62861),u=a(45319),h=a(82589),m=a(51311),p=a(59417),x=a(94117);let g=[{bg:"bg-[#f2010b]",label:"Red"},{bg:"bg-gray-800",label:"Dark"},{bg:"bg-blue-500",label:"Blue"},{bg:"bg-emerald-500",label:"Green"},{bg:"bg-amber-400",label:"Amber"},{bg:"bg-purple-500",label:"Purple"}],f={profile:"Profile",security:"Security",danger:"Danger zone"};function b(e,t){let a=e.message.toLowerCase();return 429===e.status||a.includes("rate limit")||a.includes("too many requests")?"Too many attempts. Please wait a bit and try again.":"verify"===t?400===e.status||401===e.status||a.includes("invalid login credentials")?"Current password is incorrect.":"Could not verify your current password, please try again.":a.includes("should be different")?"New password must be different from the current one.":a.includes("password")&&(a.includes("weak")||a.includes("should be at least")||a.includes("should contain"))?"Choose a stronger password, at least 8 characters.":401===e.status||a.includes("session")||a.includes("jwt")?"Your session has expired. Please refresh the page and try again.":"Could not update password, please try again."}function y(e){var t;let{user:a,initialTab:y="profile",onClose:w,onAccountDeleted:v}=e,[j,N]=(0,r.useState)(y),[k,C]=(0,r.useState)(a.name),[S,T]=(0,r.useState)(null!=(t=a.avatarColor)?t:0),[z,_]=(0,r.useState)(!1),[I,A]=(0,r.useState)(!1),[E,F]=(0,r.useState)(null),[P,D]=(0,r.useState)(""),[O,U]=(0,r.useState)(""),[R,W]=(0,r.useState)(""),[$,L]=(0,r.useState)(!1),[B,M]=(0,r.useState)(!1),[q,J]=(0,r.useState)(null),[Y,H]=(0,r.useState)(!1),[K,Q]=(0,r.useState)(!1),[X,G]=(0,r.useState)(null),[Z,V]=(0,r.useState)(null),[ee,et]=(0,r.useState)(!1),[ea,es]=(0,r.useState)(!1),[er,en]=(0,r.useState)(""),[eo,ei]=(0,r.useState)(""),[el,ed]=(0,r.useState)(!1),[ec,eu]=(0,r.useState)(null);(0,r.useEffect)(()=>{"danger"!==j||Z||ee||Promise.all([n.N.rpc("get_user_available_balance"),n.N.rpc("get_advertiser_wallet_balance"),n.N.rpc("get_my_campaign_ledgers")]).then(e=>{var t,a,s;let[r,n,o]=e,i=(null!=(t=o.data)?t:[]).reduce((e,t)=>
1e+Number(t.remaining_micros||0),0);V({cash:Number(null!=(a=r.data)?a:0),wallet:Number(null!=(s=n.data)?s:0),campaigns:i})}).catch(e=>{console.error("[settings] failed to read balances for delete warning",e),et(!0)})},[j,Z,ee]);let eh=(0,r.useRef)({}),[em,ep]=(0,r.useState)({left:0,width:0});async function ex(){Q(!0),G(null);let{data:e,error:t}=await n.N.rpc("export_own_data");if(Q(!1),t){console.error("[settings] failed to export data",t),G("Could not prepare your data, please try again.");return}let a=new Blob([JSON.stringify(e,null,2)],{type:"application/json"}),s=URL.createObjectURL(a),r=document.createElement("a");r.href=s,r.download="tributly-data-".concat(new Date().toISOString().slice(0,10),".json"),r.click(),URL.revokeObjectURL(s)}async function eg(){let e=k.trim();if(!e)return;_(!0),F(null);let{error:t}=await n.N.auth.updateUser({data:{full_name:e,avatar_color:S}});if(_(!1),t){console.error("[settings] failed to save profile",t),F("Could not save changes, please try again.");return}A(!0),setTimeout(()=>A(!1),2e3)}async function ef(){L(!0),J(null);let{error:e}=await (0,n.o)().auth.signInWithPassword({email:a.email,password:P});if(e){L(!1),J(b(e,"verify"));return}let{error:t}=await n.N.auth.updateUser({password:O});if(L(!1),t){console.error("[settings] failed to update password",t),J(b(t,"update"));return}M(!0),D(""),U(""),W(""),setTimeout(()=>M(!1),2e3)}async function eb(){var e,t;ed(!0),eu(null);let{error:s}=await (0,n.o)().auth.signInWithPassword({email:a.email,password:er});if(s){ed(!1),eu(b(s,"verify"));return}let{data:r}=await n.N.from("withdrawals").select("id").in("status",["pending","paying"]).limit(1);if(r&&r.length>0){ed(!1),eu("A withdrawal is still in review. You can delete your account once it has been paid or returned.");return}let{data:o}=await n.N.auth.getSession(),i=null==(e=o.session)?void 0:e.access_token;i&&await fetch("/api/account/forget-analytics",{method:"POST",headers:{Authorization:"Bearer ".concat(i)}}).catch(e=>console.error("[settings] analytics erase failed",e));let{error:l}=await n.N.rpc("delete_own_account");if(l){console.error("[settings] failed to delete account",l),ed(!1),eu((null!=(t=l.message)?t:"").includes("withdrawal is still in review")?"A withdrawal is still in review. You can delete your account once it has been paid or returned.":"Could not delete your account, please try again.");return}await n.N.auth.signOut(),v()}return(0,r.useLayoutEffect)(()=>{let e=eh.current[j];e&&ep({left:e.offsetLeft,width:e.offsetWidth})},[j]),(0,r.useEffect)(()=>{n.N.auth.getUser().then(e=>{var t,a;let{data:s}=e,r=null==(a=s.user)||null==(t=a.user_metadata)?void 0:t.avatar_color;"number"==typeof r&&r>=0&&r<g.length&&T(r)})},[]),(0,s.jsxs)("div",{className:"fixed inset-0 z-[90] flex items-center justify-center overflow-y-auto overscroll-contain p-3 sm:p-4",children:[(0,s.jsx)("div",{className:"absolute inset-0 bg-black/40 backdrop-blur-sm animate-modal-backdrop-in",onClick:w}),(0,s.jsxs)("div",{className:"relative bg-white rounded-2xl shadow-2xl w-full max-w-md my-auto overflow-hidden flex flex-col max-h-[92vh] sm:max-h-[90vh] animate-modal-panel-in",children:[(0,s.jsxs)("div",{className:"flex items-center justify-between gap-3 px-5 sm:px-7 pt-5 sm:pt-7 pb-5 sm:pb-6 shrink-0",children:[(0,s.jsx)("p",{className:"text-[19px] sm:text-[21px] font-bold text-gray-900",children:"Account settings"}),(0,s.jsx)("button",{onClick:w,className:"w-9 h-9 rounded-xl hover:bg-gray-100 flex items-center justify-center text-gray-400 transition-colors",children:(0,s.jsx)(o.X,{size:17})})]}),(0,s.jsxs)("div",{className:"relative flex border-b border-gray-100 shrink-0 px-5 sm:px-7",children:[(0,s.jsx)("div",{className:"absolute bottom-0 h-0.5 bg-[#f2010b] transition-all duration-300 ease-[cubic-bezier(0.34,1.56,0.64,1)]",style:{left:em.left,width:em.width}}),["profile","security","danger"].map(e=>(0,s.jsx)("button",{ref:t=>{eh.current[e]=t},onClick:()=>N(e),className:"flex-1 py-3 text-[13.5px] font-semibold whitespace-nowrap transition-colors ".concat(j===e?"text-[#f2010b]":"text-gray-400 hover:text-gray-600"),children:f[e]},e))]}),(0,s.jsx)("div",{className:"overflow-y-auto flex-1",children:(0,s.jsx)("div",{className:"animate-modal-step-fade",children:"profile"===j?(0,s.jsxs)("div",{className:"px-5 sm:px-7 py-5 sm:py-6 flex flex-col gap-6",children:[(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-[13px] font-semibold text-gray-500 mb-1.5 block",children:"Display name"}),(0,s.jsx)("input",{value:k,onChange:e=>C(e.target.value),maxLength:60,className:"w-full px-4 py-3.5 rounded-xl border border-gray-200 bg-gray-50 text-[14.5px] text-gray-900 focus:outline-none focus:border-[#f2010b] focus:bg-white transition-colors"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-[13px] font-semibold text-gray-500 mb-1.5 block",children:"Email"}),(0,s.jsx)("input",{value:a.email,disabled:!0,className:"w-full px-4 py-3.5 rounded-xl border border-gray-100 bg-gray-50 text-[14.5px] text-gray-400 cursor-not-allowed"}),(0,s.jsxs)("p",{className:"text-[12px] text-gray-400 mt-1.5 flex items-center gap-1.5",children:[(0,s.jsx)(i.c,{size:11})," To change your email, contact support"]})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-[13px] font-semibold text-gray-500 mb-1.5 block",children:"Account ID"}),(0,s.jsxs)("div",{className:"flex items-center gap-2 rounded-xl border border-gray-100 bg-gray-50 pl-4 pr-1.5 py-1.5",children:[(0,s.jsx)("span",{className:"flex-1 min-w-0 text-[12.5px] font-mono text-gray-400 truncate",children:a.id}),(0,s.jsx)("button",{onClick:function(){navigator.clipboard.writeText(a.id),H(!0),setTimeout(()=>H(!1),1600)},className:"flex items-center gap-1.5 text-[12px] font-semibold text-gray-400 hover:text-gray-700 px-2.5 py-1.5 rounded-lg hover:bg-gray-100 transition-colors shrink-0",children:Y?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(l.J,{size:13})," Copied"]}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.Q,{size:13})," Copy"]})})]}),(0,s.jsxs)("p",{className:"text-[12px] text-gray-400 mt-1.5 flex items-center gap-1.5",children:[(0,s.jsx)(i.c,{size:11})," Permanent, assigned when your account was created"]})]})]}),E&&(0,s.jsx)("p",{className:"text-[12px] text-red-500 -mt-2",children:E}),(0,s.jsx)("button",{onClick:eg,disabled:z||!k.trim(),className:"w-full py-3.5 rounded-xl bg-[#f2010b] text-white text-[14.5px] font-bold transition-all duration-200 ease-out hover:opacity-90 hover:scale-[1.02] hover:shadow-lg hover:shadow-[#f2010b]/30 active:scale-[0.98] disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:scale-100 disabled:hover:shadow-none flex items-center justify-center gap-2",children:I?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.r,{size:15})," Saved!"]}):z?"Savingâ¦":"Save changes"}),(0,s.jsxs)("div",{className:"pt-1 border-t border-gray-100 flex flex-col gap-2.5",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("p",{className:"text-[13px] font-semibold text-gray-500",children:"Your data"}),(0,s.jsx)("p",{className:"text-[12px] text-gray-400 mt-0.5",children:"Download a copy of everything on your account: earnings, campaigns, withdrawals, referrals and more."})]}),X&&(0,s.jsx)("p",{className:"text-[12px] text-red-500",children:X}),(0,s.jsxs)("button",{onClick:ex,disabled:K,className:"w-full py-3.5 rounded-xl border border-gray-200 text-gray-700 text-[14.5px] font-bold hover:bg-gray-50 transition-colors disabled:opacity-40 disabled:cursor-not-allowed flex items-center justify-center gap-2",children:[(0,s.jsx)(u.z,{size:15})," ",K?"Preparingâ¦":"Download my data"]})]})]}):"security"===j?(0,s.jsxs)("div",{className:"px-5 sm:px-7 py-5 sm:py-6 flex flex-col gap-4",children:[(0,s.jsxs)("div",{className:"bg-amber-50 border border-amber-100 rounded-xl px-4 py-3.5 flex gap-3",children:[(0,s.jsx)(h.e,{size:15,className:"text-amber-500 shrink-0 mt-0.5"}),(0,s.jsx)("p",{className:"text-[12.5px] text-amber-700 leading-relaxed",children:"Choose a strong password of at least 8 characters. Your active sessions stay logged in after the change."})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-[13px] font-semibold text-gray-500 mb-1.5 block",children:"Current password"}),(0,s.jsx)("input",{type:"password",autoComplete:"new-password",value:P,onChange:e=>{D(e.target.value),J(null)},placeholder:"â¢â¢â¢â¢â¢â¢â¢â¢",className:"w-full px-4 py-3.5 rounded-xl border border-gray-200 bg-gray-50 text-[14.5px] text-gray-900 placeholder-gray-300 focus:outline-none focus:border-[#f2010b] focus:bg-white transition-colors"})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-[13px] font-semibold text-gray-500 mb-1.5 block",children:"New password"}),(0,s.jsx)("input",{type:"password",autoComplete:"new-password",value:O,onChange:e=>{U(e.target.value),J(null)},placeholder:"â¢â¢â¢â¢â¢â¢â¢â¢",className:"w-full px-4 py-3.5 rounded-xl border border-gray-200 bg-gray-50 text-[14.5px] text-gray-900 placeholder-gray-300 focus:outline-none focus:border-[#f2010b] focus:bg-white transition-colors"}),O.length>0&&(0,s.jsx)("div",{className:"flex gap-1 mt-2",children:[1,2,3,4].map(e=>(0,s.jsx)("div",{className:"h-1 flex-1 rounded-full transition-colors ".concat(O.length>=3*e?e<=1?"bg-red-400":e<=2?"bg-amber-400":e<=3?"bg-yellow-400":"bg-green-400":"bg-gray-100")},e))})]}),(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-[13px] font-semibold text-gray-500 mb-1.5 block",children:"Confirm new password"}),(0,s.jsx)("input",{type:"password",autoComplete:"new-password",value:R,onChange:e=>W(e.target.value),placeholder:"â¢â¢â¢â¢â¢â¢â¢â¢",className:"w-full px-4 py-3.5 rounded-xl border bg-gray-50 text-[14.5px] text-gray-900 placeholder-gray-300 focus:outline-none focus:bg-white transition-colors ".concat(R&&R!==O?"border-red-300 focus:border-red-400":"border-gray-200 focus:border-[#f2010b]")}),R&&R!==O&&(0,s.jsx)("p",{className:"text-[12px] text-red-500 mt-1.5",children:"Passwords don't match"})]}),q&&(0,s.jsx)("p",{className:"text-[12.5px] text-red-500",children:q}),(0,s.jsx)("button",{disabled:$||!P||!O||O!==R||O.length<8,onClick:ef,className:"w-full py-3.5 rounded-xl bg-[#f2010b] text-white text-[14.5px] font-bold transition-all duration-200 ease-out hover:opacity-90 hover:scale-[1.02] hover:shadow-lg hover:shadow-[#f2010b]/30 active:scale-[0.98] disabled:opacity-40 disabled:cursor-not-allowed disabled:hover:scale-100 disabled:hover:shadow-none flex items-center justify-center gap-2 mt-1",children:B?(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(c.r,{size:15})," Password updated!"]}
1):$?"Updatingâ¦":"Update password"})]}):(0,s.jsxs)("div",{className:"px-5 sm:px-7 py-5 sm:py-6 flex flex-col gap-4",children:[(0,s.jsx)("p",{className:"text-[12.5px] text-gray-500 leading-relaxed",children:"Deleting your account is permanent. Your profile, extension pairing, campaigns and history are all removed and cannot be recovered."}),Z&&(Z.cash>0||Z.wallet>0||Z.campaigns>0)&&(0,s.jsxs)("div",{className:"bg-red-50 border border-red-100 rounded-xl px-4 py-3.5 flex gap-3",children:[(0,s.jsx)(m.N,{size:15,className:"text-[#f2010b] shrink-0 mt-0.5"}),(0,s.jsxs)("div",{className:"text-[12.5px] text-red-700 leading-relaxed",children:[(0,s.jsx)("p",{className:"font-semibold",children:"You still have money on this account â it will be lost:"}),(0,s.jsxs)("ul",{className:"mt-1 space-y-0.5",children:[Z.cash>0&&(0,s.jsxs)("li",{children:[(0,x.az)(Z.cash)," earnings balance"]}),Z.wallet>0&&(0,s.jsxs)("li",{children:[(0,x.az)(Z.wallet)," advertiser wallet"]}),Z.campaigns>0&&(0,s.jsxs)("li",{children:[(0,x.az)(Z.campaigns)," left in campaign budgets"]})]}),(0,s.jsx)("p",{className:"mt-1.5",children:"We strongly recommend spending it in the store or on a campaign first â deleting does not pay it out."})]})]}),ee&&(0,s.jsx)("p",{className:"text-[12px] text-gray-400",children:"Couldn't check your balance â make sure you've withdrawn or spent any funds before continuing."}),ea?(0,s.jsxs)("div",{className:"flex flex-col gap-4",children:[(0,s.jsxs)("div",{children:[(0,s.jsx)("label",{className:"text-[13px] font-semibold text-gray-500 mb-1.5 block",children:"Current password"}),(0,s.jsx)("input",{type:"password",autoComplete:"current-password",value:er,onChange:e=>{en(e.target.value),eu(null)},placeholder:"â¢â¢â¢â¢â¢â¢â¢â¢",className:"w-full px-4 py-3.5 rounded-xl border border-gray-200 bg-gray-50 text-[14.5px] text-gray-900 placeholder-gray-300 focus:outline-none focus:border-[#f2010b] focus:bg-white transition-colors"})]}),(0,s.jsxs)("div",{children:[(0,s.jsxs)("label",{className:"text-[13px] font-semibold text-gray-500 mb-1.5 block",children:["Type ",(0,s.jsx)("span",{className:"font-mono text-gray-700",children:"DELETE"})," to confirm"]}),(0,s.jsx)("input",{value:eo,onChange:e=>{ei(e.target.value),eu(null)},placeholder:"DELETE",className:"w-full px-4 py-3.5 rounded-xl border border-gray-200 bg-gray-50 text-[14.5px] text-gray-900 placeholder-gray-300 focus:outline-none focus:border-[#f2010b] focus:bg-white transition-colors"})]}),ec&&(0,s.jsx)("p",{className:"text-[12.5px] text-red-500",children:ec}),(0,s.jsxs)("div",{className:"flex gap-2",children:[(0,s.jsx)("button",{onClick:()=>{es(!1),en(""),ei(""),eu(null)},disabled:el,className:"flex-1 py-3.5 rounded-xl border border-gray-200 text-gray-500 text-[14.5px] font-bold hover:bg-gray-50 transition-colors disabled:opacity-40",children:"Cancel"}),(0,s.jsx)("button",{onClick:eb,disabled:el||!er||"DELETE"!==eo,className:"flex-1 py-3.5 rounded-xl bg-[#f2010b] text-white text-[14.5px] font-bold hover:opacity-90 transition-opacity disabled:opacity-40 disabled:cursor-not-allowed flex items-center justify-center gap-2",children:el?"Deletingâ¦":"Delete permanently"})]})]}):(0,s.jsxs)("button",{onClick:()=>es(!0),className:"w-full py-3.5 rounded-xl border border-red-200 text-[#f2010b] text-[14.5px] font-bold hover:bg-red-50 transition-colors flex items-center justify-center gap-2",children:[(0,s.jsx)(p.l,{size:15})," Delete my account"]})]})},j)})]})]})}},74855:(e,t,a)=>{a.d(t,{E:()=>S,ProductHeader:()=>A});var s=a(95155),r=a(12115),n=a(52619),o=a.n(n),i=a(20063),l=a(32385),d=a(91469),c=a(57784),u=a(7508),h=a(49086),m=a(45319),p=a(3941),x=a(90078),g=a(15651),f=a(33769),b=a(78439),y=a(95593),w=a(7385),v=a(4261),j=a(32021),N=a(45052),k=a(64119),C=a(16324);function S(e){var t,a,s,r,n;let o=null!=(s=e.email)?s:"";return{id:e.id,name:null!=(r=null==(t=e.user_metadata)?void 0:t.full_name)?r:o.split("@")[0],email:o,avatarColor:null!=(n=null==(a=e.user_metadata)?void 0:a.avatar_color)?n:0}}let T=[...["how-it-works","for-users","for-advertisers"].map(e=>{var t;let a=N.dy.find(t=>t.slug===e);return{label:null!=(t=null==a?void 0:a.label)?t:e,href:"/".concat(e)}}),{label:"FAQ",href:"/faq"}],z="publisher";function _(e){var t,a,n;let{user:i,canAdvertise:m,onLogout:b,onOpenPanel:y}=e,[w,v]=(0,r.useState)(!1),[j,N]=(0,r.useState)(null);(0,r.useEffect)(()=>
1{if(!w)return;let e=!1;return Promise.all([p.N.rpc("get_user_available_balance"),m?p.N.rpc("get_advertiser_wallet_balance"):Promise.resolve({data:null,error:null}),(0,x.ZF)("get_my_affiliate",(0,g.U8)())]).then(t=>{var a,s,r,n;let[o,i,l]=t;e||N({earn:o.error?null:Number(null!=(s=o.data)?s:0),advertise:!m||i.error?null:Number(null!=(r=i.data)?r:0),affiliate:l.error?null:Number(null!=(n=null==(a=l.data)?void 0:a.balance_micros)?n:0)})}),()=>{e=!0}},[w,m]);let C=(()=>{let e=(0,f.KU)("client");return"".concat(e).concat(e.includes("?")?"&":"?").concat(f.D4,"=1")})(),S=(e,t,a)=>y?(0,s.jsx)("button",{type:"button",onClick:()=>{v(!1),y(e)},className:t,children:a}):(0,s.jsx)(o(),{href:(0,f.KU)(e),onClick:()=>v(!1),className:t,children:a}),T=i.name.split(" ").map(e=>{var t;return null!=(t=e[0])?t:""}).join("").toUpperCase().slice(0,2),z=null!=(n=null==(t=k.T[null!=(a=i.avatarColor)?a:0])?void 0:t.bg)?n:k.T[0].bg;return(0,s.jsxs)(s.Fragment,{children:[S("client","hidden sm:flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-full px-4 py-2.5 transition-all duration-200 ease-out hover:scale-[1.04] hover:shadow-lg hover:shadow-black/5 active:scale-[0.98]",(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(l.u,{size:15}),"Earn"]})),m&&S("advertiser","hidden sm:flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-full px-4 py-2.5 transition-all duration-200 ease-out hover:scale-[1.04] hover:shadow-lg hover:shadow-black/5 active:scale-[0.98]",(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.R,{size:15}),"Advertise"]})),(0,s.jsxs)("div",{className:"relative ml-0.5 sm:ml-1",children:[(0,s.jsxs)("button",{onClick:()=>v(e=>!e),className:"flex items-center gap-1.5 rounded-full p-1 pr-2 hover:bg-gray-50 transition-colors","aria-label":"Account",children:[(0,s.jsx)("span",{className:"w-8 h-8 rounded-full ".concat(z," flex items-center justify-center text-white text-[11px] font-bold"),children:T}),(0,s.jsx)(c.a,{size:13,className:"text-gray-500 transition-transform ".concat(w?"rotate-180":"")})]}),w&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"fixed inset-0 z-40",onClick:()=>v(!1)}),(0,s.jsxs)("div",{className:"absolute right-0 top-12 z-50 w-52 max-w-[calc(100vw-24px)] bg-white rounded-2xl shadow-xl border border-gray-100 overflow-hidden",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3 px-4 py-3.5 border-b border-gray-100",children:[(0,s.jsx)("span",{className:"w-8 h-8 rounded-full ".concat(z," flex items-center justify-center text-white text-[11px] font-bold shrink-0"),children:T}),(0,s.jsxs)("div",{className:"min-w-0",children:[(0,s.jsx)("p",{className:"text-[13px] font-semibold text-gray-900 truncate",children:i.name}),(0,s.jsx)("p",{className:"text-[11px] text-gray-500 truncate",children:i.email})]})]}),(0,s.jsx)("div",{className:"px-1.5 py-1.5 border-b border-gray-100",children:[{key:"earn",label:"Earn",Icon:l.u,micros:null==j?void 0:j.earn,view:"client",href:null},...m?[{key:"advertise",label:"Advertise",Icon:d.R,micros:null==j?void 0:j.advertise,view:"advertiser",href:null}]:[],{key:"affiliate",label:"Affiliate",Icon:u.g,micros:null==j?void 0:j.affiliate,view:"client",href:C}].map(e=>{let t,a=(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(e.Icon,{size:14,className:"text-gray-400 shrink-0"}),(0,s.jsx)("span",{className:"flex-1 min-w-0 text-left text-[12.5px] font-medium text-gray-600",children:e.label}),(0,s.jsx)("span",{className:"text-[13px] font-bold tabular-nums text-gray-900",children:j?null==(t=e.micros)?"$â":"$".concat((Math.floor(t/1e4)/100).toLocaleString("en-US",{minimumFractionDigits:2,maximumFractionDigits:2})):(0,s.jsx)("span",{className:"inline-block w-12 h-3 rounded bg-gray-100 animate-pulse align-middle"})})]}),r="w-full flex items-center gap-2 px-2.5 py-1.5 rounded-lg hover:bg-gray-50 transition-colors";return e.href?y?(0,s.jsx)("button",{type:"button",className:r,onClick:()=>{v(!1);let t=new URLSearchParams(window.location.search);t.set(f.D4,"1"),window.history.replaceState(null,"","".concat(window.location.pathname,"?").concat(t.toString())),y(e.view)},children:a},e.key):(0,s.jsx)(o(),{href:e.href,onClick:()=>v(!1),className:r,children:a},e.key):(0,s.jsx)("span",{className:"contents",children:S(e.view,r,a)},e.key)})}),(0,s.jsxs)("div",{className:"sm:hidden py-1 border-b border-gray-100",children:[S("client","w-full flex items-center gap-3 px-4 py-2.5 hover:bg-gray-50 transition-colors",(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(l.u,{size:15,className:"text-gray-500 shrink-0"}),(0,s.jsx)("span",{className:"text-[13px] font-medium text-gray-900",children:"Earn"})]})),m&&S("advertiser","w-full flex items-center gap-3 px-4 py-2.5 hover:bg-gray-50 transition-colors",(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(d.R,{size:15,className:"text-gray-500 shrink-0"}),(0,s.jsx)("span",{className:"text-[13px] font-medium text-gray-900",children:"Advertise"})]}))]}),(0,s.jsxs)("button",{onClick:()=>{v(!1),b()},className:"w-full flex items-center gap-3 px-4 py-2.5 hover:bg-red-50 transition-colors",children:[(0,s.jsx)(h.M,{size:15,className:"text-[#f2010b] shrink-0"}),(0,s.jsx)("span",{className:"text-[13px] font-medium text-[#f2010b]",children:"Log out"})]})]})]})]})]})}function I(e){var t,a;let{hint:n,dashboardHref:o,advertiserHref:i,signOutTo:u}=e,[m,p]=(0,r.useState)(!1),x=n.name.split(" ").map(e=>{var t;return null!=(t=e[0])?t:""}).join("").toUpperCase().slice(0,2),g=null!=(a=null==(t=k.T[n.avatarColor])?void 0:t.bg)?a:k.T[0].bg,f="hidden sm:flex items-center gap-1.5 text-sm font-medium text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-full px-4 py-2.5 transition-all duration-200 ease-out hover:scale-[1.04] hover:shadow-lg hover:shadow-black/5 active:scale-[0.98]";return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsxs)("a",{href:o,className:f,children:[(0,s.jsx)(l.u,{size:15}),"Earn"]}),(0,s.jsxs)("a",{href:i,className:f,children:[(0,s.jsx)(d.R,{size:15}),"Advertise"]}),(0,s.jsxs)("div",{className:"relative ml-0.5 sm:ml-1",children:[(0,s.jsxs)("button",{onClick:()=>p(e=>!e),className:"flex items-center gap-1.5 rounded-full p-1 pr-2 hover:bg-gray-50 transition-colors","aria-label":"Account","aria-expanded":m,children:[(0,s.jsx)("span",{className:"w-8 h-8 rounded-full ".concat(g," flex items-center justify-center text-white text-[11px] font-bold"),children:x}),(0,s.jsx)(c.a,{size:13,className:"text-gray-500 transition-transform ".concat(m?"rotate-180":"")})]}),m&&(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("div",{className:"fixed inset-0 z-40",onClick:()=>p(!1)}),(0,s.jsxs)("div",{className:"absolute right-0 top-12 z-50 w-56 bg-white rounded-2xl shadow-xl border border-gray-100 overflow-hidden",children:[(0,s.jsxs)("div",{className:"flex items-center gap-3 px-4 py-3.5 border-b border-gray-100",children:[(0,s.jsx)("span",{className:"w-8 h-8 rounded-full ".concat(g," flex items-center justify-center text-white text-[11px] font-bold shrink-0"),children:x}),(0,s.jsx)("p",{className:"text-[13px] font-semibold text-gray-900 truncate",children:n.name})]}),(0,s.jsxs)("div",{className:"sm:hidden py-1 border-b border-gray-100",children:[(0,s.jsxs)("a",{href:o,className:"w-full flex items-center gap-3 px-4 py-2.5 hover:bg-gray-50 transition-colors",children:[(0,s.jsx)(l.u,{size:15,className:"text-gray-500 shrink-0"}),(0,s.jsx)("span",{className:"text-[13px] font-medium text-gray-900",children:"Earn"})]}),(0,s.jsxs)("a",{href:i,className:"w-full flex items-center gap-3 px-4 py-2.5 hover:bg-gray-50 transition-colors",children:[(0,s.jsx)(d.R,{size:15,className:"text-gray-500 shrink-0"}),(0,s.jsx)("span",{className:"text-[13px] font-medium text-gray-900",children:"Advertise"})]})]}),(0,s.jsxs)("a",{href:u,className:"w-full flex items-center gap-3 px-4 py-2.5 hover:bg-red-50 transition-colors",children:[(0,s.jsx)(h.M,{size:15,className:"text-[#f2010b] shrink-0"}),(0,s.jsx)("span",{className:"text-[13px] font-medium text-[#f2010b]",children:"Log out"})]})]})]})]})]})}function A(){let{overlay:e=!1,scrollThreshold:t=0,user:a,sessionReady:n,onLogout:l,onRequestAuth:d,onInstall:c,onOpenPanel:u,canAdvertise:h}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},x=(0,i.usePathname)(),g=(0,i.useRouter)(),N=void 0!==n,[k,A]=(0,r.useState)(null),[E,F]=(0,r.useState)(!1),[P,D]=(0,r.useState)(!1),[O,U]=(0,r.useState)(!1),[R,W]=(0,r.useState)(!1),[$,L]=(0,r.useState)(z),[B,M]=(0,r.useState)(null),q=(0,b.RM)((0,f.KU)("client")),J=(0,b.RM)((0,f.KU)("advertiser")),Y=(0,b.RM)((0,f.T$)());(0,r.useEffect)(()=>{q&&M((0,w.n)())},[q]),(0,r.useEffect)(()=>{D(null!=h?h:(0,j.W)())},[h]),(0,r.useEffect)(()=>{(0,y.IR)()},[]),(0,r.useEffect)(()=>
1{if(N)return;p.N.auth.getSession().then(e=>{let{data:{session:t}}=e;(null==t?void 0:t.user)&&A(S(t.user)),F(!0)});let{data:{subscription:e}}=p.N.auth.onAuthStateChange((e,t)=>{A((null==t?void 0:t.user)?S(t.user):null)});return()=>e.unsubscribe()},[N]),(0,r.useEffect)(()=>{if(!e)return;let a=()=>U(window.scrollY>t);return a(),window.addEventListener("scroll",a,{passive:!0}),()=>window.removeEventListener("scroll",a)},[e,t]);let H=N?null!=a?a:null:k;function K(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:z,t=(0,b.v_)(e);if(t){window.location.href=t;return}if(d)return void d(e);L(e),W(!0)}async function Q(){if(l)return void l();try{await p.N.auth.signOut()}finally{A(null);let e=(0,v.h)("/");e&&(window.location.href=e)}}let X="touch:hidden flex items-center gap-1.5 sm:gap-2 bg-[#f2010b] hover:bg-[#d2010a] text-white text-[13px] sm:text-sm font-semibold rounded-full pl-3.5 pr-4 sm:pl-4 sm:pr-5 py-2 sm:py-2.5 shadow-[0_4px_16px_rgba(242,1,11,0.25)] transition-all duration-200 ease-out hover:scale-[1.04] hover:shadow-lg hover:shadow-[#f2010b]/35 active:scale-[0.98]",G=(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(m.z,{size:15,weight:"bold"}),(0,s.jsx)("span",{className:"hidden sm:inline",children:"Get the extension"}),(0,s.jsx)("span",{className:"sm:hidden",children:"Install"})]});return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("nav",{className:"sticky top-0 inset-x-0 z-50 transition-all duration-300 ".concat(e?O?"bg-white/95 backdrop-blur":"bg-transparent":"bg-white/95 backdrop-blur"),children:(0,s.jsxs)("div",{className:"relative max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 flex items-center justify-between gap-2 h-[56px] sm:h-[64px]",children:[(0,s.jsx)(o(),{href:(0,v.B)(f.UR),className:"flex items-center flex-shrink-0 ".concat(H||B?"absolute left-1/2 -translate-x-1/2 sm:static sm:translate-x-0":""),children:(0,s.jsx)("img",{src:"/tributlylogo.svg",alt:"tributly.io",className:"h-7 sm:h-8 w-auto"})}),(0,s.jsx)("div",{className:"hidden lg:flex absolute left-1/2 -translate-x-1/2 items-center gap-0.5 xl:gap-1",children:T.map(e=>{let{label:t,href:a}=e,r=x===a||x.startsWith("".concat(a,"/"));return(0,s.jsx)(o(),{href:(0,v.B)(a),className:"".concat("text-sm font-medium hover:bg-gray-50 rounded-full px-3 xl:px-4 py-2 transition-colors duration-200 whitespace-nowrap"," ").concat(r?"text-[#f2010b]":"text-gray-600 hover:text-gray-900"),children:t},a)})}),(0,s.jsx)("div",{className:"ml-auto flex items-center gap-1 sm:gap-1.5 min-w-0",children:(N?n:E)&&(H?(0,s.jsx)(_,{user:H,canAdvertise:P,onLogout:Q,onOpenPanel:u}):B&&q&&J&&Y?(0,s.jsx)(I,{hint:B,dashboardHref:q,advertiserHref:J,signOutTo:Y}):(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)("button",{onClick:()=>K(),className:"text-[13px] sm:text-sm font-medium text-gray-600 hover:text-gray-900 hover:bg-gray-50 rounded-full px-3 sm:px-4 py-2 sm:py-2.5 transition-all duration-200 ease-out hover:scale-[1.04] hover:shadow-lg hover:shadow-black/5 active:scale-[0.98]",children:"Log in"}),c?(0,s.jsx)("button",{onClick:c,className:X,children:G}):(0,s.jsx)(o(),{href:(0,v.B)("/#install"),className:X,children:G}),(0,s.jsx)("button",{onClick:()=>K(),className:"hidden touch:flex items-center bg-[#f2010b] text-white text-[13px] font-semibold rounded-full px-4 h-9 shadow-[0_4px_16px_rgba(242,1,11,0.25)] transition-transform duration-200 ease-out active:scale-[0.98]",children:"Sign up"})]}))})]})}),R&&(0,s.jsx)(C.U,{intent:$,onClose:()=>W(!1),onAuth:e=>{if(W(!1),e.isNew)return void g.push("/");A({id:e.id,name:e.name,email:e.email,avatarColor:e.avatarColor})}})]})}},78439:(e,t,a)=>{a.d(t,{RM:()=>i,rB:()=>d,v_:()=>l});var s,r=a(33769),n=a(95593);let o=null!==(s="https://app.tributly.io".trim().replace(/\/$/,""))&&void 0!==s?s:"";function i(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"/";return o?"".concat(o).concat(e.startsWith("/")?e:"/".concat(e)):null}function l(e){let t=i((0,r.qj)(e));return t?(0,n.qI)(t):null}function d(){let e=i("".concat((0,r.qj)("publisher"),"&").concat(r.D4,"=1"));return e?(0,n.qI)(e):null}},85396:(e,t,a)=>{a.d(t,{YA:()=>o,o2:()=>i,tz:()=>l});let s="tributly_attribution",r={source:null,campaign:null,kind:"ref"};function n(e){let t=(null!=e?e:"").trim().slice(0,60);return t.length>0?t:null}function o(){try{let e=new URLSearchParams(window.location.search),t=n(e.get("utm_source")),a=n(e.get("utm_campaign"));if(!t&&!a)return;let r=window.localStorage.getItem(s),o=r?JSON.parse(r):null;if(o&&"ref"!==o.kind)return;window.localStorage.setItem(s,JSON.stringify({source:t,campaign:a,kind:"utm"}))}catch(e){}}function i(){try{var e,t;let a=window.localStorage.getItem(s);if(!a)return r;let o=JSON.parse(a);return{source:n(null!=(e=o.source)?e:null),campaign:n(null!=(t=o.campaign)?t:null),kind:"ref"===o.kind?"ref":"utm"}}catch(e){return r}}function l(e){let t={};return"utm"!==e.kind||(e.source&&(t.utm_source=e.source),e.campaign&&(t.utm_campaign=e.campaign)),t}}
1,90078:(e,t,a)=>{a.d(t,{ZF:()=>h});var s=a(15651),r=a(3941);let n=null,o="",i=null,l="DEMO42AB",d=[{id:null,slug:null,name:"Main link",clicks:412,signups:38,active:9,earned_micros:3184e3},{id:"demo-1",slug:"k3f9a2",name:"YouTube",clicks:268,signups:21,active:5,earned_micros:1942500},{id:"demo-2",slug:"p0x7c1",name:"Telegram channel",clicks:131,signups:9,active:2,earned_micros:611250}];function c(){var e;!1}let u=[{ago:1,amount:4216e3},{ago:3,amount:0xb484e4},{ago:6,amount:22402e3},{ago:10,amount:0x251c8ca},{ago:14,amount:2982e4}];async function h(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};0;let a=await r.N.rpc(e,t);return a.error,a}},94117:(e,t,a)=>{a.d(t,{az:()=>r,tO:()=>s});let s=e=>Math.round(1e6*e),r=function(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:2;return"$".concat(((null!=e?e:0)/1e6).toFixed(t))}},95593:(e,t,a)=>{a.d(t,{IR:()=>m,Om:()=>p,_0:()=>o,h8:()=>i,k7:()=>l,qI:()=>x});var s=a(15651);let r="tributly_referral",n="tributly_referral_code",o="ref",i="via",l="ref_at",d=/^[A-Za-z0-9]{4,16}$/,c=/^[a-z0-9](?:[a-z0-9-]{0,30}[a-z0-9])?$/,u=24*s.X5*36e5,h=!1;function m(){let e=new URLSearchParams(window.location.search),t=null!=(b=null==(g=e.get(o))?void 0:g.trim())?b:"";if(!d.test(t)){try{window.localStorage.removeItem(n)}catch(e){}return}let a=null!=(y=null==(f=e.get(i))?void 0:f.trim().toLowerCase())?y:"",s=c.test(a)?a:null,m=Number(e.get(l)),p=Date.now(),x=Number.isFinite(m)&&m>p-u&&m<=p+6e4?m:p;var g,f,b,y,w={code:t.toUpperCase(),via:s,at:x};try{window.localStorage.setItem(r,JSON.stringify(w)),window.localStorage.removeItem(n)}catch(e){}e.has(l)||h||(h=!0,fetch("/api/arrivals",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({code:t.toUpperCase(),via:s}),keepalive:!0}).catch(()=>{}))}function p(){let e=function(){try{let e=window.localStorage.getItem(r);if(!e)return null;let t=JSON.parse(e);if("string"!=typeof t.code||!d.test(t.code)||"number"!=typeof t.at||!Number.isFinite(t.at))return null;let a="string"==typeof t.via&&c.test(t.via)?t.via:null;return{code:t.code.toUpperCase(),via:a,at:t.at}}catch(e){return null}}();if(!e)return null;if(Date.now()-e.at>u){try{window.localStorage.removeItem(r),window.localStorage.removeItem(n)}catch(e){}return null}return e}function x(e){let t=p();if(!t)return e;try{let a=new URL(e,window.location.origin);return a.searchParams.set(o,t.code),t.via?a.searchParams.set(i,t.via):a.searchParams.delete(i),a.searchParams.set(l,String(t.at)),a.toString()}catch(t){return e}}},98580:(e,t,a)=>{function s(e){try{let t=e();return void 0===t?null:t}catch(e){return null}}async function r(e){let t=[e.tz,e.tzOffset,e.lang,e.languages,e.platform,e.screen,e.colorDepth,e.cores,e.memory,e.touch].map(e=>null===e?"":String(e)).join("|");if(""===t.replace(/\|/g,""))return null;try{var a;let e=null==(a=globalThis.crypto)?void 0:a.subtle;if(!e)return null;let s=new TextEncoder().encode(t),r=await e.digest("SHA-256",s);return Array.from(new Uint8Array(r)).map(e=>e.toString(16).padStart(2,"0")).join("").slice(0,32)}catch(e){return null}}async function n(){let e=function(){let e=navigator;return{tz:s(()=>Intl.DateTimeFormat().resolvedOptions().timeZone),tzOffset:s(()=>new Date().getTimezoneOffset()),lang:s(()=>e.language),languages:s(()=>{var t;return(null!=(t=e.languages)?t:[]).join(",")}),platform:s(()=>e.platform),screen:s(()=>"".concat(screen.width,"x").concat(screen.height)),colorDepth:s(()=>screen.colorDepth),cores:s(()=>e.hardwareConcurrency),memory:s(()=>{var t;return null!=(t=e.deviceMemory)?t:null}),touch:s(()=>e.maxTouchPoints)}}();return{fingerprint:await r(e),components:e}}a.d(t,{Ti:()=>n})}}]);
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.