try{!function(){var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},r=(new e.Error).stack;r&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[r]="54e5722f-afdf-4304-b35c-7dd02619d9fd",e._sentryDebugIdIdentifier="sentry-dbid-54e5722f-afdf-4304-b35c-7dd02619d9fd")}()}catch(e){}(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1745,7237],{6101:(e,r,t)=>{"use strict";t.d(r,{A:()=>i});var n=t(6627);let a=e=>{let r=e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,r,t)=>t?t.toUpperCase():r.toLowerCase());return r.charAt(0).toUpperCase()+r.slice(1)},o=function(){for(var e=arguments.length,r=Array(e),t=0;t!!e&&""!==e.trim()&&t.indexOf(e)===r).join(" ").trim()};var l={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};let s=(0,n.forwardRef)((e,r)=>{let{color:t="currentColor",size:a=24,strokeWidth:s=2,absoluteStrokeWidth:i,className:c="",children:d,iconNode:u,...f}=e;return(0,n.createElement)("svg",{ref:r,...l,width:a,height:a,stroke:t,strokeWidth:i?24*Number(s)/Number(a):s,className:o("lucide",c),...!d&&!(e=>{for(let r in e)if(r.startsWith("aria-")||"role"===r||"title"===r)return!0})(f)&&{"aria-hidden":"true"},...f},[...u.map(e=>{let[r,t]=e;return(0,n.createElement)(r,t)}),...Array.isArray(d)?d:[d]])}),i=(e,r)=>{let t=(0,n.forwardRef)((t,l)=>{let{className:i,...c}=t;return(0,n.createElement)(s,{ref:l,iconNode:r,className:o("lucide-".concat(a(e).replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase()),"lucide-".concat(e),i),...c})});return t.displayName=a(e),t}},14003:(e,r,t)=>{Promise.resolve().then(t.t.bind(t,29713,23)),Promise.resolve().then(t.bind(t,36140)),Promise.resolve().then(t.bind(t,19745)),Promise.resolve().then(t.bind(t,89932)),Promise.resolve().then(t.bind(t,75341)),Promise.resolve().then(t.bind(t,50187)),Promise.resolve().then(t.bind(t,70226))},14860:(e,r,t)=>{"use strict";t.d(r,{ReviewCard:()=>d});var n=t(90947),a=t(68799),o=t(83680);let l=(0,t(6627).memo)(function(e){var r;let{author:t}=e;if(!t)return null;let a=null==(r=t.image)?void 0:r.trim(),l=(null==a?void 0:a.startsWith("/"))?a:a?"/".concat(a):void 0;return(0,n.jsxs)("div",{className:"flex items-center flex-shrink-0 h-8 text-center",children:[l&&(0,n.jsx)("div",{className:"w-8 h-8 rounded-full border border-slate-400 overflow-hidden shrink-0",children:(0,n.jsx)(o.default,{src:l,alt:"Avatar of ".concat(t.name),width:32,height:32,sizes:"32px",quality:85,className:"w-full h-full object-cover"})}),(0,n.jsxs)("div",{className:"".concat(l?"ml-2":""," flex flex-col justify-center"),children:[(0,n.jsx)("p",{className:"my-0 text-xs leading-none",children:t.name}),t.description&&(0,n.jsx)("p",{className:"my-0 text-[10px] leading-3 text-muted mt-0.5",children:t.description})]})]})});var s=t(58024),i=t(77570);let c={carousel:{base:"w-52 md:w-72 h-48 cursor-pointer",bordered:"border border-border shadow-sm",borderless:"shadow-none"},books:{base:"w-48 md:w-64 h-40",bordered:"border border-border-strong shadow-md",borderless:"shadow-none"}};function d(e){let{review:r,showRating:t=!1,showBorder:o=!0,variant:d="carousel",className:u,onClick:f}=e,h=c[d],m="".concat(h.base," ").concat(o?h.bordered:h.borderless),b=r.content.length,g=(()=>{let e=Math.max(9,Math.min(16,16-(b-60)/8));return{className:"leading-tight tracking-tight",style:{fontSize:"".concat(e,"px"),lineHeight:"1.1"}}})();return(0,n.jsxs)(a.Zp,{variant:o?"bordered":"default",className:(0,i.QP)(m,"py-4 px-6 flex flex-col gap-3 h-full",u),onClick:f,children:[t&&r.rating&&(0,n.jsxs)("div",{className:"flex items-center justify-center gap-1 flex-shrink-0","aria-label":"Rating: ".concat(r.rating," out of 5 stars"),children:[[void 0,void 0,void 0,void 0,void 0].map((e,t)=>(0,n.jsx)(s.A,{className:"w-5 h-5 ".concat(t{"use strict";function n(e){let{moduleIds:r}=e;return null}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"PreloadChunks",{enumerable:!0,get:function(){return n}}),t(90947),t(5298),t(36106),t(42047)},34215:(e,r,t)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),!function(e,r){for(var t in r)Object.defineProperty(e,t,{enumerable:!0,get:r[t]})}(r,{default:function(){return i},getImageProps:function(){return s}});let n=t(75443),a=t(44313),o=t(29713),l=n._(t(30539));function s(e){let{props:r}=(0,a.getImgProps)(e,{defaultLoader:l.default,imgConf:{deviceSizes:[640,750,828,1080,1200,1920,2048,3840],imageSizes:[16,32,48,64,96,128,256,384],qualities:[25,50,75,85,100],path:"/_next/image",loader:"default",dangerouslyAllowSVG:!1,unoptimized:!1}});for(let[e,t]of Object.entries(r))void 0===t&&delete r[e];return{props:r}}let i=o.Image},36106:(e,r,t)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"workAsyncStorage",{enumerable:!0,get:function(){return n.workAsyncStorageInstance}});let n=t(96500)},36140:(e,r,t)=>{"use strict";function n(e){let{reason:r,children:t}=e;return t}Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"BailoutToCSR",{enumerable:!0,get:function(){return n}}),t(50304)},38086:(e,r)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),!function(e,r){for(var t in r)Object.defineProperty(e,t,{enumerable:!0,get:r[t]})}(r,{bindSnapshot:function(){return l},createAsyncLocalStorage:function(){return o},createSnapshot:function(){return s}});let t=Object.defineProperty(Error("Invariant: AsyncLocalStorage accessed in runtime where it is not available"),"__NEXT_ERROR_CODE",{value:"E504",enumerable:!1,configurable:!0});class n{disable(){throw t}getStore(){}run(){throw t}exit(){throw t}enterWith(){throw t}static bind(e){return e}}let a="undefined"!=typeof globalThis&&globalThis.AsyncLocalStorage;function o(){return a?new a:new n}function l(e){return a?a.bind(e):n.bind(e)}function s(){return a?a.snapshot():function(e,...r){return e(...r)}}},47237:(e,r,t)=>{"use strict";t.d(r,{$:()=>i});var n=t(90947);t(6627);var a=t(77570);let o={primary:"bg-primary !text-white hover:bg-primary-hover shadow-md hover:shadow-lg font-semibold focus:ring-2 focus:ring-primary focus:ring-offset-2",secondary:"bg-transparent !text-primary border border-primary hover:bg-primary hover:text-white hover:shadow-md focus:ring-2 focus:ring-primary focus:ring-offset-2",outline:"bg-transparent text-gray-700 border border-gray-300 hover:bg-gray-50 focus:ring-2 focus:ring-gray-300 focus:ring-offset-2",ghost:"bg-transparent text-gray-700 hover:bg-gray-100 focus:ring-2 focus:ring-gray-300 focus:ring-offset-2",danger:"bg-error !text-white hover:bg-error-hover shadow-md hover:shadow-lg font-semibold focus:ring-2 focus:ring-error focus:ring-offset-2"},l={sm:"px-3 py-1.5 text-sm rounded-md min-h-[32px]",md:"px-4 py-2 text-base rounded-md min-h-[40px]",lg:"px-6 py-3 text-lg rounded-lg min-h-[48px]"},s=(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"w-4 h-4 border-2 border-current border-t-transparent rounded-full animate-spin","aria-hidden":"true"}),(0,n.jsx)("span",{children:"Loading..."})]});function i(e){let{children:r,className:t,variant:i="primary",size:c="md",disabled:d=!1,loading:u=!1,"aria-label":f}=e,h=(0,a.QP)("inline-flex items-center justify-center gap-2 transition-all duration-200","focus:outline-none disabled:opacity-50 disabled:cursor-not-allowed","hover:scale-105 active:scale-95 disabled:hover:scale-100","font-medium leading-none",o[i],l[c],t),m=d||u;if("href"in e){let{children:t,className:a,variant:o,size:l,disabled:i,loading:c,"aria-label":d,href:b,target:g,rel:v,onClick:x,...p}=e,w="_blank"===g?[...new Set(["noopener","noreferrer",...(v||"").split(" ")])].filter(Boolean).join(" "):v;return(0,n.jsx)("a",{href:m?void 0:b,className:h,target:m?void 0:g,rel:m?void 0:w,tabIndex:m?-1:void 0,onClick:m?e=>e.preventDefault():x,"aria-label":f,"aria-disabled":m,...p,children:u?s:r})}let{children:b,className:g,variant:v,size:x,disabled:p,loading:w,"aria-label":y,type:j="button",onClick:k,...N}=e;return(0,n.jsx)("button",{className:h,disabled:m,type:j,onClick:m?void 0:k,"aria-label":f,"aria-disabled":m,...N,children:u?s:r})}},58024:(e,r,t)=>{"use strict";t.d(r,{A:()=>n});let n=(0,t(6101).A)("star",[["path",{d:"M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z",key:"r04s7s"}]])},68799:(e,r,t)=>{"use strict";t.d(r,{Zp:()=>c,aR:()=>d,bw:()=>u,wL:()=>f});var n=t(90947),a=t(6627),o=t(77570);let l={default:"bg-white",bordered:"bg-white border border-gray-300",shadow:"bg-white shadow-md border border-gray-300",elevated:"bg-white shadow-lg border border-gray-300"},s={none:"",sm:"p-2",md:"p-4",lg:"p-6"},i={none:"",sm:"rounded-sm",md:"rounded-md",lg:"rounded-lg",xl:"rounded-xl"},c=a.forwardRef(function(e,r){let{children:t,className:a,as:c="div",href:d,onClick:u,variant:f="default",padding:h="md",rounded:m="lg",style:b}=e,g={className:(0,o.QP)("transition-all duration-200",l[f],s[h],i[m],a),...u&&{onClick:u},...d&&{href:d},...b&&{style:b},ref:r};return(0,n.jsx)(c,{...g,children:t})});function d(e){let{children:r,className:t,padding:a="md"}=e;return(0,n.jsx)("div",{className:(0,o.QP)("flex flex-col gap-1",s[a],t),children:r})}function u(e){let{children:r,className:t,padding:a="md",style:l}=e;return(0,n.jsx)("div",{className:(0,o.QP)("flex flex-col gap-2",s[a],t),style:l,children:r})}function f(e){let{children:r,className:t,padding:a="md"}=e;return(0,n.jsx)("div",{className:(0,o.QP)("flex items-center justify-between",s[a],t),children:r})}},70226:(e,r,t)=>{"use strict";t.r(r),t.d(r,{ReviewsCarousel:()=>s});var n=t(90947),a=t(6627),o=t(14860);let l=(0,a.memo)(function(e){var r;let{review:t,showRating:l,showBorder:s,index:i,onCardClick:c}=e,d=(0,a.useCallback)(()=>c(i),[c,i]),u=(0,a.useCallback)(e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),c(i))},[c,i]);return(0,n.jsx)("div",{className:"w-52 md:w-72 h-48 shrink-0 flex snap-center","data-index":i,onClick:d,onKeyDown:u,role:"button",tabIndex:0,"aria-label":"Center review ".concat(i+1," of ").concat((null==(r=t.author)?void 0:r.name)||"anonymous"),children:(0,n.jsx)(o.ReviewCard,{review:t,showRating:l,showBorder:s,className:"h-full"})})}),s=(0,a.memo)(function(e){let{reviews:r,showRatings:t,title:o="Some reviews",width:s,height:i,showBorder:c=!0}=e,d=(0,a.useRef)(null),{isDragging:u,handleDragStart:f,handleDragEnd:h,handleDragMove:m}=(e=>{let[r,t]=(0,a.useState)(!1),n=(0,a.useRef)({x:0,scrollLeft:0}),o=(0,a.useCallback)(r=>{var a,o;e.current&&(t(!0),n.current={x:"touches"in r&&r.touches&&r.touches.length>0&&null!=(o=null==(a=r.touches[0])?void 0:a.clientX)?o:r.clientX,scrollLeft:e.current.scrollLeft})},[e]),l=(0,a.useCallback)(()=>{t(!1)},[]),s=(0,a.useCallback)(t=>{var a,o;if(!r||!e.current)return;t.preventDefault();let l="touches"in t&&t.touches&&t.touches.length>0&&null!=(o=null==(a=t.touches[0])?void 0:a.clientX)?o:t.clientX,s=n.current.x-l;e.current.scrollLeft=n.current.scrollLeft+s},[r,e]);return{isDragging:r,handleDragStart:o,handleDragEnd:l,handleDragMove:s}})(d),b=(0,a.useCallback)(e=>{if(d.current){let r=d.current.children[e];r&&r.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})}},[d]),g=(0,a.useCallback)(e=>{if(!d.current)return;let r=d.current;r.scrollLeft;let t=r.clientWidth,n=r.querySelector(".carousel-item");if(!n)return;let a=n.getBoundingClientRect().width,o=(t-a*Math.floor(t/a))/(Math.floor(t/a)-1||1),l=a+o;"ArrowRight"===e.key?r.scrollBy({left:l,behavior:"smooth"}):"ArrowLeft"===e.key&&r.scrollBy({left:-l,behavior:"smooth"})},[]),v=(0,a.useCallback)(e=>r=>{(null==r?void 0:r.currentTarget)&&(null==r?void 0:r.target)&&(r.persist(),e(r))},[]),x=r.length<2,p=r.length<3&&"lg"===s;return(0,n.jsxs)("div",{className:"".concat("sm"===i?"mt-0 mb-0 p-0":"")+" p-4",children:[(0,n.jsx)("h3",{className:"text-xl font-semibold mb-4",children:o}),(0,n.jsx)("div",{className:"w-full relative",children:(0,n.jsx)("div",{className:"relative",onKeyDown:g,role:"region",tabIndex:0,"aria-label":"Reviews carousel - use arrow keys to navigate, or drag to scroll",children:(0,n.jsx)("div",{className:"mx-auto mb-4 relative overflow-x-scroll select-none\n max-w-[280px] sm:max-w-[380px] md:max-w-[420px] ".concat("lg"===s?"lg:max-w-[600px]":"","\n cursor-grab active:cursor-grabbing ").concat(x?"flex justify-center":"","\n scrollbar-hide h-48\n scroll-smooth snap-x snap-mandatory"),ref:d,onMouseDown:v(f),onMouseUp:v(h),onMouseLeave:v(h),onMouseMove:v(m),onTouchStart:v(f),onTouchEnd:v(h),onTouchMove:v(m),role:"region","aria-label":"Reviews carousel - drag to scroll or click on a review to center it","aria-live":"polite",children:(0,n.jsx)("div",{className:"flex space-x-4 md:space-x-6 h-full ".concat(p?"md:justify-center":""),children:r.map((e,r)=>(0,n.jsx)(l,{review:e,showRating:t,showBorder:c,index:r,onCardClick:b},"review-".concat(r)))})})})})]})})},75341:(e,r,t)=>{"use strict";t.r(r),t.d(r,{default:()=>o});var n=t(90947),a=t(6627);function o(e){let{title:r,body:t,characterLimit:o=200}=e,[l,s]=(0,a.useState)(!1),i=t.length>o;return(0,n.jsxs)("div",{className:"p-2 border border-black rounded-lg shadow-lg transition-all duration-300 relative ".concat(i?"cursor-pointer":""),children:[(0,n.jsx)("h4",{className:"mt-2",children:r}),(0,n.jsx)("p",{className:"px-6 text-pretty text-sm mb-2",children:l||!i?t:"".concat(t.slice(0,o),"...")}),i&&(0,n.jsx)("button",{type:"button",onClick:()=>s(!l),onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),s(!l))},className:"absolute bottom-2 right-2 text-sm hover:opacity-80 focus:outline-none focus:ring-2 focus:ring-focus focus:ring-offset-2 rounded px-1 py-0.5","aria-label":l?"Show less":"Read more",children:l?"Show less":"Read more"})]})}},83680:(e,r,t)=>{"use strict";t.d(r,{default:()=>a.a});var n=t(34215),a=t.n(n)},89932:(e,r,t)=>{"use strict";t.d(r,{default:()=>s});var n=t(90947),a=t(6627),o=t(93384),l=t.n(o);let s=e=>{let{href:r,children:t,className:o,...s}=e,[i,c]=(0,a.useState)(!1);return(0,n.jsxs)("div",{className:"flex ".concat(o),children:[(0,n.jsx)(l(),{href:r,className:"mx-auto hover:underline",...s,children:(0,n.jsx)("span",{onClick:e=>{"#"===r?(e.preventDefault(),c(!0)):c(!1)},onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&("#"===r?(e.preventDefault(),c(!0)):c(!1))},className:"cursor-pointer",tabIndex:0,role:"button","aria-label":"#"===r?"Coming soon link":void 0,children:t})}),i&&(0,n.jsxs)("div",{className:"text-muted italic mt-2",role:"status","aria-live":"polite",children:["I will add this content over the next few days. If you'd like to receive it now, please"," ",(0,n.jsx)(l(),{href:"#contact",className:"underline","aria-label":"Contact form",children:"email-me"})," ","instead."]})]})}},96500:(e,r,t)=>{"use strict";Object.defineProperty(r,"__esModule",{value:!0}),Object.defineProperty(r,"workAsyncStorageInstance",{enumerable:!0,get:function(){return n}});let n=(0,t(38086).createAsyncLocalStorage)()}},e=>{e.O(0,[3384,7570,9713,4491,8,2921,2102,187,9926,6282,7358],()=>e(e.s=14003)),_N_E=e.O()}]);