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]="5e6cb6c1-451f-4a28-8b48-2bdb095718c6",e._sentryDebugIdIdentifier="sentry-dbid-5e6cb6c1-451f-4a28-8b48-2bdb095718c6")}()}catch(e){}(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[1745,3893],{15373:(e,r,t)=>{"use strict";t.r(r),t.d(r,{default:()=>l});var n=t(11824),s=t(79100);function l(e){let{title:r,body:t,characterLimit:l=200}=e,[a,o]=(0,s.useState)(!1),i=t.length>l;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:a||!i?t:"".concat(t.slice(0,l),"...")}),i&&(0,n.jsx)("button",{type:"button",onClick:()=>o(!a),onKeyDown:e=>{("Enter"===e.key||" "===e.key)&&(e.preventDefault(),o(!a))},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":a?"Show less":"Read more",children:a?"Show less":"Read more"})]})}},16799:(e,r,t)=>{"use strict";t.d(r,{ReviewCard:()=>d});var n=t(11824),s=t(97695),l=t(76173);let a=(0,t(79100).memo)(function(e){var r;let{author:t}=e;if(!t)return null;let s=null==(r=t.image)?void 0:r.trim(),a=(null==s?void 0:s.startsWith("/"))?s:s?"/".concat(s):void 0;return(0,n.jsxs)("div",{className:"flex items-center flex-shrink-0 h-8 text-center",children:[a&&(0,n.jsx)("div",{className:"w-8 h-8 rounded-full border border-slate-400 overflow-hidden shrink-0",children:(0,n.jsx)(l.default,{src:a,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(a?"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(98991),i=t(3354);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:l=!0,variant:d="carousel",className:u,onClick:h}=e,m=c[d],f="".concat(m.base," ").concat(l?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)(s.Zp,{variant:l?"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.d(r,{default:()=>o});var n=t(11824),s=t(79100),l=t(74109),a=t.n(l);let o=e=>{let{href:r,children:t,className:l,...o}=e,[i,c]=(0,s.useState)(!1);return(0,n.jsxs)("div",{className:"flex ".concat(l),children:[(0,n.jsx)(a(),{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)(a(),{href:"#contact",className:"underline","aria-label":"Contact form",children:"email-me"})," ","instead."]})]})}},53893:(e,r,t)=>{"use strict";t.d(r,{$:()=>o});var n=t(11824);t(79100);var s=t(3354);let l={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"},a={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,s.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",l[o],a[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})}},67991:(e,r,t)=>{Promise.resolve().then(t.t.bind(t,39154,23)),Promise.resolve().then(t.bind(t,79075)),Promise.resolve().then(t.bind(t,64830)),Promise.resolve().then(t.bind(t,22156)),Promise.resolve().then(t.bind(t,15373)),Promise.resolve().then(t.bind(t,52113)),Promise.resolve().then(t.bind(t,69991))},69991:(e,r,t)=>{"use strict";t.r(r),t.d(r,{ReviewsCarousel:()=>o});var n=t(11824),s=t(79100),l=t(16799);let a=(0,s.memo)(function(e){var r;let{review:t,showRating:a,showBorder:o,index:i,onCardClick:c}=e,d=(0,s.useCallback)(()=>c(i),[c,i]),u=(0,s.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)(l.ReviewCard,{review:t,showRating:a,showBorder:o,className:"h-full"})})}),o=(0,s.memo)(function(e){let{reviews:r,showRatings:t,title:l="Some reviews",width:o,height:i,showBorder:c=!0}=e,d=(0,s.useRef)(null),{isDragging:u,handleDragStart:h,handleDragEnd:m,handleDragMove:f}=(e=>{let[r,t]=(0,s.useState)(!1),n=(0,s.useRef)({x:0,scrollLeft:0}),l=(0,s.useCallback)(r=>{var s,l;e.current&&(t(!0),n.current={x:"touches"in r&&r.touches&&r.touches.length>0&&null!=(l=null==(s=r.touches[0])?void 0:s.clientX)?l:r.clientX,scrollLeft:e.current.scrollLeft})},[e]),a=(0,s.useCallback)(()=>{t(!1)},[]),o=(0,s.useCallback)(t=>{var s,l;if(!r||!e.current)return;t.preventDefault();let a="touches"in t&&t.touches&&t.touches.length>0&&null!=(l=null==(s=t.touches[0])?void 0:s.clientX)?l:t.clientX,o=n.current.x-a;e.current.scrollLeft=n.current.scrollLeft+o},[r,e]);return{isDragging:r,handleDragStart:l,handleDragEnd:a,handleDragMove:o}})(d),b=(0,s.useCallback)(e=>{if(d.current){let r=d.current.children[e];r&&r.scrollIntoView({behavior:"smooth",block:"nearest",inline:"center"})}},[d]),x=(0,s.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 s=n.getBoundingClientRect().width,l=(t-s*Math.floor(t/s))/(Math.floor(t/s)-1||1),a=s+l;"ArrowRight"===e.key?r.scrollBy({left:a,behavior:"smooth"}):"ArrowLeft"===e.key&&r.scrollBy({left:-a,behavior:"smooth"})},[]),g=(0,s.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:l}),(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)(a,{review:e,showRating:t,showBorder:c,index:r,onCardClick:b},"review-".concat(r)))})})})})]})})},97695:(e,r,t)=>{"use strict";t.d(r,{Zp:()=>c,aR:()=>d,bw:()=>u,wL:()=>h});var n=t(11824),s=t(79100),l=t(3354);let a={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=s.forwardRef(function(e,r){let{children:t,className:s,as:c="div",href:d,onClick:u,variant:h="default",padding:m="md",rounded:f="lg",style:b}=e,x={className:(0,l.QP)("transition-all duration-200",a[h],o[m],i[f],s),...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:s="md"}=e;return(0,n.jsx)("div",{className:(0,l.QP)("flex flex-col gap-1",o[s],t),children:r})}function u(e){let{children:r,className:t,padding:s="md",style:a}=e;return(0,n.jsx)("div",{className:(0,l.QP)("flex flex-col gap-2",o[s],t),style:a,children:r})}function h(e){let{children:r,className:t,padding:s="md"}=e;return(0,n.jsx)("div",{className:(0,l.QP)("flex items-center justify-between",o[s],t),children:r})}}},e=>{e.O(0,[3354,9154,8341,3759,1167,4566,2113,8628,99,7358],()=>e(e.s=67991)),_N_E=e.O()}]);