1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3185],{97603:function(e,t,n){Promise.resolve().then(n.t.bind(n,72972,23)),Promise.resolve().then(n.t.bind(n,88003,23)),Promise.resolve().then(n.bind(n,81523)),Promise.resolve().then(n.bind(n,70049)),Promise.resolve().then(n.t.bind(n,54756,23)),Promise.resolve().then(n.t.bind(n,58766,23)),Promise.resolve().then(n.bind(n,51925)),Promise.resolve().then(n.t.bind(n,49246,23)),Promise.resolve().then(n.t.bind(n,52057,23)),Promise.resolve().then(n.t.bind(n,81332,23)),Promise.resolve().then(n.t.bind(n,78557,23)),Promise.resolve().then(n.t.bind(n,994,23)),Promise.resolve().then(n.bind(n,81942)),Promise.resolve().then(n.bind(n,20850)),Promise.resolve().then(n.t.bind(n,54322,23))},51925:function(e,t,n){"use strict";n.r(t);var r=n(57437);n(2265);var s=n(88291),o=n(1952);t.default=function(){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(s.c,{mode:"production"}),(0,r.jsx)(o.c,{})]})}},81942:function(e,t,n){"use strict";var r=n(57437),s=n(2265),o=n(84105),i=n.n(o);t.default=function(e){let{inline:t=!1}=e,[n,o]=s.useState(""),[a,c]=s.useState("idle"),[l,d]=s.useState(""),u=t?i().wrapperInline:i().wrapper;async function m(e){if(e.preventDefault(),n){c("loading");try{let e=await fetch("/api/newsletter/subscribe",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({email:n})}),t=await e.json();e.ok?(c("success"),d(t.message||"You're subscribed!"),o("")):(c("error"),d(t.error||"Something went wrong."))}catch(e){c("error"),d("Network error. Please try again.")}}}return"success"===a?(0,r.jsx)("div",{className:u,children:(0,r.jsxs)("div",{className:i().successMessage,children:[(0,r.jsx)("span",{className:i().successIcon,children:"â"}),(0,r.jsx)("p",{children:l})]})}):(0,r.jsxs)("div",{className:u,children:[(0,r.jsx)("h2",{className:i().heading,children:"Stay Updated"}),(0,r.jsx)("p",{className:i().description,children:"Get notified when I publish new articles. No spam, unsubscribe anytime."}),(0,r.jsxs)("form",{onSubmit:m,className:i().form,children:[(0,r.jsx)("input",{type:"email",value:n,onChange:e=>o(e.target.value),placeholder:"[email protected]",required:!0,className:i().input,disabled:"loading"===a,"aria-label":"Email address for newsletter"}),(0,r.jsx)("button",{type:"submit",className:i().button,disabled:"loading"===a,children:"loading"===a?"Subscribing...":"Subscribe"})]}),"error"===a&&(0,r.jsx)("p",{className:i().errorMessage,children:l})]})}},20850:function(e,t,n){"use strict";n.r(t),n.d(t,{default:function(){return _}});var r=n(57437),s=n(2265),o=n(97945),i=n(67228),a=n(64131),c=n(10140);let l="color-theme",d="dark";"\n(() => {\n const COOKIE_NAME = '".concat(l,"';\n const DEFAULT_THEME = '").concat(d,"';\n\n const getCookieTheme = () => {\n const match = document.cookie.match(new RegExp('(?:^|; )' + COOKIE_NAME + '=([^;]+)'));\n return match ? decodeURIComponent(match[1]) : null;\n };\n\n const getPreferredTheme = () => {\n const savedTheme = localStorage.getItem(COOKIE_NAME) || getCookieTheme();\n if (savedTheme === 'light' || savedTheme === 'dark') {\n return savedTheme;\n }\n\n if (window.matchMedia('(prefers-color-scheme: light)').matches) {\n return 'light';\n }\n\n return DEFAULT_THEME;\n };\n\n const theme = getPreferredTheme();\n document.documentElement.setAttribute('data-color-theme', theme);\n})();\n");var u=n(52057),m=n.n(u),_=function(){let[e,t]=s.useState(null);return s.useEffect(()=>{t(document.documentElement.getAttribute("data-color-theme")||d)},[]),(0,r.jsxs)("button",{className:m().action,onClick:function(){let n="light"===(e||d)?"dark":"light";t(n),a.Z.set(l,n,{expires:1e3}),window.localStorage.setItem(l,n),document.documentElement.setAttribute("data-color-theme",n)},"aria-label":"Toggle dark / light mode",children:["light"===e?(0,r.jsx)(o.Z,{size:"1.5rem"}):"dark"===e?(0,r.jsx)(i.Z,{size:"1.5rem"}):(0,r.jsx)("span",{"aria-hidden":"true",style:{display:"inline-block",width:"1.5rem",height:"1.5rem"}}),(0,r.jsx)(c.Z,{children:"Toggle dark / light mode"})]})}},10140:function(e,t,n){"use strict";n.d(t,{Z:function(){return a}});var r=n(57437);n(2265);var s=n(61994),o=n(54322),i=n.n(o),a=function(e){let{as:t="span",className:n,children:o,...a}=e;return(0,r.jsx)(t,{className:(0,s.Z)(i().wrapper,n),...a,children:o})}},994:function(){},81332:function(e){e.exports={wrapper:"DecorativeSwoops_wrapper__lQyjB",blocker:"DecorativeSwoops_blocker__6amIC"}},78557:function(e){e.exports={wrapper:"Footer_wrapper__rpDYh",content:"Footer_content__a1cH7",attribution:"Footer_attribution__Rp2my",linkHeading:"Footer_linkHeading__z2ueN",linkList:"Footer_linkList__xbV8f",newsletterSection:"Footer_newsletterSection__px08S"}},52057:function(e){e.exports={wrapper:"Header_wrapper__Ys_tD",actions:"Header_actions__FHMH_",action:"Header_action__N50qM"}},49246:function(e){e.exports={wrapper:"Logo_wrapper__uxhhq"}},84105:function(e){e.exports={wrapper:"Newsletter_wrapper__2Vwl6",wrapperInline:"Newsletter_wrapperInline__9R2IU",heading:"Newsletter_heading__SSMJI",description:"Newsletter_description__Q6tO_",form:"Newsletter_form__Oj_I4",input:"Newsletter_input__Z4lOG",button:"Newsletter_button__BUbZX",successMessage:"Newsletter_successMessage__WJEgv",successIcon:"Newsletter_successIcon__rZPqj",errorMessage:"Newsletter_errorMessage__9X47z"}},54322:function(e){e.exports={wrapper:"VisuallyHidden_wrapper__HHEqF"}}},function(e){e.O(0,[156,9585,2972,8460,2971,2117,1744],function(){return e(e.s=97603)}),_N_E=e.O()}]);
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.