1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[101],{14516:function(e,t,r){Promise.resolve().then(r.bind(r,95190)),Promise.resolve().then(r.t.bind(r,18726,23)),Promise.resolve().then(r.t.bind(r,39153,23))},95190:function(e,t,r){"use strict";r.d(t,{ProjectGallery:function(){return d}});var n=r(42140),o=r(16392),i=r(43643),l=r(40018),s=r(42997),a=r(91583),c=r(64530);function d(e){let{gallery:t,projectTitle:r}=e,[d,u]=(0,o.useState)(!1),[m,h]=(0,o.useState)(0),[f,p]=(0,o.useState)(!1);(0,o.useEffect)(()=>(p(!0),()=>p(!1)),[]);let g=e=>{h(e),u(!0),document.body.style.overflow="hidden"},b=()=>{u(!1),document.body.style.overflow=""},x=e=>{null==e||e.stopPropagation(),h(e=>0===e?t.length-1:e-1)},w=e=>{null==e||e.stopPropagation(),h(e=>e===t.length-1?0:e+1)};return(0,o.useEffect)(()=>{let e=e=>{d&&("Escape"===e.key&&b(),"ArrowLeft"===e.key&&x(),"ArrowRight"===e.key&&w())};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[d]),(0,o.useEffect)(()=>()=>{document.body.style.overflow=""},[]),(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3 sm:gap-4",children:t.map((e,t)=>(0,n.jsxs)("div",{onClick:()=>g(t),className:"relative h-40 sm:h-48 rounded-lg overflow-hidden border border-zinc-800 cursor-pointer group hover:border-cyan-500/50 transition-all",role:"button","aria-label":"Open gallery image ".concat(t+1),children:[(0,n.jsx)(l.default,{src:e.url||"/placeholder.svg",alt:e.caption||"".concat(r," gallery image ").concat(t+1),fill:!0,className:"object-cover transition-transform duration-300 group-hover:scale-105"}),(0,n.jsx)("div",{className:"absolute inset-0 bg-black/45 opacity-0 group-hover:opacity-100 flex items-center justify-center transition-opacity",children:(0,n.jsx)("span",{className:"text-xs text-white bg-zinc-900/90 px-3.5 py-2 rounded-full border border-zinc-700 shadow-lg",children:"View Image"})})]},t))}),d&&f&&(0,i.createPortal)((0,n.jsxs)("div",{onClick:b,className:"fixed inset-0 z-[9999] bg-black/95 backdrop-blur-md flex flex-col items-center justify-center p-4 sm:p-6 md:p-10",role:"dialog","aria-modal":"true",children:[(0,n.jsx)("button",{onClick:b,className:"absolute top-6 right-6 z-[10000] p-2.5 rounded-full bg-zinc-900/80 border border-zinc-800 text-zinc-400 hover:text-white hover:bg-zinc-800 transition-colors shadow-xl","aria-label":"Close gallery",children:(0,n.jsx)(s.Z,{className:"h-6 w-6"})}),t.length>1&&(0,n.jsx)("button",{onClick:x,className:"absolute left-4 sm:left-6 top-1/2 -translate-y-1/2 z-[10000] p-2.5 sm:p-3 rounded-full bg-zinc-900/80 border border-zinc-800 text-zinc-400 hover:text-white hover:bg-zinc-800 transition-colors shadow-xl","aria-label":"Previous image",children:(0,n.jsx)(a.Z,{className:"h-6 w-6 sm:h-8 sm:w-8"})}),(0,n.jsx)("div",{onClick:e=>e.stopPropagation(),className:"relative w-full max-w-5xl h-[65vh] sm:h-[75vh] flex items-center justify-center",children:(0,n.jsx)(l.default,{src:t[m].url||"/placeholder.svg",alt:t[m].caption||"".concat(r," image"),fill:!0,className:"object-contain",priority:!0})}),t.length>1&&(0,n.jsx)("button",{onClick:w,className:"absolute right-4 sm:right-6 top-1/2 -translate-y-1/2 z-[10000] p-2.5 sm:p-3 rounded-full bg-zinc-900/80 border border-zinc-800 text-zinc-400 hover:text-white hover:bg-zinc-800 transition-colors shadow-xl","aria-label":"Next image",children:(0,n.jsx)(c.Z,{className:"h-6 w-6 sm:h-8 sm:w-8"})}),(0,n.jsxs)("div",{onClick:e=>e.stopPropagation(),className:"mt-6 text-center max-w-2xl px-4 z-10",children:[t[m].caption&&(0,n.jsx)("p",{className:"text-sm sm:text-base text-zinc-200 font-medium mb-1",children:t[m].caption}),(0,n.jsxs)("p",{className:"text-xs text-zinc-500 font-medium tracking-wide",children:["Image ",m+1," of ",t.length]})]})]}),document.body)]})}},52580:function(e,t,r){"use strict";r.d(t,{Z:function(){return l}});var n=r(16392),o={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"},i=r(93567);let l=(0,n.forwardRef)((e,t)=>{let{color:r="currentColor",size:l=24,strokeWidth:s=2,absoluteStrokeWidth:a,className:c="",children:d,iconNode:u,...m}=e;return(0,n.createElement)("svg",{ref:t,...o,width:l,height:l,stroke:r,strokeWidth:a?24*Number(s)/Number(l):s,className:(0,i.z)("lucide",c),...m},[...u.map(e=>{let[t,r]=e;return(0,n.createElement)(t,r)}),...Array.isArray(d)?d:[d]])})},12373:function(e,t,r){"use strict";r.d(t,{Z:function(){return l}});var n=r(16392),o=r(93567),i=r(52580);let l=(e,t)=>
1{let r=(0,n.forwardRef)((r,l)=>{let{className:s,...a}=r;return(0,n.createElement)(i.Z,{ref:l,iconNode:t,className:(0,o.z)("lucide-".concat((0,o.m)(e)),s),...a})});return r.displayName="".concat(e),r}},42997:function(e,t,r){"use strict";r.d(t,{Z:function(){return n}});let n=(0,r(12373).Z)("X",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]])},93567:function(e,t,r){"use strict";r.d(t,{m:function(){return n},z:function(){return o}});let n=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),o=function(){for(var e=arguments.length,t=Array(e),r=0;r<e;r++)t[r]=arguments[r];return t.filter((e,t,r)=>!!e&&""!==e.trim()&&r.indexOf(e)===t).join(" ").trim()}}},function(e){e.O(0,[153,552,406,653,744],function(){return e(e.s=14516)}),_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.