1(function(){try{var e=typeof window<"u"?window:typeof global<"u"?global:typeof globalThis<"u"?globalThis:typeof self<"u"?self:{};e.SENTRY_RELEASE={id:"77b9b29a7132dd90c8195598c311b480427be9f9"};var t=new e.Error().stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="1634436d-61e6-4c7b-843d-547998890689",e._sentryDebugIdIdentifier="sentry-dbid-1634436d-61e6-4c7b-843d-547998890689")}catch{}})();const p=[{width:1325,modifier:220/260},{width:1024,modifier:170/260},{width:768,modifier:.5},{width:540,modifier:90/260}],b=1.5;function g(e,t){return parseFloat(getComputedStyle(e)[t])||0}function w(e){const t=getComputedStyle(e),o=parseFloat(t.width)||e.clientWidth;return e.offsetWidth-o}function x(e,t){let o={width:Number.POSITIVE_INFINITY,modifier:1};for(const n of t)n.width>=e&&n.width<o.width&&(o=n);return o.modifier}function y(e){return Array.from(e.querySelectorAll(".js-grid-item-container")).map(t=>{const o=Number(t.dataset.height)||t.offsetHeight,n=Number(t.dataset.width)||t.offsetWidth,i=Number(t.dataset.flexGrow)||0,c=n>0?Math.round(i*o/n):0;return{element:t,height:o,width:n,flexWidth:i,nonContentWidth:w(t),flexHeight:c,isExpanded:t.dataset.isExpanded==="true"||t.getAttribute("data-is-expanded")==="true"}})}function E(e,t,o){const n=[];let i=[],c=t;const l=()=>{if(i.length===0)return;const d=i.reduce((s,a)=>s+a.modifiedFlexWidth,0),r=d>0?t/d:1;n.push(i.map(s=>({modifiedFlexWidth:s.modifiedFlexWidth*r,modifiedFlexHeight:s.modifiedFlexHeight*r}))),i=[]};for(const d of e){let r=o*d.flexWidth+d.nonContentWidth;const s=o*d.flexHeight;if(d.isExpanded&&(r=t),c>=r){c-=r,i.push({modifiedFlexWidth:r,modifiedFlexHeight:s});continue}l(),c=t-r,i.push({modifiedFlexWidth:r,modifiedFlexHeight:s})}return l(),n}function L(e,t,o){return E(e,t,o).map(n=>n.length===0?0:n[0].modifiedFlexHeight)}function v(e,t,o){const n=x(t,p);let i=1,c=Number.POSITIVE_INFINITY,l=0,d=0,r=1,s=0;for(;l/c>b&&d<o;){i=(1+s*r)*n;const a=L(e,t,i).filter(h=>h>0);if(a.length===0)break;l=Math.max(...a);const u=a.slice(1);c=u.length>0?u.reduce((h,f)=>h+f,0)/u.length:l,s+=.005,d+=1}return{averageRowHeight:c,flexModifier:i}}function S(e,t,o){for(const n of e){const i=n.isExpanded?o:t*n.flexWidth;n.element.style.width=`${i}px`,n.element.style.flexGrow=`${i}`}}function I(e){for(const t of e){const o=Math.round(t.element.getBoundingClientRect().width);t.element.querySelectorAll("img").forEach(n=>{n.sizes=`${o}px`,n.dataset.sizes=`${o}px`})}}function m(e,t){e.querySelectorAll(".js-grid-spacer").forEach(o=>{o.classList.toggle("grid__item-spacer",t),o.style.display=t?"block":"none"})}function k(e){const t=y(e);if(t.length===0){e.classList.add("grid--ready");return}const o=getComputedStyle(e).boxSizing,n=g(e,"border-left-width")+g(e,"border-right-width"),i=g(e,"padding-left")+g(e,"padding-right"),c=g(e,"width"),l=o==="border-box"?c-n-i:c,{averageRowHeight:d,flexModifier:r}=v(t,l,2),s=r<2?r:1;S(t,s,l),m(e,!1);const u=t.at(-1)?.element?.getBoundingClientRect().height??0,h=r>=2||d>0&&u/d>2.5;m(e,h),I(t),e.classList.add("grid--ready")}function A(e){const t=()=>k(e);t(),window.addEventListener("resize",t),window.addEventListener("orientationchange",t)}function F(){document.querySelectorAll(".js-grid-main").forEach(A)}function W(){window.addEventListener("pageshow",e=>{e.persisted&&window.location.reload()})}function q(){document.querySelectorAll("img.js-lazy[data-src]").forEach(e=>{const t=()=>{e.classList.add("image-loaded"),e.removeAttribute("height"),e.removeAttribute("style")};e.addEventListener("load",t,{once:!0}),e.addEventListener("error",()=>e.classList.add("image-error"),{once:!0}),e.dataset.srcset&&(e.srcset=e.dataset.srcset),e.dataset.sizes&&(e.sizes=e.dataset.sizes),e.dataset.src&&(e.src=e.dataset.src),e.complete&&e.naturalWidth>0&&t()})}function T(){"ontouchstart"in window&&(document.body.classList.add("has-touch"),document.querySelectorAll(".js-project-cover-touch").forEach(e=>{e.addEventListener("touchstart",()=>{e.classList.add("touch-hover"),e.addEventListener("touchend",()=>e.classList.remove("touch-hover"),{once:!0})},{passive:!0})}))}function j(){document.querySelectorAll(".js-back-to-top, .back-to-top a").forEach(e
1=>{e.addEventListener("click",t=>{t.preventDefault(),window.scrollTo({top:0,behavior:"smooth"})})})}function H(){const e=()=>document.body.classList.remove("show-responsive-nav"),t=()=>document.body.classList.toggle("show-responsive-nav");document.querySelector(".js-hamburger")?.addEventListener("click",t),document.querySelector(".js-close-responsive-nav")?.addEventListener("click",e),document.querySelectorAll(".responsive-nav a").forEach(o=>o.addEventListener("click",e))}function z(e){return e.trim().replace(/;\s*$/,"")}function C(e){const t=document.createElement("div");return t.className="lightbox-content",t.append(e),t}function N(){const e=[];return document.querySelectorAll(".js-grid-item-container, [data-lightbox-src], .js-lightbox[data-src]").forEach(t=>{const o=t.querySelector(".js-lightbox-slide-content");if(o){e.push({trigger:t,render:()=>{const n=document.createElement("div");return n.className="lightbox-content",n.innerHTML=z(o.innerHTML),n}});return}e.push({trigger:t,render:()=>{const n=t.querySelector("img"),i=document.createElement("img");return i.alt=n?.alt||"",i.src=t.dataset.lightboxSrc||t.getAttribute("data-src")||n?.currentSrc||n?.src||"",n?.srcset&&(i.srcset=n.srcset),n?.sizes&&(i.sizes=n.sizes),C(i)}})}),e}function R(){const e=document.getElementById("lightbox-wrap"),t=e?.querySelector(".lightbox-contents");if(!e||!t)return;const o=N();if(o.length===0)return;let n=0;const i=s=>{const a=Array.from(s.querySelectorAll("img"));if(a.length===0){e.classList.remove("loading");return}let u=a.length;const h=()=>{u-=1,u<=0&&e.classList.remove("loading")};a.forEach(f=>{if(f.complete){h();return}f.addEventListener("load",h,{once:!0}),f.addEventListener("error",h,{once:!0})})},c=()=>{const a=o[n].render();e.classList.toggle("single",o.length<=1),e.classList.add("loading"),t.replaceChildren(a),i(a)},l=s=>{n=s,c(),e.classList.remove("offscreen"),document.documentElement.classList.add("lightbox-enabled")},d=()=>{e.classList.add("offscreen"),document.documentElement.classList.remove("lightbox-enabled"),e.classList.remove("loading"),t.replaceChildren()},r=s=>{n=(n+s+o.length)%o.length,c()};o.forEach((s,a)=>{s.trigger.style.cursor="zoom-in",s.trigger.addEventListener("click",u=>{u.target.closest("a")||(u.preventDefault(),l(a))})}),e.querySelector(".js-close")?.addEventListener("click",d),e.querySelector(".js-prev")?.addEventListener("click",()=>r(-1)),e.querySelector(".js-next")?.addEventListener("click",()=>r(1)),document.getElementById("lightbox-blocking")?.addEventListener("click",d),document.addEventListener("keydown",s=>{e.classList.contains("offscreen")||(s.key==="Escape"&&d(),s.key==="ArrowLeft"&&r(-1),s.key==="ArrowRight"&&r(1))})}W();q();F();T();j();H();R();
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.