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]="3262a851-640b-4957-9e31-8e7a73a29c97",e._sentryDebugIdIdentifier="sentry-dbid-3262a851-640b-4957-9e31-8e7a73a29c97")}()}catch(e){}(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[849,1745],{10142:(e,r,t)=>{"use strict";t.r(r),t.d(r,{ReviewsCarousel:()=>o});var n=t(65183),a=t(24375),s=t(39812);let l=(0,a.memo)(function(e){var r;let{review:t,showRating:l,showBorder:o,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)(s.ReviewCard,{review:t,showRating:l,showBorder:o,className:"h-full"})})}),o=(0,a.memo)(function(e){let{reviews:r,showRatings:t,title:s="Some reviews",width:o,height:i,showBorder:c=!0}=e,d=(0,a.useRef)(null),{isDragging:u,handleDragStart:h,handleDragEnd:m,handleDragMove:f}=(e=>{let[r,t]=(0,a.useState)(!1),n=(0,a.useRef)({x:0,scrollLeft:0}),s=(0,a.useCallback)(r=>{var a,s;e.current&&(t(!0),n.current={x:"touches"in r&&r.touches&&r.touches.length>0&&null!=(s=null==(a=r.touches[0])?void 0:a.clientX)?s:r.clientX,scrollLeft:e.current.scrollLeft})},[e]),l=(0,a.useCallback)(()=>{t(!1)},[]),o=(0,a.useCallback)(t=>{var a,s;if(!r||!e.current)return;t.preventDefault();let l="touches"in t&&t.touches&&t.touches.length>0&&null!=(s=null==(a=t.touches[0])?void 0:a.clientX)?s:t.clientX,o=n.current.x-l;e.current.scrollLeft=n.current.scrollLeft+o},[r,e]);return{isDragging:r,handleDragStart:s,handleDragEnd:l,handleDragMove:o}})(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]),x=(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,s=(t-a*Math.floor(t/a))/(Math.floor(t/a)-1||1),l=a+s;"ArrowRight"===e.key?r.scrollBy({left:l,behavior:"smooth"}):"ArrowLeft"===e.key&&r.scrollBy({left:-l,behavior:"smooth"})},[]),g=(0,a.useCallback)(e=>r=>{(null==r?void 0:r.currentTarget)&&(null==r?void 0:r.target)&&(r.persist(),e(r))},[]),v=r.length<2,p=r.length<3&&"lg"===o;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:s}),(0,n.jsx)("div",{className:"w-full relative",children:(0,n.jsx)("div",{className:"relative",onKeyDown:x,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"===o?"lg:max-w-[600px]":"","\n cursor-grab active:cursor-grabbing ").concat(v?"flex justify-center":"","\n scrollbar-hide h-48\n scroll-smooth snap-x snap-mandatory"),ref:d,onMouseDown:g(h),onMouseUp:g(m),onMouseLeave:g(m),onMouseMove:g(f),onTouchStart:g(h),onTouchEnd:g(m),onTouchMove:g(f),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)))})})})})]})})},16683:(e,r,t)=>{Promise.resolve().then(t.t.bind(t,91045,23)),Promise.resolve().then(t.bind(t,13080)),Promise.resolve().then(t.bind(t,16517)),Promise.resolve().then(t.bind(t,32816)),Promise.resolve().then(t.bind(t,48385)),Promise.resolve().then(t.bind(t,45308)),Promise.resolve().then(t.bind(t,10142))},32816:(e,r,t)=>{"use strict";t.d(r,{default:()=>o});var n=t(65183),a=t(24375),s=t(82212),l=t.n(s);let o=e=>{let{href:r,children:t,className:s,...o}=e,[i,c]=(0,a.useState)(!1);return(0,n.jsxs)("div",{className:"flex ".concat(s),children:[(0,n.jsx)(l(),{href:r,className:"mx-auto hover:underline",...o,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."]})]})}},39812:(e,r,t)=>{"use strict";t.d(r,{ReviewCard:()=>d});var n=t(65183),a=t(71307),s=t(32812);let l=(0,t(24375).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)(s.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 o=t(66009),i=t(92382);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:s=!0,variant:d="carousel",className:u,onClick:h}=e,m=c[d],f="".concat(m.base," ").concat(s?m.bordered:m.borderless),b=r.content.length,x=(()=>{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:s?"bordered":"default",className:(0,i.QP)(f,"py-4 px-6 flex flex-col gap-3 h-full",u),onClick:h,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)(o.A,{className:"w-5 h-5 ".concat(t{"use strict";t.r(r),t.d(r,{default:()=>s});var n=t(65183),a=t(24375);function s(e){let{title:r,body:t,characterLimit:s=200}=e,[l,o]=(0,a.useState)(!1),i=t.length>s;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,s),"...")}),i&&(0,n.jsx)("button",{type:"button",onClick:()=>o(!l),onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),o(!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"})]})}},50849:(e,r,t)=>{"use strict";t.d(r,{$:()=>o});var n=t(65183);t(24375);var a=t(92382);let s={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]"};function o(e){let{children:r,className:t,variant:o="primary",size:i="md",disabled:c=!1,loading:d=!1,onClick:u,type:h="button",href:m,target:f,rel:b,"aria-label":x,...g}=e,v=(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",s[o],l[i],t),p=c||d;return m?(0,n.jsx)("a",{href:m,className:v,target:f,rel:"_blank"===f?"noopener noreferrer":b,onClick:p?void 0:u,"aria-label":x,"aria-disabled":p,...g,children:d?(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..."})]}):r}):(0,n.jsx)("button",{className:v,disabled:p,type:h,onClick:p?void 0:u,"aria-label":x,"aria-disabled":p,...g,children:d?(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..."})]}):r})}},71307:(e,r,t)=>{"use strict";t.d(r,{Zp:()=>c,aR:()=>d,bw:()=>u,wL:()=>h});var n=t(65183),a=t(24375),s=t(92382);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"},o={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:h="default",padding:m="md",rounded:f="lg",style:b}=e,x={className:(0,s.QP)("transition-all duration-200",l[h],o[m],i[f],a),...u&&{onClick:u},...d&&{href:d},...b&&{style:b},ref:r};return(0,n.jsx)(c,{...x,children:t})});function d(e){let{children:r,className:t,padding:a="md"}=e;return(0,n.jsx)("div",{className:(0,s.QP)("flex flex-col gap-1",o[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,s.QP)("flex flex-col gap-2",o[a],t),style:l,children:r})}function h(e){let{children:r,className:t,padding:a="md"}=e;return(0,n.jsx)("div",{className:(0,s.QP)("flex items-center justify-between",o[a],t),children:r})}}},e=>{e.O(0,[2382,1045,3998,8305,1676,9518,5308,435,3675,7358],()=>e(e.s=16683)),_N_E=e.O()}]);